diff options
| -rw-r--r-- | src/com/android/nfc/cardemulation/CardEmulationManager.java | 32 |
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)) { |
