Merge "Add logic to redirect default payment setting to default wallet selector." into main
diff --git a/src/com/android/settings/applications/specialaccess/DefaultPaymentSettingsPreferenceController.java b/src/com/android/settings/applications/specialaccess/DefaultPaymentSettingsPreferenceController.java
index 763a500..c66c97e 100644
--- a/src/com/android/settings/applications/specialaccess/DefaultPaymentSettingsPreferenceController.java
+++ b/src/com/android/settings/applications/specialaccess/DefaultPaymentSettingsPreferenceController.java
@@ -16,10 +16,14 @@
 
 package com.android.settings.applications.specialaccess;
 
+import android.app.role.RoleManager;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.nfc.NfcAdapter;
+import android.nfc.cardemulation.CardEmulation;
 import android.os.UserManager;
+import android.permission.flags.Flags;
 
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
@@ -62,6 +66,20 @@
     }
 
     @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (Flags.walletRoleEnabled()
+                && mPreferenceKey.equals(preference.getKey())) {
+            RoleManager roleManager = mContext.getSystemService(RoleManager.class);
+            if (roleManager.isRoleAvailable(RoleManager.ROLE_WALLET)) {
+                Intent intent = new Intent(CardEmulation.ACTION_CHANGE_DEFAULT);
+                mContext.startActivity(intent);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
     public void onResume() {
         if (mPaymentSettingsEnabler != null) {
             mPaymentSettingsEnabler.resume();
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/DefaultPaymentSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/DefaultPaymentSettingsPreferenceControllerTest.java
index cc960d7..788b5e8 100644
--- a/tests/robotests/src/com/android/settings/applications/specialaccess/DefaultPaymentSettingsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/specialaccess/DefaultPaymentSettingsPreferenceControllerTest.java
@@ -19,16 +19,28 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.role.RoleManager;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.nfc.NfcAdapter;
+import android.nfc.cardemulation.CardEmulation;
 import android.os.UserManager;
+import android.permission.flags.Flags;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
+
+import androidx.preference.Preference;
 
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
@@ -37,6 +49,10 @@
 @RunWith(RobolectricTestRunner.class)
 public class DefaultPaymentSettingsPreferenceControllerTest {
 
+    private static final String PREF_KEY = "key";
+
+    @Rule
+    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
     @Mock
     private NfcAdapter mNfcAdapter;
     @Mock
@@ -45,6 +61,10 @@
     private UserManager mUserManager;
     @Mock
     private PackageManager mPackageManager;
+    @Mock
+    private RoleManager mRoleManager;
+    @Mock
+    private Preference mPreference;
 
     private DefaultPaymentSettingsPreferenceController mController;
 
@@ -55,7 +75,8 @@
         when(mContext.getApplicationContext()).thenReturn(mContext);
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
         when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
-        mController = new DefaultPaymentSettingsPreferenceController(mContext, "key");
+        when(mContext.getSystemService(RoleManager.class)).thenReturn(mRoleManager);
+        mController = new DefaultPaymentSettingsPreferenceController(mContext, PREF_KEY);
         ReflectionHelpers.setField(mController, "mNfcAdapter", mNfcAdapter);
     }
 
@@ -86,4 +107,20 @@
         assertThat(mController.getAvailabilityStatus()).isEqualTo(
                 DefaultPaymentSettingsPreferenceController.DISABLED_DEPENDENT_SETTING);
     }
+
+    @Test
+    @RequiresFlagsEnabled(Flags.FLAG_WALLET_ROLE_ENABLED)
+    public void handlePreferenceTreeClick_walletRoleEnabled_shouldReturnTrue() {
+        when(mRoleManager.isRoleAvailable(anyString())).thenReturn(true);
+        when(mPreference.getKey()).thenReturn(PREF_KEY);
+        ArgumentCaptor<String> roleTypeCaptor = ArgumentCaptor.forClass(String.class);
+        ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
+
+        assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
+        verify(mRoleManager).isRoleAvailable(roleTypeCaptor.capture());
+        verify(mContext).startActivity(intentArgumentCaptor.capture());
+        assertThat(roleTypeCaptor.getValue()).isEqualTo(RoleManager.ROLE_WALLET);
+        assertThat(intentArgumentCaptor.getValue().getAction())
+                .isEqualTo(CardEmulation.ACTION_CHANGE_DEFAULT);
+    }
 }