Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b670f195 authored by Adam Cohen's avatar Adam Cohen
Browse files

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
parent 2d783ce2
Loading
Loading
Loading
Loading
+18 −5
Original line number Diff line number Diff line
@@ -122,10 +122,14 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang
        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 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang

    @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 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang
    @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 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang
        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;
            }
        }