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

Commit e96b939b authored by Tiger's avatar Tiger Committed by Tiger Huang
Browse files

Notify DecorContentParent about content change

ActionBarOverlayLayout which implements DecorContentParent would stop
dispatching the WindowInsets dispatched from its parent view, and then
will dispatch it during onMeasure when there is any insets change.

When the content view is changed, the ViewRootImpl will re-send the
WindowInsets to the hierarchy. However, ActionBarOverlayLayout would
stop dispatching it because the insets doesn't change. So that the new
content view won't have a chance to apply the insets.

This CL notifies ActionBarOverlayLayout when the content view is changed
and reset mLast[...]Insets used to compare the insets change.

Bug: 328745925
Flag: NA
Test: atest MagnifierTest
Change-Id: Iaf90447284f897fa2607984c36e12d596f7976c5
parent 7c02512c
Loading
Loading
Loading
Loading
+21 −6
Original line number Diff line number Diff line
@@ -537,9 +537,14 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
        }
        mContentParent.requestApplyInsets();
        final Callback cb = getCallback();
        if (cb != null && !isDestroyed()) {
        if (!isDestroyed()) {
            if (cb != null) {
                cb.onContentChanged();
            }
            if (mDecorContentParent != null) {
                mDecorContentParent.notifyContentChanged();
            }
        }
        mContentParentExplicitlySet = true;
    }

@@ -568,9 +573,14 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
        }
        mContentParent.requestApplyInsets();
        final Callback cb = getCallback();
        if (cb != null && !isDestroyed()) {
        if (!isDestroyed()) {
            if (cb != null) {
                cb.onContentChanged();
            }
            if (mDecorContentParent != null) {
                mDecorContentParent.notifyContentChanged();
            }
        }
        mContentParentExplicitlySet = true;
    }

@@ -586,9 +596,14 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
        mContentParent.addView(view, params);
        mContentParent.requestApplyInsets();
        final Callback cb = getCallback();
        if (cb != null && !isDestroyed()) {
        if (!isDestroyed()) {
            if (cb != null) {
                cb.onContentChanged();
            }
            if (mDecorContentParent != null) {
                mDecorContentParent.notifyContentChanged();
            }
        }
    }

    @Override
+7 −0
Original line number Diff line number Diff line
@@ -898,6 +898,13 @@ public class ActionBarOverlayLayout extends ViewGroup implements DecorContentPar
        mDecorToolbar.dismissPopupMenus();
    }

    @Override
    public void notifyContentChanged() {
        mLastBaseContentInsets.setEmpty();
        mLastBaseInnerInsets = WindowInsets.CONSUMED;
        mLastInnerInsets = WindowInsets.CONSUMED;
    }

    public static class LayoutParams extends MarginLayoutParams {
        public LayoutParams(Context c, AttributeSet attrs) {
            super(c, attrs);
+2 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.os.Parcelable;
import android.util.SparseArray;
import android.view.Menu;
import android.view.Window;

import com.android.internal.view.menu.MenuPresenter;

/**
@@ -49,4 +50,5 @@ public interface DecorContentParent {
    void saveToolbarHierarchyState(SparseArray<Parcelable> toolbarStates);
    void restoreToolbarHierarchyState(SparseArray<Parcelable> toolbarStates);
    void dismissPopups();
    void notifyContentChanged();
}