diff options
3 files changed, 31 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java b/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java index fdb793e6da95..924eb263de50 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/RemoteInputController.java @@ -131,6 +131,7 @@ public class RemoteInputController { */ public void removeRemoteInput(NotificationEntry entry, Object token) { Objects.requireNonNull(entry); + if (entry.mRemoteEditImeVisible) return; pruneWeakThenRemoveAndContains(null /* contains */, entry /* remove */, token); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java index bafa4a254d79..8a22b9f6891f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java @@ -179,6 +179,8 @@ public final class NotificationEntry extends ListEntry { private boolean mShelfIconVisible; private boolean mIsAlerting; + public boolean mRemoteEditImeVisible; + /** * @param sbn the StatusBarNotification from system server * @param ranking also from system server diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java index 6c5251b02291..9380d9110c35 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.policy; +import static android.view.WindowInsetsAnimation.Callback.DISPATCH_MODE_STOP; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.annotation.Nullable; @@ -50,6 +52,8 @@ import android.view.OnReceiveContentListener; import android.view.View; import android.view.ViewAnimationUtils; import android.view.ViewGroup; +import android.view.WindowInsets; +import android.view.WindowInsetsAnimation; import android.view.accessibility.AccessibilityEvent; import android.view.inputmethod.CompletionInfo; import android.view.inputmethod.EditorInfo; @@ -61,6 +65,8 @@ import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; +import androidx.annotation.NonNull; + import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.internal.statusbar.IStatusBarService; @@ -76,6 +82,7 @@ import com.android.systemui.statusbar.phone.LightBarController; import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.function.Consumer; /** @@ -135,6 +142,27 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene mEditText = (RemoteEditText) getChildAt(0); mEditText.setInnerFocusable(false); + mEditText.setWindowInsetsAnimationCallback( + new WindowInsetsAnimation.Callback(DISPATCH_MODE_STOP) { + @NonNull + @Override + public WindowInsets onProgress(@NonNull WindowInsets insets, + @NonNull List<WindowInsetsAnimation> runningAnimations) { + return insets; + } + + @Override + public void onEnd(@NonNull WindowInsetsAnimation animation) { + super.onEnd(animation); + if (animation.getTypeMask() == WindowInsets.Type.ime()) { + mEntry.mRemoteEditImeVisible = + mEditText.getRootWindowInsets().isVisible(WindowInsets.Type.ime()); + if (!mEntry.mRemoteEditImeVisible && !mEditText.mShowImeOnInputConnection) { + mController.removeRemoteInput(mEntry, mToken); + } + } + } + }); } protected Intent prepareRemoteInputFromText() { |