Handle back key and outside touch correctly in more suggestions window

Bug: 5385284
Change-Id: Ic0517182d294c79e37c88f1ef30cb4d2917b2800
diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
index 5a2eb16..51f6c04 100644
--- a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java
@@ -163,8 +163,6 @@
                 - (container.getMeasuredHeight() - container.getPaddingBottom())
                 + parentView.getPaddingTop() + mCoordinates[1];
 
-        window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
-        window.setOutsideTouchable(true);
         window.setContentView(container);
         window.setWidth(container.getMeasuredWidth());
         window.setHeight(container.getMeasuredHeight());
@@ -221,22 +219,6 @@
     };
 
     @Override
-    public boolean dispatchTouchEvent(MotionEvent me) {
-        final int index = me.getActionIndex();
-        final int id = me.getPointerId(index);
-        final PointerTracker tracker = PointerTracker.getPointerTracker(id, this);
-        final int x = (int)me.getX(index);
-        final int y = (int)me.getY(index);
-        final boolean inside = (x >= 0 && x < getWidth() && y >= 0 && y < getHeight());
-        if (inside || tracker.isInSlidingKeyInput()) {
-            return super.dispatchTouchEvent(me);
-        } else {
-            dismissMoreKeysPanel();
-            return true;
-        }
-    }
-
-    @Override
     public boolean onTouchEvent(MotionEvent me) {
         final int action = me.getAction();
         final long eventTime = me.getEventTime();
diff --git a/java/src/com/android/inputmethod/latin/SuggestionsView.java b/java/src/com/android/inputmethod/latin/SuggestionsView.java
index 9d0e42a..fe54f4a 100644
--- a/java/src/com/android/inputmethod/latin/SuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/SuggestionsView.java
@@ -27,6 +27,7 @@
 import android.graphics.Rect;
 import android.graphics.Typeface;
 import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Message;
 import android.os.SystemClock;
@@ -506,10 +507,22 @@
         mMoreSuggestionsView = (MoreSuggestionsView)mMoreSuggestionsContainer
                 .findViewById(R.id.more_suggestions_view);
         mMoreSuggestionsBuilder = new MoreSuggestions.Builder(mMoreSuggestionsView);
-        mMoreSuggestionsWindow = new PopupWindow(context);
-        mMoreSuggestionsWindow.setWindowLayoutMode(
+
+        final PopupWindow moreWindow = new PopupWindow(context);
+        moreWindow.setWindowLayoutMode(
                 ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-        mMoreSuggestionsWindow.setBackgroundDrawable(null);
+        moreWindow.setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));
+        moreWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
+        moreWindow.setFocusable(true);
+        moreWindow.setOutsideTouchable(true);
+        moreWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
+            @Override
+            public void onDismiss() {
+                mKeyboardView.dimEntireKeyboard(false);
+            }
+        });
+        mMoreSuggestionsWindow = moreWindow;
+
         final Resources res = context.getResources();
         mMoreSuggestionsModalTolerance = res.getDimensionPixelOffset(
                 R.dimen.more_suggestions_modal_tolerance);
@@ -517,21 +530,6 @@
                 context, mMoreSuggestionsSlidingListener);
     }
 
-    private final View.OnTouchListener mMoreSuggestionsCanceller = new View.OnTouchListener() {
-        @Override
-        public boolean onTouch(View view, MotionEvent me) {
-            if (!mMoreSuggestionsWindow.isShowing()) return false;
-
-            switch (me.getAction()) {
-            case MotionEvent.ACTION_UP:
-            case MotionEvent.ACTION_POINTER_UP:
-                return mMoreSuggestionsView.dismissMoreKeysPanel();
-            default:
-                return true;
-            }
-        }
-    };
-
     /**
      * A connection back to the input method.
      * @param listener
@@ -726,8 +724,6 @@
     private boolean dismissMoreSuggestions() {
         if (mMoreSuggestionsWindow.isShowing()) {
             mMoreSuggestionsWindow.dismiss();
-            mKeyboardView.dimEntireKeyboard(false);
-            mKeyboardView.setOnTouchListener(null);
             return true;
         }
         return false;
@@ -767,7 +763,6 @@
             mOriginX = mLastX;
             mOriginY = mLastY;
             mKeyboardView.dimEntireKeyboard(true);
-            mKeyboardView.setOnTouchListener(mMoreSuggestionsCanceller);
             for (int i = 0; i < params.mSuggestionsCountInStrip; i++) {
                 mWords.get(i).setPressed(false);
             }