Enable showing the user dictionary in several locales.
Bug: 3479738 Change-Id: Ic57a5675c44c36ad255f9927da151ad6a2a8c44c
This commit is contained in:
@@ -19,19 +19,18 @@
|
||||
android:title="@string/language_keyboard_settings_title">
|
||||
|
||||
<PreferenceCategory android:key="language_settings_category"
|
||||
android:title="@string/language_settings_category" />
|
||||
android:title="@string/language_settings_category">
|
||||
|
||||
<PreferenceScreen
|
||||
android:fragment="com.android.settings.LocalePicker"
|
||||
android:key="phone_language"
|
||||
android:title="@string/phone_language">
|
||||
</PreferenceScreen>
|
||||
<PreferenceScreen
|
||||
android:fragment="com.android.settings.LocalePicker"
|
||||
android:key="phone_language"
|
||||
android:order="0"
|
||||
android:title="@string/phone_language">
|
||||
</PreferenceScreen>
|
||||
|
||||
<PreferenceScreen
|
||||
android:fragment="com.android.settings.UserDictionarySettings"
|
||||
android:title="@string/user_dict_settings_title"
|
||||
android:summary="@string/user_dict_settings_summary">
|
||||
</PreferenceScreen>
|
||||
<!-- User dictionaries entries will be populated programmatically. -->
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:key="voice_input_category"
|
||||
android:title="@string/voice_input_category" >
|
||||
|
@@ -101,7 +101,10 @@ public class UserDictionarySettings extends ListFragment implements DialogCreata
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
mCursor = createCursor();
|
||||
final Intent intent = getActivity().getIntent();
|
||||
final String locale = intent.getStringExtra("locale");
|
||||
|
||||
mCursor = createCursor(null != locale ? locale : Locale.getDefault().toString());
|
||||
TextView emptyView = (TextView)mView.findViewById(R.id.empty);
|
||||
emptyView.setText(R.string.user_dict_settings_empty_text);
|
||||
|
||||
@@ -117,12 +120,12 @@ public class UserDictionarySettings extends ListFragment implements DialogCreata
|
||||
mAddedWordAlready = savedInstanceState.getBoolean(INSTANCE_KEY_ADDED_WORD, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
final Intent intent = getActivity().getIntent();
|
||||
if (!mAddedWordAlready
|
||||
if (!mAddedWordAlready
|
||||
&& intent.getAction().equals("com.android.settings.USER_DICTIONARY_INSERT")) {
|
||||
final String word = intent.getStringExtra(EXTRA_WORD);
|
||||
mAutoReturn = true;
|
||||
@@ -139,11 +142,10 @@ public class UserDictionarySettings extends ListFragment implements DialogCreata
|
||||
outState.putBoolean(INSTANCE_KEY_ADDED_WORD, mAddedWordAlready);
|
||||
}
|
||||
|
||||
private Cursor createCursor() {
|
||||
String currentLocale = Locale.getDefault().toString();
|
||||
private Cursor createCursor(final String locale) {
|
||||
// Case-insensitive sort
|
||||
return getActivity().managedQuery(UserDictionary.Words.CONTENT_URI, QUERY_PROJECTION,
|
||||
QUERY_SELECTION, new String[] { currentLocale },
|
||||
QUERY_SELECTION, new String[] { locale },
|
||||
"UPPER(" + UserDictionary.Words.WORD + ")");
|
||||
}
|
||||
|
||||
|
@@ -21,14 +21,22 @@ import com.android.settings.SettingsPreferenceFragment;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.VoiceInputOutputSettings;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.database.Cursor;
|
||||
import android.os.Bundle;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceGroup;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.provider.Settings;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.provider.UserDictionary;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.TreeMap;
|
||||
|
||||
public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
|
||||
implements Preference.OnPreferenceChangeListener{
|
||||
@@ -36,6 +44,9 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
|
||||
private static final String KEY_PHONE_LANGUAGE = "phone_language";
|
||||
private static final String KEY_CURRENT_INPUT_METHOD = "current_input_method";
|
||||
private static final String KEY_INPUT_METHOD_SELECTOR = "input_method_selector";
|
||||
private static final String KEY_LANGUAGE_SETTINGS_CATEGORY = "language_settings_category";
|
||||
private static final String USER_DICTIONARY_SETTINGS_INTENT_ACTION =
|
||||
"android.settings.USER_DICTIONARY_SETTINGS";
|
||||
|
||||
private int mDefaultInputMethodSelectorVisibility = 0;
|
||||
private ListPreference mShowInputMethodSelectorPref;
|
||||
@@ -59,6 +70,9 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
|
||||
} else {
|
||||
mLanguagePref = findPreference(KEY_PHONE_LANGUAGE);
|
||||
}
|
||||
|
||||
createUserDictSettings((PreferenceGroup) findPreference(KEY_LANGUAGE_SETTINGS_CATEGORY));
|
||||
|
||||
mShowInputMethodSelectorPref = (ListPreference)findPreference(
|
||||
KEY_INPUT_METHOD_SELECTOR);
|
||||
mShowInputMethodSelectorPref.setOnPreferenceChangeListener(this);
|
||||
@@ -77,6 +91,51 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the entries that allow the user to go into the user dictionary for each locale.
|
||||
* @param userDictGroup The group to put the settings in.
|
||||
*/
|
||||
protected void createUserDictSettings(PreferenceGroup userDictGroup) {
|
||||
final Activity activity = getActivity();
|
||||
final Cursor locales = activity.managedQuery(UserDictionary.Words.CONTENT_URI,
|
||||
new String[] { UserDictionary.Words.LOCALE },
|
||||
null, null, null);
|
||||
final TreeMap<String, Preference> prefs = new TreeMap<String, Preference>();
|
||||
int order = findPreference(KEY_PHONE_LANGUAGE).getOrder();
|
||||
if (!locales.moveToFirst()) {
|
||||
prefs.put("", createUserDictionaryPreference(null, activity, ++order));
|
||||
} else {
|
||||
final int columnIndex = locales.getColumnIndex(UserDictionary.Words.LOCALE);
|
||||
do {
|
||||
final String locale = locales.getString(columnIndex);
|
||||
if (!prefs.containsKey(locale))
|
||||
prefs.put(locale, createUserDictionaryPreference(locale, activity, ++order));
|
||||
} while (locales.moveToNext());
|
||||
}
|
||||
for (final Preference p : prefs.values()) {
|
||||
userDictGroup.addPreference(p);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a single User Dictionary Preference object, with its parameters set.
|
||||
* @param locale The locale for which this user dictionary is for.
|
||||
* @return The corresponding preference.
|
||||
*/
|
||||
protected Preference createUserDictionaryPreference(String locale, Activity activity,
|
||||
int order) {
|
||||
final Preference newPref = new Preference(getActivity());
|
||||
newPref.setOrder(order);
|
||||
newPref.setTitle(activity.getString(R.string.user_dict_settings_title));
|
||||
final Intent intent = new Intent(USER_DICTIONARY_SETTINGS_INTENT_ACTION);
|
||||
if (null != locale) {
|
||||
newPref.setSummary(new Locale(locale).getDisplayName());
|
||||
intent.putExtra("locale", locale);
|
||||
}
|
||||
newPref.setIntent(intent);
|
||||
return newPref;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
Reference in New Issue
Block a user