Fix 5603781: The pressed state of close icon does not disappear.

Change-Id: Ibd52cb5febf3a139d5007b6b2dd6adcb09934f99
diff --git a/src/com/android/camera/ui/SecondLevelIndicatorControlBar.java b/src/com/android/camera/ui/SecondLevelIndicatorControlBar.java
index bc29d88..c1b9b2f 100644
--- a/src/com/android/camera/ui/SecondLevelIndicatorControlBar.java
+++ b/src/com/android/camera/ui/SecondLevelIndicatorControlBar.java
@@ -106,23 +106,31 @@
         if (x > width) x = width;
 
         int index = getTouchViewIndex((int) x, width);
-        View b = getChildAt(index);
-        if (b == null) return true;
-        dispatchRelativeTouchEvent(b, event);
-        if ((mSelectedIndex != -1) && (index != mSelectedIndex)) {
-            View v = getChildAt(mSelectedIndex);
-            if (v instanceof AbstractIndicatorButton) {
-                AbstractIndicatorButton c = (AbstractIndicatorButton) v;
-                event.setAction(MotionEvent.ACTION_CANCEL);
-                dispatchRelativeTouchEvent(c, event);
-                c.dismissPopup();
-            }
 
-            if (action == MotionEvent.ACTION_MOVE) {
-                event.setAction(MotionEvent.ACTION_DOWN);
-                dispatchRelativeTouchEvent(b, event);
+        // Cancel the previous target if we moved out of it
+        if ((mSelectedIndex != -1) && (index != mSelectedIndex)) {
+            View p = getChildAt(mSelectedIndex);
+
+            int oldAction = event.getAction();
+            event.setAction(MotionEvent.ACTION_CANCEL);
+            dispatchRelativeTouchEvent(p, event);
+            event.setAction(oldAction);
+
+            if (p instanceof AbstractIndicatorButton) {
+                AbstractIndicatorButton b = (AbstractIndicatorButton) p;
+                b.dismissPopup();
             }
         }
+
+        // Send event to the target
+        View v = getChildAt(index);
+        if (v == null) return true;
+
+        // Change MOVE to DOWN if this is a new target
+        if (mSelectedIndex != index && action == MotionEvent.ACTION_MOVE) {
+            event.setAction(MotionEvent.ACTION_DOWN);
+        }
+        dispatchRelativeTouchEvent(v, event);
         mSelectedIndex = index;
         return true;
     }