From 3e2d385810ca5a36a21dc6af661381c1ca27cc86 Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Thu, 8 Mar 2012 15:07:00 +0900
Subject: [PATCH] Restart LatinIME service when keyboard theme is changed

Bug: 6023947
Change-Id: I779da32708fca7333aff74929cc98173246ee685
---
 .../inputmethod/keyboard/Keyboard.java        |  1 +
 .../keyboard/KeyboardSwitcher.java            | 39 ++-----------------
 .../inputmethod/latin/DebugSettings.java      |  5 ++-
 3 files changed, 9 insertions(+), 36 deletions(-)

diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index 5660d19426..320b1bea24 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -388,6 +388,7 @@ public class Keyboard {
         }
     }
 
+    // TODO: Move this method to KeyboardSwitcher.
     public static String toThemeName(int themeId) {
         // This should be aligned with theme-*.xml resource files' themeId attribute.
         switch (themeId) {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index ac8dd1b958..efe5aa9cfa 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -39,8 +39,7 @@ import com.android.inputmethod.latin.SettingsValues;
 import com.android.inputmethod.latin.SubtypeSwitcher;
 import com.android.inputmethod.latin.Utils;
 
-public class KeyboardSwitcher implements KeyboardState.SwitchActions,
-        SharedPreferences.OnSharedPreferenceChangeListener {
+public class KeyboardSwitcher implements KeyboardState.SwitchActions {
     private static final String TAG = KeyboardSwitcher.class.getSimpleName();
 
     public static final String PREF_KEYBOARD_LAYOUT = "pref_keyboard_layout_20110916";
@@ -94,7 +93,6 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
         mSubtypeSwitcher = SubtypeSwitcher.getInstance();
         mState = new KeyboardState(this);
         setContextThemeWrapper(ims, getKeyboardThemeIndex(ims, prefs));
-        prefs.registerOnSharedPreferenceChangeListener(this);
         mForceNonDistinctMultitouch = prefs.getBoolean(
                 DebugSettings.FORCE_NON_DISTINCT_MULTITOUCH_KEY, false);
     }
@@ -341,34 +339,26 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
     }
 
     public View onCreateInputView() {
-        return createInputView(mThemeIndex, true);
-    }
-
-    private View createInputView(final int newThemeIndex, final boolean forceRecreate) {
-        if (mCurrentInputView != null && mThemeIndex == newThemeIndex && !forceRecreate)
-            return mCurrentInputView;
-
         if (mKeyboardView != null) {
             mKeyboardView.closing();
         }
 
-        final int oldThemeIndex = mThemeIndex;
         Utils.GCUtils.getInstance().reset();
         boolean tryGC = true;
         for (int i = 0; i < Utils.GCUtils.GC_TRY_LOOP_MAX && tryGC; ++i) {
             try {
-                setContextThemeWrapper(mInputMethodService, newThemeIndex);
+                setContextThemeWrapper(mInputMethodService, mThemeIndex);
                 mCurrentInputView = (InputView)LayoutInflater.from(mThemeContext).inflate(
                         R.layout.input_view, null);
                 tryGC = false;
             } catch (OutOfMemoryError e) {
                 Log.w(TAG, "load keyboard failed: " + e);
                 tryGC = Utils.GCUtils.getInstance().tryGCOrWait(
-                        oldThemeIndex + "," + newThemeIndex, e);
+                        Keyboard.toThemeName(mThemeIndex), e);
             } catch (InflateException e) {
                 Log.w(TAG, "load keyboard failed: " + e);
                 tryGC = Utils.GCUtils.getInstance().tryGCOrWait(
-                        oldThemeIndex + "," + newThemeIndex, e);
+                        Keyboard.toThemeName(mThemeIndex), e);
             }
         }
 
@@ -385,27 +375,6 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
         return mCurrentInputView;
     }
 
-    private void postSetInputView(final View newInputView) {
-        final LatinIME latinIme = mInputMethodService;
-        latinIme.mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                if (newInputView != null) {
-                    latinIme.setInputView(newInputView);
-                }
-                latinIme.updateInputViewShown();
-            }
-        });
-    }
-
-    @Override
-    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
-        if (PREF_KEYBOARD_LAYOUT.equals(key)) {
-            final int themeIndex = getKeyboardThemeIndex(mInputMethodService, sharedPreferences);
-            postSetInputView(createInputView(themeIndex, false));
-        }
-    }
-
     public void onNetworkStateChanged() {
         if (mKeyboardView != null) {
             mKeyboardView.updateShortcutKey(SubtypeSwitcher.getInstance().isShortcutImeReady());
diff --git a/java/src/com/android/inputmethod/latin/DebugSettings.java b/java/src/com/android/inputmethod/latin/DebugSettings.java
index 3805da1549..870b33f9a1 100644
--- a/java/src/com/android/inputmethod/latin/DebugSettings.java
+++ b/java/src/com/android/inputmethod/latin/DebugSettings.java
@@ -25,6 +25,8 @@ import android.preference.CheckBoxPreference;
 import android.preference.PreferenceActivity;
 import android.util.Log;
 
+import com.android.inputmethod.keyboard.KeyboardSwitcher;
+
 public class DebugSettings extends PreferenceActivity
         implements SharedPreferences.OnSharedPreferenceChangeListener {
 
@@ -61,7 +63,8 @@ public class DebugSettings extends PreferenceActivity
                 updateDebugMode();
                 mServiceNeedsRestart = true;
             }
-        } else if (key.equals(FORCE_NON_DISTINCT_MULTITOUCH_KEY)) {
+        } else if (key.equals(FORCE_NON_DISTINCT_MULTITOUCH_KEY)
+                || key.equals(KeyboardSwitcher.PREF_KEYBOARD_LAYOUT)) {
             mServiceNeedsRestart = true;
         }
     }
-- 
GitLab