Don't crash when an unregistered package is removed.
Bug: 4205311
Change-Id: I116e7c2e12c7e160d81154d22589b1bdefe93e44
diff --git a/src/com/android/nfc/NfcService.java b/src/com/android/nfc/NfcService.java
index d681ae6..c47134d 100755
--- a/src/com/android/nfc/NfcService.java
+++ b/src/com/android/nfc/NfcService.java
@@ -2914,7 +2914,19 @@
mSecureElement.doDisconnect(handle);
} else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {
- final String packageName = intent.getData().getSchemeSpecificPart();
+ Uri data = intent.getData();
+ if (data == null) return;
+ String packageName = data.getSchemeSpecificPart();
+ ApduList apdus = null;
+
+ synchronized (NfcService.this) {
+ apdus = mTearDownApdus.remove(packageName);
+ if (apdus == null) {
+ return;
+ }
+
+ writeTearDownApdusLocked();
+ }
int handle = mSecureElement.doOpenSecureElementConnection();
if (handle == 0) {
@@ -2922,16 +2934,13 @@
return;
}
- synchronized (NfcService.this) {
- for (byte[] cmd : mTearDownApdus.get(packageName).get()) {
+ try {
+ for (byte[] cmd : apdus.get()) {
mSecureElement.doTransceive(handle, cmd);
}
-
- mTearDownApdus.remove(packageName);
- writeTearDownApdusLocked();
+ } finally {
+ mSecureElement.doDisconnect(handle);
}
-
- mSecureElement.doDisconnect(handle);
}
}
};