summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/nfc/cardemulation/CardEmulationManager.java32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/com/android/nfc/cardemulation/CardEmulationManager.java b/src/com/android/nfc/cardemulation/CardEmulationManager.java
index d43f89a7..94e0af54 100644
--- a/src/com/android/nfc/cardemulation/CardEmulationManager.java
+++ b/src/com/android/nfc/cardemulation/CardEmulationManager.java
@@ -17,6 +17,9 @@ package com.android.nfc.cardemulation;
import android.content.ComponentName;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.nfc.INfcCardEmulation;
import android.nfc.INfcFCardEmulation;
import android.nfc.NfcAdapter;
@@ -318,14 +321,23 @@ public class CardEmulationManager implements RegisteredServicesCache.Callback,
+ userIdDefaultPaymentService);
}
}
-
if (defaultPaymentService == null) {
// A payment service may have been removed, leaving only one;
// in that case, automatically set that app as default.
int numPaymentServices = 0;
ComponentName lastFoundPaymentService = null;
+ PackageManager pm;
+ try {
+ pm = mContext.createPackageContextAsUser("android", /*flags=*/0,
+ new UserHandle(userId)).getPackageManager();
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "Could not create user package context");
+ return;
+ }
+
for (ApduServiceInfo service : services) {
- if (service.hasCategory(CardEmulation.CATEGORY_PAYMENT)) {
+ if (service.hasCategory(CardEmulation.CATEGORY_PAYMENT)
+ && wasServicePreInstalled(pm, service.getComponent())) {
numPaymentServices++;
lastFoundPaymentService = service.getComponent();
}
@@ -347,6 +359,22 @@ public class CardEmulationManager implements RegisteredServicesCache.Callback,
}
}
+ boolean wasServicePreInstalled(PackageManager packageManager, ComponentName service) {
+ try {
+ ApplicationInfo ai = packageManager
+ .getApplicationInfo(service.getPackageName(), /*flags=*/0);
+ if ((ApplicationInfo.FLAG_SYSTEM & ai.flags) != 0) {
+ if (DBG) Log.d(TAG, "Service was pre-installed on the device");
+ return true;
+ }
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "Service is not currently installed on the device.");
+ return false;
+ }
+ if (DBG) Log.d(TAG, "Service was not pre-installed on the device");
+ return false;
+ }
+
ComponentName getDefaultServiceForCategory(int userId, String category,
boolean validateInstalled) {
if (!CardEmulation.CATEGORY_PAYMENT.equals(category)) {