Merge changes from topic 'NCI-2.0' am: 430dded515 am: 4d08be4a52

am: 67d3257519

Change-Id: I77202532d60368ebc18e754a5454eb6fa1b0e5dc
This commit is contained in:
Ruchi Kandoi
2017-07-06 23:04:53 +00:00
committed by android-build-merger
2 changed files with 32 additions and 5 deletions

View File

@@ -253,6 +253,20 @@ public final class ApduServiceInfo implements Parcelable {
Log.e(TAG, "Ignoring invalid or duplicate aid: " + aid);
}
a.recycle();
} else if (eventType == XmlPullParser.START_TAG &&
tagName.equals("aid-suffix-filter") && 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 suffix
aid = 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) {
@@ -297,6 +311,17 @@ public final class ApduServiceInfo implements Parcelable {
return prefixAids;
}
public List<String> getSubsetAids() {
final ArrayList<String> subsetAids = new ArrayList<String>();
for (AidGroup group : getAidGroups()) {
for (String aid : group.aids) {
if (aid.endsWith("#")) {
subsetAids.add(aid);
}
}
}
return subsetAids;
}
/**
* Returns the registered AID group for this category.
*/

View File

@@ -606,6 +606,8 @@ public final class CardEmulation {
* <li>Consist of only hex characters
* <li>Additionally, we allow an asterisk at the end, to indicate
* a prefix
* <li>Additinally we allow an (#) at symbol at the end, to indicate
* a subset
* </ul>
*
* @hide
@@ -614,20 +616,20 @@ public final class CardEmulation {
if (aid == null)
return false;
// If a prefix AID, the total length must be odd (even # of AID chars + '*')
if (aid.endsWith("*") && ((aid.length() % 2) == 0)) {
// If a prefix/subset AID, the total length must be odd (even # of AID chars + '*')
if ((aid.endsWith("*") || aid.endsWith("#")) && ((aid.length() % 2) == 0)) {
Log.e(TAG, "AID " + aid + " is not a valid AID.");
return false;
}
// If not a prefix AID, the total length must be even (even # of AID chars)
if (!aid.endsWith("*") && ((aid.length() % 2) != 0)) {
// If not a prefix/subset AID, the total length must be even (even # of AID chars)
if ((!(aid.endsWith("*") || aid.endsWith("#"))) && ((aid.length() % 2) != 0)) {
Log.e(TAG, "AID " + aid + " is not a valid AID.");
return false;
}
// Verify hex characters
if (!aid.matches("[0-9A-Fa-f]{10,32}\\*?")) {
if (!aid.matches("[0-9A-Fa-f]{10,32}\\*?\\#?")) {
Log.e(TAG, "AID " + aid + " is not a valid AID.");
return false;
}