From 92c3352f89b1d088d5d3e4602e0c6b733ed0dddf Mon Sep 17 00:00:00 2001 From: Mike LeBeau Date: Mon, 25 Jan 2010 18:18:45 -0500 Subject: [PATCH] Add a new "Voice input & output" top-level section of system settings. This replaces the existing "Text-to-speech" section, placing that inside, along with a link to the newly exposed voice search settings (which will soon be expanded) and a link to the LatinIME settings (pending a link to a new section in LatinIME for just voice settings, including the comma setting and a new input language setting). The VoiceSearch and LatinIME links are smart enough to remove themselves if those don't exist on the device. --- AndroidManifest.xml | 9 +++ res/values/strings.xml | 10 +++ res/xml/settings.xml | 18 ++--- res/xml/voice_input_output_settings.xml | 41 +++++++++++ .../settings/VoiceInputOutputSettings.java | 70 +++++++++++++++++++ 5 files changed, 139 insertions(+), 9 deletions(-) create mode 100644 res/xml/voice_input_output_settings.xml create mode 100644 src/com/android/settings/VoiceInputOutputSettings.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index a89db90d02c..b921e7ec341 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -432,6 +432,15 @@ + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index a70e7df0944..73b216fcda7 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2058,6 +2058,16 @@ found in the list of installed applications. Mediaserver + + + Voice input & output + + Voice input & output settings + + Voice search settings + + Android keyboard settings + Text-to-speech diff --git a/res/xml/settings.xml b/res/xml/settings.xml index 00e4205d892..0f194423fec 100644 --- a/res/xml/settings.xml +++ b/res/xml/settings.xml @@ -144,16 +144,15 @@ android:targetClass="com.android.settings.LanguageSettings" /> - + + settings:icon="@drawable/ic_settings_speech" + android:title="@string/voice_input_output_settings"> + android:targetClass="com.android.settings.VoiceInputOutputSettings" /> @@ -167,15 +166,16 @@ android:targetClass="com.android.settings.AccessibilitySettings" /> - + + android:key="dock_settings" + settings:icon="@drawable/ic_settings_dock" + android:title="@string/dock_settings"> + android:targetClass="com.android.settings.DockSettings" /> diff --git a/res/xml/voice_input_output_settings.xml b/res/xml/voice_input_output_settings.xml new file mode 100644 index 00000000000..c916415e07e --- /dev/null +++ b/res/xml/voice_input_output_settings.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/android/settings/VoiceInputOutputSettings.java b/src/com/android/settings/VoiceInputOutputSettings.java new file mode 100644 index 00000000000..7586bd06e87 --- /dev/null +++ b/src/com/android/settings/VoiceInputOutputSettings.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2010 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; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceGroup; + +import java.util.List; + +/** + * Settings screen for voice input/output. + */ +public class VoiceInputOutputSettings extends PreferenceActivity { + + private static final String KEY_PARENT = "parent"; + private static final String KEY_VOICE_SEARCH_SETTINGS = "voice_search_settings"; + private static final String KEY_KEYBOARD_SETTINGS = "keyboard_settings"; + + @Override + protected void onCreate(Bundle icicle) { + super.onCreate(icicle); + + addPreferencesFromResource(R.xml.voice_input_output_settings); + + removePreferenceIfNecessary(KEY_VOICE_SEARCH_SETTINGS); + removePreferenceIfNecessary(KEY_KEYBOARD_SETTINGS); + } + + /** + * Removes a preference if there is no activity to handle its intent. + */ + private void removePreferenceIfNecessary(String preferenceKey) { + PreferenceGroup parent = (PreferenceGroup) findPreference(KEY_PARENT); + + Preference preference = parent.findPreference(preferenceKey); + if (preference == null) { + return; + } + + Intent intent = preference.getIntent(); + if (intent != null) { + PackageManager pm = getPackageManager(); + if (!pm.queryIntentActivities(intent, 0).isEmpty()) { + return; + } + } + + // Did not find a matching activity, so remove the preference. + parent.removePreference(preference); + } +}