Ensure the intro view is always the top view in the draglayer if it is present

-> On devices post-api-16, we can achieve this just with child drawing order
   but on level 16 devices, child drawing order doesn't give us touch
   dispatch which is problematic for the intro screen.

issue 13796017

Change-Id: Ibf89ae91d8489f2de1eb9c8f235a0e6e6aed1847
diff --git a/src/com/android/launcher3/DragLayer.java b/src/com/android/launcher3/DragLayer.java
index cd51c96..c54db01 100644
--- a/src/com/android/launcher3/DragLayer.java
+++ b/src/com/android/launcher3/DragLayer.java
@@ -122,10 +122,14 @@
         setInsets(child, mInsets, new Rect());
     }
 
-    public void showOverlayView(View introScreen) {
+    public void showOverlayView(View overlayView) {
         LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
-        mOverlayView = introScreen;
-        addView(introScreen, lp);
+        mOverlayView = overlayView;
+        addView(overlayView, lp);
+
+        // ensure that the overlay view stays on top. we can't use drawing order for this
+        // because in API level 16 touch dispatch doesn't respect drawing order.
+        mOverlayView.bringToFront();
     }
 
     public void dismissOverlayView() {
@@ -774,6 +778,11 @@
 
     @Override
     public void onChildViewAdded(View parent, View child) {
+        if (mOverlayView != null) {
+            // ensure that the overlay view stays on top. we can't use drawing order for this
+            // because in API level 16 touch dispatch doesn't respect drawing order.
+            mOverlayView.bringToFront();
+        }
         updateChildIndices();
     }
 
@@ -785,6 +794,11 @@
     @Override
     public void bringChildToFront(View child) {
         super.bringChildToFront(child);
+        if (child != mOverlayView && mOverlayView != null) {
+            // ensure that the overlay view stays on top. we can't use drawing order for this
+            // because in API level 16 touch dispatch doesn't respect drawing order.
+            mOverlayView.bringToFront();
+        }
         updateChildIndices();
     }
 
@@ -792,8 +806,7 @@
         mTopViewIndex = -1;
         int childCount = getChildCount();
         for (int i = 0; i < childCount; i++) {
-            if (getChildAt(i) instanceof DragView ||
-                    getChildAt(i) == mOverlayView) {
+            if (getChildAt(i) instanceof DragView) {
                 mTopViewIndex = i;
             }
         }