blob: 88016623434d21e9ca6862b968b67de934b4c6ef [file] [log] [blame]
Alan Viverette3da604b2020-06-10 18:34:39 +00001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.nfc.dta;
18
19import android.content.Context;
20import android.nfc.INfcDta;
21import android.nfc.NfcAdapter;
22import android.os.RemoteException;
23import android.util.Log;
24
25import java.util.HashMap;
26
27/**
28 * This class provides the primary API for DTA operations.
29 * @hide
30 */
31public final class NfcDta {
32 private static final String TAG = "NfcDta";
33
34 private static INfcDta sService;
35 private static HashMap<Context, NfcDta> sNfcDtas = new HashMap<Context, NfcDta>();
36
37 private final Context mContext;
38
39 private NfcDta(Context context, INfcDta service) {
40 mContext = context.getApplicationContext();
41 sService = service;
42 }
43
44 /**
45 * Helper to get an instance of this class.
46 *
47 * @param adapter A reference to an NfcAdapter object.
48 * @return
49 */
50 public static synchronized NfcDta getInstance(NfcAdapter adapter) {
51 if (adapter == null) throw new NullPointerException("NfcAdapter is null");
52 Context context = adapter.getContext();
53 if (context == null) {
54 Log.e(TAG, "NfcAdapter context is null.");
55 throw new UnsupportedOperationException();
56 }
57
58 NfcDta manager = sNfcDtas.get(context);
59 if (manager == null) {
60 INfcDta service = adapter.getNfcDtaInterface();
61 if (service == null) {
62 Log.e(TAG, "This device does not implement the INfcDta interface.");
63 throw new UnsupportedOperationException();
64 }
65 manager = new NfcDta(context, service);
66 sNfcDtas.put(context, manager);
67 }
68 return manager;
69 }
70
71 /**
72 * Enables DTA mode
73 *
74 * @return true/false if enabling was successful
75 */
76 public boolean enableDta() {
77 try {
78 sService.enableDta();
79 } catch (RemoteException e) {
80 return false;
81 }
82 return true;
83 }
84
85 /**
86 * Disables DTA mode
87 *
88 * @return true/false if disabling was successful
89 */
90 public boolean disableDta() {
91 try {
92 sService.disableDta();
93 } catch (RemoteException e) {
94 return false;
95 }
96 return true;
97 }
98
99 /**
100 * Enables Server
101 *
102 * @return true/false if enabling was successful
103 */
104 public boolean enableServer(String serviceName, int serviceSap, int miu,
105 int rwSize, int testCaseId) {
106 try {
107 return sService.enableServer(serviceName, serviceSap, miu, rwSize, testCaseId);
108 } catch (RemoteException e) {
109 return false;
110 }
111 }
112
113 /**
114 * Disables Server
115 *
116 * @return true/false if disabling was successful
117 */
118 public boolean disableServer() {
119 try {
120 sService.disableServer();
121 } catch (RemoteException e) {
122 return false;
123 }
124 return true;
125 }
126
127 /**
128 * Enables Client
129 *
130 * @return true/false if enabling was successful
131 */
132 public boolean enableClient(String serviceName, int miu, int rwSize,
133 int testCaseId) {
134 try {
135 return sService.enableClient(serviceName, miu, rwSize, testCaseId);
136 } catch (RemoteException e) {
137 return false;
138 }
139 }
140
141 /**
142 * Disables client
143 *
144 * @return true/false if disabling was successful
145 */
146 public boolean disableClient() {
147 try {
148 sService.disableClient();
149 } catch (RemoteException e) {
150 return false;
151 }
152 return true;
153 }
154
155 /**
156 * Registers Message Service
157 *
158 * @return true/false if registration was successful
159 */
160 public boolean registerMessageService(String msgServiceName) {
161 try {
162 return sService.registerMessageService(msgServiceName);
163 } catch (RemoteException e) {
164 return false;
165 }
166 }
167}