Merge "Exclude non-observable insets change" into rvc-dev am: 1f6b99d5fa
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11592755 Change-Id: I63a484ff464ee0d2ccf733a6512a901ade8fe3a0
This commit is contained in:
@@ -575,21 +575,23 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
|
||||
|
||||
@VisibleForTesting
|
||||
public boolean onStateChanged(InsetsState state) {
|
||||
boolean localStateChanged = !mState.equals(state, true /* excludingCaptionInsets */)
|
||||
boolean stateChanged = !mState.equals(state, true /* excludingCaptionInsets */,
|
||||
false /* excludeInvisibleIme */)
|
||||
|| !captionInsetsUnchanged();
|
||||
if (!localStateChanged && mLastDispatchedState.equals(state)) {
|
||||
if (!stateChanged && mLastDispatchedState.equals(state)) {
|
||||
return false;
|
||||
}
|
||||
if (DEBUG) Log.d(TAG, "onStateChanged: " + state);
|
||||
updateState(state);
|
||||
|
||||
boolean localStateChanged = !mState.equals(mLastDispatchedState,
|
||||
true /* excludingCaptionInsets */, true /* excludeInvisibleIme */);
|
||||
mLastDispatchedState.set(state, true /* copySources */);
|
||||
|
||||
applyLocalVisibilityOverride();
|
||||
if (localStateChanged) {
|
||||
if (DEBUG) Log.d(TAG, "onStateChanged, notifyInsetsChanged");
|
||||
if (DEBUG) Log.d(TAG, "onStateChanged, notifyInsetsChanged, send state to WM: " + mState);
|
||||
mHost.notifyInsetsChanged();
|
||||
}
|
||||
if (!mState.equals(mLastDispatchedState, true /* excludingCaptionInsets */)) {
|
||||
if (DEBUG) Log.d(TAG, "onStateChanged, send state to WM: " + mState);
|
||||
updateRequestedState();
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -191,6 +191,14 @@ public class InsetsSource implements Parcelable {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
return equals(o, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param excludeInvisibleImeFrames If {@link InsetsState#ITYPE_IME} frames should be ignored
|
||||
* when IME is not visible.
|
||||
*/
|
||||
public boolean equals(Object o, boolean excludeInvisibleImeFrames) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
@@ -198,6 +206,7 @@ public class InsetsSource implements Parcelable {
|
||||
|
||||
if (mType != that.mType) return false;
|
||||
if (mVisible != that.mVisible) return false;
|
||||
if (excludeInvisibleImeFrames && !mVisible && mType == ITYPE_IME) return true;
|
||||
if (!Objects.equals(mVisibleFrame, that.mVisibleFrame)) return false;
|
||||
return mFrame.equals(that.mFrame);
|
||||
}
|
||||
|
||||
@@ -555,7 +555,7 @@ public class InsetsState implements Parcelable {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
return equals(o, false);
|
||||
return equals(o, false, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -564,10 +564,13 @@ public class InsetsState implements Parcelable {
|
||||
* excluded.
|
||||
* @param excludingCaptionInsets {@code true} if we want to compare two InsetsState objects but
|
||||
* ignore the caption insets source value.
|
||||
* @param excludeInvisibleImeFrames If {@link #ITYPE_IME} frames should be ignored when IME is
|
||||
* not visible.
|
||||
* @return {@code true} if the two InsetsState objects are equal, {@code false} otherwise.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public boolean equals(Object o, boolean excludingCaptionInsets) {
|
||||
public boolean equals(Object o, boolean excludingCaptionInsets,
|
||||
boolean excludeInvisibleImeFrames) {
|
||||
if (this == o) { return true; }
|
||||
if (o == null || getClass() != o.getClass()) { return false; }
|
||||
|
||||
@@ -598,7 +601,7 @@ public class InsetsState implements Parcelable {
|
||||
if (otherSource == null) {
|
||||
return false;
|
||||
}
|
||||
if (!otherSource.equals(source)) {
|
||||
if (!otherSource.equals(source, excludeInvisibleImeFrames)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -678,7 +678,8 @@ public class InsetsControllerTest {
|
||||
final InsetsState currentState = new InsetsState(mController.getState());
|
||||
// The caption bar source should be synced with the info in mAttachInfo.
|
||||
assertEquals(captionFrame, currentState.peekSource(ITYPE_CAPTION_BAR).getFrame());
|
||||
assertTrue(currentState.equals(state, true /* excludingCaptionInsets*/));
|
||||
assertTrue(currentState.equals(state, true /* excludingCaptionInsets*/,
|
||||
true /* excludeInvisibleIme */));
|
||||
mController.setCaptionInsetsHeight(0);
|
||||
mController.onStateChanged(state);
|
||||
// The caption bar source should not be there at all, because we don't add empty
|
||||
|
||||
@@ -275,6 +275,15 @@ public class InsetsStateTest {
|
||||
assertEqualsAndHashCode();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEquals_excludeInvisibleIme() {
|
||||
mState.getSource(ITYPE_IME).setFrame(new Rect(0, 0, 100, 100));
|
||||
mState.getSource(ITYPE_IME).setVisible(false);
|
||||
mState2.getSource(ITYPE_IME).setFrame(new Rect(0, 0, 100, 200));
|
||||
mState2.getSource(ITYPE_IME).setVisible(false);
|
||||
assertTrue(mState2.equals(mState, true, true /* excludeInvisibleIme */));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testParcelUnparcel() {
|
||||
mState.getSource(ITYPE_IME).setFrame(new Rect(0, 0, 100, 100));
|
||||
|
||||
@@ -178,6 +178,7 @@ class InsetsStateController {
|
||||
if (imeSource != null && imeSource.isVisible()) {
|
||||
imeSource = new InsetsSource(imeSource);
|
||||
imeSource.setVisible(false);
|
||||
imeSource.setFrame(0, 0, 0, 0);
|
||||
state = new InsetsState(state);
|
||||
state.addSource(imeSource);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user