From 95a3dbf03ab4900253de3179ded9510ca124d538 Mon Sep 17 00:00:00 2001 From: Tarandeep Singh Date: Tue, 22 Oct 2019 10:39:24 -0700 Subject: [PATCH] Allow floating IME to apply final state. Floating IME has zero insets and hence it becomes a special case where Insets type to side map will have to be statically created per form-factor. Realistically, IME side shouldn't change on any form-factor. Fix: 142713934 Test: Manually 1. Enable floating mode in gboard. 2. Tap on editor to verify gboard shows 3. press back to verify gboard hides. Change-Id: Ie2e2df3fdc5f637cf2efdf14bb5b74f45e3a929f --- .../java/android/view/InsetsAnimationControlImpl.java | 7 ++++++- core/java/android/view/InsetsState.java | 11 ++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/core/java/android/view/InsetsAnimationControlImpl.java b/core/java/android/view/InsetsAnimationControlImpl.java index 0fb1c33df2abc..786dbb088e2b4 100644 --- a/core/java/android/view/InsetsAnimationControlImpl.java +++ b/core/java/android/view/InsetsAnimationControlImpl.java @@ -17,6 +17,7 @@ package android.view; import static android.view.InsetsState.INSET_SIDE_BOTTOM; +import static android.view.InsetsState.INSET_SIDE_FLOATING; import static android.view.InsetsState.INSET_SIDE_LEFT; import static android.view.InsetsState.INSET_SIDE_RIGHT; import static android.view.InsetsState.INSET_SIDE_TOP; @@ -151,6 +152,8 @@ public class InsetsAnimationControlImpl implements WindowInsetsAnimationControll updateLeashesForSide(INSET_SIDE_RIGHT, offset.right, mPendingInsets.right, params, state); updateLeashesForSide(INSET_SIDE_BOTTOM, offset.bottom, mPendingInsets.bottom, params, state); + updateLeashesForSide(INSET_SIDE_FLOATING, 0 /* offset */, 0 /* inset */, params, state); + SyncRtSurfaceTransactionApplier applier = mTransactionApplierSupplier.get(); applier.scheduleApply(params.toArray(new SurfaceParams[params.size()])); mCurrentInsets = mPendingInsets; @@ -238,7 +241,9 @@ public class InsetsAnimationControlImpl implements WindowInsetsAnimationControll // If the system is controlling the insets source, the leash can be null. if (leash != null) { surfaceParams.add(new SurfaceParams(leash, 1f /* alpha */, mTmpMatrix, - null /* windowCrop */, 0 /* layer */, 0f /* cornerRadius*/, inset != 0)); + null /* windowCrop */, 0 /* layer */, 0f /* cornerRadius*/, + side == INSET_SIDE_FLOATING + ? consumer.isVisible() : inset != 0 /* visible */)); } } } diff --git a/core/java/android/view/InsetsState.java b/core/java/android/view/InsetsState.java index 99502a6c1d72b..e9de3f0bb3ca7 100644 --- a/core/java/android/view/InsetsState.java +++ b/core/java/android/view/InsetsState.java @@ -109,6 +109,7 @@ public class InsetsState implements Parcelable { INSET_SIDE_TOP, INSET_SIDE_RIGHT, INSET_SIDE_BOTTOM, + INSET_SIDE_FLOATING, INSET_SIDE_UNKNWON }) public @interface InsetSide {} @@ -116,7 +117,8 @@ public class InsetsState implements Parcelable { static final int INSET_SIDE_TOP = 1; static final int INSET_SIDE_RIGHT = 2; static final int INSET_SIDE_BOTTOM = 3; - static final int INSET_SIDE_UNKNWON = 4; + static final int INSET_SIDE_FLOATING = 4; + static final int INSET_SIDE_UNKNWON = 5; private final ArrayMap mSources = new ArrayMap<>(); @@ -224,10 +226,10 @@ public class InsetsState implements Parcelable { typeVisibilityMap[index] = source.isVisible(); } - if (typeSideMap != null && !Insets.NONE.equals(insets)) { + if (typeSideMap != null) { @InsetSide int insetSide = getInsetSide(insets); if (insetSide != INSET_SIDE_UNKNWON) { - typeSideMap.put(source.getType(), getInsetSide(insets)); + typeSideMap.put(source.getType(), insetSide); } } } @@ -237,6 +239,9 @@ public class InsetsState implements Parcelable { * is set in order that this method returns a meaningful result. */ private @InsetSide int getInsetSide(Insets insets) { + if (Insets.NONE.equals(insets)) { + return INSET_SIDE_FLOATING; + } if (insets.left != 0) { return INSET_SIDE_LEFT; }