[Regional Pref] Remove Calendar controller and related Fragement

Bug: 275003276
Bug: 264483854
Change-Id: I2431ea55a7a69db8a4f661a125a6ca218ce41a94
This commit is contained in:
Zoey Chen
2023-04-20 16:06:26 +00:00
parent 4aa05e58bb
commit 10fa1b8aec
10 changed files with 7 additions and 439 deletions

View File

@@ -1389,20 +1389,6 @@
<item>sat</item>
</string-array>
<!-- A list for all supported calendar types. [DO NOT TRANSLATE] -->
<string-array name="calendar_type">
<item>default</item>
<item>chinese</item>
<item>dangi</item>
<item>hebrew</item>
<item>indian</item>
<item>islamic</item>
<item>islamic-rgsa</item>
<item>islamic-tbla</item>
<item>islamic-umalqura</item>
<item>persian</item>
</string-array>
<!-- Screen flash notification color when activating -->
<array name="screen_flash_notification_preset_opacity_colors">
<item>@color/screen_flash_preset_opacity_color_01</item>

View File

@@ -401,8 +401,6 @@
<string name="regional_preferences_option_page_sub_title">Apps will use your regional preferences where possible.</string>
<!-- The title of menu entry of Temperature unit preference. [CHAR LIMIT=50] -->
<string name="temperature_preferences_title">Temperature</string>
<!-- The title of the menu entry of Calendar type preference. [CHAR LIMIT=50] -->
<string name="calendar_preferences_title">Calendar</string>
<!-- The title of the menu entry of First day of week preference. [CHAR LIMIT=50] -->
<string name="first_day_of_week_preferences_title">First day of week</string>
<!-- The title of the menu entry of Numbers system preference. [CHAR LIMIT=50] -->

View File

@@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2023 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.
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<com.android.settingslib.widget.TopIntroPreference
android:key="key_option_page_sub_title"
android:title="@string/regional_preferences_option_page_sub_title"
android:persistent="false" />
</PreferenceScreen>

View File

@@ -33,17 +33,6 @@
android:value="mu" />
</Preference>
<Preference
android:key="key_calendar_type"
android:title="@string/calendar_preferences_title"
android:summary="@string/default_string_of_regional_preference"
settings:controller="com.android.settings.regionalpreferences.CalendarTypeController"
settings:fragment="com.android.settings.regionalpreferences.RegionalPreferencesFragment">
<extra
android:name="arg_key_regional_preference"
android:value="ca" />
</Preference>
<Preference
android:key="key_first_day_of_week"
android:title="@string/first_day_of_week_preferences_title"

View File

@@ -1,71 +0,0 @@
/*
* Copyright (C) 2022 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.content.Context;
import android.os.SystemProperties;
import android.provider.Settings;
import com.android.settings.core.BasePreferenceController;
import java.util.Locale;
/**
* A controller for the entry of Calendar types' page
*/
public class CalendarTypeController extends BasePreferenceController {
private static final String CALENDAR_FEATURE_PROPERTY =
"i18n-feature-locale-preference-calendar";
private static final String TAG = CalendarTypeController.class.getSimpleName();
public CalendarTypeController(Context context, String preferenceKey) {
super(context, preferenceKey);
}
/**
* @return {@link AvailabilityStatus} for the Setting. This status is used to determine if the
* Setting should be shown or disabled in Settings. Further, it can be used to produce
* appropriate error / warning Slice in the case of unavailability.
* </p>
* The status is used for the convenience methods: {@link #isAvailable()}, {@link
* #isSupported()}
* </p>
* The inherited class doesn't need to check work profile if android:forWork="true" is set in
* preference xml.
*/
@Override
public int getAvailabilityStatus() {
return SystemProperties.getBoolean(CALENDAR_FEATURE_PROPERTY, false)
? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
public CharSequence getSummary() {
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
String result = "";
if (record != null) {
result = LocalePreferences.getCalendarType(Locale.forLanguageTag(record), false);
}
if (result.isEmpty()) {
result = LocalePreferences.getCalendarType(false);
}
String inputStr = result.isEmpty() ? RegionalPreferencesDataUtils.DEFAULT_VALUE : result;
return RegionalPreferencesDataUtils.calendarConverter(mContext, inputStr);
}
}

View File

@@ -0,0 +1,7 @@
allenwtsu@google.com
calvinpan@google.com
danielwbhuang@google.com
goldmanj@google.com
joshhou@google.com
zoeychen@google.com
tomhsu@google.com

View File

@@ -29,7 +29,6 @@ import java.util.Locale;
/** Provides utils for regional preferences. */
public class RegionalPreferencesDataUtils {
static final String DISPLAY_KEYWORD_OF_CALENDAR = "calendar";
static final String DEFAULT_VALUE = "default";
static String getDefaultUnicodeExtensionData(Context contxt, String type) {
@@ -86,18 +85,6 @@ public class RegionalPreferencesDataUtils {
return addUnicodeKeywordToLocale(Locale.forLanguageTag(languageTag), type, value);
}
static String calendarConverter(Context context, String calendarType) {
if (calendarType.equals(DEFAULT_VALUE)) {
return context.getString(R.string.default_string_of_regional_preference);
}
Locale locale = new Locale.Builder()
.setUnicodeLocaleKeyword(ExtensionTypes.CALENDAR, calendarType)
.build();
return ULocale.getDisplayKeywordValue(locale.toLanguageTag(), DISPLAY_KEYWORD_OF_CALENDAR,
ULocale.forLocale(Locale.getDefault(Locale.Category.FORMAT)));
}
static String temperatureUnitsConverter(Context context, String unit) {
switch (unit) {
case LocalePreferences.TemperatureUnit.CELSIUS:

View File

@@ -1,129 +0,0 @@
/*
* Copyright (C) 2023 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.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.widget.TickButtonPreference;
/** A fragment to include each kind of regional preferences. */
public class RegionalPreferencesFragment extends SettingsPreferenceFragment {
private static final String TAG = RegionalPreferencesFragment.class.getSimpleName();
private PreferenceScreen mPreferenceScreen;
private String mTitle = "";
@VisibleForTesting
String mType = "";
private String[] initializeUIdata(String type) {
switch(type) {
case ExtensionTypes.CALENDAR:
mTitle = getPrefContext().getString(R.string.calendar_preferences_title);
return getPrefContext().getResources().getStringArray(R.array.calendar_type);
default:
mTitle = getPrefContext().getString(R.string.regional_preferences_title);
return new String[0];
}
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
// The first preference is TopIntroPreference
for (int i = 1; i < mPreferenceScreen.getPreferenceCount(); i++) {
TickButtonPreference pref = (TickButtonPreference) mPreferenceScreen.getPreference(i);
Log.i(TAG, "[onPreferenceClick] key is " + pref.getKey());
if (pref.getKey().equals(preference.getKey())) {
pref.setSelected(true);
RegionalPreferencesDataUtils.savePreference(
getPrefContext(),
mType,
preference.getKey().equals(
RegionalPreferencesDataUtils.DEFAULT_VALUE)
? null : preference.getKey());
continue;
}
pref.setSelected(false);
}
return true;
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Bundle bundle = getArguments();
String type = bundle.getString(
RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE, "");
if (type.isEmpty()) {
Log.w(TAG, "There is no type name.");
finish();
}
mType = type;
addPreferencesFromResource(R.xml.regional_preference_content_page);
mPreferenceScreen = getPreferenceScreen();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String[] uiData = initializeUIdata(mType);
for (String item : uiData) {
TickButtonPreference pref = new TickButtonPreference(getPrefContext());
if (mType.equals(ExtensionTypes.CALENDAR)) {
pref.setTitle(RegionalPreferencesDataUtils.calendarConverter(
getPrefContext(), item));
} else {
Log.d(TAG, "Finish this page due to no suitable type.");
finish();
}
String value = RegionalPreferencesDataUtils.getDefaultUnicodeExtensionData(
getPrefContext(), mType);
pref.setKey(item);
pref.setSelected(!value.isEmpty() && item.equals(value));
mPreferenceScreen.addPreference(pref);
}
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onStart() {
super.onStart();
getActivity().setTitle(mTitle);
}
@Override
public int getMetricsCategory() {
switch (mType) {
case ExtensionTypes.CALENDAR:
return SettingsEnums.CALENDAR_PREFERENCE;
default:
return SettingsEnums.CALENDAR_PREFERENCE;
}
}
}

View File

@@ -1,107 +0,0 @@
/*
* Copyright (C) 2022 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 org.junit.Assert.assertEquals;
import android.content.Context;
import android.icu.util.ULocale;
import android.provider.Settings;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.testutils.ResourcesUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.Locale;
public class CalendarTypeControllerTest {
private Context mApplicationContext;
private CalendarTypeController mController;
private String mCacheProviderContent = "";
private Locale mCacheLocale;
@Before
public void setUp() throws Exception {
mApplicationContext = ApplicationProvider.getApplicationContext();
mController = new CalendarTypeController(mApplicationContext, "key");
mCacheProviderContent = Settings.System.getString(
mApplicationContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
mCacheLocale = Locale.getDefault(Locale.Category.FORMAT);
}
@After
public void tearDown() throws Exception {
RegionalPreferenceTestUtils.setSettingsProviderContent(
mApplicationContext, mCacheProviderContent);
Locale.setDefault(mCacheLocale);
}
@Test
public void getSummary_hasProviderValue_resultIsChineseCalendar() {
RegionalPreferenceTestUtils.setSettingsProviderContent(
mApplicationContext, "und-u-ca-chinese");
String summary = mController.getSummary().toString();
assertEquals(getDisplayKeywordValue(LocalePreferences.CalendarType.CHINESE), summary);
}
@Test
public void getSummary_hasProviderValue_resultIsDangiCalendar() {
RegionalPreferenceTestUtils.setSettingsProviderContent(
mApplicationContext, "und-u-ca-dangi");
String summary = mController.getSummary().toString();
assertEquals(getDisplayKeywordValue(LocalePreferences.CalendarType.DANGI), summary);
}
@Test
public void getSummary_noProviderValueButHasDefaultLocaleWithSubtag_resultIsChineseCalendar() {
RegionalPreferenceTestUtils.setSettingsProviderContent(mApplicationContext, "");
Locale.setDefault(Locale.forLanguageTag("en-US-u-ca-chinese"));
String summary = mController.getSummary().toString();
assertEquals(getDisplayKeywordValue(LocalePreferences.CalendarType.CHINESE), summary);
}
@Test
public void getSummary_noProviderValueAndDefaultLocaleWithoutSubtag_resultIsEmpty() {
RegionalPreferenceTestUtils.setSettingsProviderContent(mApplicationContext, "");
Locale.setDefault(Locale.forLanguageTag("en-US"));
String summary = mController.getSummary().toString();
assertEquals(ResourcesUtils.getResourcesString(
mApplicationContext, "default_string_of_regional_preference"), summary);
}
private static String getDisplayKeywordValue(String value) {
String languageTag = new Locale.Builder()
.setUnicodeLocaleKeyword(
ExtensionTypes.CALENDAR, value).build().toLanguageTag();
return ULocale.getDisplayKeywordValue(
languageTag,
RegionalPreferencesDataUtils.DISPLAY_KEYWORD_OF_CALENDAR,
ULocale.forLocale(Locale.getDefault(Locale.Category.FORMAT)));
}
}

View File

@@ -1,70 +0,0 @@
/*
* Copyright (C) 2023 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 org.junit.Assert.assertEquals;
import android.app.settings.SettingsEnums;
import android.os.Looper;
import androidx.test.annotation.UiThreadTest;
import org.junit.Before;
import org.junit.Test;
public class RegionalPreferencesFragmentTest {
private RegionalPreferencesFragment mFragment;
@Before
@UiThreadTest
public void setUp() throws Exception {
if (Looper.myLooper() == null) {
Looper.prepare();
}
mFragment = new RegionalPreferencesFragment();
}
@Test
@UiThreadTest
public void getMetricsCategory_typeIsCa_resultIsCalendarPreference() {
mFragment.mType = ExtensionTypes.CALENDAR;
int result = mFragment.getMetricsCategory();
assertEquals(SettingsEnums.CALENDAR_PREFERENCE, result);
}
@Test
@UiThreadTest
public void getMetricsCategory_typeIsFw_resultIsFirstDayOfWeekPreference() {
mFragment.mType = ExtensionTypes.FIRST_DAY_OF_WEEK;
int result = mFragment.getMetricsCategory();
assertEquals(SettingsEnums.FIRST_DAY_OF_WEEK_PREFERENCE, result);
}
@Test
@UiThreadTest
public void getMetricsCategory_typeIsMu_resultIsTemperaturePreference() {
mFragment.mType = ExtensionTypes.TEMPERATURE_UNIT;
int result = mFragment.getMetricsCategory();
assertEquals(SettingsEnums.TEMPERATURE_PREFERENCE, result);
}
}