Merge "[PB4] Make a memory non-static"
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java b/java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java
new file mode 100644
index 0000000..cbf0476
--- /dev/null
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java
@@ -0,0 +1,24 @@
+/**
+ * Copyright (C) 2013 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.inputmethod.dictionarypack;
+
+/**
+ * Helper class to maintain the interface state of word list preferences.
+ */
+public class DictionaryListInterfaceState {
+    public String mLastClickedId = null;
+}
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java b/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
index 9e27c1f..aa1e9b9 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
@@ -64,6 +64,8 @@
     private ConnectivityManager mConnectivityManager;
     private MenuItem mUpdateNowMenu;
     private boolean mChangedSettings;
+    private DictionaryListInterfaceState mDictionaryListInterfaceState =
+            new DictionaryListInterfaceState();
 
     private final BroadcastReceiver mConnectivityChangedReceiver = new BroadcastReceiver() {
             @Override
@@ -297,8 +299,9 @@
                 final String key = matchLevelString + "." + description + "." + wordlistId;
                 final WordListPreference existingPref = prefList.get(key);
                 if (null == existingPref || hasPriority(status, existingPref.mStatus)) {
-                    final WordListPreference pref = new WordListPreference(activity, mClientId,
-                            wordlistId, version, locale, description, status);
+                    final WordListPreference pref = new WordListPreference(activity,
+                            mDictionaryListInterfaceState, mClientId, wordlistId, version, locale,
+                            description, status);
                     prefList.put(key, pref);
                 }
             } while (cursor.moveToNext());
diff --git a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
index 48d8b14..32825ba 100644
--- a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
+++ b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
@@ -65,16 +65,19 @@
     static final private int ANIMATION_IN = 1;
     static final private int ANIMATION_OUT = 2;
 
-    private static String sLastClickedWordlistId = null;
+    private final DictionaryListInterfaceState mInterfaceState;
     private final OnWordListPreferenceClick mPreferenceClickHandler =
             new OnWordListPreferenceClick();
     private final OnActionButtonClick mActionButtonClickHandler =
             new OnActionButtonClick();
 
-    public WordListPreference(final Context context, final String clientId, final String wordlistId,
-            final int version, final Locale locale, final String description, final int status) {
+    public WordListPreference(final Context context,
+            final DictionaryListInterfaceState dictionaryListInterfaceState, final String clientId,
+            final String wordlistId, final int version, final Locale locale,
+            final String description, final int status) {
         super(context, null);
         mContext = context;
+        mInterfaceState = dictionaryListInterfaceState;
         mClientId = clientId;
         mVersion = version;
         mWordlistId = wordlistId;
@@ -192,7 +195,8 @@
         final Button button = (Button)view.findViewById(R.id.wordlist_button);
         button.setText(getButtonLabel(mStatus));
         // String identity match. This is an ==, not an .equals, on purpose.
-        button.setVisibility(mWordlistId == sLastClickedWordlistId ? View.VISIBLE : View.INVISIBLE);
+        button.setVisibility(mWordlistId == mInterfaceState.mLastClickedId
+                ? View.VISIBLE : View.INVISIBLE);
         button.setOnClickListener(mActionButtonClickHandler);
         view.setOnClickListener(mPreferenceClickHandler);
     }
@@ -206,15 +210,15 @@
             if (!(parent instanceof ListView)) return;
             final ListView listView = (ListView)parent;
             final int indexToOpen;
-            if (sLastClickedWordlistId == mWordlistId) {
+            if (mInterfaceState.mLastClickedId == mWordlistId) {
                 // This button was being shown. Clear last state to record that there isn't a
                 // displayed button any more, and note that we don't want to open any button.
-                sLastClickedWordlistId = null;
+                mInterfaceState.mLastClickedId = null;
                 indexToOpen = -1;
             } else {
                 // This button was not being shown. Mark it as the latest selected button, and
                 // remember the index of this child as the one to open in the following loop.
-                sLastClickedWordlistId = mWordlistId;
+                mInterfaceState.mLastClickedId = mWordlistId;
                 indexToOpen = listView.indexOfChild(v);
             }
             final int lastDisplayedIndex =