summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/InsetsSourceConsumer.java7
-rw-r--r--core/java/android/view/InsetsSourceControl.java28
2 files changed, 34 insertions, 1 deletions
diff --git a/core/java/android/view/InsetsSourceConsumer.java b/core/java/android/view/InsetsSourceConsumer.java
index 8e50fed7f392..c2c8d63af7e6 100644
--- a/core/java/android/view/InsetsSourceConsumer.java
+++ b/core/java/android/view/InsetsSourceConsumer.java
@@ -46,6 +46,7 @@ import com.android.internal.annotations.VisibleForTesting;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.Objects;
import java.util.function.Supplier;
/**
@@ -120,7 +121,11 @@ public class InsetsSourceConsumer {
ImeTracing.getInstance().triggerClientDump("InsetsSourceConsumer#setControl",
mController.getHost().getInputMethodManager(), null /* icProto */);
}
- if (mSourceControl == control) {
+ if (Objects.equals(mSourceControl, control)) {
+ if (mSourceControl != null && mSourceControl != control) {
+ mSourceControl.release(SurfaceControl::release);
+ mSourceControl = control;
+ }
return;
}
SurfaceControl oldLeash = mSourceControl != null ? mSourceControl.getLeash() : null;
diff --git a/core/java/android/view/InsetsSourceControl.java b/core/java/android/view/InsetsSourceControl.java
index 9256beff0e4f..85ff93bcc5e1 100644
--- a/core/java/android/view/InsetsSourceControl.java
+++ b/core/java/android/view/InsetsSourceControl.java
@@ -152,6 +152,34 @@ public class InsetsSourceControl implements Parcelable {
}
}
+ @Override
+ public boolean equals(@Nullable Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ final InsetsSourceControl that = (InsetsSourceControl) o;
+ final SurfaceControl thatLeash = that.mLeash;
+ return mType == that.mType
+ && ((mLeash == thatLeash)
+ || (mLeash != null && thatLeash != null && mLeash.isSameSurface(thatLeash)))
+ && mSurfacePosition.equals(that.mSurfacePosition)
+ && mInsetsHint.equals(that.mInsetsHint)
+ && mSkipAnimationOnce == that.mSkipAnimationOnce;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = mType;
+ result = 31 * result + (mLeash != null ? mLeash.hashCode() : 0);
+ result = 31 * result + mSurfacePosition.hashCode();
+ result = 31 * result + mInsetsHint.hashCode();
+ result = 31 * result + (mSkipAnimationOnce ? 1 : 0);
+ return result;
+ }
+
public void dump(String prefix, PrintWriter pw) {
pw.print(prefix);
pw.print("InsetsSourceControl type="); pw.print(InsetsState.typeToString(mType));