Separate "Keyboard" from "Language & input"
1. Separate "Keyboard" from "Language & input". 2. Use FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_UI to control the different UI until Settings launches the new UI design. Bug: 242680328 Test: local test Change-Id: Id1ea6d3e3c2e6b83bc4b4d835c6b27e31311c530
This commit is contained in:
@@ -909,6 +909,46 @@
|
|||||||
android:value="true"/>
|
android:value="true"/>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".Settings$LanguageSettingsActivity"
|
||||||
|
android:label="@string/languages_settings"
|
||||||
|
android:exported="true"
|
||||||
|
android:icon="@drawable/ic_settings_languages">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.settings.LANGUAGE_SETTINGS"/>
|
||||||
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
</intent-filter>
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
<category android:name="android.intent.category.VOICE_LAUNCH"/>
|
||||||
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
</intent-filter>
|
||||||
|
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||||
|
android:value="com.android.settings.language.LanguageSettings"/>
|
||||||
|
<meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
|
||||||
|
android:value="@string/menu_key_system"/>
|
||||||
|
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
|
||||||
|
android:value="true"/>
|
||||||
|
</activity>
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".Settings$KeyboardSettingsActivity"
|
||||||
|
android:label="@string/keyboard_settings"
|
||||||
|
android:exported="true"
|
||||||
|
android:icon="@drawable/ic_settings_language">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
<category android:name="android.intent.category.VOICE_LAUNCH"/>
|
||||||
|
<category android:name="android.intent.category.DEFAULT"/>
|
||||||
|
</intent-filter>
|
||||||
|
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||||
|
android:value="com.android.settings.inputmethod.KeyboardSettings"/>
|
||||||
|
<meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
|
||||||
|
android:value="@string/menu_key_system"/>
|
||||||
|
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
|
||||||
|
android:value="true"/>
|
||||||
|
</activity>
|
||||||
|
|
||||||
<activity android:name="Settings$AvailableVirtualKeyboardActivity"
|
<activity android:name="Settings$AvailableVirtualKeyboardActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:label="@string/available_virtual_keyboard_category">
|
android:label="@string/available_virtual_keyboard_category">
|
||||||
|
25
res/drawable/ic_settings_keyboards.xml
Normal file
25
res/drawable/ic_settings_keyboards.xml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24.0dp"
|
||||||
|
android:height="24.0dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0"
|
||||||
|
android:tint="?android:attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M4,19Q3.175,19 2.588,18.413Q2,17.825 2,17V7Q2,6.175 2.588,5.588Q3.175,5 4,5H20Q20.825,5 21.413,5.588Q22,6.175 22,7V17Q22,17.825 21.413,18.413Q20.825,19 20,19ZM4,17H20Q20,17 20,17Q20,17 20,17V7Q20,7 20,7Q20,7 20,7H4Q4,7 4,7Q4,7 4,7V17Q4,17 4,17Q4,17 4,17ZM8,16H16V14H8ZM5,13H7V11H5ZM8,13H10V11H8ZM11,13H13V11H11ZM14,13H16V11H14ZM17,13H19V11H17ZM5,10H7V8H5ZM8,10H10V8H8ZM11,10H13V8H11ZM14,10H16V8H14ZM17,10H19V8H17ZM4,17Q4,17 4,17Q4,17 4,17V7Q4,7 4,7Q4,7 4,7Q4,7 4,7Q4,7 4,7V17Q4,17 4,17Q4,17 4,17Z"/>
|
||||||
|
</vector>
|
25
res/drawable/ic_settings_languages.xml
Normal file
25
res/drawable/ic_settings_languages.xml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24.0dp"
|
||||||
|
android:height="24.0dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0"
|
||||||
|
android:tint="?android:attr/colorControlNormal">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M11.9,22 L16.45,10H18.55L23.1,22H21L19.95,18.95H15.1L14,22ZM15.7,17.2H19.3L17.55,12.25H17.45ZM4,19 L2.6,17.6 7.65,12.55Q6.7,11.5 5.988,10.375Q5.275,9.25 4.75,8H6.85Q7.3,8.9 7.813,9.625Q8.325,10.35 9.05,11.15Q10.15,9.95 10.875,8.688Q11.6,7.425 12.1,6H1V4H8V2H10V4H17V6H14.1Q13.575,7.775 12.675,9.45Q11.775,11.125 10.45,12.6L12.85,15.05L12.1,17.1L9,14Z"/>
|
||||||
|
</vector>
|
@@ -4924,6 +4924,10 @@
|
|||||||
|
|
||||||
<!-- Title of setting on main settings screen. This item will take the user to the screen to tweak settings realted to locale and text -->
|
<!-- Title of setting on main settings screen. This item will take the user to the screen to tweak settings realted to locale and text -->
|
||||||
<string name="language_settings">Languages & input</string>
|
<string name="language_settings">Languages & input</string>
|
||||||
|
<!-- Title of setting on main settings screen. This item will take the user to the screen to tweak settings related to languages -->
|
||||||
|
<string name="languages_settings">Languages</string>
|
||||||
|
<!-- Title of setting on main settings screen. This item will take the user to the screen to tweak settings related to keyboards -->
|
||||||
|
<string name="keyboard_settings">Keyboard</string>
|
||||||
<!-- Text displayed when user has restriction DISALLOW_CONFIG_LOCALE [CHAR LIMIT=NONE]-->
|
<!-- Text displayed when user has restriction DISALLOW_CONFIG_LOCALE [CHAR LIMIT=NONE]-->
|
||||||
<string name="language_empty_list_user_restricted">You don\u2019t have permission to change the device language.</string>
|
<string name="language_empty_list_user_restricted">You don\u2019t have permission to change the device language.</string>
|
||||||
<!-- Title of Languages & input settings screen -->
|
<!-- Title of Languages & input settings screen -->
|
||||||
@@ -4932,6 +4936,8 @@
|
|||||||
<string name="input_assistance">Tools</string>
|
<string name="input_assistance">Tools</string>
|
||||||
<!-- On Languages & input settings screen, heading. Inside the "Languages & input settings" screen, this is the header for settings that relate to keyboard (enable/disable each keyboard, settings for each keyboard). -->
|
<!-- On Languages & input settings screen, heading. Inside the "Languages & input settings" screen, this is the header for settings that relate to keyboard (enable/disable each keyboard, settings for each keyboard). -->
|
||||||
<string name="keyboard_settings_category">Keyboard & input methods</string>
|
<string name="keyboard_settings_category">Keyboard & input methods</string>
|
||||||
|
<!-- On Languages settings screen, setting option name. title of the setting to take the user to a screen to select the locale. -->
|
||||||
|
<string name="system_language">System Languages</string>
|
||||||
<!-- On Text & language settings screen, setting option name. title of the setting to take the user to a screen to select the locale. -->
|
<!-- On Text & language settings screen, setting option name. title of the setting to take the user to a screen to select the locale. -->
|
||||||
<string name="phone_language">Languages</string>
|
<string name="phone_language">Languages</string>
|
||||||
<!-- On Text & language settings screen, setting option name. summary of the setting to take the user to a screen to select the locale. -->
|
<!-- On Text & language settings screen, setting option name. summary of the setting to take the user to a screen to select the locale. -->
|
||||||
@@ -5099,6 +5105,10 @@
|
|||||||
<string name="input_methods_and_subtype_enabler_title">Choose active input methods</string>
|
<string name="input_methods_and_subtype_enabler_title">Choose active input methods</string>
|
||||||
<!-- Summary for on-screen keyboard settings -->
|
<!-- Summary for on-screen keyboard settings -->
|
||||||
<string name="onscreen_keyboard_settings_summary">Onscreen keyboard settings</string>
|
<string name="onscreen_keyboard_settings_summary">Onscreen keyboard settings</string>
|
||||||
|
<!-- Summary for default keyboard settings -->
|
||||||
|
<string name="keyboard_settings_summary">On-screen keyboard, Speech, Tools</string>
|
||||||
|
<!-- Summary for keyboard settings attaching physical_keyboard -->
|
||||||
|
<string name="keyboard_settings_with_physical_keyboard_summary">On-screen keyboard, Physical keyboard, Speech, Tools</string>
|
||||||
<!-- Title for built-in keyboard settings -->
|
<!-- Title for built-in keyboard settings -->
|
||||||
<string name="builtin_keyboard_settings_title">Physical keyboard</string>
|
<string name="builtin_keyboard_settings_title">Physical keyboard</string>
|
||||||
<!-- Summary for built-in keyboard settings -->
|
<!-- Summary for built-in keyboard settings -->
|
||||||
@@ -8025,8 +8035,10 @@
|
|||||||
<!-- Title for setting tile leading to setting UI which allows user set default app to
|
<!-- Title for setting tile leading to setting UI which allows user set default app to
|
||||||
handle actions such as open web page, making phone calls, default SMS apps [CHAR LIMIT=40]-->
|
handle actions such as open web page, making phone calls, default SMS apps [CHAR LIMIT=40]-->
|
||||||
<string name="app_default_dashboard_title">Default apps</string>
|
<string name="app_default_dashboard_title">Default apps</string>
|
||||||
<!-- Summary text for system preference tile, showing important setting items under system setting [CHAR LIMIT=NONE]-->
|
<!-- Summary text for system preference title, showing important setting items under system setting [CHAR LIMIT=NONE]-->
|
||||||
<string name="system_dashboard_summary">Languages, gestures, time, backup</string>
|
<string name="system_dashboard_summary">Languages, gestures, time, backup</string>
|
||||||
|
<!-- Summary text for language preference title, showing important setting items under language setting [CHAR LIMIT=NONE]-->
|
||||||
|
<string name="languages_setting_summary">System languages, app languages</string>
|
||||||
|
|
||||||
<!-- Search strings -->
|
<!-- Search strings -->
|
||||||
<!-- Text to describe the search results fragment title [CHAR LIMIT=16] -->
|
<!-- Text to describe the search results fragment title [CHAR LIMIT=16] -->
|
||||||
|
108
res/xml/keyboard_settings.xml
Normal file
108
res/xml/keyboard_settings.xml
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<PreferenceScreen
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:title="@string/keyboard_settings">
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="keyboards_category"
|
||||||
|
android:title="@string/keyboard_and_input_methods_category">
|
||||||
|
<Preference
|
||||||
|
android:key="virtual_keyboard_pref"
|
||||||
|
android:title="@string/virtual_keyboard_category"
|
||||||
|
android:fragment="com.android.settings.inputmethod.AvailableVirtualKeyboardFragment"
|
||||||
|
settings:keywords="@string/keywords_virtual_keyboard"/>
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="physical_keyboard_pref"
|
||||||
|
android:title="@string/physical_keyboard_title"
|
||||||
|
android:summary="@string/summary_placeholder"
|
||||||
|
android:fragment="com.android.settings.inputmethod.PhysicalKeyboardFragment"/>
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="speech_category"
|
||||||
|
android:title="@string/speech_category_title">
|
||||||
|
<com.android.settings.widget.GearPreference
|
||||||
|
android:key="voice_input_settings"
|
||||||
|
android:title="@string/voice_input_settings_title"
|
||||||
|
android:fragment="com.android.settings.language.DefaultVoiceInputPicker" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="tts_settings_summary"
|
||||||
|
android:title="@string/tts_settings_title"
|
||||||
|
android:fragment="com.android.settings.tts.TextToSpeechSettings"
|
||||||
|
settings:searchable="false"/>
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="input_assistance_category"
|
||||||
|
android:title="@string/input_assistance">
|
||||||
|
<!-- Spell checker preference title, summary and fragment will be set programmatically. -->
|
||||||
|
<!-- Note: Mark this as persistent="false" to remove unnecessarily saved shared preference.
|
||||||
|
See: InputMethodAndSubtypeUtil.removeUnnecessaryNonPersistentPreference. -->
|
||||||
|
<Preference
|
||||||
|
android:key="spellcheckers_settings"
|
||||||
|
android:title="@string/spellcheckers_settings_title"
|
||||||
|
android:persistent="false"
|
||||||
|
android:fragment="com.android.settings.inputmethod.SpellCheckersSettings" />
|
||||||
|
|
||||||
|
<!-- User dictionary preference title and fragment will be set programmatically. -->
|
||||||
|
<Preference
|
||||||
|
android:key="key_user_dictionary_settings"
|
||||||
|
android:title="@string/user_dict_settings_title"
|
||||||
|
android:summary="@string/user_dict_settings_summary"
|
||||||
|
android:fragment="com.android.settings.inputmethod.UserDictionaryList"
|
||||||
|
settings:controller="com.android.settings.language.UserDictionaryPreferenceController" />
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="pointer_category"
|
||||||
|
android:layout="@layout/preference_category_no_label">
|
||||||
|
<com.android.settings.PointerSpeedPreference
|
||||||
|
android:key="pointer_speed"
|
||||||
|
android:title="@string/pointer_speed"
|
||||||
|
android:dialogTitle="@string/pointer_speed" />
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
<SwitchPreference
|
||||||
|
android:key="vibrate_input_devices"
|
||||||
|
android:title="@string/vibrate_input_devices"
|
||||||
|
android:summary="@string/vibrate_input_devices_summary"
|
||||||
|
settings:controller="com.android.settings.inputmethod.GameControllerPreferenceController" />
|
||||||
|
|
||||||
|
<com.android.settings.widget.WorkOnlyCategory
|
||||||
|
android:key="language_and_input_for_work_category"
|
||||||
|
android:title="@string/language_and_input_for_work_category_title"
|
||||||
|
settings:searchable="false">
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="spellcheckers_settings_for_work_pref"
|
||||||
|
android:title="@string/spellcheckers_settings_for_work_title"
|
||||||
|
android:fragment="com.android.settings.inputmethod.SpellCheckersSettings"
|
||||||
|
settings:forWork="true"
|
||||||
|
settings:controller="com.android.settings.core.WorkPreferenceController" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="user_dictionary_settings_for_work_pref"
|
||||||
|
android:title="@string/user_dict_settings_for_work_title"
|
||||||
|
android:fragment="com.android.settings.inputmethod.UserDictionaryList"
|
||||||
|
settings:forWork="true"
|
||||||
|
settings:controller="com.android.settings.inputmethod.SpellCheckerForWorkPreferenceController" />
|
||||||
|
</com.android.settings.widget.WorkOnlyCategory>
|
||||||
|
</PreferenceScreen>
|
@@ -25,7 +25,8 @@
|
|||||||
<Preference
|
<Preference
|
||||||
android:key="phone_language"
|
android:key="phone_language"
|
||||||
android:title="@string/phone_language"
|
android:title="@string/phone_language"
|
||||||
android:fragment="com.android.settings.localepicker.LocaleListEditor" />
|
android:fragment="com.android.settings.localepicker.LocaleListEditor"
|
||||||
|
settings:controller="com.android.settings.language.PhoneLanguagePreferenceController" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="apps_language"
|
android:key="apps_language"
|
||||||
|
41
res/xml/language_settings.xml
Normal file
41
res/xml/language_settings.xml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<PreferenceScreen
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:title="@string/languages_settings">
|
||||||
|
<PreferenceCategory
|
||||||
|
android:key="languages_category"
|
||||||
|
android:title="@string/locale_picker_category_title">
|
||||||
|
<Preference
|
||||||
|
android:key="phone_language"
|
||||||
|
android:title="@string/system_language"
|
||||||
|
android:fragment="com.android.settings.localepicker.LocaleListEditor"
|
||||||
|
settings:controller="com.android.settings.language.PhoneLanguagePreferenceController" />
|
||||||
|
<Preference
|
||||||
|
android:key="apps_language"
|
||||||
|
android:title="@string/app_locales_picker_menu_title"
|
||||||
|
android:summary="@string/app_locale_picker_summary"
|
||||||
|
android:fragment="com.android.settings.applications.manageapplications.ManageApplications"
|
||||||
|
settings:controller="com.android.settings.applications.appinfo.ManageAppLocalePreferenceController">
|
||||||
|
<extra
|
||||||
|
android:name="classname"
|
||||||
|
android:value="com.android.settings.applications.appinfo.AppLocaleDetails" />
|
||||||
|
</Preference>
|
||||||
|
</PreferenceCategory>
|
||||||
|
</PreferenceScreen>
|
@@ -39,4 +39,4 @@
|
|||||||
android:selectable="false"
|
android:selectable="false"
|
||||||
settings:controller="com.android.settings.localepicker.LocaleHelperPreferenceController"/>
|
settings:controller="com.android.settings.localepicker.LocaleHelperPreferenceController"/>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
@@ -25,7 +25,25 @@
|
|||||||
android:title="@string/language_settings"
|
android:title="@string/language_settings"
|
||||||
android:icon="@drawable/ic_settings_language"
|
android:icon="@drawable/ic_settings_language"
|
||||||
android:order="-260"
|
android:order="-260"
|
||||||
android:fragment="com.android.settings.language.LanguageAndInputSettings"/>
|
android:fragment="com.android.settings.language.LanguageAndInputSettings"
|
||||||
|
settings:controller="com.android.settings.language.LanguageAndInputPreferenceController"/>
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="language_settings"
|
||||||
|
android:title="@string/languages_settings"
|
||||||
|
android:summary="@string/languages_setting_summary"
|
||||||
|
android:icon="@drawable/ic_settings_languages"
|
||||||
|
android:order="-260"
|
||||||
|
android:fragment="com.android.settings.language.LanguageSettings"
|
||||||
|
settings:controller="com.android.settings.language.LanguagePreferenceController"/>
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="Keyboard_settings"
|
||||||
|
android:title="@string/keyboard_settings"
|
||||||
|
android:icon="@drawable/ic_settings_keyboards"
|
||||||
|
android:order="-255"
|
||||||
|
android:fragment="com.android.settings.inputmethod.KeyboardSettings"
|
||||||
|
settings:controller="com.android.settings.inputmethod.KeyboardPreferenceController"/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="gesture_settings"
|
android:key="gesture_settings"
|
||||||
|
@@ -111,6 +111,8 @@ public class Settings extends SettingsActivity {
|
|||||||
public static class SpellCheckersSettingsActivity extends SettingsActivity { /* empty */ }
|
public static class SpellCheckersSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class LocalePickerActivity extends SettingsActivity { /* empty */ }
|
public static class LocalePickerActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class LanguageAndInputSettingsActivity extends SettingsActivity { /* empty */ }
|
public static class LanguageAndInputSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
|
public static class LanguageSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
|
public static class KeyboardSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class UserDictionarySettingsActivity extends SettingsActivity { /* empty */ }
|
public static class UserDictionarySettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class DarkThemeSettingsActivity extends SettingsActivity { /* empty */ }
|
public static class DarkThemeSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class DisplaySettingsActivity extends SettingsActivity { /* empty */ }
|
public static class DisplaySettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
|
@@ -115,11 +115,13 @@ import com.android.settings.gestures.SwipeToNotificationSettings;
|
|||||||
import com.android.settings.gestures.SystemNavigationGestureSettings;
|
import com.android.settings.gestures.SystemNavigationGestureSettings;
|
||||||
import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
|
import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
|
||||||
import com.android.settings.inputmethod.KeyboardLayoutPickerFragment;
|
import com.android.settings.inputmethod.KeyboardLayoutPickerFragment;
|
||||||
|
import com.android.settings.inputmethod.KeyboardSettings;
|
||||||
import com.android.settings.inputmethod.PhysicalKeyboardFragment;
|
import com.android.settings.inputmethod.PhysicalKeyboardFragment;
|
||||||
import com.android.settings.inputmethod.SpellCheckersSettings;
|
import com.android.settings.inputmethod.SpellCheckersSettings;
|
||||||
import com.android.settings.inputmethod.UserDictionaryList;
|
import com.android.settings.inputmethod.UserDictionaryList;
|
||||||
import com.android.settings.inputmethod.UserDictionarySettings;
|
import com.android.settings.inputmethod.UserDictionarySettings;
|
||||||
import com.android.settings.language.LanguageAndInputSettings;
|
import com.android.settings.language.LanguageAndInputSettings;
|
||||||
|
import com.android.settings.language.LanguageSettings;
|
||||||
import com.android.settings.localepicker.LocaleListEditor;
|
import com.android.settings.localepicker.LocaleListEditor;
|
||||||
import com.android.settings.location.LocationServices;
|
import com.android.settings.location.LocationServices;
|
||||||
import com.android.settings.location.LocationSettings;
|
import com.android.settings.location.LocationSettings;
|
||||||
@@ -205,6 +207,8 @@ public class SettingsGateway {
|
|||||||
LocaleListEditor.class.getName(),
|
LocaleListEditor.class.getName(),
|
||||||
AvailableVirtualKeyboardFragment.class.getName(),
|
AvailableVirtualKeyboardFragment.class.getName(),
|
||||||
LanguageAndInputSettings.class.getName(),
|
LanguageAndInputSettings.class.getName(),
|
||||||
|
LanguageSettings.class.getName(),
|
||||||
|
KeyboardSettings.class.getName(),
|
||||||
SpellCheckersSettings.class.getName(),
|
SpellCheckersSettings.class.getName(),
|
||||||
UserDictionaryList.class.getName(),
|
UserDictionaryList.class.getName(),
|
||||||
UserDictionarySettings.class.getName(),
|
UserDictionarySettings.class.getName(),
|
||||||
@@ -383,6 +387,8 @@ public class SettingsGateway {
|
|||||||
Settings.LocationSettingsActivity.class.getName(),
|
Settings.LocationSettingsActivity.class.getName(),
|
||||||
// Home page > System
|
// Home page > System
|
||||||
Settings.LanguageAndInputSettingsActivity.class.getName(),
|
Settings.LanguageAndInputSettingsActivity.class.getName(),
|
||||||
|
Settings.LanguageSettingsActivity.class.getName(),
|
||||||
|
Settings.KeyboardSettingsActivity.class.getName(),
|
||||||
Settings.DateTimeSettingsActivity.class.getName(),
|
Settings.DateTimeSettingsActivity.class.getName(),
|
||||||
Settings.EnterprisePrivacySettingsActivity.class.getName(),
|
Settings.EnterprisePrivacySettingsActivity.class.getName(),
|
||||||
Settings.MyDeviceInfoActivity.class.getName(),
|
Settings.MyDeviceInfoActivity.class.getName(),
|
||||||
|
@@ -101,6 +101,7 @@ public class DashboardFragmentRegistry {
|
|||||||
SystemDashboardFragment.class.getName(), CategoryKey.CATEGORY_SYSTEM);
|
SystemDashboardFragment.class.getName(), CategoryKey.CATEGORY_SYSTEM);
|
||||||
PARENT_TO_CATEGORY_KEY_MAP.put(LanguageAndInputSettings.class.getName(),
|
PARENT_TO_CATEGORY_KEY_MAP.put(LanguageAndInputSettings.class.getName(),
|
||||||
CategoryKey.CATEGORY_SYSTEM_LANGUAGE);
|
CategoryKey.CATEGORY_SYSTEM_LANGUAGE);
|
||||||
|
// TODO(b/242680328) Tie new category key to LanguageSettings and KeyboardSettings page
|
||||||
PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettingsDashboardFragment.class.getName(),
|
PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettingsDashboardFragment.class.getName(),
|
||||||
CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
|
CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
|
||||||
PARENT_TO_CATEGORY_KEY_MAP.put(ConfigureNotificationSettings.class.getName(),
|
PARENT_TO_CATEGORY_KEY_MAP.put(ConfigureNotificationSettings.class.getName(),
|
||||||
|
@@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* 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.inputmethod;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.hardware.input.InputManager;
|
||||||
|
import android.util.FeatureFlagUtils;
|
||||||
|
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
import com.android.settings.core.PreferenceControllerMixin;
|
||||||
|
import com.android.settings.inputmethod.PhysicalKeyboardFragment.HardKeyboardDeviceInfo;
|
||||||
|
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||||
|
import com.android.settingslib.core.lifecycle.events.OnPause;
|
||||||
|
import com.android.settingslib.core.lifecycle.events.OnResume;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class KeyboardPreferenceController extends BasePreferenceController
|
||||||
|
implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause,
|
||||||
|
InputManager.InputDeviceListener {
|
||||||
|
|
||||||
|
private final InputManager mIm;
|
||||||
|
|
||||||
|
private Preference mPreference;
|
||||||
|
|
||||||
|
public KeyboardPreferenceController(Context context, String key) {
|
||||||
|
super(context, key);
|
||||||
|
mIm = context.getSystemService(InputManager.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInputDeviceAdded(int deviceId) {
|
||||||
|
updateSummary();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInputDeviceRemoved(int deviceId) {
|
||||||
|
updateSummary();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onInputDeviceChanged(int deviceId) {
|
||||||
|
updateSummary();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
mIm.unregisterInputDeviceListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
mIm.registerInputDeviceListener(this, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateState(Preference preference) {
|
||||||
|
mPreference = preference;
|
||||||
|
updateSummary();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAvailabilityStatus() {
|
||||||
|
boolean isFeatureOn = FeatureFlagUtils
|
||||||
|
.isEnabled(mContext, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_UI);
|
||||||
|
return isFeatureOn ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateSummary() {
|
||||||
|
final List<HardKeyboardDeviceInfo> keyboards =
|
||||||
|
PhysicalKeyboardFragment.getHardKeyboards(mContext);
|
||||||
|
if (keyboards.isEmpty()) {
|
||||||
|
mPreference.setSummary(R.string.keyboard_settings_summary);
|
||||||
|
} else {
|
||||||
|
mPreference.setSummary(R.string.keyboard_settings_with_physical_keyboard_summary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
136
src/com/android/settings/inputmethod/KeyboardSettings.java
Normal file
136
src/com/android/settings/inputmethod/KeyboardSettings.java
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
* 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.inputmethod;
|
||||||
|
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.PERSONAL_DICTIONARY_FOR_WORK;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.SPELL_CHECKER_FOR_WORK;
|
||||||
|
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_KEYBOARDS_AND_TOOLS;
|
||||||
|
|
||||||
|
import android.app.settings.SettingsEnums;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.FeatureFlagUtils;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
|
import com.android.settings.language.DefaultVoiceInputPreferenceController;
|
||||||
|
import com.android.settings.language.PointerSpeedController;
|
||||||
|
import com.android.settings.language.TtsPreferenceController;
|
||||||
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
|
import com.android.settings.widget.PreferenceCategoryController;
|
||||||
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||||
|
import com.android.settingslib.search.SearchIndexable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@SearchIndexable
|
||||||
|
public class KeyboardSettings extends DashboardFragment {
|
||||||
|
|
||||||
|
private static final String TAG = "KeyboardSettings";
|
||||||
|
|
||||||
|
private static final String KEY_KEYBOARDS_CATEGORY = "keyboards_category";
|
||||||
|
private static final String KEY_SPEECH_CATEGORY = "speech_category";
|
||||||
|
private static final String KEY_TEXT_TO_SPEECH = "tts_settings_summary";
|
||||||
|
private static final String KEY_POINTER_CATEGORY = "pointer_category";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMetricsCategory() {
|
||||||
|
return SettingsEnums.SETTINGS_KEYBOARDS_CATEGORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getLogTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle icicle) {
|
||||||
|
super.onCreate(icicle);
|
||||||
|
replaceEnterpriseStringTitle("language_and_input_for_work_category",
|
||||||
|
WORK_PROFILE_KEYBOARDS_AND_TOOLS,
|
||||||
|
R.string.language_and_input_for_work_category_title);
|
||||||
|
replaceEnterpriseStringTitle("spellcheckers_settings_for_work_pref",
|
||||||
|
SPELL_CHECKER_FOR_WORK,
|
||||||
|
R.string.spellcheckers_settings_for_work_title);
|
||||||
|
replaceEnterpriseStringTitle("user_dictionary_settings_for_work_pref",
|
||||||
|
PERSONAL_DICTIONARY_FOR_WORK,
|
||||||
|
R.string.user_dict_settings_for_work_title);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getPreferenceScreenResId() {
|
||||||
|
return R.xml.keyboard_settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||||
|
return buildPreferenceControllers(context, getSettingsLifecycle());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<AbstractPreferenceController> buildPreferenceControllers(
|
||||||
|
@NonNull Context context, @Nullable Lifecycle lifecycle) {
|
||||||
|
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||||
|
// Input
|
||||||
|
final VirtualKeyboardPreferenceController virtualKeyboardPreferenceController =
|
||||||
|
new VirtualKeyboardPreferenceController(context);
|
||||||
|
final PhysicalKeyboardPreferenceController physicalKeyboardPreferenceController =
|
||||||
|
new PhysicalKeyboardPreferenceController(context, lifecycle);
|
||||||
|
controllers.add(virtualKeyboardPreferenceController);
|
||||||
|
controllers.add(physicalKeyboardPreferenceController);
|
||||||
|
controllers.add(new PreferenceCategoryController(context,
|
||||||
|
KEY_KEYBOARDS_CATEGORY).setChildren(
|
||||||
|
Arrays.asList(virtualKeyboardPreferenceController,
|
||||||
|
physicalKeyboardPreferenceController)));
|
||||||
|
|
||||||
|
// Speech
|
||||||
|
final DefaultVoiceInputPreferenceController defaultVoiceInputPreferenceController =
|
||||||
|
new DefaultVoiceInputPreferenceController(context, lifecycle);
|
||||||
|
final TtsPreferenceController ttsPreferenceController =
|
||||||
|
new TtsPreferenceController(context, KEY_TEXT_TO_SPEECH);
|
||||||
|
controllers.add(defaultVoiceInputPreferenceController);
|
||||||
|
controllers.add(ttsPreferenceController);
|
||||||
|
controllers.add(new PreferenceCategoryController(context,
|
||||||
|
KEY_SPEECH_CATEGORY).setChildren(
|
||||||
|
Arrays.asList(defaultVoiceInputPreferenceController, ttsPreferenceController)));
|
||||||
|
|
||||||
|
// Pointer
|
||||||
|
final PointerSpeedController pointerController = new PointerSpeedController(context);
|
||||||
|
controllers.add(pointerController);
|
||||||
|
controllers.add(new PreferenceCategoryController(context,
|
||||||
|
KEY_POINTER_CATEGORY).setChildren(Arrays.asList(pointerController)));
|
||||||
|
|
||||||
|
// Input Assistance
|
||||||
|
controllers.add(new SpellCheckerPreferenceController(context));
|
||||||
|
|
||||||
|
return controllers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
|
new BaseSearchIndexProvider(R.xml.keyboard_settings) {
|
||||||
|
@Override
|
||||||
|
protected boolean isPageSearchEnabled(Context context) {
|
||||||
|
return FeatureFlagUtils
|
||||||
|
.isEnabled(context, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_UI);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
@@ -21,6 +21,7 @@ import android.content.Context;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.util.FeatureFlagUtils;
|
||||||
import android.view.inputmethod.InputMethodInfo;
|
import android.view.inputmethod.InputMethodInfo;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
|
||||||
@@ -41,7 +42,9 @@ public class LanguageAndInputPreferenceController extends BasePreferenceControll
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
return AVAILABLE;
|
boolean isFeatureOn = FeatureFlagUtils
|
||||||
|
.isEnabled(mContext, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_UI);
|
||||||
|
return isFeatureOn ? CONDITIONALLY_UNAVAILABLE : AVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -24,6 +24,7 @@ import android.app.Activity;
|
|||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.util.FeatureFlagUtils;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@@ -104,8 +105,6 @@ public class LanguageAndInputSettings extends DashboardFragment {
|
|||||||
private static List<AbstractPreferenceController> buildPreferenceControllers(
|
private static List<AbstractPreferenceController> buildPreferenceControllers(
|
||||||
@NonNull Context context, @Nullable Lifecycle lifecycle) {
|
@NonNull Context context, @Nullable Lifecycle lifecycle) {
|
||||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||||
// Language
|
|
||||||
controllers.add(new PhoneLanguagePreferenceController(context));
|
|
||||||
|
|
||||||
// Input
|
// Input
|
||||||
final VirtualKeyboardPreferenceController virtualKeyboardPreferenceController =
|
final VirtualKeyboardPreferenceController virtualKeyboardPreferenceController =
|
||||||
@@ -154,11 +153,16 @@ public class LanguageAndInputSettings extends DashboardFragment {
|
|||||||
|
|
||||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
new BaseSearchIndexProvider(R.xml.language_and_input) {
|
new BaseSearchIndexProvider(R.xml.language_and_input) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AbstractPreferenceController> createPreferenceControllers(
|
public List<AbstractPreferenceController> createPreferenceControllers(
|
||||||
Context context) {
|
Context context) {
|
||||||
return buildPreferenceControllers(context, null);
|
return buildPreferenceControllers(context, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isPageSearchEnabled(Context context) {
|
||||||
|
return !FeatureFlagUtils
|
||||||
|
.isEnabled(context, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_UI);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* 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.language;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.FeatureFlagUtils;
|
||||||
|
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
|
||||||
|
public class LanguagePreferenceController extends BasePreferenceController {
|
||||||
|
|
||||||
|
public LanguagePreferenceController(Context context, String key) {
|
||||||
|
super(context, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getAvailabilityStatus() {
|
||||||
|
boolean isFeatureOn = FeatureFlagUtils
|
||||||
|
.isEnabled(mContext, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_UI);
|
||||||
|
return isFeatureOn ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||||
|
}
|
||||||
|
}
|
70
src/com/android/settings/language/LanguageSettings.java
Normal file
70
src/com/android/settings/language/LanguageSettings.java
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* 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.language;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.settings.SettingsEnums;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.FeatureFlagUtils;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
|
import com.android.settingslib.search.SearchIndexable;
|
||||||
|
|
||||||
|
@SearchIndexable
|
||||||
|
public class LanguageSettings extends DashboardFragment {
|
||||||
|
|
||||||
|
private static final String TAG = "LanguageSettings";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMetricsCategory() {
|
||||||
|
return SettingsEnums.SETTINGS_LANGUAGES_CATEGORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getLogTag() {
|
||||||
|
return TAG;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
// Hack to update action bar title. It's necessary to refresh title because this page user
|
||||||
|
// can change locale from here and fragment won't relaunch. Once language changes, title
|
||||||
|
// must display in the new language.
|
||||||
|
final Activity activity = getActivity();
|
||||||
|
if (activity == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
activity.setTitle(R.string.languages_settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getPreferenceScreenResId() {
|
||||||
|
return R.xml.language_settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
|
new BaseSearchIndexProvider(R.xml.language_settings) {
|
||||||
|
@Override
|
||||||
|
protected boolean isPageSearchEnabled(Context context) {
|
||||||
|
return FeatureFlagUtils
|
||||||
|
.isEnabled(context, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_UI);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
@@ -16,33 +16,32 @@
|
|||||||
|
|
||||||
package com.android.settings.language;
|
package com.android.settings.language;
|
||||||
|
|
||||||
import android.app.settings.SettingsEnums;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.core.PreferenceControllerMixin;
|
import com.android.settings.core.PreferenceControllerMixin;
|
||||||
import com.android.settings.core.SubSettingLauncher;
|
|
||||||
import com.android.settings.localepicker.LocaleListEditor;
|
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
import com.android.settings.overlay.FeatureFactory;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PhoneLanguagePreferenceController extends AbstractPreferenceController
|
public class PhoneLanguagePreferenceController extends BasePreferenceController
|
||||||
implements PreferenceControllerMixin {
|
implements PreferenceControllerMixin {
|
||||||
|
|
||||||
private static final String KEY_PHONE_LANGUAGE = "phone_language";
|
public PhoneLanguagePreferenceController(Context context, String key) {
|
||||||
|
super(context, key);
|
||||||
public PhoneLanguagePreferenceController(Context context) {
|
|
||||||
super(context);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAvailable() {
|
public int getAvailabilityStatus() {
|
||||||
return mContext.getResources().getBoolean(R.bool.config_show_phone_language)
|
if (mContext.getResources().getBoolean(R.bool.config_show_phone_language)
|
||||||
&& mContext.getAssets().getLocales().length > 1;
|
&& mContext.getAssets().getLocales().length > 1) {
|
||||||
|
return AVAILABLE;
|
||||||
|
} else {
|
||||||
|
return CONDITIONALLY_UNAVAILABLE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -61,23 +60,4 @@ public class PhoneLanguagePreferenceController extends AbstractPreferenceControl
|
|||||||
// make search page look like there are duplicate result, creating confusion.
|
// make search page look like there are duplicate result, creating confusion.
|
||||||
keys.add(getPreferenceKey());
|
keys.add(getPreferenceKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return KEY_PHONE_LANGUAGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handlePreferenceTreeClick(Preference preference) {
|
|
||||||
if (!KEY_PHONE_LANGUAGE.equals(preference.getKey())) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
new SubSettingLauncher(mContext)
|
|
||||||
.setDestination(LocaleListEditor.class.getName())
|
|
||||||
.setSourceMetricsCategory(SettingsEnums.SETTINGS_LANGUAGE_CATEGORY)
|
|
||||||
.setTitleRes(R.string.language_picker_title)
|
|
||||||
.launch();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -27,6 +27,7 @@ import android.content.res.AssetManager;
|
|||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -59,7 +60,7 @@ public class PhoneLanguagePreferenceControllerTest {
|
|||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
when(mContext.getAssets()).thenReturn(mAssets);
|
when(mContext.getAssets()).thenReturn(mAssets);
|
||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
mController = new PhoneLanguagePreferenceController(mContext);
|
mController = new PhoneLanguagePreferenceController(mContext, "key");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -76,6 +77,22 @@ public class PhoneLanguagePreferenceControllerTest {
|
|||||||
assertThat(mController.isAvailable()).isFalse();
|
assertThat(mController.isAvailable()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetAvailabilityStatus_hasMultipleLocales_returnAvailable() {
|
||||||
|
when(mAssets.getLocales()).thenReturn(new String[] {"en", "de"});
|
||||||
|
|
||||||
|
assertThat(mController.getAvailabilityStatus())
|
||||||
|
.isEqualTo(BasePreferenceController.AVAILABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetAvailabilityStatus_hasSingleLocales_returnConditionallyUnavailable() {
|
||||||
|
when(mAssets.getLocales()).thenReturn(new String[] {"en"});
|
||||||
|
|
||||||
|
assertThat(mController.getAvailabilityStatus())
|
||||||
|
.isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Config(qualifiers = "mcc999")
|
@Config(qualifiers = "mcc999")
|
||||||
public void testIsAvailable_ifDisabled_shouldReturnFalse() {
|
public void testIsAvailable_ifDisabled_shouldReturnFalse() {
|
||||||
|
Reference in New Issue
Block a user