From d818f1e3b6220ca9a981c39728af510d4a38ba6f Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Tue, 15 Jan 2013 17:56:37 +0900
Subject: [PATCH] Stop relying on the soft keyboard to get the editor action.

Bug: 7969231
Change-Id: I9848c63c4c51550b5dc53c981eafa74e7fa95197
---
 .../accessibility/KeyCodeDescriptionMapper.java     |  2 +-
 .../android/inputmethod/keyboard/KeyboardId.java    |  7 +------
 .../android/inputmethod/latin/InputTypeUtils.java   |  7 ++++++-
 .../src/com/android/inputmethod/latin/LatinIME.java | 13 +++++--------
 4 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
index 6a01b0190d..ea86d98cb5 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
@@ -209,7 +209,7 @@ public final class KeyCodeDescriptionMapper {
     private String getDescriptionForActionKey(final Context context, final Keyboard keyboard,
             final Key key) {
         final KeyboardId keyboardId = keyboard.mId;
-        final int actionId = keyboardId.imeActionId();
+        final int actionId = keyboardId.imeAction();
         final int resId;
 
         // Always use the label, if available.
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardId.java b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
index f9ff7b0897..02116ca084 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardId.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
@@ -172,12 +172,7 @@ public final class KeyboardId {
     }
 
     public int imeAction() {
-        return InputTypeUtils.getActionIdFromEditorInfo(mEditorInfo);
-    }
-
-    public int imeActionId() {
-        final int actionId = imeAction();
-        return actionId == InputTypeUtils.IME_ACTION_CUSTOM_LABEL ? mEditorInfo.actionId : actionId;
+        return InputTypeUtils.getImeOptionsActionIdFromEditorInfo(mEditorInfo);
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/latin/InputTypeUtils.java b/java/src/com/android/inputmethod/latin/InputTypeUtils.java
index 55414b809a..e2eacb3f04 100644
--- a/java/src/com/android/inputmethod/latin/InputTypeUtils.java
+++ b/java/src/com/android/inputmethod/latin/InputTypeUtils.java
@@ -105,7 +105,7 @@ public final class InputTypeUtils implements InputType {
         return true;
     }
 
-    public static int getActionIdFromEditorInfo(final EditorInfo editorInfo) {
+    public static int getImeOptionsActionIdFromEditorInfo(final EditorInfo editorInfo) {
         final int actionId = editorInfo.imeOptions & EditorInfo.IME_MASK_ACTION;
         if ((editorInfo.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) {
             return EditorInfo.IME_ACTION_NONE;
@@ -115,4 +115,9 @@ public final class InputTypeUtils implements InputType {
             return actionId;
         }
     }
+
+    public static int getConcreteActionIdFromEditorInfo(final EditorInfo editorInfo) {
+        final int actionId = getImeOptionsActionIdFromEditorInfo(editorInfo);
+        return actionId == InputTypeUtils.IME_ACTION_CUSTOM_LABEL ? editorInfo.actionId : actionId;
+    }
 }
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 8913b1543c..819625225b 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -166,6 +166,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
     private boolean mExpectingUpdateSelection;
     private int mDeleteCount;
     private long mLastKeyTime;
+    private int mActionId;
 
     // Member variables for remembering the current device orientation.
     private int mDisplayOrientation;
@@ -754,6 +755,7 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
 
         mLastSelectionStart = editorInfo.initialSelStart;
         mLastSelectionEnd = editorInfo.initialSelEnd;
+        mActionId = InputTypeUtils.getConcreteActionIdFromEditorInfo(editorInfo);
 
         mHandler.cancelUpdateSuggestionStrip();
         mHandler.cancelDoubleSpacePeriodTimer();
@@ -1272,10 +1274,6 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
         return mOptionsDialog != null && mOptionsDialog.isShowing();
     }
 
-    private static int getActionId(final Keyboard keyboard) {
-        return keyboard != null ? keyboard.mId.imeActionId() : EditorInfo.IME_ACTION_NONE;
-    }
-
     private void performEditorAction(final int actionId) {
         mConnection.performEditorAction(actionId);
     }
@@ -1384,10 +1382,9 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
             }
             break;
         case Constants.CODE_ACTION_ENTER:
-            final int actionId = getActionId(switcher.getKeyboard());
-            if (EditorInfo.IME_ACTION_NONE != actionId
-                && EditorInfo.IME_ACTION_UNSPECIFIED != actionId) {
-                performEditorAction(actionId);
+            if (EditorInfo.IME_ACTION_NONE != mActionId
+                && EditorInfo.IME_ACTION_UNSPECIFIED != mActionId) {
+                performEditorAction(mActionId);
                 break;
             }
             didAutoCorrect = handleNonSpecialCharacter(Constants.CODE_ENTER, x, y, spaceState);
-- 
GitLab