From b44fb93aa891659317cc3c9ab4edd857883ab018 Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Tue, 5 Sep 2023 10:10:09 +0800 Subject: [PATCH] The new About > Account behavior - Change the display content of the summary while multiple accounts. - Goto the Passwords & accounts page when users click Account item. Fixes: 290593956 Test: atest BrandedAccountPreferenceControllerTest Change-Id: Iae32803076d86455f52f2ffd278e06995161adfe --- res/values/strings.xml | 2 + .../BrandedAccountPreferenceController.java | 27 +++++----- ...randedAccountPreferenceControllerTest.java | 52 +++++++++++++++++-- 3 files changed, 64 insertions(+), 17 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 539d51b53da..edcd213b422 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10704,6 +10704,8 @@ Account + + %d accounts Device name diff --git a/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java b/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java index 9daa43d0a70..13aac5c73d6 100644 --- a/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java +++ b/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java @@ -19,14 +19,13 @@ package com.android.settings.deviceinfo; import android.accounts.Account; import android.app.settings.SettingsEnums; import android.content.Context; -import android.os.Bundle; import android.text.TextUtils; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; -import com.android.settings.accounts.AccountDetailDashboardFragment; +import com.android.settings.accounts.AccountDashboardFragment; import com.android.settings.accounts.AccountFeatureProvider; import com.android.settings.core.BasePreferenceController; import com.android.settings.core.SubSettingLauncher; @@ -63,7 +62,11 @@ public class BrandedAccountPreferenceController extends BasePreferenceController return; } - accountPreference.setSummary(mAccounts[0].name); + if (mAccounts.length == 1) { + accountPreference.setSummary(mAccounts[0].name); + } else { + accountPreference.setSummary(getAccountSummary(mAccounts.length)); + } } @Override @@ -72,18 +75,9 @@ public class BrandedAccountPreferenceController extends BasePreferenceController return false; } - final Bundle args = new Bundle(); - args.putParcelable(AccountDetailDashboardFragment.KEY_ACCOUNT, - mAccounts[0]); - args.putParcelable(AccountDetailDashboardFragment.KEY_USER_HANDLE, - android.os.Process.myUserHandle()); - args.putString(AccountDetailDashboardFragment.KEY_ACCOUNT_TYPE, - mAccountFeatureProvider.getAccountType()); - new SubSettingLauncher(mContext) - .setDestination(AccountDetailDashboardFragment.class.getName()) - .setTitleRes(R.string.account_sync_title) - .setArguments(args) + .setDestination(AccountDashboardFragment.class.getName()) + .setTitleRes(R.string.account_dashboard_title) .setSourceMetricsCategory(SettingsEnums.DEVICEINFO) .launch(); return true; @@ -97,4 +91,9 @@ public class BrandedAccountPreferenceController extends BasePreferenceController preference.setVisible(false); } } + + private String getAccountSummary(int accountNo) { + return mContext.getResources() + .getString(R.string.my_device_info_account_preference_summary, accountNo); + } } diff --git a/tests/unit/src/com/android/settings/deviceinfo/BrandedAccountPreferenceControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/BrandedAccountPreferenceControllerTest.java index 6e78d05a5a2..0c57400e411 100644 --- a/tests/unit/src/com/android/settings/deviceinfo/BrandedAccountPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/deviceinfo/BrandedAccountPreferenceControllerTest.java @@ -17,7 +17,6 @@ package com.android.settings.deviceinfo; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -26,6 +25,9 @@ import android.accounts.Account; import android.content.Context; import android.content.res.Resources; +import androidx.preference.Preference; +import androidx.preference.PreferenceManager; +import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -46,17 +48,21 @@ public class BrandedAccountPreferenceControllerTest { private Context mContext; private FakeFeatureFactory mFakeFeatureFactory; + private PreferenceScreen mScreen; + private Preference mPreference; + @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(ApplicationProvider.getApplicationContext()); - when(mContext.getResources()).thenReturn(mResources); mFakeFeatureFactory = FakeFeatureFactory.setupForTest(); - + mScreen = new PreferenceManager(mContext).createPreferenceScreen(mContext); + mPreference = new Preference(mContext); } @Test public void isAvailable_configOn_noAccount_off() { + when(mContext.getResources()).thenReturn(mResources); final int boolId = ResourcesUtils.getResourcesId( ApplicationProvider.getApplicationContext(), "bool", "config_show_branded_account_in_device_info"); @@ -69,6 +75,7 @@ public class BrandedAccountPreferenceControllerTest { @Test public void isAvailable_accountIsAvailable_on() { + when(mContext.getResources()).thenReturn(mResources); final int boolId = ResourcesUtils.getResourcesId( ApplicationProvider.getApplicationContext(), "bool", "config_show_branded_account_in_device_info"); @@ -84,6 +91,7 @@ public class BrandedAccountPreferenceControllerTest { @Test public void isAvailable_configOff_hasAccount_off() { + when(mContext.getResources()).thenReturn(mResources); final int boolId = ResourcesUtils.getResourcesId( ApplicationProvider.getApplicationContext(), "bool", "config_show_branded_account_in_device_info"); @@ -96,4 +104,42 @@ public class BrandedAccountPreferenceControllerTest { assertThat(controller.isAvailable()).isFalse(); } + + /** + * Test displayPreference has one account. + */ + @Test + public void displayPreference_hasOneAccount_showAccount() { + when(mFakeFeatureFactory.mAccountFeatureProvider.getAccounts(any(Context.class))) + .thenReturn(new Account[]{new Account("teresaikeda@gmail.com", + "com.google")}); + + mPreference.setKey("test_key"); + mScreen.addPreference(mPreference); + final BrandedAccountPreferenceController controller = + new BrandedAccountPreferenceController(mContext, "test_key"); + + controller.displayPreference(mScreen); + + assertThat(mPreference.getSummary()).isEqualTo("teresaikeda@gmail.com"); + } + + /** + * Test displayPreference has two accounts. + */ + @Test + public void displayPreference_hasTwoAccounts_showTwoAccountSummary() { + when(mFakeFeatureFactory.mAccountFeatureProvider.getAccounts(any(Context.class))) + .thenReturn(new Account[]{new Account("teresa@gmail.com", "com.google"), + new Account("reno@gmail.com", "com.google") }); + + mPreference.setKey("test_key"); + mScreen.addPreference(mPreference); + final BrandedAccountPreferenceController controller = + new BrandedAccountPreferenceController(mContext, "test_key"); + + controller.displayPreference(mScreen); + + assertThat(mPreference.getSummary()).isEqualTo("2 accounts"); + } }