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

Commit 81ba11ec authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Put dismiss end target at navigation bar

This makes the animation when exiting docked mode a bit nicer
when you fling the divider towards to the navigation bar. However,
since the divider ends at the navigation bar, we need to immediately
dismiss it instead of fading out when the divider is fully occluded
by the navigation bar.

Change-Id: Ic5432fd118cb71be36485667b2c537caf5065ce5
parent b251a2f5
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -460,6 +460,11 @@ public interface WindowManagerPolicy {

        /** Unregister a system listener for touch events */
        void unregisterPointerEventListener(PointerEventListener listener);

        /**
         * @return The content insets of the docked divider window.
         */
        int getDockedDividerInsetsLw();
    }

    public interface PointerEventListener {
+3 −3
Original line number Diff line number Diff line
@@ -136,8 +136,7 @@ public class DividerSnapAlgorithm {
                    / (mFirstSplitTarget.position - getStartInset());
        } else if (position > mLastSplitTarget.position) {
            return (float) (position - mLastSplitTarget.position)
                    / (mDismissEndTarget.position - getEndInset()
                            - mLastSplitTarget.position - mDividerSize);
                    / (mDismissEndTarget.position - mLastSplitTarget.position - mDividerSize);
        }
        return 0f;
    }
@@ -222,7 +221,8 @@ public class DividerSnapAlgorithm {
                addMiddleTarget(isHorizontalDivision);
                break;
        }
        mTargets.add(new SnapTarget(dividerMax, SnapTarget.FLAG_DISMISS_END, 0.35f));
        int navBarSize = isHorizontalDivision ? mInsets.bottom : mInsets.right;
        mTargets.add(new SnapTarget(dividerMax - navBarSize, SnapTarget.FLAG_DISMISS_END, 0.35f));
    }

    private void addFixedDivisionTargets(boolean isHorizontalDivision) {
+19 −5
Original line number Diff line number Diff line
@@ -2645,11 +2645,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                }
            }
        } else if (win.getAttrs().type == TYPE_DOCK_DIVIDER) {
            if (transit == TRANSIT_ENTER || transit == TRANSIT_SHOW) {
                return R.anim.fade_in;
            } else if (transit == TRANSIT_EXIT) {
                return R.anim.fade_out;
            }
            return selectDockedDividerAnimationLw(win, transit);
        }

        if (transit == TRANSIT_PREVIEW_DONE) {
@@ -2669,6 +2665,24 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        return 0;
    }

    private int selectDockedDividerAnimationLw(WindowState win, int transit) {
        int insets = mWindowManagerFuncs.getDockedDividerInsetsLw();

        // If the divider is behind the navigation bar, don't animate.
        if (mNavigationBar != null
                && (win.getFrameLw().top + insets >= mNavigationBar.getFrameLw().top
                        || win.getFrameLw().left + insets >= mNavigationBar.getFrameLw().left)) {
            return 0;
        }
        if (transit == TRANSIT_ENTER || transit == TRANSIT_SHOW) {
            return R.anim.fade_in;
        } else if (transit == TRANSIT_EXIT) {
            return R.anim.fade_out;
        } else {
            return 0;
        }
    }

    @Override
    public void selectRotationAnimationLw(int anim[]) {
        if (PRINT_ANIM) Slog.i(TAG, "selectRotationAnimation mTopFullscreen="
+4 −0
Original line number Diff line number Diff line
@@ -72,6 +72,10 @@ public class DockedStackDividerController implements DimLayerUser {
        return mDividerWindowWidth - 2 * mDividerInsets;
    }

    int getContentInsets() {
        return mDividerInsets;
    }

    void setResizing(boolean resizing) {
        mResizing = resizing;
    }
+5 −0
Original line number Diff line number Diff line
@@ -9619,6 +9619,11 @@ public class WindowManagerService extends IWindowManager.Stub
                && !appWindow.mTask.inFreeformWorkspace();
    }

    @Override
    public int getDockedDividerInsetsLw() {
        return getDefaultDisplayContentLocked().getDockedDividerController().getContentInsets();
    }

    void dumpPolicyLocked(PrintWriter pw, String[] args, boolean dumpAll) {
        pw.println("WINDOW MANAGER POLICY STATE (dumpsys window policy)");
        mPolicy.dump("    ", pw, args);