Make PointerTracker aware of that popup panel is showing

Bug: 5070598
Change-Id: I0604287b8c373e4763b4ccf88c0bd7235af907d5
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 1010adb..f54084b 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -865,6 +865,11 @@
         requestLayout();
     }
 
+    @Override
+    public boolean dismissPopupPanel() {
+        return false;
+    }
+
     public void purgeKeyboardAndClosing() {
         mKeyboard = null;
         closing();
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
index 0ad91db..22752d0 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardBaseView.java
@@ -400,11 +400,10 @@
         mPopupPanel = popupPanel;
         mPopupPanelPointerTrackerId = tracker.mPointerId;
 
-        tracker.onLongPressed();
-        popupPanel.showPanel(this, parentKey, tracker, mPopupWindow);
+        popupPanel.showPopupPanel(this, parentKey, tracker, mPopupWindow);
         final int translatedX = popupPanel.translateX(tracker.getLastX());
         final int translatedY = popupPanel.translateY(tracker.getLastY());
-        tracker.onDownEvent(translatedX, translatedY, SystemClock.uptimeMillis(), popupPanel);
+        tracker.onShowPopupPanel(translatedX, translatedY, SystemClock.uptimeMillis(), popupPanel);
 
         invalidateAllKeys();
         return true;
@@ -546,11 +545,12 @@
     @Override
     public void closing() {
         super.closing();
-        dismissMiniKeyboard();
+        dismissPopupPanel();
         mPopupPanelCache.clear();
     }
 
-    public boolean dismissMiniKeyboard() {
+    @Override
+    public boolean dismissPopupPanel() {
         if (mPopupWindow != null && mPopupWindow.isShowing()) {
             mPopupWindow.dismiss();
             mPopupPanel = null;
@@ -562,7 +562,7 @@
     }
 
     public boolean handleBack() {
-        return dismissMiniKeyboard();
+        return dismissPopupPanel();
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index e66ea7b..f27f74c 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -67,6 +67,7 @@
         public void showKeyPreview(int keyIndex, PointerTracker tracker);
         public void cancelShowKeyPreview(PointerTracker tracker);
         public void dismissKeyPreview(PointerTracker tracker);
+        public boolean dismissPopupPanel();
     }
 
     public interface TimerProxy {
@@ -117,9 +118,12 @@
     // true if keyboard layout has been changed.
     private boolean mKeyboardLayoutHasBeenChanged;
 
-    // true if event is already translated to a key action (long press or mini-keyboard)
+    // true if event is already translated to a key action.
     private boolean mKeyAlreadyProcessed;
 
+    // true if this pointer has been long-pressed and is showing a popup panel.
+    private boolean mIsShowingPopupPanel;
+
     // true if this pointer is repeatable key
     private boolean mIsRepeatableKey;
 
@@ -579,6 +583,10 @@
         }
         final int keyIndex = onUpKey(keyX, keyY, eventTime);
         setReleasedKeyGraphics(keyIndex);
+        if (mIsShowingPopupPanel) {
+            mDrawingProxy.dismissPopupPanel();
+            mIsShowingPopupPanel = false;
+        }
         if (mKeyAlreadyProcessed)
             return;
         if (!mIsRepeatableKey) {
@@ -586,6 +594,12 @@
         }
     }
 
+    public void onShowPopupPanel(int x, int y, long eventTime, KeyEventHandler handler) {
+        onLongPressed();
+        onDownEvent(x, y, eventTime, handler);
+        mIsShowingPopupPanel = true;
+    }
+
     public void onLongPressed() {
         mKeyAlreadyProcessed = true;
         setReleasedKeyGraphics(mKeyIndex);
@@ -612,6 +626,10 @@
         mDrawingProxy.cancelShowKeyPreview(this);
         setReleasedKeyGraphics(mKeyIndex);
         mIsInSlidingKeyInput = false;
+        if (mIsShowingPopupPanel) {
+            mDrawingProxy.dismissPopupPanel();
+            mIsShowingPopupPanel = false;
+        }
     }
 
     private void startRepeatKey(int keyIndex) {
diff --git a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
index a90f57c..2741ee8 100644
--- a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
@@ -59,19 +59,16 @@
         public void onCodeInput(int primaryCode, int[] keyCodes, int x, int y) {
             mParentKeyboardView.getKeyboardActionListener()
                     .onCodeInput(primaryCode, keyCodes, x, y);
-            mParentKeyboardView.dismissMiniKeyboard();
         }
 
         @Override
         public void onTextInput(CharSequence text) {
             mParentKeyboardView.getKeyboardActionListener().onTextInput(text);
-            mParentKeyboardView.dismissMiniKeyboard();
         }
 
         @Override
         public void onCancelInput() {
             mParentKeyboardView.getKeyboardActionListener().onCancelInput();
-            mParentKeyboardView.dismissMiniKeyboard();
         }
 
         @Override
@@ -159,7 +156,7 @@
     }
 
     @Override
-    public void showPanel(LatinKeyboardBaseView parentKeyboardView, Key parentKey,
+    public void showPopupPanel(LatinKeyboardBaseView parentKeyboardView, Key parentKey,
             PointerTracker tracker, PopupWindow window) {
         mParentKeyboardView = parentKeyboardView;
         final View container = (View)getParent();
@@ -192,6 +189,11 @@
     }
 
     @Override
+    public boolean dismissPopupPanel() {
+        return mParentKeyboardView.dismissPopupPanel();
+    }
+
+    @Override
     public int translateX(int x) {
         return x - mOriginX;
     }
diff --git a/java/src/com/android/inputmethod/keyboard/PopupPanel.java b/java/src/com/android/inputmethod/keyboard/PopupPanel.java
index f94d1c5..dc526e7 100644
--- a/java/src/com/android/inputmethod/keyboard/PopupPanel.java
+++ b/java/src/com/android/inputmethod/keyboard/PopupPanel.java
@@ -26,7 +26,7 @@
      * @param tracker the pointer tracker that pressesd the parent key
      * @param window PopupWindow to be used to show this popup panel
      */
-    public void showPanel(LatinKeyboardBaseView parentKeyboardView, Key parentKey,
+    public void showPopupPanel(LatinKeyboardBaseView parentKeyboardView, Key parentKey,
             PointerTracker tracker, PopupWindow window);
 
     /**