Merge "NFC DTA Integration" into oc-dr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f8469ccf17
@@ -247,6 +247,7 @@ LOCAL_SRC_FILES += \
|
||||
core/java/android/nfc/INfcCardEmulation.aidl \
|
||||
core/java/android/nfc/INfcFCardEmulation.aidl \
|
||||
core/java/android/nfc/INfcUnlockHandler.aidl \
|
||||
core/java/android/nfc/INfcDta.aidl \
|
||||
core/java/android/nfc/ITagRemovedCallback.aidl \
|
||||
core/java/android/os/IBatteryPropertiesListener.aidl \
|
||||
core/java/android/os/IBatteryPropertiesRegistrar.aidl \
|
||||
|
||||
@@ -29,6 +29,7 @@ import android.nfc.INfcCardEmulation;
|
||||
import android.nfc.INfcFCardEmulation;
|
||||
import android.nfc.INfcUnlockHandler;
|
||||
import android.nfc.ITagRemovedCallback;
|
||||
import android.nfc.INfcDta;
|
||||
import android.os.Bundle;
|
||||
|
||||
/**
|
||||
@@ -40,7 +41,7 @@ interface INfcAdapter
|
||||
INfcCardEmulation getNfcCardEmulationInterface();
|
||||
INfcFCardEmulation getNfcFCardEmulationInterface();
|
||||
INfcAdapterExtras getNfcAdapterExtrasInterface(in String pkg);
|
||||
|
||||
INfcDta getNfcDtaInterface(in String pkg);
|
||||
int getState();
|
||||
boolean disable(boolean saveState);
|
||||
boolean enable();
|
||||
|
||||
34
core/java/android/nfc/INfcDta.aidl
Normal file
34
core/java/android/nfc/INfcDta.aidl
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (C) 2017 NXP Semiconductors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package android.nfc;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
/**
|
||||
* {@hide}
|
||||
*/
|
||||
interface INfcDta {
|
||||
|
||||
void enableDta();
|
||||
void disableDta();
|
||||
boolean enableServer(String serviceName, int serviceSap, int miu,
|
||||
int rwSize,int testCaseId);
|
||||
void disableServer();
|
||||
boolean enableClient(String serviceName, int miu, int rwSize,
|
||||
int testCaseId);
|
||||
void disableClient();
|
||||
boolean registerMessageService(String msgServiceName);
|
||||
}
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
package android.nfc;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.annotation.SdkConstant;
|
||||
import android.annotation.SdkConstant.SdkConstantType;
|
||||
@@ -43,6 +41,7 @@ import android.os.ServiceManager;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* Represents the local NFC adapter.
|
||||
@@ -626,6 +625,23 @@ public final class NfcAdapter {
|
||||
return sNfcFCardEmulationService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the binder interface to the NFC-DTA test interface.
|
||||
* @hide
|
||||
*/
|
||||
public INfcDta getNfcDtaInterface() {
|
||||
if (mContext == null) {
|
||||
throw new UnsupportedOperationException("You need a context on NfcAdapter to use the "
|
||||
+ " NFC extras APIs");
|
||||
}
|
||||
try {
|
||||
return sService.getNfcDtaInterface(mContext.getPackageName());
|
||||
} catch (RemoteException e) {
|
||||
attemptDeadServiceRecovery(e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* NFC service dead - attempt best effort recovery
|
||||
* @hide
|
||||
|
||||
167
core/java/android/nfc/dta/NfcDta.java
Normal file
167
core/java/android/nfc/dta/NfcDta.java
Normal file
@@ -0,0 +1,167 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.nfc.dta;
|
||||
|
||||
import android.content.Context;
|
||||
import android.nfc.INfcDta;
|
||||
import android.nfc.NfcAdapter;
|
||||
import android.os.RemoteException;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* This class provides the primary API for DTA operations.
|
||||
* @hide
|
||||
*/
|
||||
public final class NfcDta {
|
||||
private static final String TAG = "NfcDta";
|
||||
|
||||
private static INfcDta sService;
|
||||
private static HashMap<Context, NfcDta> sNfcDtas = new HashMap<Context, NfcDta>();
|
||||
|
||||
private final Context mContext;
|
||||
|
||||
private NfcDta(Context context, INfcDta service) {
|
||||
mContext = context.getApplicationContext();
|
||||
sService = service;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to get an instance of this class.
|
||||
*
|
||||
* @param adapter A reference to an NfcAdapter object.
|
||||
* @return
|
||||
*/
|
||||
public static synchronized NfcDta getInstance(NfcAdapter adapter) {
|
||||
if (adapter == null) throw new NullPointerException("NfcAdapter is null");
|
||||
Context context = adapter.getContext();
|
||||
if (context == null) {
|
||||
Log.e(TAG, "NfcAdapter context is null.");
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
NfcDta manager = sNfcDtas.get(context);
|
||||
if (manager == null) {
|
||||
INfcDta service = adapter.getNfcDtaInterface();
|
||||
if (service == null) {
|
||||
Log.e(TAG, "This device does not implement the INfcDta interface.");
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
manager = new NfcDta(context, service);
|
||||
sNfcDtas.put(context, manager);
|
||||
}
|
||||
return manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables DTA mode
|
||||
*
|
||||
* @return true/false if enabling was successful
|
||||
*/
|
||||
public boolean enableDta() {
|
||||
try {
|
||||
sService.enableDta();
|
||||
} catch (RemoteException e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Disables DTA mode
|
||||
*
|
||||
* @return true/false if disabling was successful
|
||||
*/
|
||||
public boolean disableDta() {
|
||||
try {
|
||||
sService.disableDta();
|
||||
} catch (RemoteException e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables Server
|
||||
*
|
||||
* @return true/false if enabling was successful
|
||||
*/
|
||||
public boolean enableServer(String serviceName, int serviceSap, int miu,
|
||||
int rwSize, int testCaseId) {
|
||||
try {
|
||||
return sService.enableServer(serviceName, serviceSap, miu, rwSize, testCaseId);
|
||||
} catch (RemoteException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Disables Server
|
||||
*
|
||||
* @return true/false if disabling was successful
|
||||
*/
|
||||
public boolean disableServer() {
|
||||
try {
|
||||
sService.disableServer();
|
||||
} catch (RemoteException e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables Client
|
||||
*
|
||||
* @return true/false if enabling was successful
|
||||
*/
|
||||
public boolean enableClient(String serviceName, int miu, int rwSize,
|
||||
int testCaseId) {
|
||||
try {
|
||||
return sService.enableClient(serviceName, miu, rwSize, testCaseId);
|
||||
} catch (RemoteException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Disables client
|
||||
*
|
||||
* @return true/false if disabling was successful
|
||||
*/
|
||||
public boolean disableClient() {
|
||||
try {
|
||||
sService.disableClient();
|
||||
} catch (RemoteException e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers Message Service
|
||||
*
|
||||
* @return true/false if registration was successful
|
||||
*/
|
||||
public boolean registerMessageService(String msgServiceName) {
|
||||
try {
|
||||
return sService.registerMessageService(msgServiceName);
|
||||
} catch (RemoteException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user