AID prefix registration.
Bug: 16517161
Change-Id: I4e008b84fd1372b17a98437ec8a6b71c33d7cd05
diff --git a/core/java/android/nfc/INfcCardEmulation.aidl b/core/java/android/nfc/INfcCardEmulation.aidl
index 521f4fd..d1b132c 100644
--- a/core/java/android/nfc/INfcCardEmulation.aidl
+++ b/core/java/android/nfc/INfcCardEmulation.aidl
@@ -36,4 +36,5 @@
List<ApduServiceInfo> getServices(int userHandle, in String category);
boolean setPreferredService(in ComponentName service);
boolean unsetPreferredService();
+ boolean supportsAidPrefixRegistration();
}
diff --git a/core/java/android/nfc/cardemulation/AidGroup.java b/core/java/android/nfc/cardemulation/AidGroup.java
index 6af7b7e..f440874 100644
--- a/core/java/android/nfc/cardemulation/AidGroup.java
+++ b/core/java/android/nfc/cardemulation/AidGroup.java
@@ -78,7 +78,7 @@
}
/**
- * @return the list of AIDs in this group
+ * @return the list of AIDs in this group
*/
public List<String> getAids() {
return aids;
diff --git a/core/java/android/nfc/cardemulation/ApduServiceInfo.java b/core/java/android/nfc/cardemulation/ApduServiceInfo.java
index 0df87c1..646134e 100644
--- a/core/java/android/nfc/cardemulation/ApduServiceInfo.java
+++ b/core/java/android/nfc/cardemulation/ApduServiceInfo.java
@@ -224,6 +224,20 @@
Log.e(TAG, "Ignoring invalid or duplicate aid: " + aid);
}
a.recycle();
+ } else if (eventType == XmlPullParser.START_TAG &&
+ "aid-prefix-filter".equals(tagName) && currentGroup != null) {
+ final TypedArray a = res.obtainAttributes(attrs,
+ com.android.internal.R.styleable.AidFilter);
+ String aid = a.getString(com.android.internal.R.styleable.AidFilter_name).
+ toUpperCase();
+ // Add wildcard char to indicate prefix
+ aid.concat("*");
+ if (CardEmulation.isValidAid(aid) && !currentGroup.aids.contains(aid)) {
+ currentGroup.aids.add(aid);
+ } else {
+ Log.e(TAG, "Ignoring invalid or duplicate aid: " + aid);
+ }
+ a.recycle();
}
}
} catch (NameNotFoundException e) {
diff --git a/core/java/android/nfc/cardemulation/CardEmulation.java b/core/java/android/nfc/cardemulation/CardEmulation.java
index 0e0c255..64c2bc2 100644
--- a/core/java/android/nfc/cardemulation/CardEmulation.java
+++ b/core/java/android/nfc/cardemulation/CardEmulation.java
@@ -515,8 +515,21 @@
* @return whether AID prefix registering is supported on this device.
*/
public boolean supportsAidPrefixRegistration() {
- // TODO
- return false;
+ try {
+ return sService.supportsAidPrefixRegistration();
+ } catch (RemoteException e) {
+ recoverService();
+ if (sService == null) {
+ Log.e(TAG, "Failed to recover CardEmulationService.");
+ return false;
+ }
+ try {
+ return sService.supportsAidPrefixRegistration();
+ } catch (RemoteException ee) {
+ Log.e(TAG, "Failed to reach CardEmulationService.");
+ return false;
+ }
+ }
}
/**