From f70abd26807d3f8e9344f48dd7413eef349c069b Mon Sep 17 00:00:00 2001 From: danielwbhuang Date: Thu, 12 Dec 2024 20:56:13 +0800 Subject: [PATCH] Create language and region settings page 1. Use flag to control the UI migration 2. Create language_and_region_settings.xml for new UI migration. Bug: 379962955 Flag: com.android.settings.flags.regional_preferences_api_enabled Test: check hsv and atest LanguagePreferenceControllerTest Change-Id: If8d2303a2a3061231e69d1a45ad432c061da3545 --- res/values/strings.xml | 2 + res/xml/language_and_region_settings.xml | 127 +++++++++++++++++ res/xml/language_settings.xml | 73 ---------- res/xml/system_dashboard_fragment.xml | 9 ++ ...DefaultVoiceInputPreferenceController.java | 7 +- ...LanguageAndRegionPreferenceController.java | 44 ++++++ .../language/LanguageAndRegionSettings.java | 129 ++++++++++++++++++ .../LanguagePreferenceController.java | 5 + .../settings/language/LanguageSettings.java | 4 + .../MeasurementSystemItemFragment.java | 2 +- .../LanguagePreferenceControllerTest.java | 7 + 11 files changed, 334 insertions(+), 75 deletions(-) create mode 100644 res/xml/language_and_region_settings.xml create mode 100644 src/com/android/settings/language/LanguageAndRegionPreferenceController.java create mode 100644 src/com/android/settings/language/LanguageAndRegionSettings.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 883147a1783..dc81ccf51d9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4514,6 +4514,8 @@ Languages & input Languages + + Language & region Keyboard diff --git a/res/xml/language_and_region_settings.xml b/res/xml/language_and_region_settings.xml new file mode 100644 index 00000000000..5626f2206e8 --- /dev/null +++ b/res/xml/language_and_region_settings.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/xml/language_settings.xml b/res/xml/language_settings.xml index 44a195c51f0..eccbbc178ca 100644 --- a/res/xml/language_settings.xml +++ b/res/xml/language_settings.xml @@ -49,72 +49,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - @@ -136,11 +70,4 @@ android:fragment="com.android.settings.tts.TextToSpeechSettings" settings:searchable="false"/> - - diff --git a/res/xml/system_dashboard_fragment.xml b/res/xml/system_dashboard_fragment.xml index 83cdf64fc00..97650eec1a8 100644 --- a/res/xml/system_dashboard_fragment.xml +++ b/res/xml/system_dashboard_fragment.xml @@ -29,6 +29,15 @@ android:fragment="com.android.settings.language.LanguageSettings" settings:controller="com.android.settings.language.LanguagePreferenceController"/> + + createPreferenceControllers(Context context) { + return buildPreferenceControllers(context, getSettingsLifecycle()); + } + + private static List buildPreferenceControllers( + @NonNull Context context, @Nullable Lifecycle lifecycle) { + final List controllers = new ArrayList<>(); + + final DefaultVoiceInputPreferenceController defaultVoiceInputPreferenceController = + new DefaultVoiceInputPreferenceController(context, lifecycle); + final TtsPreferenceController ttsPreferenceController = + new TtsPreferenceController(context, KEY_TEXT_TO_SPEECH); + final OnDeviceRecognitionPreferenceController onDeviceRecognitionPreferenceController = + new OnDeviceRecognitionPreferenceController(context, KEY_ON_DEVICE_RECOGNITION); + + controllers.add(defaultVoiceInputPreferenceController); + controllers.add(ttsPreferenceController); + List speechCategoryChildren = new ArrayList<>( + List.of(defaultVoiceInputPreferenceController, ttsPreferenceController)); + + if (onDeviceRecognitionPreferenceController.isAvailable()) { + controllers.add(onDeviceRecognitionPreferenceController); + speechCategoryChildren.add(onDeviceRecognitionPreferenceController); + } + + controllers.add(new PreferenceCategoryController(context, KEY_SPEECH_CATEGORY) + .setChildren(speechCategoryChildren)); + + return controllers; + } + + public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider(R.xml.language_and_region_settings) { + + @Override + @NonNull + public List createPreferenceControllers( + @NonNull Context context) { + return buildPreferenceControllers(context, null); + } + + @Override + protected boolean isPageSearchEnabled(Context context) { + if (Flags.regionalPreferencesApiEnabled()) { + return true; + } + return false; + } + }; +} diff --git a/src/com/android/settings/language/LanguagePreferenceController.java b/src/com/android/settings/language/LanguagePreferenceController.java index 84624a2bf30..90aaec42d44 100644 --- a/src/com/android/settings/language/LanguagePreferenceController.java +++ b/src/com/android/settings/language/LanguagePreferenceController.java @@ -22,6 +22,7 @@ import android.content.pm.PackageManager; import com.android.settings.Settings; import com.android.settings.core.BasePreferenceController; +import com.android.settings.flags.Flags; /** * This is a display controller for new language activity entry. @@ -34,6 +35,10 @@ public class LanguagePreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { + if (Flags.regionalPreferencesApiEnabled()) { + setActivityEnabled(mContext, Settings.LanguageSettingsActivity.class, false); + return CONDITIONALLY_UNAVAILABLE; + } setActivityEnabled(mContext, Settings.LanguageSettingsActivity.class, true); return AVAILABLE; } diff --git a/src/com/android/settings/language/LanguageSettings.java b/src/com/android/settings/language/LanguageSettings.java index d992ff27bc9..58df05307f0 100644 --- a/src/com/android/settings/language/LanguageSettings.java +++ b/src/com/android/settings/language/LanguageSettings.java @@ -25,6 +25,7 @@ import androidx.annotation.Nullable; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.flags.Flags; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.widget.PreferenceCategoryController; import com.android.settingslib.core.AbstractPreferenceController; @@ -116,6 +117,9 @@ public class LanguageSettings extends DashboardFragment { } @Override protected boolean isPageSearchEnabled(Context context) { + if (Flags.regionalPreferencesApiEnabled()) { + return false; + } return true; } }; diff --git a/src/com/android/settings/regionalpreferences/MeasurementSystemItemFragment.java b/src/com/android/settings/regionalpreferences/MeasurementSystemItemFragment.java index 9f15cf4ab36..231a34e6afd 100644 --- a/src/com/android/settings/regionalpreferences/MeasurementSystemItemFragment.java +++ b/src/com/android/settings/regionalpreferences/MeasurementSystemItemFragment.java @@ -63,7 +63,7 @@ public class MeasurementSystemItemFragment extends DashboardFragment { new BaseSearchIndexProvider(R.xml.regional_preferences_measurement_system) { @Override protected boolean isPageSearchEnabled(Context context) { - if (Flags.regionalPreferencesApiEnabled()) { + if (!Flags.regionalPreferencesApiEnabled()) { return false; } return true; diff --git a/tests/unit/src/com/android/settings/language/LanguagePreferenceControllerTest.java b/tests/unit/src/com/android/settings/language/LanguagePreferenceControllerTest.java index 656fa272ce2..2209355e966 100644 --- a/tests/unit/src/com/android/settings/language/LanguagePreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/language/LanguagePreferenceControllerTest.java @@ -21,18 +21,24 @@ import static org.junit.Assert.assertTrue; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; +import android.platform.test.annotations.DisableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import androidx.test.core.app.ApplicationProvider; import com.android.settings.Settings; +import com.android.settings.flags.Flags; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; public class LanguagePreferenceControllerTest { private Context mContext; private LanguagePreferenceController mController; + @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); + @Before public void setup() { mContext = ApplicationProvider.getApplicationContext(); @@ -40,6 +46,7 @@ public class LanguagePreferenceControllerTest { } @Test + @DisableFlags(Flags.FLAG_REGIONAL_PREFERENCES_API_ENABLED) public void getAvailabilityStatus_featureFlagOff_LanguageSettingsActivitydisabled() { mController.getAvailabilityStatus();