diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 15dc279cf3f..1b80ce8fed9 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -301,6 +301,7 @@ + @@ -631,21 +632,6 @@ android:resource="@id/accessibility_settings" /> - - - - - - - - - - diff --git a/res/values/strings.xml b/res/values/strings.xml index 8c94635aecf..8bc413996fe 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2181,7 +2181,7 @@ found in the list of installed applications. - Language & keyboard + Language & input Language & keyboard settings diff --git a/res/xml/language_settings.xml b/res/xml/language_settings.xml index 2037fc7581f..3afe8616f09 100644 --- a/res/xml/language_settings.xml +++ b/res/xml/language_settings.xml @@ -33,6 +33,28 @@ android:summary="@string/user_dict_settings_summary"> + + + + + + + + + + + + + + diff --git a/res/xml/settings_headers.xml b/res/xml/settings_headers.xml index 25f93687c47..541130897f7 100644 --- a/res/xml/settings_headers.xml +++ b/res/xml/settings_headers.xml @@ -119,14 +119,6 @@ android:icon="@drawable/ic_settings_language" android:title="@string/language_settings" /> - - -
-
- - - - - - - - - - - - - - - - - diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 09584ad99ca..00706ad0466 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -209,7 +209,6 @@ public class Settings extends PreferenceActivity { public static class PrivacySettingsActivity extends Settings { } public static class DockSettingsActivity extends Settings { } public static class RunningServicesActivity extends Settings { } - public static class VoiceInputOutputSettingsActivity extends Settings { } public static class ManageAccountsSettingsActivity extends Settings { } public static class PowerUsageSummaryActivity extends Settings { } public static class AccountSyncSettingsActivity extends Settings { } diff --git a/src/com/android/settings/VoiceInputOutputSettings.java b/src/com/android/settings/VoiceInputOutputSettings.java index b07c69ee691..1e86801357b 100644 --- a/src/com/android/settings/VoiceInputOutputSettings.java +++ b/src/com/android/settings/VoiceInputOutputSettings.java @@ -16,9 +16,6 @@ package com.android.settings; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageManager; @@ -28,7 +25,6 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; -import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceCategory; @@ -45,15 +41,16 @@ import java.io.IOException; import java.util.HashMap; import java.util.List; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + /** * Settings screen for voice input/output. */ -public class VoiceInputOutputSettings extends SettingsPreferenceFragment - implements OnPreferenceChangeListener { - +public class VoiceInputOutputSettings implements OnPreferenceChangeListener { + private static final String TAG = "VoiceInputOutputSettings"; - - private static final String KEY_PARENT = "parent"; + private static final String KEY_VOICE_INPUT_CATEGORY = "voice_input_category"; private static final String KEY_RECOGNIZER = "recognizer"; private static final String KEY_RECOGNIZER_SETTINGS = "recognizer_settings"; @@ -62,41 +59,42 @@ public class VoiceInputOutputSettings extends SettingsPreferenceFragment private PreferenceCategory mVoiceInputCategory; private ListPreference mRecognizerPref; private PreferenceScreen mSettingsPref; - + private SettingsPreferenceFragment mFragment; + private HashMap mAvailableRecognizersMap; - - @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - addPreferencesFromResource(R.xml.voice_input_output_settings); + public VoiceInputOutputSettings(SettingsPreferenceFragment fragment) { + mFragment = fragment; + } - mParent = (PreferenceGroup) findPreference(KEY_PARENT); + public void onCreate() { + + mParent = (PreferenceGroup) mFragment.getPreferenceScreen(); mVoiceInputCategory = (PreferenceCategory) mParent.findPreference(KEY_VOICE_INPUT_CATEGORY); - mRecognizerPref = (ListPreference) mParent.findPreference(KEY_RECOGNIZER); + mRecognizerPref = (ListPreference) mVoiceInputCategory.findPreference(KEY_RECOGNIZER); mRecognizerPref.setOnPreferenceChangeListener(this); - mSettingsPref = (PreferenceScreen) mParent.findPreference(KEY_RECOGNIZER_SETTINGS); - + mSettingsPref = (PreferenceScreen) + mVoiceInputCategory.findPreference(KEY_RECOGNIZER_SETTINGS); + mAvailableRecognizersMap = new HashMap(); - + populateOrRemoveRecognizerPreference(); } - + private void populateOrRemoveRecognizerPreference() { - List availableRecognitionServices = getPackageManager().queryIntentServices( + List availableRecognitionServices = + mFragment.getPackageManager().queryIntentServices( new Intent(RecognitionService.SERVICE_INTERFACE), PackageManager.GET_META_DATA); int numAvailable = availableRecognitionServices.size(); if (numAvailable == 0) { // No recognizer available - remove all related preferences. - removePreference(mVoiceInputCategory); - removePreference(mRecognizerPref); - removePreference(mSettingsPref); + mFragment.getPreferenceScreen().removePreference(mVoiceInputCategory); } else if (numAvailable == 1) { // Only one recognizer available, so don't show the list of choices, but do // set up the link to settings for the available recognizer. - removePreference(mRecognizerPref); - + mVoiceInputCategory.removePreference(mRecognizerPref); + // But first set up the available recognizers map with just the one recognizer. ResolveInfo resolveInfo = availableRecognitionServices.get(0); String recognizerComponent = @@ -106,20 +104,14 @@ public class VoiceInputOutputSettings extends SettingsPreferenceFragment mAvailableRecognizersMap.put(recognizerComponent, resolveInfo); String currentSetting = Settings.Secure.getString( - getContentResolver(), Settings.Secure.VOICE_RECOGNITION_SERVICE); + mFragment.getContentResolver(), Settings.Secure.VOICE_RECOGNITION_SERVICE); updateSettingsLink(currentSetting); } else { // Multiple recognizers available, so show the full list of choices. populateRecognizerPreference(availableRecognitionServices); } } - - private void removePreference(Preference pref) { - if (pref != null) { - mParent.removePreference(pref); - } - } - + private void populateRecognizerPreference(List recognizers) { int size = recognizers.size(); CharSequence[] entries = new CharSequence[size]; @@ -127,7 +119,7 @@ public class VoiceInputOutputSettings extends SettingsPreferenceFragment // Get the current value from the secure setting. String currentSetting = Settings.Secure.getString( - getContentResolver(), Settings.Secure.VOICE_RECOGNITION_SERVICE); + mFragment.getContentResolver(), Settings.Secure.VOICE_RECOGNITION_SERVICE); // Iterate through all the available recognizers and load up their info to show // in the preference. Also build up a map of recognizer component names to their @@ -140,7 +132,7 @@ public class VoiceInputOutputSettings extends SettingsPreferenceFragment mAvailableRecognizersMap.put(recognizerComponent, resolveInfo); - entries[i] = resolveInfo.loadLabel(getPackageManager()); + entries[i] = resolveInfo.loadLabel(mFragment.getPackageManager()); values[i] = recognizerComponent; } @@ -159,13 +151,14 @@ public class VoiceInputOutputSettings extends SettingsPreferenceFragment XmlResourceParser parser = null; String settingsActivity = null; try { - parser = si.loadXmlMetaData(getPackageManager(), RecognitionService.SERVICE_META_DATA); + parser = si.loadXmlMetaData(mFragment.getPackageManager(), + RecognitionService.SERVICE_META_DATA); if (parser == null) { throw new XmlPullParserException("No " + RecognitionService.SERVICE_META_DATA + " meta-data for " + si.packageName); } - Resources res = getPackageManager().getResourcesForApplication( + Resources res = mFragment.getPackageManager().getResourcesForApplication( si.applicationInfo); AttributeSet attrs = Xml.asAttributeSet(parser); @@ -200,25 +193,24 @@ public class VoiceInputOutputSettings extends SettingsPreferenceFragment // No settings preference available - hide the preference. Log.w(TAG, "no recognizer settings available for " + si.packageName); mSettingsPref.setIntent(null); - mParent.removePreference(mSettingsPref); + mVoiceInputCategory.removePreference(mSettingsPref); } else { Intent i = new Intent(Intent.ACTION_MAIN); i.setComponent(new ComponentName(si.packageName, settingsActivity)); mSettingsPref.setIntent(i); - mRecognizerPref.setSummary(currentRecognizer.loadLabel(getPackageManager())); + mRecognizerPref.setSummary(currentRecognizer.loadLabel(mFragment.getPackageManager())); } } public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference == mRecognizerPref) { String setting = (String) newValue; - + // Put the new value back into secure settings. - Settings.Secure.putString( - getContentResolver(), + Settings.Secure.putString(mFragment.getContentResolver(), Settings.Secure.VOICE_RECOGNITION_SERVICE, setting); - + // Update the settings item so it points to the right settings. updateSettingsLink(setting); } diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java index 22cec546c98..ef5920102b7 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java +++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java @@ -19,6 +19,7 @@ package com.android.settings.inputmethod; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; +import com.android.settings.VoiceInputOutputSettings; import android.app.AlertDialog; import android.content.Context; @@ -81,6 +82,8 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment { } mCheckboxes = new ArrayList(); onCreateIMM(); + + new VoiceInputOutputSettings(this).onCreate(); } private boolean isSystemIme(InputMethodInfo property) {