From 59010a89b839ea181dc07588df21f3db29ee8bd1 Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Tue, 20 Sep 2011 14:57:31 +0900
Subject: [PATCH] Update fullscreen mode also at onStartInputView

This change also separates controlling visibility of "key preview
backing view" from suggestions strip visibility.

Bug: 5315001
Change-Id: I190a71f7956c804e5d89d2d5bacecc62d565ac2c
---
 .../compat/EditorInfoCompatUtils.java         | 10 ------
 .../android/inputmethod/latin/LatinIME.java   | 35 +++++++++----------
 2 files changed, 17 insertions(+), 28 deletions(-)

diff --git a/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java b/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java
index 194741087b..bcdcef7dc0 100644
--- a/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java
@@ -26,16 +26,12 @@ public class EditorInfoCompatUtils {
             EditorInfo.class, "IME_FLAG_NAVIGATE_NEXT");
     private static final Field FIELD_IME_FLAG_NAVIGATE_PREVIOUS = CompatUtils.getField(
             EditorInfo.class, "IME_FLAG_NAVIGATE_PREVIOUS");
-    private static final Field FIELD_IME_FLAG_NO_FULLSCREEN = CompatUtils.getField(
-            EditorInfo.class, "IME_FLAG_NO_FULLSCREEN");
     private static final Field FIELD_IME_ACTION_PREVIOUS = CompatUtils.getField(
             EditorInfo.class, "IME_ACTION_PREVIOUS");
     private static final Integer OBJ_IME_FLAG_NAVIGATE_NEXT = (Integer) CompatUtils
             .getFieldValue(null, null, FIELD_IME_FLAG_NAVIGATE_NEXT);
     private static final Integer OBJ_IME_FLAG_NAVIGATE_PREVIOUS = (Integer) CompatUtils
             .getFieldValue(null, null, FIELD_IME_FLAG_NAVIGATE_PREVIOUS);
-    private static final Integer OBJ_IME_FLAG_NO_FULLSCREEN = (Integer) CompatUtils
-            .getFieldValue(null, null, FIELD_IME_FLAG_NO_FULLSCREEN);
     private static final Integer OBJ_IME_ACTION_PREVIOUS = (Integer) CompatUtils
             .getFieldValue(null, null, FIELD_IME_ACTION_PREVIOUS);
 
@@ -51,12 +47,6 @@ public class EditorInfoCompatUtils {
         return (imeOptions & OBJ_IME_FLAG_NAVIGATE_PREVIOUS) != 0;
     }
 
-    public static boolean hasFlagNoFullscreen(int imeOptions) {
-        if (FIELD_IME_FLAG_NO_FULLSCREEN == null)
-            return false;
-        return (imeOptions & OBJ_IME_FLAG_NO_FULLSCREEN) != 0;
-    }
-
     public static void performEditorActionNext(InputConnection ic) {
         ic.performEditorAction(EditorInfo.IME_ACTION_NEXT);
     }
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index fdf58f6ef2..61b2e93cc0 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -158,7 +158,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
 
     private View mKeyPreviewBackingView;
     private View mSuggestionsContainer;
-    private int mSuggestionsStripHeight;
     private SuggestionsView mSuggestionsView;
     private Suggest mSuggest;
     private CompletionInfo[] mApplicationSpecifiedCompletions;
@@ -612,7 +611,6 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
         mSuggestionsView = (SuggestionsView) view.findViewById(R.id.suggestions_view);
         if (mSuggestionsView != null)
             mSuggestionsView.setListener(this, view);
-        mSuggestionsStripHeight = (int)mResources.getDimension(R.dimen.suggestions_strip_height);
     }
 
     @Override
@@ -681,6 +679,8 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
 
         if (mSuggestionsView != null)
             mSuggestionsView.clear();
+        // The EditorInfo might have a flag that affects fullscreen mode.
+        updateFullscreenMode();
         setSuggestionStripShownInternal(
                 isSuggestionsStripVisible(), /* needsInputViewShown */ false);
         // Delay updating suggestions because keyboard input view may not be shown at this point.
@@ -945,14 +945,9 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
             final boolean shouldShowSuggestions = shown
                     && (needsInputViewShown ? mKeyboardSwitcher.isInputViewShown() : true);
             if (isFullscreenMode()) {
-                // No need to have extra space to show the key preview.
-                mKeyPreviewBackingView.setVisibility(View.GONE);
                 mSuggestionsContainer.setVisibility(
                         shouldShowSuggestions ? View.VISIBLE : View.GONE);
             } else {
-                // We must control the visibility of the suggestion strip in order to avoid clipped
-                // key previews, even when we don't show the suggestion strip.
-                mKeyPreviewBackingView.setVisibility(View.VISIBLE);
                 mSuggestionsContainer.setVisibility(
                         shouldShowSuggestions ? View.VISIBLE : View.INVISIBLE);
             }
@@ -971,12 +966,14 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
             return;
         final int backingHeight = (mKeyPreviewBackingView.getVisibility() == View.GONE) ? 0
                 : mKeyPreviewBackingView.getHeight();
-        final int extraHeight = mSuggestionsContainer.getHeight() + backingHeight;
+        final int suggestionsHeight = (mSuggestionsContainer.getVisibility() == View.GONE) ? 0
+                : mSuggestionsContainer.getHeight();
+        final int extraHeight = backingHeight + suggestionsHeight;
         int touchY = extraHeight;
         // Need to set touchable region only if input view is being shown
         if (mKeyboardSwitcher.isInputViewShown()) {
             if (mSuggestionsContainer.getVisibility() == View.VISIBLE) {
-                touchY -= mSuggestionsStripHeight;
+                touchY -= suggestionsHeight;
             }
             final int touchWidth = inputView.getWidth();
             final int touchHeight = inputView.getHeight() + extraHeight
@@ -994,16 +991,18 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
 
     @Override
     public boolean onEvaluateFullscreenMode() {
-        final EditorInfo ei = getCurrentInputEditorInfo();
-        if (ei != null) {
-            final int imeOptions = ei.imeOptions;
-            if (EditorInfoCompatUtils.hasFlagNoFullscreen(imeOptions))
-                return false;
-            if ((imeOptions & EditorInfo.IME_FLAG_NO_EXTRACT_UI) != 0)
-                return false;
-        }
+        return super.onEvaluateFullscreenMode()
+                && mResources.getBoolean(R.bool.config_use_fullscreen_mode);
+    }
+
+    @Override
+    public void updateFullscreenMode() {
+        super.updateFullscreenMode();
 
-        return mResources.getBoolean(R.bool.config_use_fullscreen_mode);
+        if (mKeyPreviewBackingView == null) return;
+        // In fullscreen mode, no need to have extra space to show the key preview.
+        // If not, we should have extra space above the keyboard to show the key preview.
+        mKeyPreviewBackingView.setVisibility(isFullscreenMode() ? View.GONE : View.VISIBLE);
     }
 
     @Override
-- 
GitLab