Loading src/com/android/settings/localepicker/LocalePickerBaseListPreferenceController.java +51 −17 Original line number Diff line number Diff line Loading @@ -16,10 +16,10 @@ 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.app.Activity; import android.app.settings.SettingsEnums; import android.content.Context; import android.os.Bundle; import android.os.LocaleList; Loading @@ -28,17 +28,21 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentManager; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; import com.android.internal.app.LocaleCollectorBase; import com.android.internal.app.LocaleHelper; import com.android.internal.app.LocalePicker; 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.settings.overlay.FeatureFactory; import com.android.settingslib.core.instrumentation.Instrumentable; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.ArrayList; import java.util.Collections; Loading @@ -52,6 +56,7 @@ import java.util.stream.Collectors; public abstract class LocalePickerBaseListPreferenceController extends BasePreferenceController implements LocaleListSearchCallback { private static final String TAG = "LocalePickerBaseListPreference"; private static final String PARENT_FRAGMENT_NAME = "localeListEditor"; private static final String KEY_SUGGESTED = "suggested"; private static final String KEY_SUPPORTED = "supported"; Loading @@ -60,10 +65,12 @@ public abstract class LocalePickerBaseListPreferenceController extends private List<LocaleStore.LocaleInfo> mLocaleOptions; private Map<String, Preference> mPreferences; private String mPackageName; private FragmentManager mFragmentManager; private boolean mIsCountryMode; @Nullable private LocaleStore.LocaleInfo mParentLocale; private boolean mIsSuggestedCategory; private MetricsFeatureProvider mMetricsFeatureProvider; public LocalePickerBaseListPreferenceController(@NonNull Context context, @NonNull String preferenceKey) { Loading @@ -72,6 +79,7 @@ public abstract class LocalePickerBaseListPreferenceController extends false, false); mLocaleOptions = new ArrayList<>(mLocaleList.size()); mPreferences = new ArrayMap<>(); mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider(); } @Override Loading Loading @@ -252,24 +260,41 @@ public abstract class LocalePickerBaseListPreferenceController extends 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(); if (shouldShowLocaleEditor) { List<LocaleStore.LocaleInfo> feedItemList = getUserLocaleList(); feedItemList.add(localeInfo); LocaleList localeList = new LocaleList(feedItemList.stream() .map(LocaleStore.LocaleInfo::getLocale) .toArray(Locale[]::new)); LocaleList.setDefault(localeList); LocalePicker.updateLocales(localeList); mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ADD_LANGUAGE); returnToParentFrame(); } else { final Bundle extra = new Bundle(); extra.putSerializable(extraKey, localeInfo); extra.putSerializable(RegionAndNumberingSystemPickerFragment.EXTRA_TARGET_LOCALE, localeInfo); extra.putBoolean(EXTRA_IS_NUMBERING_SYSTEM, localeInfo.hasNumberingSystems()); if (shouldShowLocaleEditor) { extra.putBoolean(EXTRA_RESULT_LOCALE, true); } new SubSettingLauncher(mContext) .setDestination(fragmentName) .setDestination(RegionAndNumberingSystemPickerFragment.class.getCanonicalName()) .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN) .setArguments(extra) .launch(); } ((Activity) mContext).finish(); } public void setFragmentManager(@NonNull FragmentManager fragmentManager) { mFragmentManager = fragmentManager; } private void returnToParentFrame() { if (mFragmentManager != null) { mFragmentManager.popBackStack(PARENT_FRAGMENT_NAME, FragmentManager.POP_BACK_STACK_INCLUSIVE); } } private boolean shouldShowLocaleEditor(LocaleStore.LocaleInfo localeInfo) { boolean isSystemLocale = localeInfo.isSystemLocale(); Loading @@ -287,4 +312,13 @@ public abstract class LocalePickerBaseListPreferenceController extends || (isRegionLocale && !mayHaveDifferentNumberingSystem) || isNumberingMode(); } private List<LocaleStore.LocaleInfo> getUserLocaleList() { final List<LocaleStore.LocaleInfo> result = new ArrayList<>(); final LocaleList localeList = LocalePicker.getLocales(); for (int i = 0; i < localeList.size(); i++) { result.add(LocaleStore.getLocaleInfo(localeList.get(i))); } return result; } } src/com/android/settings/localepicker/SystemLocalePickerFragment.java +4 −2 Original line number Diff line number Diff line Loading @@ -295,11 +295,11 @@ public class SystemLocalePickerFragment extends DashboardFragment implements @Override protected List<AbstractPreferenceController> createPreferenceControllers(Context context) { return buildPreferenceControllers(context, getSettingsLifecycle()); return buildPreferenceControllers(context); } private List<AbstractPreferenceController> buildPreferenceControllers( @NonNull Context context, @Nullable Lifecycle lifecycle) { @NonNull Context context) { LocaleList explicitLocales = null; if (isDeviceDemoMode()) { Bundle bundle = getIntent().getExtras(); Loading @@ -314,6 +314,8 @@ public class SystemLocalePickerFragment extends DashboardFragment implements mSystemLocaleAllListPreferenceController = new SystemLocaleAllListPreferenceController( context, KEY_PREFERENCE_SYSTEM_LOCALE_LIST, explicitLocales); final List<AbstractPreferenceController> controllers = new ArrayList<>(); mSuggestedListPreferenceController.setFragmentManager(getFragmentManager()); mSystemLocaleAllListPreferenceController.setFragmentManager(getFragmentManager()); controllers.add(mSuggestedListPreferenceController); controllers.add(mSystemLocaleAllListPreferenceController); Loading Loading
src/com/android/settings/localepicker/LocalePickerBaseListPreferenceController.java +51 −17 Original line number Diff line number Diff line Loading @@ -16,10 +16,10 @@ 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.app.Activity; import android.app.settings.SettingsEnums; import android.content.Context; import android.os.Bundle; import android.os.LocaleList; Loading @@ -28,17 +28,21 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentManager; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; import com.android.internal.app.LocaleCollectorBase; import com.android.internal.app.LocaleHelper; import com.android.internal.app.LocalePicker; 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.settings.overlay.FeatureFactory; import com.android.settingslib.core.instrumentation.Instrumentable; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.ArrayList; import java.util.Collections; Loading @@ -52,6 +56,7 @@ import java.util.stream.Collectors; public abstract class LocalePickerBaseListPreferenceController extends BasePreferenceController implements LocaleListSearchCallback { private static final String TAG = "LocalePickerBaseListPreference"; private static final String PARENT_FRAGMENT_NAME = "localeListEditor"; private static final String KEY_SUGGESTED = "suggested"; private static final String KEY_SUPPORTED = "supported"; Loading @@ -60,10 +65,12 @@ public abstract class LocalePickerBaseListPreferenceController extends private List<LocaleStore.LocaleInfo> mLocaleOptions; private Map<String, Preference> mPreferences; private String mPackageName; private FragmentManager mFragmentManager; private boolean mIsCountryMode; @Nullable private LocaleStore.LocaleInfo mParentLocale; private boolean mIsSuggestedCategory; private MetricsFeatureProvider mMetricsFeatureProvider; public LocalePickerBaseListPreferenceController(@NonNull Context context, @NonNull String preferenceKey) { Loading @@ -72,6 +79,7 @@ public abstract class LocalePickerBaseListPreferenceController extends false, false); mLocaleOptions = new ArrayList<>(mLocaleList.size()); mPreferences = new ArrayMap<>(); mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider(); } @Override Loading Loading @@ -252,24 +260,41 @@ public abstract class LocalePickerBaseListPreferenceController extends 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(); if (shouldShowLocaleEditor) { List<LocaleStore.LocaleInfo> feedItemList = getUserLocaleList(); feedItemList.add(localeInfo); LocaleList localeList = new LocaleList(feedItemList.stream() .map(LocaleStore.LocaleInfo::getLocale) .toArray(Locale[]::new)); LocaleList.setDefault(localeList); LocalePicker.updateLocales(localeList); mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ADD_LANGUAGE); returnToParentFrame(); } else { final Bundle extra = new Bundle(); extra.putSerializable(extraKey, localeInfo); extra.putSerializable(RegionAndNumberingSystemPickerFragment.EXTRA_TARGET_LOCALE, localeInfo); extra.putBoolean(EXTRA_IS_NUMBERING_SYSTEM, localeInfo.hasNumberingSystems()); if (shouldShowLocaleEditor) { extra.putBoolean(EXTRA_RESULT_LOCALE, true); } new SubSettingLauncher(mContext) .setDestination(fragmentName) .setDestination(RegionAndNumberingSystemPickerFragment.class.getCanonicalName()) .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN) .setArguments(extra) .launch(); } ((Activity) mContext).finish(); } public void setFragmentManager(@NonNull FragmentManager fragmentManager) { mFragmentManager = fragmentManager; } private void returnToParentFrame() { if (mFragmentManager != null) { mFragmentManager.popBackStack(PARENT_FRAGMENT_NAME, FragmentManager.POP_BACK_STACK_INCLUSIVE); } } private boolean shouldShowLocaleEditor(LocaleStore.LocaleInfo localeInfo) { boolean isSystemLocale = localeInfo.isSystemLocale(); Loading @@ -287,4 +312,13 @@ public abstract class LocalePickerBaseListPreferenceController extends || (isRegionLocale && !mayHaveDifferentNumberingSystem) || isNumberingMode(); } private List<LocaleStore.LocaleInfo> getUserLocaleList() { final List<LocaleStore.LocaleInfo> result = new ArrayList<>(); final LocaleList localeList = LocalePicker.getLocales(); for (int i = 0; i < localeList.size(); i++) { result.add(LocaleStore.getLocaleInfo(localeList.get(i))); } return result; } }
src/com/android/settings/localepicker/SystemLocalePickerFragment.java +4 −2 Original line number Diff line number Diff line Loading @@ -295,11 +295,11 @@ public class SystemLocalePickerFragment extends DashboardFragment implements @Override protected List<AbstractPreferenceController> createPreferenceControllers(Context context) { return buildPreferenceControllers(context, getSettingsLifecycle()); return buildPreferenceControllers(context); } private List<AbstractPreferenceController> buildPreferenceControllers( @NonNull Context context, @Nullable Lifecycle lifecycle) { @NonNull Context context) { LocaleList explicitLocales = null; if (isDeviceDemoMode()) { Bundle bundle = getIntent().getExtras(); Loading @@ -314,6 +314,8 @@ public class SystemLocalePickerFragment extends DashboardFragment implements mSystemLocaleAllListPreferenceController = new SystemLocaleAllListPreferenceController( context, KEY_PREFERENCE_SYSTEM_LOCALE_LIST, explicitLocales); final List<AbstractPreferenceController> controllers = new ArrayList<>(); mSuggestedListPreferenceController.setFragmentManager(getFragmentManager()); mSystemLocaleAllListPreferenceController.setFragmentManager(getFragmentManager()); controllers.add(mSuggestedListPreferenceController); controllers.add(mSystemLocaleAllListPreferenceController); Loading