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