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

Commit d3a27525 authored by Tiger Huang's avatar Tiger Huang Committed by Android (Google) Code Review
Browse files

Merge "Fix the leakage of the transient bar" into main

parents 5e9d4d99 f7e7b4e1
Loading
Loading
Loading
Loading
+48 −8
Original line number Original line Diff line number Diff line
@@ -156,11 +156,11 @@ class InsetsPolicy {
        final Resources r = mPolicy.getContext().getResources();
        final Resources r = mPolicy.getContext().getResources();
        mHideNavBarForKeyboard = r.getBoolean(R.bool.config_hideNavBarForKeyboard);
        mHideNavBarForKeyboard = r.getBoolean(R.bool.config_hideNavBarForKeyboard);
        mShowingTransientControlTarget = new ControlTarget(
        mShowingTransientControlTarget = new ControlTarget(
                displayContent, true /* showing */, false /* permanent */);
                this, true /* showing */, false /* permanent */);
        mShowingPermanentControlTarget = new ControlTarget(
        mShowingPermanentControlTarget = new ControlTarget(
                displayContent, true /* showing */, true /* permanent */);
                this, true /* showing */, true /* permanent */);
        mHidingPermanentControlTarget = new ControlTarget(
        mHidingPermanentControlTarget = new ControlTarget(
                displayContent, false /* showing */, true /* permanent */);
                this, false /* showing */, true /* permanent */);
    }
    }


    /** Updates the target which can control system bars. */
    /** Updates the target which can control system bars. */
@@ -209,6 +209,17 @@ class InsetsPolicy {


        mStatusBar.updateVisibility(statusControlTarget, Type.statusBars());
        mStatusBar.updateVisibility(statusControlTarget, Type.statusBars());
        mNavBar.updateVisibility(navControlTarget, Type.navigationBars());
        mNavBar.updateVisibility(navControlTarget, Type.navigationBars());

        if (((mHidingTransientTypes & Type.statusBars()) != 0
                        && mHidingTransientStatusControlTarget != mFakeStatusControlTarget
                        && mHidingTransientStatusControlTarget != statusControlTarget)
                || ((mHidingTransientTypes & Type.navigationBars()) != 0
                        && mHidingTransientNavControlTarget != mFakeNavControlTarget
                        && mHidingTransientNavControlTarget != navControlTarget)) {
            // The target responsible for playing the animation of hiding transient bars is gone.
            // Here aborts the transient state.
            abortTransient();
        }
    }
    }


    boolean hasHiddenSources(@InsetsType int types) {
    boolean hasHiddenSources(@InsetsType int types) {
@@ -243,6 +254,7 @@ class InsetsPolicy {
        }
        }
        if (mShowingTransientTypes != showingTransientTypes) {
        if (mShowingTransientTypes != showingTransientTypes) {
            mShowingTransientTypes = showingTransientTypes;
            mShowingTransientTypes = showingTransientTypes;
            mHidingTransientTypes &= ~showingTransientTypes;
            StatusBarManagerInternal statusBarManagerInternal =
            StatusBarManagerInternal statusBarManagerInternal =
                    mPolicy.getStatusBarManagerInternal();
                    mPolicy.getStatusBarManagerInternal();
            if (statusBarManagerInternal != null) {
            if (statusBarManagerInternal != null) {
@@ -599,10 +611,10 @@ class InsetsPolicy {
     * updateBarControlTarget(mFocusedWin) after this invocation.
     * updateBarControlTarget(mFocusedWin) after this invocation.
     */
     */
    private void abortTransient() {
    private void abortTransient() {
        if (mShowingTransientTypes == 0) {
        if (mShowingTransientTypes == 0 && mHidingTransientTypes == 0) {
            return;
            return;
        }
        }
        sendAbortTransient(mShowingTransientTypes);
        sendAbortTransient(mShowingTransientTypes | mHidingTransientTypes);
        mShowingTransientTypes = 0;
        mShowingTransientTypes = 0;
        mHidingTransientTypes = 0;
        mHidingTransientTypes = 0;
        mHidingTransientStatusControlTarget = null;
        mHidingTransientStatusControlTarget = null;
@@ -925,6 +937,8 @@ class InsetsPolicy {
        @NonNull
        @NonNull
        private final InsetsState mState = new InsetsState();
        private final InsetsState mState = new InsetsState();
        @NonNull
        @NonNull
        private final InsetsPolicy mInsetsPolicy;
        @NonNull
        private final InsetsStateController mStateController;
        private final InsetsStateController mStateController;
        @NonNull
        @NonNull
        private final InsetsController mInsetsController;
        private final InsetsController mInsetsController;
@@ -932,15 +946,19 @@ class InsetsPolicy {
        private final int mRequestedVisibleTypes;
        private final int mRequestedVisibleTypes;
        @NonNull
        @NonNull
        private final String mName;
        private final String mName;
        @InsetsType
        private int mAnimatingTypes;


        ControlTarget(@NonNull DisplayContent displayContent, boolean showing, boolean permanent) {
        ControlTarget(@NonNull InsetsPolicy insetsPolicy, boolean showing, boolean permanent) {
            final String name = String.format(FORMAT,
            final String name = String.format(FORMAT,
                    showing ? "Showing" : "Hiding",
                    showing ? "Showing" : "Hiding",
                    permanent ? "Permanent" : "Transient");
                    permanent ? "Permanent" : "Transient");
            final DisplayContent displayContent = insetsPolicy.mDisplayContent;
            mHandler = displayContent.mWmService.mH;
            mHandler = displayContent.mWmService.mH;
            mGlobalLock = displayContent.mWmService.mGlobalLock;
            mGlobalLock = displayContent.mWmService.mGlobalLock;
            mStateController = displayContent.getInsetsStateController();
            mStateController = displayContent.getInsetsStateController();
            mInsetsController = new InsetsController(new Host(mHandler, name));
            mInsetsPolicy = insetsPolicy;
            mInsetsController = new InsetsController(new Host(mHandler, name, this));
            mRequestedVisibleTypes = Type.defaultVisible() & ~(showing ? 0 : Type.systemBars());
            mRequestedVisibleTypes = Type.defaultVisible() & ~(showing ? 0 : Type.systemBars());
            if (!showing) {
            if (!showing) {
                mInsetsController.hide(Type.systemBars());
                mInsetsController.hide(Type.systemBars());
@@ -978,6 +996,19 @@ class InsetsPolicy {
            return mRequestedVisibleTypes;
            return mRequestedVisibleTypes;
        }
        }


        @InsetsType
        @Override
        public int getAnimatingTypes() {
            return mAnimatingTypes;
        }

        @Override
        public void setAnimatingTypes(@InsetsType int animatingTypes,
                @Nullable ImeTracker.Token statsToken) {
            mInsetsPolicy.onAnimatingTypesChanged(this, mAnimatingTypes, animatingTypes);
            mAnimatingTypes = animatingTypes;
        }

        @NonNull
        @NonNull
        @Override
        @Override
        public String toString() {
        public String toString() {
@@ -993,10 +1024,13 @@ class InsetsPolicy {
        private final Handler mHandler;
        private final Handler mHandler;
        @NonNull
        @NonNull
        private final String mName;
        private final String mName;
        @NonNull
        private final InsetsControlTarget mControlTarget;


        Host(@NonNull Handler handler, @NonNull String name) {
        Host(@NonNull Handler handler, @NonNull String name, @NonNull InsetsControlTarget target) {
            mHandler = handler;
            mHandler = handler;
            mName = name;
            mName = name;
            mControlTarget = target;
        }
        }


        @NonNull
        @NonNull
@@ -1042,6 +1076,12 @@ class InsetsPolicy {
            t.close();
            t.close();
        }
        }


        @Override
        public void updateAnimatingTypes(@InsetsType int animatingTypes,
                @Nullable ImeTracker.Token statsToken) {
            mControlTarget.setAnimatingTypes(animatingTypes, statsToken);
        }

        @Override
        @Override
        public void updateRequestedVisibleTypes(@InsetsType int types,
        public void updateRequestedVisibleTypes(@InsetsType int types,
                @Nullable ImeTracker.Token statsToken) {
                @Nullable ImeTracker.Token statsToken) {