From f8e30a91537b8b4920887d0d4f0771de3a23c4cb Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Mon, 8 Nov 2010 23:24:19 -0800
Subject: [PATCH] Refactor calling KeyboardSwitcher.setKeyboardMode

This change also eliminates unnecessary recursive call in
KeyboardSwitcher.setKeyboardMode.

Change-Id: Iff25fe23b34227d526dee0bbe8710842545c2afa
---
 .../inputmethod/latin/KeyboardSwitcher.java   |  4 +--
 .../android/inputmethod/latin/LatinIME.java   | 32 +++++++++----------
 2 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
index a79cc2b227..08e9f94dff 100644
--- a/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/KeyboardSwitcher.java
@@ -298,8 +298,8 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
         mImeOptions = imeOptions;
         makeSymbolsKeyboardIds();
         if (enableVoice != mHasVoice) {
-            // TODO clean up this unnecessary recursive call.
-            setVoiceMode(enableVoice, mVoiceOnPrimary);
+            mKeyboards.clear();
+            mHasVoice = enableVoice;
         }
         mIsSymbols = isSymbols;
 
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index c255237e70..113027cccf 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -585,9 +585,6 @@ public class LatinIME extends InputMethodService
             mPasswordText = true;
         }
 
-        mEnableVoiceButton = shouldShowVoiceButton(makeFieldContext(), attribute);
-        final boolean enableVoiceButton = mEnableVoiceButton && mEnableVoice;
-
         mAfterVoiceInput = false;
         mImmediatelyAfterVoiceInput = false;
         mShowingVoiceSuggestions = false;
@@ -598,6 +595,7 @@ public class LatinIME extends InputMethodService
         mCompletions = null;
         mEnteredText = null;
 
+        final int mode;
         switch (attribute.inputType & EditorInfo.TYPE_MASK_CLASS) {
             case EditorInfo.TYPE_CLASS_NUMBER:
             case EditorInfo.TYPE_CLASS_DATETIME:
@@ -606,12 +604,9 @@ public class LatinIME extends InputMethodService
                 // a dedicated number entry keypad.
                 // TODO: Use a dedicated number entry keypad here when we get one.
             case EditorInfo.TYPE_CLASS_PHONE:
-                mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_PHONE,
-                        attribute.imeOptions, enableVoiceButton);
+                mode = KeyboardSwitcher.MODE_PHONE;
                 break;
             case EditorInfo.TYPE_CLASS_TEXT:
-                mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT,
-                        attribute.imeOptions, enableVoiceButton);
                 //startPrediction();
                 mPredictionOn = true;
                 // Make sure that passwords are not displayed in candidate view
@@ -626,25 +621,24 @@ public class LatinIME extends InputMethodService
                 }
                 if (isEmailVariation(variation)) {
                     mPredictionOn = false;
-                    mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_EMAIL,
-                            attribute.imeOptions, enableVoiceButton);
+                    mode = KeyboardSwitcher.MODE_EMAIL;
                 } else if (variation == EditorInfo.TYPE_TEXT_VARIATION_URI) {
                     mPredictionOn = false;
-                    mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_URL,
-                            attribute.imeOptions, enableVoiceButton);
+                    mode = KeyboardSwitcher.MODE_URL;
                 } else if (variation == EditorInfo.TYPE_TEXT_VARIATION_SHORT_MESSAGE) {
-                    mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_IM,
-                            attribute.imeOptions, enableVoiceButton);
+                    mode = KeyboardSwitcher.MODE_IM;
                 } else if (variation == EditorInfo.TYPE_TEXT_VARIATION_FILTER) {
                     mPredictionOn = false;
+                    mode = KeyboardSwitcher.MODE_TEXT;
                 } else if (variation == EditorInfo.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT) {
-                    mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_WEB,
-                            attribute.imeOptions, enableVoiceButton);
+                    mode = KeyboardSwitcher.MODE_WEB;
                     // If it's a browser edit field and auto correct is not ON explicitly, then
                     // disable auto correction, but keep suggestions on.
                     if ((attribute.inputType & EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT) == 0) {
                         mInputTypeNoAutoCorrect = true;
                     }
+                } else {
+                    mode = KeyboardSwitcher.MODE_TEXT;
                 }
 
                 // If NO_SUGGESTIONS is set, don't do prediction.
@@ -663,15 +657,19 @@ public class LatinIME extends InputMethodService
                 }
                 break;
             default:
-                mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT,
-                        attribute.imeOptions, enableVoiceButton);
+                mode = KeyboardSwitcher.MODE_TEXT;
+                break;
         }
         inputView.closing();
         mComposing.setLength(0);
         mPredicting = false;
         mDeleteCount = 0;
         mJustAddedAutoSpace = false;
+
         loadSettings();
+        mEnableVoiceButton = shouldShowVoiceButton(makeFieldContext(), attribute);
+        mKeyboardSwitcher.setKeyboardMode(mode, attribute.imeOptions,
+                mEnableVoiceButton && mEnableVoice);
         updateShiftKeyState(attribute);
 
         setCandidatesViewShownInternal(isCandidateStripVisible() || mCompletionOn,
-- 
GitLab