From: Jean Chalard Date: Thu, 10 May 2012 04:05:17 +0000 (+0900) Subject: Implement the "more locales" feature. X-Git-Tag: android-x86-4.4-r1~1275^2~5^3~127 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=271543876d3ecccdb5547554778e91c9e7dd87ba;p=android-x86%2Fpackages-apps-Settings.git Implement the "more locales" feature. Bug: 6026080 Change-Id: I051a734321793e9130dc2cc77d4e7f670d2ce93d --- diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java index 68b5c482f3..15228631df 100644 --- a/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java +++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java @@ -155,6 +155,10 @@ public class UserDictionaryAddWordContents { public String getLocaleString() { return mLocaleString; } + // "More languages..." is null ; "All languages" is the empty string. + public boolean isMoreLanguages() { + return null == mLocaleString; + } } private static void addLocaleDisplayNameToList(final Context context, diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordFragment.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordFragment.java index 676ef7d8dc..97ffa19145 100644 --- a/src/com/android/settings/inputmethod/UserDictionaryAddWordFragment.java +++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordFragment.java @@ -17,6 +17,7 @@ package com.android.settings.inputmethod; import android.app.Fragment; import android.os.Bundle; +import android.preference.PreferenceActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -31,6 +32,7 @@ import com.android.settings.R; import com.android.settings.inputmethod.UserDictionaryAddWordContents.LocaleRenderer; import java.util.ArrayList; +import java.util.Locale; /** * Fragment to add a word/shortcut to the user dictionary. @@ -39,7 +41,8 @@ import java.util.ArrayList; * from the UserDictionarySettings. */ public class UserDictionaryAddWordFragment extends Fragment - implements AdapterView.OnItemSelectedListener { + implements AdapterView.OnItemSelectedListener, + com.android.internal.app.LocalePicker.LocaleSelectionListener { private static final int OPTIONS_MENU_DELETE = Menu.FIRST; @@ -57,6 +60,9 @@ public class UserDictionaryAddWordFragment extends Fragment public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) { mRootView = inflater.inflate(R.layout.user_dictionary_add_word_fullscreen, null); mIsDeleting = false; + if (null == mContents) { + mContents = new UserDictionaryAddWordContents(mRootView, getArguments()); + } return mRootView; } @@ -80,7 +86,7 @@ public class UserDictionaryAddWordFragment extends Fragment if (item.getItemId() == OPTIONS_MENU_DELETE) { mContents.delete(getActivity()); mIsDeleting = true; - getFragmentManager().popBackStack(); + getActivity().onBackPressed(); return true; } return false; @@ -90,7 +96,10 @@ public class UserDictionaryAddWordFragment extends Fragment public void onResume() { super.onResume(); // We are being shown: display the word - mContents = new UserDictionaryAddWordContents(mRootView, getArguments()); + updateSpinner(); + } + + private void updateSpinner() { final ArrayList localesList = mContents.getLocalesList(getActivity()); final Spinner localeSpinner = @@ -115,7 +124,12 @@ public class UserDictionaryAddWordFragment extends Fragment public void onItemSelected(final AdapterView parent, final View view, final int pos, final long id) { final LocaleRenderer locale = (LocaleRenderer)parent.getItemAtPosition(pos); - mContents.updateLocale(locale.getLocaleString()); + if (locale.isMoreLanguages()) { + PreferenceActivity preferenceActivity = (PreferenceActivity)getActivity(); + preferenceActivity.startPreferenceFragment(new UserDictionaryLocalePicker(this), true); + } else { + mContents.updateLocale(locale.getLocaleString()); + } } @Override @@ -124,4 +138,11 @@ public class UserDictionaryAddWordFragment extends Fragment final Bundle args = getArguments(); mContents.updateLocale(args.getString(UserDictionaryAddWordContents.EXTRA_LOCALE)); } + + // Called by the locale picker + @Override + public void onLocaleSelected(final Locale locale) { + mContents.updateLocale(locale.toString()); + getActivity().onBackPressed(); + } } diff --git a/src/com/android/settings/inputmethod/UserDictionaryLocalePicker.java b/src/com/android/settings/inputmethod/UserDictionaryLocalePicker.java new file mode 100644 index 0000000000..b9ccdfdfc1 --- /dev/null +++ b/src/com/android/settings/inputmethod/UserDictionaryLocalePicker.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2012 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 java.util.Locale; + +public class UserDictionaryLocalePicker extends com.android.internal.app.LocalePicker { + public UserDictionaryLocalePicker(final UserDictionaryAddWordFragment parent) { + super(); + setLocaleSelectionListener(parent); + } +}