From 657be564ace035647333585d3db7f31843ea9ade Mon Sep 17 00:00:00 2001 From: Aleksandar Kiridzic Date: Fri, 28 Apr 2023 16:37:16 +0100 Subject: [PATCH] speech: Re-add on-device speech recognition settings entry After `Settings > System > Languages & input` was separated into `Settings > System > Languages` and `Settings > System > Keyboard`, `On-device speech recognition` was lost. This CL adds it in the same `Speech` preference category where it was before and moves the category to `Settings > System > Languages`. Bug: 278279110 Test: Manual, already existing robotests Change-Id: I040c284dd3596f35ceacb6980ff89e611e29971c --- res/xml/keyboard_settings.xml | 15 ------ res/xml/language_and_input.xml | 7 --- res/xml/language_settings.xml | 22 +++++++++ .../inputmethod/KeyboardSettings.java | 15 ------ .../settings/language/LanguageSettings.java | 46 +++++++++++++++++++ ...DeviceRecognitionPreferenceController.java | 10 ++++ .../language/TtsPreferenceController.java | 10 ++++ 7 files changed, 88 insertions(+), 37 deletions(-) diff --git a/res/xml/keyboard_settings.xml b/res/xml/keyboard_settings.xml index bb1c3dad3dd..b18338bef8f 100644 --- a/res/xml/keyboard_settings.xml +++ b/res/xml/keyboard_settings.xml @@ -33,21 +33,6 @@ android:summary="@string/summary_placeholder"/> - - - - - - diff --git a/res/xml/language_and_input.xml b/res/xml/language_and_input.xml index 601ba8e3537..a5f6f63855d 100644 --- a/res/xml/language_and_input.xml +++ b/res/xml/language_and_input.xml @@ -73,13 +73,6 @@ android:title="@string/voice_input_settings_title" android:fragment="com.android.settings.language.DefaultVoiceInputPicker" /> - - + + + + + + + + \ No newline at end of file diff --git a/src/com/android/settings/inputmethod/KeyboardSettings.java b/src/com/android/settings/inputmethod/KeyboardSettings.java index 2d6ac885cd6..9fddb9328a6 100644 --- a/src/com/android/settings/inputmethod/KeyboardSettings.java +++ b/src/com/android/settings/inputmethod/KeyboardSettings.java @@ -30,9 +30,7 @@ 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; @@ -49,8 +47,6 @@ 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 @@ -102,17 +98,6 @@ public class KeyboardSettings extends DashboardFragment { 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); diff --git a/src/com/android/settings/language/LanguageSettings.java b/src/com/android/settings/language/LanguageSettings.java index f814e36f275..5da0f2f769a 100644 --- a/src/com/android/settings/language/LanguageSettings.java +++ b/src/com/android/settings/language/LanguageSettings.java @@ -21,14 +21,25 @@ import android.app.settings.SettingsEnums; import android.content.Context; 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.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.List; + @SearchIndexable public class LanguageSettings extends DashboardFragment { + private static final String KEY_SPEECH_CATEGORY = "speech_category"; + private static final String TAG = "LanguageSettings"; @Override @@ -59,8 +70,43 @@ public class LanguageSettings extends DashboardFragment { return R.xml.language_settings; } + protected List 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); + final OnDeviceRecognitionPreferenceController onDeviceRecognitionPreferenceController = + new OnDeviceRecognitionPreferenceController(context); + + 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_settings) { + public List createPreferenceControllers( + Context context) { + return buildPreferenceControllers(context, null); + } @Override protected boolean isPageSearchEnabled(Context context) { return FeatureFlagUtils diff --git a/src/com/android/settings/language/OnDeviceRecognitionPreferenceController.java b/src/com/android/settings/language/OnDeviceRecognitionPreferenceController.java index 318663957c9..35b42187c8f 100644 --- a/src/com/android/settings/language/OnDeviceRecognitionPreferenceController.java +++ b/src/com/android/settings/language/OnDeviceRecognitionPreferenceController.java @@ -33,10 +33,16 @@ import java.util.Optional; /** Controller of the On-device recognition preference. */ public class OnDeviceRecognitionPreferenceController extends BasePreferenceController { + private static final String KEY_ON_DEVICE_RECOGNITION = "on_device_recognition_settings"; + private static final String TAG = "OnDeviceRecognitionPreferenceController"; private Optional mIntent; + public OnDeviceRecognitionPreferenceController(Context context) { + this(context, KEY_ON_DEVICE_RECOGNITION); + } + public OnDeviceRecognitionPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @@ -51,6 +57,10 @@ public class OnDeviceRecognitionPreferenceController extends BasePreferenceContr : CONDITIONALLY_UNAVAILABLE; } + public String getPreferenceKey() { + return KEY_ON_DEVICE_RECOGNITION; + } + @Override public void updateState(Preference preference) { super.updateState(preference); diff --git a/src/com/android/settings/language/TtsPreferenceController.java b/src/com/android/settings/language/TtsPreferenceController.java index 6507785cda3..b38920606cf 100644 --- a/src/com/android/settings/language/TtsPreferenceController.java +++ b/src/com/android/settings/language/TtsPreferenceController.java @@ -26,9 +26,15 @@ import com.android.settings.core.BasePreferenceController; public class TtsPreferenceController extends BasePreferenceController { + private static final String KEY_TEXT_TO_SPEECH = "tts_settings_summary"; + @VisibleForTesting TtsEngines mTtsEngines; + public TtsPreferenceController(Context context) { + this(context, KEY_TEXT_TO_SPEECH); + } + public TtsPreferenceController(Context context, String key) { super(context, key); mTtsEngines = new TtsEngines(context); @@ -40,4 +46,8 @@ public class TtsPreferenceController extends BasePreferenceController { mContext.getResources().getBoolean(R.bool.config_show_tts_settings_summary) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } + + public String getPreferenceKey() { + return KEY_TEXT_TO_SPEECH; + } }