Fix getSelectionModeForCategory

NFC_PAYMENT_DEFAULT_COMPONENT is not accessable for market apps
Check if default payment name already registered in settings by NfcService.
Add a new AIDL interface isDefaultPaymentRegistered in INfcCardEmulation.aidl

Bug: 189178386
Test: atest CtsNfcTestCases
Change-Id: I0a09c9763d39c8e0b9b28df85603bdc7f281669d
This commit is contained in:
George Chang
2021-05-26 00:37:28 +08:00
parent 6890be9218
commit 4366d81730
2 changed files with 18 additions and 3 deletions

View File

@@ -40,4 +40,5 @@ interface INfcCardEmulation
boolean unsetPreferredService();
boolean supportsAidPrefixRegistration();
ApduServiceInfo getPreferredPaymentService(int userHandle);
boolean isDefaultPaymentRegistered();
}

View File

@@ -294,9 +294,23 @@ public final class CardEmulation {
*/
public int getSelectionModeForCategory(String category) {
if (CATEGORY_PAYMENT.equals(category)) {
String defaultComponent = Settings.Secure.getString(mContext.getContentResolver(),
Settings.Secure.NFC_PAYMENT_DEFAULT_COMPONENT);
if (defaultComponent != null) {
boolean paymentRegistered = false;
try {
paymentRegistered = sService.isDefaultPaymentRegistered();
} catch (RemoteException e) {
recoverService();
if (sService == null) {
Log.e(TAG, "Failed to recover CardEmulationService.");
return SELECTION_MODE_ALWAYS_ASK;
}
try {
paymentRegistered = sService.isDefaultPaymentRegistered();
} catch (RemoteException ee) {
Log.e(TAG, "Failed to reach CardEmulationService.");
return SELECTION_MODE_ALWAYS_ASK;
}
}
if (paymentRegistered) {
return SELECTION_MODE_PREFER_DEFAULT;
} else {
return SELECTION_MODE_ALWAYS_ASK;