diff --git a/res/values/strings.xml b/res/values/strings.xml index 7c2cc675a30..e78761a5e77 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7764,8 +7764,8 @@ Recent apps, default apps Notification access is not available for apps in the work profile. - - Accounts + + Passwords and accounts No accounts added - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/xml/language_and_input.xml b/res/xml/language_and_input.xml index 50968d94558..d7b836414c3 100644 --- a/res/xml/language_and_input.xml +++ b/res/xml/language_and_input.xml @@ -54,12 +54,6 @@ android:persistent="false" android:fragment="com.android.settings.inputmethod.SpellCheckersSettings" /> - - createPreferenceControllers(Context context) { + final List controllers = new ArrayList<>(); + buildAutofillPreferenceControllers(context, controllers); final String[] authorities = getIntent().getStringArrayExtra(EXTRA_AUTHORITIES); - return buildPreferenceControllers(context, this /* parent */, authorities); + buildAccountPreferenceControllers(context, this /* parent */, authorities, controllers); + return controllers; } - private static List buildPreferenceControllers(Context context, - SettingsPreferenceFragment parent, String[] authorities) { - final List controllers = new ArrayList<>(); + static void buildAutofillPreferenceControllers( + Context context, List controllers) { + controllers.add(new DefaultAutofillPreferenceController(context)); + controllers.add(new DefaultWorkAutofillPreferenceController(context)); + } + private static void buildAccountPreferenceControllers( + Context context, SettingsPreferenceFragment parent, String[] authorities, + List controllers) { final AccountPreferenceController accountPrefController = new AccountPreferenceController(context, parent, authorities, ProfileSelectFragment.ProfileType.ALL); @@ -86,7 +96,6 @@ public class AccountDashboardFragment extends DashboardFragment { controllers.add(new AutoSyncDataPreferenceController(context, parent)); controllers.add(new AutoSyncPersonalDataPreferenceController(context, parent)); controllers.add(new AutoSyncWorkDataPreferenceController(context, parent)); - return controllers; } public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = @@ -95,8 +104,11 @@ public class AccountDashboardFragment extends DashboardFragment { @Override public List createPreferenceControllers( Context context) { - return buildPreferenceControllers( - context, null /* parent */, null /* authorities*/); + final List controllers = new ArrayList<>(); + buildAccountPreferenceControllers( + context, null /* parent */, null /* authorities*/, controllers); + buildAutofillPreferenceControllers(context, controllers); + return controllers; } @Override diff --git a/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java b/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java index f29326e4f58..c97c8862430 100644 --- a/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java +++ b/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java @@ -18,6 +18,8 @@ package com.android.settings.accounts; import static android.provider.Settings.EXTRA_AUTHORITIES; +import static com.android.settings.accounts.AccountDashboardFragment.buildAutofillPreferenceControllers; + import android.app.settings.SettingsEnums; import android.content.Context; @@ -61,14 +63,16 @@ public class AccountPersonalDashboardFragment extends DashboardFragment { @Override protected List createPreferenceControllers(Context context) { + final List controllers = new ArrayList<>(); + buildAutofillPreferenceControllers(context, controllers); final String[] authorities = getIntent().getStringArrayExtra(EXTRA_AUTHORITIES); - return buildPreferenceControllers(context, this /* parent */, authorities); + buildAccountPreferenceControllers(context, this /* parent */, authorities, controllers); + return controllers; } - private static List buildPreferenceControllers(Context context, - SettingsPreferenceFragment parent, String[] authorities) { - final List controllers = new ArrayList<>(); - + private static void buildAccountPreferenceControllers( + Context context, SettingsPreferenceFragment parent, String[] authorities, + List controllers) { final AccountPreferenceController accountPrefController = new AccountPreferenceController(context, parent, authorities, ProfileSelectFragment.ProfileType.PERSONAL); @@ -78,7 +82,6 @@ public class AccountPersonalDashboardFragment extends DashboardFragment { controllers.add(accountPrefController); controllers.add(new AutoSyncDataPreferenceController(context, parent)); controllers.add(new AutoSyncPersonalDataPreferenceController(context, parent)); - return controllers; } // TODO: b/141601408. After featureFlag settings_work_profile is launched, unmark this @@ -88,6 +91,7 @@ public class AccountPersonalDashboardFragment extends DashboardFragment { // @Override // public List createPreferenceControllers( // Context context) { +// ..Add autofill here too.. // return buildPreferenceControllers( // context, null /* parent */, null /* authorities*/); // } diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java index ff5bc780910..64c2d13cbbc 100644 --- a/src/com/android/settings/accounts/AccountPreferenceController.java +++ b/src/com/android/settings/accounts/AccountPreferenceController.java @@ -75,11 +75,12 @@ public class AccountPreferenceController extends AbstractPreferenceController private static final String TAG = "AccountPrefController"; - private static final int ORDER_ACCOUNT_PROFILES = 1; + private static final int ORDER_ACCOUNT_PROFILES = 101; private static final int ORDER_LAST = 1002; private static final int ORDER_NEXT_TO_LAST = 1001; private static final int ORDER_NEXT_TO_NEXT_TO_LAST = 1000; + private static final String PREF_KEY_ACCOUNTS = "accounts_category"; private static final String PREF_KEY_ADD_ACCOUNT = "add_account"; private static final String PREF_KEY_REMOVE_PROFILE = "remove_profile"; private static final String PREF_KEY_WORK_PROFILE_SETTING = "work_profile_setting"; @@ -348,8 +349,10 @@ public class AccountPreferenceController extends AbstractPreferenceController } } final PreferenceScreen screen = mFragment.getPreferenceScreen(); - if (screen != null) { - screen.addPreference(preferenceGroup); + final PreferenceGroup accounts = + screen == null ? null : screen.findPreference(PREF_KEY_ACCOUNTS); + if (accounts != null) { + accounts.addPreference(preferenceGroup); } profileData.preferenceGroup = preferenceGroup; if (userInfo.isEnabled()) { diff --git a/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java b/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java index 853c66b2fae..4e6515b4459 100644 --- a/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java +++ b/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java @@ -18,6 +18,8 @@ package com.android.settings.accounts; import static android.provider.Settings.EXTRA_AUTHORITIES; +import static com.android.settings.accounts.AccountDashboardFragment.buildAutofillPreferenceControllers; + import android.app.settings.SettingsEnums; import android.content.Context; @@ -61,14 +63,16 @@ public class AccountWorkProfileDashboardFragment extends DashboardFragment { @Override protected List createPreferenceControllers(Context context) { + final List controllers = new ArrayList<>(); + buildAutofillPreferenceControllers(context, controllers); final String[] authorities = getIntent().getStringArrayExtra(EXTRA_AUTHORITIES); - return buildPreferenceControllers(context, this /* parent */, authorities); + buildAccountPreferenceControllers(context, this /* parent */, authorities, controllers); + return controllers; } - private static List buildPreferenceControllers(Context context, - SettingsPreferenceFragment parent, String[] authorities) { - final List controllers = new ArrayList<>(); - + private static void buildAccountPreferenceControllers( + Context context, SettingsPreferenceFragment parent, String[] authorities, + List controllers) { final AccountPreferenceController accountPrefController = new AccountPreferenceController(context, parent, authorities, ProfileSelectFragment.ProfileType.WORK); @@ -78,7 +82,6 @@ public class AccountWorkProfileDashboardFragment extends DashboardFragment { controllers.add(accountPrefController); controllers.add(new AutoSyncDataPreferenceController(context, parent)); controllers.add(new AutoSyncWorkDataPreferenceController(context, parent)); - return controllers; } // TODO: b/141601408. After featureFlag settings_work_profile is launched, unmark this @@ -88,6 +91,7 @@ public class AccountWorkProfileDashboardFragment extends DashboardFragment { // @Override // public List createPreferenceControllers( // Context context) { +// ..Add autofill here too.. // return buildPreferenceControllers( // context, null /* parent */, null /* authorities*/); // } diff --git a/src/com/android/settings/applications/defaultapps/AutofillPicker.java b/src/com/android/settings/applications/defaultapps/AutofillPicker.java deleted file mode 100644 index 62a478f183a..00000000000 --- a/src/com/android/settings/applications/defaultapps/AutofillPicker.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.applications.defaultapps; - -import android.app.settings.SettingsEnums; -import android.content.Context; -import android.provider.SearchIndexableResource; - -import com.android.settings.R; -import com.android.settings.dashboard.DashboardFragment; -import com.android.settings.search.BaseSearchIndexProvider; -import com.android.settingslib.search.Indexable; -import com.android.settingslib.core.AbstractPreferenceController; -import com.android.settingslib.search.SearchIndexable; - -import java.util.Arrays; -import java.util.List; - -@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC) -public class AutofillPicker extends DashboardFragment { - private static final String TAG = "AutofillPicker"; - - @Override - public int getMetricsCategory() { - return SettingsEnums.DEFAULT_AUTOFILL_PICKER; - } - - @Override - protected String getLogTag() { - return TAG; - } - - @Override - protected int getPreferenceScreenResId() { - return R.xml.default_autofill_picker_settings; - } - - @Override - protected List createPreferenceControllers(Context context) { - return buildPreferenceControllers(context); - } - - public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = - new BaseSearchIndexProvider(R.xml.default_autofill_picker_settings) { - - @Override - public List getPreferenceControllers(Context - context) { - return buildPreferenceControllers(context); - } - }; - - private static List buildPreferenceControllers(Context context) { - return Arrays.asList( - new DefaultAutofillPreferenceController(context), - new DefaultWorkAutofillPreferenceController(context)); - } -} diff --git a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java index b22b1562be2..4b6a6a8d702 100644 --- a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java @@ -39,6 +39,7 @@ import android.os.UserManager; import android.text.TextUtils; import androidx.preference.Preference; +import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceGroup; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; @@ -72,9 +73,13 @@ import java.util.List; ShadowSettingsLibUtils.class}) public class AccountPreferenceControllerTest { + private static final String PREF_KEY_ACCOUNTS = "accounts_category"; + @Mock(answer = RETURNS_DEEP_STUBS) private PreferenceScreen mScreen; @Mock(answer = RETURNS_DEEP_STUBS) + private PreferenceCategory mAccountsCategory; + @Mock(answer = RETURNS_DEEP_STUBS) private UserManager mUserManager; @Mock(answer = RETURNS_DEEP_STUBS) private SettingsPreferenceFragment mFragment; @@ -95,6 +100,9 @@ public class AccountPreferenceControllerTest { shadowApp.setSystemService(Context.ACCOUNT_SERVICE, mAccountManager); when(mFragment.getPreferenceScreen()).thenReturn(mScreen); + // This is a bit ugly, but hard to avoid because of how the mocks are used in these tests. + // TODO: Refactor these tests to not use RETURNS_DEEP_STUBS. + when(mScreen.findPreference(PREF_KEY_ACCOUNTS)).thenReturn(mScreen); when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext); when(mAccountManager.getAuthenticatorTypesAsUser(anyInt())) .thenReturn(new AuthenticatorDescription[0]); @@ -166,6 +174,7 @@ public class AccountPreferenceControllerTest { // First time resume will build the UI mController.onResume(); reset(mScreen); + when(mScreen.findPreference(PREF_KEY_ACCOUNTS)).thenReturn(mScreen); mController.onResume(); verify(mScreen, never()).addPreference(any(PreferenceGroup.class)); @@ -184,6 +193,7 @@ public class AccountPreferenceControllerTest { // add a new profile infos.add(new UserInfo(2, "user 2", UserInfo.FLAG_MANAGED_PROFILE)); reset(mScreen); + when(mScreen.findPreference(PREF_KEY_ACCOUNTS)).thenReturn(mScreen); mController.onResume(); verify(mScreen, times(1)).addPreference(any(PreferenceGroup.class));