Merge "[Settings] Add a flag to control show new System language picker UI or not" into main

This commit is contained in:
Zoey Chen
2025-02-12 22:31:27 -08:00
committed by Android (Google) Code Review
5 changed files with 43 additions and 19 deletions

View File

@@ -44,7 +44,8 @@
android:textAlignment="textStart" android:textAlignment="textStart"
android:text="@string/add_a_language" android:text="@string/add_a_language"
style="@style/Base.Widget.AppCompat.Button.Borderless" style="@style/Base.Widget.AppCompat.Button.Borderless"
android:textAppearance="?android:attr/textAppearanceListItem"/> android:textAppearance="?android:attr/textAppearanceListItem"
android:visibility="gone"/>
</LinearLayout> </LinearLayout>

View File

@@ -31,6 +31,13 @@
<com.android.settingslib.widget.LayoutPreference <com.android.settingslib.widget.LayoutPreference
android:key="languages_picker" android:key="languages_picker"
android:layout="@layout/locale_order_list" /> android:layout="@layout/locale_order_list" />
<Preference
android:key="add_a_language"
android:title="@string/add_a_language"
android:icon="@drawable/ic_add_24dp"
settings:isPreferenceVisible="false"
settings:fragment="com.android.settings.localepicker.SystemLocalePickerFragment"/>
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory <PreferenceCategory

View File

@@ -46,6 +46,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@@ -53,6 +54,7 @@ import com.android.internal.app.LocalePicker;
import com.android.internal.app.LocaleStore; import com.android.internal.app.LocaleStore;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.RestrictedSettingsFragment; import com.android.settings.RestrictedSettingsFragment;
import com.android.settings.flags.Flags;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
@@ -84,6 +86,7 @@ public class LocaleListEditor extends RestrictedSettingsFragment implements View
private static final String INDEX_KEY_ADD_LANGUAGE = "add_language"; private static final String INDEX_KEY_ADD_LANGUAGE = "add_language";
private static final String KEY_LANGUAGES_PICKER = "languages_picker"; private static final String KEY_LANGUAGES_PICKER = "languages_picker";
private static final String KEY_CATEGORY_TERMS_OF_ADDRESS = "key_category_terms_of_address"; private static final String KEY_CATEGORY_TERMS_OF_ADDRESS = "key_category_terms_of_address";
private static final String KEY_ADD_A_LANGUAGE = "add_a_language";
private static final String TAG_DIALOG_CONFIRM_SYSTEM_DEFAULT = "dialog_confirm_system_default"; private static final String TAG_DIALOG_CONFIRM_SYSTEM_DEFAULT = "dialog_confirm_system_default";
private static final String TAG_DIALOG_NOT_AVAILABLE = "dialog_not_available_locale"; private static final String TAG_DIALOG_NOT_AVAILABLE = "dialog_not_available_locale";
private static final String TAG_DIALOG_ADD_SYSTEM_LOCALE = "dialog_add_system_locale"; private static final String TAG_DIALOG_ADD_SYSTEM_LOCALE = "dialog_add_system_locale";
@@ -92,6 +95,7 @@ public class LocaleListEditor extends RestrictedSettingsFragment implements View
private LocaleDragAndDropAdapter mAdapter; private LocaleDragAndDropAdapter mAdapter;
private Menu mMenu; private Menu mMenu;
private View mAddLanguage; private View mAddLanguage;
private Preference mAddLanguagePreference;
private boolean mRemoveMode; private boolean mRemoveMode;
private boolean mShowingRemoveDialog; private boolean mShowingRemoveDialog;
private boolean mLocaleAdditionMode = false; private boolean mLocaleAdditionMode = false;
@@ -282,7 +286,11 @@ public class LocaleListEditor extends RestrictedSettingsFragment implements View
private void setRemoveMode(boolean mRemoveMode) { private void setRemoveMode(boolean mRemoveMode) {
this.mRemoveMode = mRemoveMode; this.mRemoveMode = mRemoveMode;
mAdapter.setRemoveMode(mRemoveMode); mAdapter.setRemoveMode(mRemoveMode);
mAddLanguage.setVisibility(mRemoveMode ? View.INVISIBLE : View.VISIBLE); if (Flags.settingsExpressiveDesignEnabled()) {
mAddLanguagePreference.setVisible(!mRemoveMode);
} else {
mAddLanguage.setVisibility(mRemoveMode ? View.INVISIBLE : View.VISIBLE);
}
updateVisibilityOfRemoveMenu(); updateVisibilityOfRemoveMenu();
} }
@@ -489,19 +497,23 @@ public class LocaleListEditor extends RestrictedSettingsFragment implements View
list.setAdapter(mAdapter); list.setAdapter(mAdapter);
list.setOnTouchListener(this); list.setOnTouchListener(this);
list.requestFocus(); list.requestFocus();
mAddLanguage = layout.findViewById(R.id.add_language); if (Flags.settingsExpressiveDesignEnabled()) {
mAddLanguage.setOnClickListener(new View.OnClickListener() { mAddLanguagePreference = getPreferenceScreen().findPreference(KEY_ADD_A_LANGUAGE);
@Override } else {
public void onClick(View v) { mAddLanguage = layout.findViewById(R.id.add_language);
FeatureFactory.getFeatureFactory().getMetricsFeatureProvider() mAddLanguage.setOnClickListener(new View.OnClickListener() {
.logSettingsTileClick(INDEX_KEY_ADD_LANGUAGE, getMetricsCategory()); @Override
public void onClick(@NonNull View v) {
FeatureFactory.getFeatureFactory().getMetricsFeatureProvider()
.logSettingsTileClick(INDEX_KEY_ADD_LANGUAGE, getMetricsCategory());
final Intent intent = new Intent(getActivity(), final Intent intent = new Intent(getActivity(),
LocalePickerWithRegionActivity.class); LocalePickerWithRegionActivity.class);
intent.putExtras(getActivity().getIntent().getExtras()); intent.putExtras(getActivity().getIntent().getExtras());
startActivityForResult(intent, REQUEST_LOCALE_PICKER); startActivityForResult(intent, REQUEST_LOCALE_PICKER);
} }
}); });
}
} }
@Override @Override

View File

@@ -75,9 +75,6 @@ public abstract class LocalePickerBaseListPreferenceController extends
public LocalePickerBaseListPreferenceController(@NonNull Context context, public LocalePickerBaseListPreferenceController(@NonNull Context context,
@NonNull String preferenceKey) { @NonNull String preferenceKey) {
super(context, preferenceKey); super(context, preferenceKey);
mLocaleList = getLocaleCollectorController(context).getSupportedLocaleList(null,
false, false);
mLocaleOptions = new ArrayList<>(mLocaleList.size());
mPreferences = new ArrayMap<>(); mPreferences = new ArrayMap<>();
mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider(); mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider();
} }
@@ -246,7 +243,7 @@ public abstract class LocalePickerBaseListPreferenceController extends
private void setupLocaleList() { private void setupLocaleList() {
mLocaleList = getLocaleCollectorController(mContext).getSupportedLocaleList( mLocaleList = getLocaleCollectorController(mContext).getSupportedLocaleList(
mParentLocale, false, mIsCountryMode); mParentLocale, false, mIsCountryMode);
mLocaleOptions.clear(); mLocaleOptions = new ArrayList<>(mLocaleList.size());
} }
private List<LocaleStore.LocaleInfo> getSortedLocaleList( private List<LocaleStore.LocaleInfo> getSortedLocaleList(
@@ -262,7 +259,9 @@ public abstract class LocalePickerBaseListPreferenceController extends
boolean shouldShowLocaleEditor = shouldShowLocaleEditor(localeInfo); boolean shouldShowLocaleEditor = shouldShowLocaleEditor(localeInfo);
if (shouldShowLocaleEditor) { if (shouldShowLocaleEditor) {
List<LocaleStore.LocaleInfo> feedItemList = getUserLocaleList(); List<LocaleStore.LocaleInfo> feedItemList = getUserLocaleList();
feedItemList.add(localeInfo); for (LocaleStore.LocaleInfo locale : mLocaleList) {
feedItemList.add(locale);
}
LocaleList localeList = new LocaleList(feedItemList.stream() LocaleList localeList = new LocaleList(feedItemList.stream()
.map(LocaleStore.LocaleInfo::getLocale) .map(LocaleStore.LocaleInfo::getLocale)
.toArray(Locale[]::new)); .toArray(Locale[]::new));

View File

@@ -57,6 +57,7 @@ import android.widget.TextView;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.internal.app.LocaleStore; import com.android.internal.app.LocaleStore;
@@ -145,6 +146,8 @@ public class LocaleListEditorTest {
private ImageView mDragHandle; private ImageView mDragHandle;
@Mock @Mock
private NotificationController mNotificationController; private NotificationController mNotificationController;
@Mock
private Preference mAddLanguagePreference;
@Rule @Rule
public final CheckFlagsRule mCheckFlagsRule = public final CheckFlagsRule mCheckFlagsRule =
@@ -168,6 +171,8 @@ public class LocaleListEditorTest {
context.getSystemService(Context.USER_SERVICE)); context.getSystemService(Context.USER_SERVICE));
ReflectionHelpers.setField(mLocaleListEditor, "mAdapter", mAdapter); ReflectionHelpers.setField(mLocaleListEditor, "mAdapter", mAdapter);
ReflectionHelpers.setField(mLocaleListEditor, "mAddLanguage", mAddLanguage); ReflectionHelpers.setField(mLocaleListEditor, "mAddLanguage", mAddLanguage);
ReflectionHelpers.setField(mLocaleListEditor, "mAddLanguagePreference",
mAddLanguagePreference);
ReflectionHelpers.setField(mLocaleListEditor, "mFragmentManager", mFragmentManager); ReflectionHelpers.setField(mLocaleListEditor, "mFragmentManager", mFragmentManager);
ReflectionHelpers.setField(mLocaleListEditor, "mMetricsFeatureProvider", ReflectionHelpers.setField(mLocaleListEditor, "mMetricsFeatureProvider",
mMetricsFeatureProvider); mMetricsFeatureProvider);