Fix NPE by disabling key preview popup of Emoji palette

Bug: 15579928
Change-Id: I6bcf885f2c1aa37b337a85978409ccf41e459c2a
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index 89a60cc..88cde11 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -195,7 +195,8 @@
         mHintLabel = hintLabel;
         mLabelFlags = labelFlags;
         mBackgroundType = backgroundType;
-        mActionFlags = 0;
+        // TODO: Pass keyActionFlags as an argument.
+        mActionFlags = ACTION_FLAGS_NO_KEY_PREVIEW;
         mMoreKeys = null;
         mMoreKeysColumnAndFlags = 0;
         mLabel = label;
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index bcd0cd8..9a859bf 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -446,15 +446,15 @@
 
     @Override
     public void showKeyPreview(final Key key) {
-        // If key is invalid or IME is already closed, we must not show key preview.
-        // Trying to show key preview while root window is closed causes
-        // WindowManager.BadTokenException.
-        if (key == null) {
+        // If the key is invalid or has no key preview, we must not show key preview.
+        if (key == null || key.noKeyPreview()) {
             return;
         }
-
-        final KeyPreviewDrawParams previewParams = mKeyPreviewDrawParams;
         final Keyboard keyboard = getKeyboard();
+        if (keyboard == null) {
+            return;
+        }
+        final KeyPreviewDrawParams previewParams = mKeyPreviewDrawParams;
         if (!previewParams.isPopupEnabled()) {
             previewParams.setVisibleOffset(-keyboard.mVerticalGap);
             return;
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
index e694998..8bff275 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java
@@ -444,6 +444,7 @@
                     continue;
                 }
                 final int labelFlags = row.getDefaultKeyLabelFlags();
+                // TODO: Should be able to assign default keyActionFlags as well.
                 final int backgroundType = row.getDefaultBackgroundType();
                 final int x = (int)row.getKeyX(null);
                 final int y = row.getKeyY();
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java
index 6db1d02..92daf07 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java
@@ -45,6 +45,7 @@
 
     private final ArrayDeque<RowAttributes> mRowAttributesStack = new ArrayDeque<>();
 
+    // TODO: Add keyActionFlags.
     private static class RowAttributes {
         /** Default width of a key in this row. */
         public final float mDefaultKeyWidth;