[Update] Expose the regional preferences pages
1. Link ACTION_MEASUREMENT_SYSTEM_SETTINGS to MeasurementSystemItemFragment
2. Link ACTION_NUMBERING_SYSTEM_SETTINGS to NumberingPreferencesFragment
3. Link ACTION_REGION_SETTINGS to RegionPickerFragment
4. Deprecate NumberingPreferencesFragment
Bug: 381038747
Flag: android.provider.system_regional_preferences_api_enabled
Test: use test app to try intent ACTION, atest
Change-Id: Id76e589ce25ae5dfc3443948300c6c21ab30672c
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index aa52a2a..e373ccc 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -100,9 +100,12 @@
public static class LocalePickerActivity extends SettingsActivity { /* empty */ }
public static class LanguageSettingsActivity extends SettingsActivity { /* empty */ }
/** Activity for the regional preferences settings. */
+ public static class RegionSettingsActivity extends SettingsActivity { /* empty */ }
public static class RegionalPreferencesActivity extends SettingsActivity { /* empty */ }
public static class TemperatureUnitSettingsActivity extends SettingsActivity { /* empty */ }
public static class FirstDayOfWeekSettingsActivity extends SettingsActivity { /* empty */ }
+ public static class MeasurementSystemSettingsActivity extends SettingsActivity { /* empty */ }
+ public static class NumberingSystemSettingsActivity extends SettingsActivity { /* empty */ }
public static class KeyboardSettingsActivity extends SettingsActivity { /* empty */ }
/** Activity for the navigation mode settings. */
public static class NavigationModeSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index eeecdd5..bc2ab68 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -183,6 +183,9 @@
import com.android.settings.privatespace.delete.PrivateSpaceDeletionProgressFragment;
import com.android.settings.privatespace.onelock.PrivateSpaceBiometricSettings;
import com.android.settings.regionalpreferences.FirstDayOfWeekItemFragment;
+import com.android.settings.regionalpreferences.MeasurementSystemItemFragment;
+import com.android.settings.regionalpreferences.NumberingSystemLocaleListFragment;
+import com.android.settings.regionalpreferences.RegionPickerFragment;
import com.android.settings.regionalpreferences.RegionalPreferencesEntriesFragment;
import com.android.settings.regionalpreferences.TemperatureUnitFragment;
import com.android.settings.safetycenter.MoreSecurityPrivacyFragment;
@@ -396,9 +399,12 @@
ColorAndMotionFragment.class.getName(),
ColorContrastFragment.class.getName(),
LongBackgroundTasksDetails.class.getName(),
+ RegionPickerFragment.class.getName(),
RegionalPreferencesEntriesFragment.class.getName(),
TemperatureUnitFragment.class.getName(),
FirstDayOfWeekItemFragment.class.getName(),
+ MeasurementSystemItemFragment.class.getName(),
+ NumberingSystemLocaleListFragment.class.getName(),
BatteryInfoFragment.class.getName(),
UserAspectRatioDetails.class.getName(),
ScreenTimeoutSettings.class.getName(),
diff --git a/src/com/android/settings/regionalpreferences/NumberingPreferencesFragment.java b/src/com/android/settings/regionalpreferences/NumberingPreferencesFragment.java
index 1c5015f..8a9840f 100644
--- a/src/com/android/settings/regionalpreferences/NumberingPreferencesFragment.java
+++ b/src/com/android/settings/regionalpreferences/NumberingPreferencesFragment.java
@@ -32,8 +32,14 @@
import java.util.List;
import java.util.Locale;
-/** Provides options of numbering system to each language. */
-public class NumberingPreferencesFragment extends DashboardFragment {
+/**
+ * Provides options of numbering system to each language.
+ *
+ * @deprecated Use {@link NumberingSystemLocaleListFragment} instead.
+ */
+@Deprecated
+public class NumberingPreferencesFragment extends DashboardFragment {
+
/** Initializes variables. */
@VisibleForTesting
String initTitle() {
diff --git a/src/com/android/settings/regionalpreferences/NumberingSystemFormatSelectionFragment.java b/src/com/android/settings/regionalpreferences/NumberingSystemFormatSelectionFragment.java
new file mode 100644
index 0000000..bbe14b6
--- /dev/null
+++ b/src/com/android/settings/regionalpreferences/NumberingSystemFormatSelectionFragment.java
@@ -0,0 +1,82 @@
+/*
+ * 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.regionalpreferences;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.os.Bundle;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import com.android.internal.app.LocaleHelper;
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+/** Provides options of numbering system to each language. */
+public class NumberingSystemFormatSelectionFragment extends DashboardFragment {
+
+ @Override
+ public void onCreate(@NonNull Bundle icicle) {
+ super.onCreate(icicle);
+ getActivity().setTitle(initTitle());
+ }
+
+ /**
+ * Get a list of {@link AbstractPreferenceController} for this fragment.
+ */
+ @Override
+ protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
+ NumberingSystemItemController controller =
+ new NumberingSystemItemController(context, getArguments());
+ controller.setParentFragment(this);
+ List<AbstractPreferenceController> listControllers = new ArrayList<>();
+ listControllers.add(controller);
+ return listControllers;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.regional_preference_numbering_system_page;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return NumberingSystemFormatSelectionFragment.class.getSimpleName();
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.NUMBERING_SYSTEM_NUMBER_FORMAT_SELECTION_PREFERENCE;
+ }
+
+ private String initTitle() {
+ String selectedLanguage = getArguments().getString(
+ NumberingSystemItemController.KEY_SELECTED_LANGUAGE, "");
+ if (selectedLanguage.isEmpty()) {
+ Log.w(getLogTag(), "No selected language.");
+ return "";
+ }
+ Locale locale = Locale.forLanguageTag(selectedLanguage);
+ return LocaleHelper.getDisplayName(locale.stripExtensions(), locale, true);
+ }
+}
diff --git a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
index 9f0c404..fe0a088 100644
--- a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
+++ b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
@@ -34,6 +34,7 @@
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.flags.Flags;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
@@ -158,10 +159,15 @@
extra.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
ARG_VALUE_NUMBERING_SYSTEM_SELECT);
extra.putString(KEY_SELECTED_LANGUAGE, selectedLanguage);
+
+ String destinationFragment = NumberingPreferencesFragment.class.getName();
+ if (Flags.regionalPreferencesApiEnabled()) {
+ destinationFragment = NumberingSystemFormatSelectionFragment.class.getName();
+ }
new SubSettingLauncher(preference.getContext())
- .setDestination(NumberingPreferencesFragment.class.getName())
+ .setDestination(destinationFragment)
.setSourceMetricsCategory(
- SettingsEnums.NUMBERING_SYSTEM_LANGUAGE_SELECTION_PREFERENCE)
+ SettingsEnums.NUMBERING_SYSTEM_LANGUAGE_SELECTION_PREFERENCE)
.setArguments(extra)
.launch();
}
diff --git a/src/com/android/settings/regionalpreferences/NumberingSystemLocaleListFragment.java b/src/com/android/settings/regionalpreferences/NumberingSystemLocaleListFragment.java
new file mode 100644
index 0000000..6a39b23
--- /dev/null
+++ b/src/com/android/settings/regionalpreferences/NumberingSystemLocaleListFragment.java
@@ -0,0 +1,107 @@
+/*
+ * 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.regionalpreferences;
+
+import static android.provider.Settings.ACTION_NUMBERING_SYSTEM_SETTINGS;
+
+import android.app.Activity;
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.os.Bundle;
+import android.os.LocaleList;
+
+import androidx.annotation.NonNull;
+
+import com.android.internal.app.LocaleStore;
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+/** Provides locale list for numbering system settings. */
+public class NumberingSystemLocaleListFragment extends DashboardFragment {
+
+ @Override
+ public void onCreate(@NonNull Bundle icicle) {
+ super.onCreate(icicle);
+
+ if (isEmptyNumberingSystemLocale()) {
+ getActivity().setResult(Activity.RESULT_CANCELED);
+ finish();
+ }
+
+ if (getIntent().getAction().equals(ACTION_NUMBERING_SYSTEM_SETTINGS)) {
+ // TODO: Generically log action.
+ }
+
+ getActivity().setTitle(R.string.numbers_preferences_title);
+ getActivity().setResult(Activity.RESULT_OK);
+ }
+
+ /**
+ * Get a list of {@link AbstractPreferenceController} for this fragment.
+ */
+ @Override
+ protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
+ NumberingSystemItemController controller =
+ new NumberingSystemItemController(context, getExtraData());
+ controller.setParentFragment(this);
+ List<AbstractPreferenceController> listControllers = new ArrayList<>();
+ listControllers.add(controller);
+ return listControllers;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.regional_preference_numbering_system_page;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return NumberingSystemLocaleListFragment.class.getSimpleName();
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.NUMBERING_SYSTEM_LANGUAGE_SELECTION_PREFERENCE;
+ }
+
+ private static boolean isEmptyNumberingSystemLocale() {
+ LocaleList localeList = LocaleList.getDefault();
+ Set<Locale> localesHasNumberingSystems = new HashSet<>();
+ for (int i = 0; i < localeList.size(); i++) {
+ Locale locale = localeList.get(i);
+ LocaleStore.LocaleInfo localeInfo = LocaleStore.getLocaleInfo(locale);
+ if (localeInfo.hasNumberingSystems()) {
+ localesHasNumberingSystems.add(locale);
+ }
+ }
+ return localesHasNumberingSystems.isEmpty();
+ }
+
+ private static Bundle getExtraData() {
+ Bundle extra = new Bundle();
+ extra.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
+ NumberingSystemItemController.ARG_VALUE_LANGUAGE_SELECT);
+ return extra;
+ }
+}