Merge "Add logic to redirect default payment setting to default wallet selector." into main

This commit is contained in:
Omer Ozer
2024-01-10 01:19:01 +00:00
committed by Android (Google) Code Review
2 changed files with 56 additions and 1 deletions

View File

@@ -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;
@@ -61,6 +65,20 @@ public class DefaultPaymentSettingsPreferenceController extends BasePreferenceCo
mPaymentSettingsEnabler = new PaymentSettingsEnabler(mContext, preference);
}
@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) {

View File

@@ -19,16 +19,28 @@ package com.android.settings.applications.specialaccess;
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 @@ import org.robolectric.util.ReflectionHelpers;
@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 @@ public class DefaultPaymentSettingsPreferenceControllerTest {
private UserManager mUserManager;
@Mock
private PackageManager mPackageManager;
@Mock
private RoleManager mRoleManager;
@Mock
private Preference mPreference;
private DefaultPaymentSettingsPreferenceController mController;
@@ -55,7 +75,8 @@ public class DefaultPaymentSettingsPreferenceControllerTest {
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 @@ public class DefaultPaymentSettingsPreferenceControllerTest {
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);
}
}