Honor EditorType's IME_FLAG_NO_EXTRACT_UI and IME_FLAG_NO_FULLSCREEN flags

Bug: 5030408
Change-Id: I1c5649725780cd063db7a437b8559b7f2573469c
diff --git a/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java b/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java
index bcdcef7..1947410 100644
--- a/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/EditorInfoCompatUtils.java
@@ -26,12 +26,16 @@
             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);
 
@@ -47,6 +51,12 @@
         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 ae32a3c..248f4dd 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -894,6 +894,14 @@
 
     @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;
+        }
         final Resources res = mResources;
         DisplayMetrics dm = res.getDisplayMetrics();
         float displayHeight = dm.heightPixels;