OSDN Git Service

Implement the "more locales" feature.
authorJean Chalard <jchalard@google.com>
Thu, 10 May 2012 04:05:17 +0000 (13:05 +0900)
committerJean Chalard <jchalard@google.com>
Thu, 10 May 2012 09:11:04 +0000 (18:11 +0900)
Bug: 6026080
Change-Id: I051a734321793e9130dc2cc77d4e7f670d2ce93d

src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java
src/com/android/settings/inputmethod/UserDictionaryAddWordFragment.java
src/com/android/settings/inputmethod/UserDictionaryLocalePicker.java [new file with mode: 0644]

index 68b5c48..1522863 100644 (file)
@@ -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,
index 676ef7d..97ffa19 100644 (file)
@@ -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<LocaleRenderer> 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 (file)
index 0000000..b9ccdfd
--- /dev/null
@@ -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);
+    }
+}