Cancel more suggestions when its outside is touched

Bug: 5241105
Change-Id: Ic28afaf998dabd3c5529286a3e60400d733d3d82
diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
index f595510..f54a485 100644
--- a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
@@ -142,6 +142,13 @@
         // Nothing to do with.
     }
 
+    private final View.OnTouchListener mMotionEventDelegate = new View.OnTouchListener() {
+        @Override
+        public boolean onTouch(View view, MotionEvent me) {
+            return MoreSuggestionsView.this.dispatchTouchEvent(me);
+        }
+    };
+
     @Override
     public void showMoreKeysPanel(View parentView, Controller controller, int pointX, int pointY,
             PopupWindow window, KeyboardActionListener listener) {
@@ -160,6 +167,10 @@
                 - (container.getMeasuredHeight() - container.getPaddingBottom())
                 + parentView.getPaddingTop() + mCoordinates[1];
 
+        container.setOnTouchListener(mMotionEventDelegate);
+        window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
+        window.setFocusable(true);
+        window.setOutsideTouchable(true);
         window.setContentView(container);
         window.setWidth(container.getMeasuredWidth());
         window.setHeight(container.getMeasuredHeight());
@@ -215,6 +226,19 @@
     };
 
     @Override
+    public boolean dispatchTouchEvent(MotionEvent me) {
+        final int x = (int)me.getX();
+        final int y = (int)me.getY();
+        final boolean inside = (x >= 0 && x < getWidth() && y >= 0 && y < getHeight());
+        if (inside) {
+            return super.dispatchTouchEvent(me);
+        } else {
+            dismissMoreKeysPanel();
+            return true;
+        }
+    }
+
+    @Override
     public boolean onTouchEvent(MotionEvent me) {
         final int action = me.getAction();
         final long eventTime = me.getEventTime();