From ab0213a7e3a21f3b3ac68860e337d6567a04d0ca Mon Sep 17 00:00:00 2001 From: Zoey Chen Date: Thu, 14 Nov 2024 05:23:23 +0000 Subject: [PATCH] [Settings] Refactor: Add LocalePickerBaseListPreferenceController Bug: 377664066 Flag: EXEMPT refactor Change-Id: I2b0c0e9e121d7ab09cb8f627afa34a4f58ec9f9b --- .../localepicker/LocaleListEditor.java | 1 + .../LocaleListSearchCallback.java | 2 +- ...alePickerBaseListPreferenceController.java | 111 +++++++++++++----- ...egionAndNumberingSystemPickerFragment.java | 37 +++++- ...stemLocaleAllListPreferenceController.java | 87 ++++++++++++++ .../SystemLocalePickerFragment.java | 67 +++++++++-- ...caleSuggestedListPreferenceController.java | 81 +++++++++++++ 7 files changed, 337 insertions(+), 49 deletions(-) create mode 100644 src/com/android/settings/localepicker/SystemLocaleAllListPreferenceController.java create mode 100644 src/com/android/settings/localepicker/SystemLocaleSuggestedListPreferenceController.java diff --git a/src/com/android/settings/localepicker/LocaleListEditor.java b/src/com/android/settings/localepicker/LocaleListEditor.java index b09e22cc698..f9c50b79bd7 100644 --- a/src/com/android/settings/localepicker/LocaleListEditor.java +++ b/src/com/android/settings/localepicker/LocaleListEditor.java @@ -71,6 +71,7 @@ import java.util.Locale; public class LocaleListEditor extends RestrictedSettingsFragment implements View.OnTouchListener { protected static final String INTENT_LOCALE_KEY = "localeInfo"; protected static final String EXTRA_SYSTEM_LOCALE_DIALOG_TYPE = "system_locale_dialog_type"; + protected static final String EXTRA_RESULT_LOCALE = "result_locale"; protected static final String LOCALE_SUGGESTION = "locale_suggestion"; private static final String TAG = LocaleListEditor.class.getSimpleName(); diff --git a/src/com/android/settings/localepicker/LocaleListSearchCallback.java b/src/com/android/settings/localepicker/LocaleListSearchCallback.java index b80bbccccdd..e24e9bd3fa1 100644 --- a/src/com/android/settings/localepicker/LocaleListSearchCallback.java +++ b/src/com/android/settings/localepicker/LocaleListSearchCallback.java @@ -21,7 +21,7 @@ import com.android.internal.app.LocaleStore; import java.util.List; -/** Interface for when locale list changes in SearchView . */ +/** Interface for when locale list changes in SearchView. */ public interface LocaleListSearchCallback { /** Callback method for searching changes. */ diff --git a/src/com/android/settings/localepicker/LocalePickerBaseListPreferenceController.java b/src/com/android/settings/localepicker/LocalePickerBaseListPreferenceController.java index 8c71abf7248..4b0e9fa4fd4 100644 --- a/src/com/android/settings/localepicker/LocalePickerBaseListPreferenceController.java +++ b/src/com/android/settings/localepicker/LocalePickerBaseListPreferenceController.java @@ -16,13 +16,17 @@ package com.android.settings.localepicker; +import static com.android.settings.localepicker.LocaleListEditor.EXTRA_RESULT_LOCALE; +import static com.android.settings.localepicker.RegionAndNumberingSystemPickerFragment.EXTRA_IS_NUMBERING_SYSTEM; + import android.content.Context; +import android.os.Bundle; import android.os.LocaleList; -import android.provider.Settings; import android.util.ArrayMap; import android.util.Log; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; @@ -30,7 +34,10 @@ import androidx.preference.PreferenceScreen; import com.android.internal.app.LocaleCollectorBase; import com.android.internal.app.LocaleHelper; import com.android.internal.app.LocaleStore; +import com.android.settings.R; import com.android.settings.core.BasePreferenceController; +import com.android.settings.core.SubSettingLauncher; +import com.android.settingslib.core.instrumentation.Instrumentable; import java.util.ArrayList; import java.util.Collections; @@ -43,40 +50,27 @@ import java.util.stream.Collectors; /** A base controller for handling locale controllers. */ public abstract class LocalePickerBaseListPreferenceController extends BasePreferenceController implements LocaleListSearchCallback { - private static final String TAG = "LocalePickerBaseListPreference"; private static final String KEY_SUGGESTED = "suggested"; + private static final String KEY_SUPPORTED = "supported"; private PreferenceCategory mPreferenceCategory; - private LocaleList mExplicitLocales; private Set mLocaleList; private List mLocaleOptions; private Map mPreferences; private String mPackageName; - private boolean mCountryMode; + private boolean mIsCountryMode; + @Nullable private LocaleStore.LocaleInfo mParentLocale; public LocalePickerBaseListPreferenceController(@NonNull Context context, @NonNull String preferenceKey) { super(context, preferenceKey); - // TODO: Should get extra from fragment. -// if (isDeviceDemoMode()) { -// Bundle bundle = preference.getExtras(); -// mExplicitLocales = bundle == null -// ? null -// : bundle.getParcelable(Settings.EXTRA_EXPLICIT_LOCALES, LocaleList.class); -// Log.d(TAG, "Has explicit locales : " + mExplicitLocales); -// } mLocaleList = getLocaleCollectorController(context).getSupportedLocaleList(null, false, false); mLocaleOptions = new ArrayList<>(mLocaleList.size()); mPreferences = new ArrayMap<>(); } - private boolean isDeviceDemoMode() { - return Settings.Global.getInt( - mContext.getContentResolver(), Settings.Global.DEVICE_DEMO_MODE, 0) == 1; - } - @Override public void displayPreference(@NonNull PreferenceScreen screen) { super.displayPreference(screen); @@ -91,8 +85,21 @@ public abstract class LocalePickerBaseListPreferenceController extends } List result; + mParentLocale = getParentLocale(); + if (mParentLocale != null) { + mIsCountryMode = true; + mLocaleList = getLocaleCollectorController(mContext).getSupportedLocaleList( + mParentLocale, false, mIsCountryMode); + mLocaleOptions = new ArrayList<>(mLocaleList.size()); + if (!getPreferenceCategoryKey().contains(KEY_SUGGESTED)) { + mPreferenceCategory.setTitle( + mContext.getString(R.string.all_supported_locales_regions_title)); + } + } + result = getSortedLocaleList( - getPreferenceCategoryKey().contains(KEY_SUGGESTED) ? getSuggestedLocaleList() + getPreferenceCategoryKey().contains(KEY_SUGGESTED) + ? getSuggestedLocaleList() : getSupportedLocaleList()); final Map existingPreferences = mPreferences; @@ -113,12 +120,7 @@ public abstract class LocalePickerBaseListPreferenceController extends newList = getSortedSuggestedLocaleFromSearchList( newList, getSuggestedLocaleList()); } - if (!newList.isEmpty()) { - mPreferenceCategory.setVisible(true); - setupPreference(newList, existingPreferences); - } else { - mPreferenceCategory.setVisible(false); - } + setupPreference(newList, existingPreferences); } private List getSortedSuggestedLocaleFromSearchList( @@ -138,6 +140,12 @@ public abstract class LocalePickerBaseListPreferenceController extends private void setupPreference(List localeInfoList, Map existingPreferences) { + Log.d(TAG, "setupPreference: isNumberingMode = " + isNumberingMode()); + if (isNumberingMode() && getPreferenceCategoryKey().contains(KEY_SUPPORTED)) { + mPreferenceCategory.setTitle( + mContext.getString(R.string.all_supported_numbering_system_title)); + } + localeInfoList.stream().forEach(locale -> { Preference pref = existingPreferences.remove(locale.getId()); @@ -146,15 +154,16 @@ public abstract class LocalePickerBaseListPreferenceController extends mPreferenceCategory.addPreference(pref); } String localeName = - mCountryMode ? locale.getFullCountryNameNative() : locale.getFullNameNative(); + mIsCountryMode ? locale.getFullCountryNameNative() : locale.getFullNameNative(); pref.setTitle(localeName); pref.setKey(locale.toString()); pref.setOnPreferenceClickListener(clickedPref -> { - // TODO: Click locale to show region or numbering system page if needed. + switchFragment(locale); return true; }); mPreferences.put(locale.getId(), pref); }); + mPreferenceCategory.setVisible(mPreferenceCategory.getPreferenceCount() > 0); } @Override @@ -166,14 +175,16 @@ public abstract class LocalePickerBaseListPreferenceController extends protected abstract LocaleCollectorBase getLocaleCollectorController(Context context); + @Nullable protected abstract LocaleStore.LocaleInfo getParentLocale(); + + protected abstract boolean isNumberingMode(); + + @Nullable protected abstract LocaleList getExplicitLocaleList(); + protected String getPackageName() { return mPackageName; } - protected LocaleList getExplicitLocaleList() { - return mExplicitLocales; - } - protected List getSuggestedLocaleList() { mLocaleOptions.clear(); if (mLocaleList != null && !mLocaleList.isEmpty()) { @@ -203,8 +214,46 @@ public abstract class LocalePickerBaseListPreferenceController extends List localeInfos) { final Locale sortingLocale = Locale.getDefault(); final LocaleHelper.LocaleInfoComparator comp = - new LocaleHelper.LocaleInfoComparator(sortingLocale, mCountryMode); + new LocaleHelper.LocaleInfoComparator(sortingLocale, mIsCountryMode); Collections.sort(localeInfos, comp); return localeInfos; } + + private void switchFragment(LocaleStore.LocaleInfo localeInfo) { + boolean shouldShowLocaleEditor = shouldShowLocaleEditor(localeInfo); + String extraKey = shouldShowLocaleEditor ? LocaleListEditor.INTENT_LOCALE_KEY + : RegionAndNumberingSystemPickerFragment.EXTRA_TARGET_LOCALE; + String fragmentName = shouldShowLocaleEditor ? LocaleListEditor.class.getCanonicalName() + : RegionAndNumberingSystemPickerFragment.class.getCanonicalName(); + + final Bundle extra = new Bundle(); + extra.putSerializable(extraKey, localeInfo); + extra.putBoolean(EXTRA_IS_NUMBERING_SYSTEM, localeInfo.hasNumberingSystems()); + if (shouldShowLocaleEditor) { + extra.putBoolean(EXTRA_RESULT_LOCALE, true); + } + + new SubSettingLauncher(mContext) + .setDestination(fragmentName) + .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN) + .setArguments(extra) + .launch(); + } + + private boolean shouldShowLocaleEditor(LocaleStore.LocaleInfo localeInfo) { + boolean isSystemLocale = localeInfo.isSystemLocale(); + boolean isRegionLocale = localeInfo.getParent() != null; + boolean mayHaveDifferentNumberingSystem = localeInfo.hasNumberingSystems(); + mLocaleList = getLocaleCollectorController(mContext).getSupportedLocaleList(localeInfo, + false, localeInfo != null); + Log.d(TAG, + "shouldShowLocaleEditor: isSystemLocale = " + isSystemLocale + ", isRegionLocale = " + + isRegionLocale + ", mayHaveDifferentNumberingSystem = " + + mayHaveDifferentNumberingSystem + ", isSuggested = " + + localeInfo.isSuggested() + ", isNumberingMode = " + isNumberingMode()); + + return mLocaleList.size() == 1 || isSystemLocale || localeInfo.isSuggested() + || (isRegionLocale && !mayHaveDifferentNumberingSystem) + || isNumberingMode(); + } } diff --git a/src/com/android/settings/localepicker/RegionAndNumberingSystemPickerFragment.java b/src/com/android/settings/localepicker/RegionAndNumberingSystemPickerFragment.java index 171df6a3d39..83c87b03499 100644 --- a/src/com/android/settings/localepicker/RegionAndNumberingSystemPickerFragment.java +++ b/src/com/android/settings/localepicker/RegionAndNumberingSystemPickerFragment.java @@ -55,19 +55,41 @@ import java.util.Set; * default locale.

*/ public class RegionAndNumberingSystemPickerFragment extends DashboardFragment { - private static final String TAG = "RegionAndNumberingSystemPickerFragment"; + public static final String EXTRA_TARGET_LOCALE = "extra_target_locale"; + public static final String EXTRA_IS_NUMBERING_SYSTEM = "extra_is_numbering_system"; + + private static final String TAG = "RegionAndNumberingSystemPickerFragment"; + private static final String KEY_PREFERENCE_SYSTEM_LOCALE_LIST = "system_locale_list"; + private static final String KEY_PREFERENCE_SYSTEM_LOCALE_SUGGESTED_LIST = + "system_locale_suggested_list"; + + @Nullable + private SystemLocaleAllListPreferenceController mSystemLocaleAllListPreferenceController; + @Nullable + private SystemLocaleSuggestedListPreferenceController mSuggestedListPreferenceController; + @Nullable + private LocaleStore.LocaleInfo mLocaleInfo; private RecyclerView mRecyclerView; private AppBarLayout mAppBarLayout; private Activity mActivity; + private boolean mIsNumberingMode; @Override public void onCreate(@NonNull Bundle icicle) { super.onCreate(icicle); mActivity = getActivity(); - if (mActivity.isFinishing()) { + if (mActivity == null || mActivity.isFinishing()) { + Log.d(TAG, "onCreate, no activity or activity is finishing"); return; } + + if (mLocaleInfo == null) { + Log.d(TAG, "onCreate, can not get localeInfo"); + return; + } + + mActivity.setTitle(mLocaleInfo.getFullNameNative()); } @Override @@ -102,8 +124,15 @@ public class RegionAndNumberingSystemPickerFragment extends DashboardFragment { private List buildPreferenceControllers( @NonNull Context context, @Nullable Lifecycle lifecycle) { final List controllers = new ArrayList<>(); - - // TODO: b/30358431 - Add preference of region locales. + mLocaleInfo = (LocaleStore.LocaleInfo) getArguments().getSerializable(EXTRA_TARGET_LOCALE); + mIsNumberingMode = getArguments().getBoolean(EXTRA_IS_NUMBERING_SYSTEM); + mSuggestedListPreferenceController = new SystemLocaleSuggestedListPreferenceController( + context, KEY_PREFERENCE_SYSTEM_LOCALE_SUGGESTED_LIST, mLocaleInfo, + mIsNumberingMode); + mSystemLocaleAllListPreferenceController = new SystemLocaleAllListPreferenceController( + context, KEY_PREFERENCE_SYSTEM_LOCALE_LIST, mLocaleInfo, mIsNumberingMode); + controllers.add(mSuggestedListPreferenceController); + controllers.add(mSystemLocaleAllListPreferenceController); return controllers; } diff --git a/src/com/android/settings/localepicker/SystemLocaleAllListPreferenceController.java b/src/com/android/settings/localepicker/SystemLocaleAllListPreferenceController.java new file mode 100644 index 00000000000..d4d87fa2c2b --- /dev/null +++ b/src/com/android/settings/localepicker/SystemLocaleAllListPreferenceController.java @@ -0,0 +1,87 @@ +/** + * Copyright (C) 2024 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.localepicker; + +import android.content.Context; +import android.os.LocaleList; + +import com.android.internal.app.LocaleCollectorBase; +import com.android.internal.app.LocaleStore; +import com.android.internal.app.SystemLocaleCollector; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public class SystemLocaleAllListPreferenceController extends + LocalePickerBaseListPreferenceController { + private static final String KEY_PREFERENCE_CATEGORY_ADD_LANGUAGE_ALL_SUPPORTED = + "system_language_all_supported_category"; + private static final String KEY_PREFERENCE_SYSTEM_LOCALE_LIST = "system_locale_list"; + + private boolean mIsNumberingSystemMode; + @Nullable private LocaleStore.LocaleInfo mLocaleInfo; + @Nullable private LocaleList mExplicitLocales; + + public SystemLocaleAllListPreferenceController(@NonNull Context context, + @NonNull String preferenceKey) { + super(context, preferenceKey); + } + + public SystemLocaleAllListPreferenceController(@NonNull Context context, + @NonNull String preferenceKey, @NonNull LocaleStore.LocaleInfo parentLocale, + boolean isNumberingSystemMode) { + super(context, preferenceKey); + mLocaleInfo = parentLocale; + mIsNumberingSystemMode = isNumberingSystemMode; + } + + public SystemLocaleAllListPreferenceController(@NonNull Context context, + @NonNull String preferenceKey, @Nullable LocaleList explicitLocales) { + super(context, preferenceKey); + mExplicitLocales = explicitLocales; + } + + @Override + protected String getPreferenceCategoryKey() { + return KEY_PREFERENCE_CATEGORY_ADD_LANGUAGE_ALL_SUPPORTED; + } + + @Override + public @NonNull String getPreferenceKey() { + return KEY_PREFERENCE_SYSTEM_LOCALE_LIST; + } + + @Override + protected LocaleCollectorBase getLocaleCollectorController(Context context) { + return new SystemLocaleCollector(context, getExplicitLocaleList()); + } + + @Override + protected @Nullable LocaleStore.LocaleInfo getParentLocale() { + return mLocaleInfo; + } + + @Override + protected boolean isNumberingMode() { + return mIsNumberingSystemMode; + } + + @Override + protected @Nullable LocaleList getExplicitLocaleList() { + return mExplicitLocales; + } +} diff --git a/src/com/android/settings/localepicker/SystemLocalePickerFragment.java b/src/com/android/settings/localepicker/SystemLocalePickerFragment.java index df3ae8454f4..5a007318a55 100644 --- a/src/com/android/settings/localepicker/SystemLocalePickerFragment.java +++ b/src/com/android/settings/localepicker/SystemLocalePickerFragment.java @@ -20,6 +20,8 @@ import android.app.Activity; import android.app.settings.SettingsEnums; import android.content.Context; import android.os.Bundle; +import android.os.LocaleList; +import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; @@ -48,8 +50,6 @@ import com.android.settingslib.core.lifecycle.Lifecycle; import com.google.android.material.appbar.AppBarLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -68,12 +68,24 @@ public class SystemLocalePickerFragment extends DashboardFragment implements private static final String TAG = "SystemLocalePickerFragment"; private static final String EXTRA_EXPAND_SEARCH_VIEW = "expand_search_view"; + private static final String KEY_PREFERENCE_SYSTEM_LOCALE_LIST = "system_locale_list"; + private static final String KEY_PREFERENCE_SYSTEM_LOCALE_SUGGESTED_LIST = + "system_locale_suggested_list"; - @Nullable private SearchView mSearchView = null; - @Nullable private SearchFilter mSearchFilter = null; - @Nullable private Set mLocaleList; - @Nullable private List mLocaleOptions; - @Nullable private List mOriginalLocaleInfos; + @Nullable + private SearchView mSearchView = null; + @Nullable + private SearchFilter mSearchFilter = null; + @Nullable + private Set mLocaleList; + @Nullable + private List mLocaleOptions; + @Nullable + private List mOriginalLocaleInfos; + @Nullable + private SystemLocaleAllListPreferenceController mSystemLocaleAllListPreferenceController; + @Nullable + private SystemLocaleSuggestedListPreferenceController mSuggestedListPreferenceController; private AppBarLayout mAppBarLayout; private RecyclerView mRecyclerView; private Activity mActivity; @@ -138,12 +150,16 @@ public class SystemLocalePickerFragment extends DashboardFragment implements } private void filterSearch(@Nullable String query) { + if (mSystemLocaleAllListPreferenceController == null) { + Log.d(TAG, "filterSearch(), can not get preference."); + return; + } + if (mSearchFilter == null) { mSearchFilter = new SearchFilter(); } - // TODO: b/30358431 - Add preference of system locales. - // mOriginalLocaleInfos = mSystemLocaleAllListPreferenceController.getSupportedLocaleList(); + mOriginalLocaleInfos = mSystemLocaleAllListPreferenceController.getSupportedLocaleList(); // If we haven't load apps list completely, don't filter anything. if (mOriginalLocaleInfos == null) { Log.w(TAG, "Locales haven't loaded completely yet, so nothing can be filtered"); @@ -195,14 +211,19 @@ public class SystemLocalePickerFragment extends DashboardFragment implements @Override protected void publishResults(CharSequence constraint, FilterResults results) { + if (mSystemLocaleAllListPreferenceController == null + || mSuggestedListPreferenceController == null) { + Log.d(TAG, "publishResults(), can not get preference."); + return; + } + mLocaleOptions = (ArrayList) results.values; // Need to scroll to first preference when searching. if (mRecyclerView != null) { mRecyclerView.post(() -> mRecyclerView.scrollToPosition(0)); } - // TODO: b/30358431 - Add preference of system locales. - // mSystemLocaleAllListPreferenceController.onSearchListChanged(mLocaleOptions); - // mSuggestedListPreferenceController.onSearchListChanged(mLocaleOptions); + mSystemLocaleAllListPreferenceController.onSearchListChanged(mLocaleOptions); + mSuggestedListPreferenceController.onSearchListChanged(mLocaleOptions); } // TODO: decide if this is enough, or we want to use a BreakIterator... @@ -271,11 +292,31 @@ public class SystemLocalePickerFragment extends DashboardFragment implements private List buildPreferenceControllers( @NonNull Context context, @Nullable Lifecycle lifecycle) { + LocaleList explicitLocales = null; + if (isDeviceDemoMode()) { + Bundle bundle = getIntent().getExtras(); + explicitLocales = bundle == null + ? null + : bundle.getParcelable(Settings.EXTRA_EXPLICIT_LOCALES, LocaleList.class); + Log.i(TAG, "Has explicit locales : " + explicitLocales); + } + mSuggestedListPreferenceController = + new SystemLocaleSuggestedListPreferenceController(context, + KEY_PREFERENCE_SYSTEM_LOCALE_SUGGESTED_LIST); + mSystemLocaleAllListPreferenceController = new SystemLocaleAllListPreferenceController( + context, KEY_PREFERENCE_SYSTEM_LOCALE_LIST, explicitLocales); final List controllers = new ArrayList<>(); - // TODO: b/30358431 - Add preference of system locales. + controllers.add(mSuggestedListPreferenceController); + controllers.add(mSystemLocaleAllListPreferenceController); + return controllers; } + private boolean isDeviceDemoMode() { + return Settings.Global.getInt( + getContentResolver(), Settings.Global.DEVICE_DEMO_MODE, 0) == 1; + } + public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider(R.xml.system_language_picker); } diff --git a/src/com/android/settings/localepicker/SystemLocaleSuggestedListPreferenceController.java b/src/com/android/settings/localepicker/SystemLocaleSuggestedListPreferenceController.java new file mode 100644 index 00000000000..d082bc09b2e --- /dev/null +++ b/src/com/android/settings/localepicker/SystemLocaleSuggestedListPreferenceController.java @@ -0,0 +1,81 @@ +/** + * Copyright (C) 2024 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.localepicker; + +import android.content.Context; +import android.os.LocaleList; + +import com.android.internal.app.LocaleCollectorBase; +import com.android.internal.app.LocaleStore; +import com.android.internal.app.SystemLocaleCollector; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public class SystemLocaleSuggestedListPreferenceController extends + LocalePickerBaseListPreferenceController { + private static final String KEY_PREFERENCE_CATEGORY_ADD_A_LANGUAGE_SUGGESTED = + "system_language_suggested_category"; + private static final String KEY_PREFERENCE_SYSTEM_LOCALE_SUGGESTED_LIST = + "system_locale_suggested_list"; + + @Nullable private LocaleStore.LocaleInfo mLocaleInfo; + private boolean mIsNumberingSystemMode; + + public SystemLocaleSuggestedListPreferenceController(@NonNull Context context, + @NonNull String preferenceKey) { + super(context, preferenceKey); + } + + public SystemLocaleSuggestedListPreferenceController(@NonNull Context context, + @NonNull String preferenceKey, + @NonNull LocaleStore.LocaleInfo parentLocale, boolean isNumberingSystemMode) { + super(context, preferenceKey); + mLocaleInfo = parentLocale; + mIsNumberingSystemMode = isNumberingSystemMode; + } + + @Override + protected @NonNull String getPreferenceCategoryKey() { + return KEY_PREFERENCE_CATEGORY_ADD_A_LANGUAGE_SUGGESTED; + } + + @Override + public @NonNull String getPreferenceKey() { + return KEY_PREFERENCE_SYSTEM_LOCALE_SUGGESTED_LIST; + } + + @Override + protected LocaleCollectorBase getLocaleCollectorController(Context context) { + return new SystemLocaleCollector(context, getExplicitLocaleList()); + } + + @Override + protected @Nullable LocaleStore.LocaleInfo getParentLocale() { + return mLocaleInfo; + } + + @Override + protected boolean isNumberingMode() { + return mIsNumberingSystemMode; + } + + @Override + protected @Nullable LocaleList getExplicitLocaleList() { + return null; + } +}