Merge "NFC DTA Integration" into oc-dr1-dev
am: f8469ccf17
Change-Id: I661800e26a8dc66b2a7a7676e0df11d928272f89
This commit is contained in:
@@ -247,6 +247,7 @@ LOCAL_SRC_FILES += \
|
|||||||
core/java/android/nfc/INfcCardEmulation.aidl \
|
core/java/android/nfc/INfcCardEmulation.aidl \
|
||||||
core/java/android/nfc/INfcFCardEmulation.aidl \
|
core/java/android/nfc/INfcFCardEmulation.aidl \
|
||||||
core/java/android/nfc/INfcUnlockHandler.aidl \
|
core/java/android/nfc/INfcUnlockHandler.aidl \
|
||||||
|
core/java/android/nfc/INfcDta.aidl \
|
||||||
core/java/android/nfc/ITagRemovedCallback.aidl \
|
core/java/android/nfc/ITagRemovedCallback.aidl \
|
||||||
core/java/android/os/IBatteryPropertiesListener.aidl \
|
core/java/android/os/IBatteryPropertiesListener.aidl \
|
||||||
core/java/android/os/IBatteryPropertiesRegistrar.aidl \
|
core/java/android/os/IBatteryPropertiesRegistrar.aidl \
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import android.nfc.INfcCardEmulation;
|
|||||||
import android.nfc.INfcFCardEmulation;
|
import android.nfc.INfcFCardEmulation;
|
||||||
import android.nfc.INfcUnlockHandler;
|
import android.nfc.INfcUnlockHandler;
|
||||||
import android.nfc.ITagRemovedCallback;
|
import android.nfc.ITagRemovedCallback;
|
||||||
|
import android.nfc.INfcDta;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -40,7 +41,7 @@ interface INfcAdapter
|
|||||||
INfcCardEmulation getNfcCardEmulationInterface();
|
INfcCardEmulation getNfcCardEmulationInterface();
|
||||||
INfcFCardEmulation getNfcFCardEmulationInterface();
|
INfcFCardEmulation getNfcFCardEmulationInterface();
|
||||||
INfcAdapterExtras getNfcAdapterExtrasInterface(in String pkg);
|
INfcAdapterExtras getNfcAdapterExtrasInterface(in String pkg);
|
||||||
|
INfcDta getNfcDtaInterface(in String pkg);
|
||||||
int getState();
|
int getState();
|
||||||
boolean disable(boolean saveState);
|
boolean disable(boolean saveState);
|
||||||
boolean enable();
|
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;
|
package android.nfc;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
import android.annotation.RequiresPermission;
|
import android.annotation.RequiresPermission;
|
||||||
import android.annotation.SdkConstant;
|
import android.annotation.SdkConstant;
|
||||||
import android.annotation.SdkConstant.SdkConstantType;
|
import android.annotation.SdkConstant.SdkConstantType;
|
||||||
@@ -43,6 +41,7 @@ import android.os.ServiceManager;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents the local NFC adapter.
|
* Represents the local NFC adapter.
|
||||||
@@ -626,6 +625,23 @@ public final class NfcAdapter {
|
|||||||
return sNfcFCardEmulationService;
|
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
|
* NFC service dead - attempt best effort recovery
|
||||||
* @hide
|
* @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