diff options
| author | 2025-03-04 23:13:17 +0000 | |
|---|---|---|
| committer | 2025-03-05 07:57:41 -0800 | |
| commit | 3db0392c347f9fb78cc07c43ae896287c9b9b595 (patch) | |
| tree | 3faf3c5a92d0cfaa7c717c38e3560f8146a8c42c | |
| parent | 7dd645586c5187c4e7dcd1d665e547b152f4d458 (diff) | |
Fix back callback not cleared by RIV
The onVisibilityAggregated function is not reliable for the RemoteInputView. In some cases it reports to be visible when it is not. That can cause back callbacks remain registered on the shade window back dispatcher. This CL changes the back callback registration/unregistration logic to be independent from onVisibilityAggregated.
Bug: 370628115
Flag: EXEMPT bugfix
Test: Manual, i.e. verified that reproduction steps no longer work to reproduce the bug.
Test: RemoteInputViewTest
Change-Id: I5ea0bb7ebe0a72bb2b0fea4012b007432841becd
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java | 7 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java | 11 |
2 files changed, 7 insertions, 11 deletions
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 2b0bf1a3d343..f1f2b88e9943 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java @@ -461,6 +461,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene } } } + unregisterBackCallback(); if (logClose) { mUiEventLogger.logWithInstanceId( @@ -558,11 +559,6 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene @Override public void onVisibilityAggregated(boolean isVisible) { - if (isVisible) { - registerBackCallback(); - } else { - unregisterBackCallback(); - } super.onVisibilityAggregated(isVisible); mEditText.setEnabled(isVisible && !mSending); } @@ -623,6 +619,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene setAttachment(mEntry.remoteInputAttachment); updateSendButton(); + registerBackCallback(); } public void onNotificationUpdateOrReset() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java index ffe7750dadfa..4a0445d5543a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java @@ -269,14 +269,14 @@ public class RemoteInputViewTest extends SysuiTestCase { when(viewRoot.getOnBackInvokedDispatcher()).thenReturn(backInvokedDispatcher); view.setViewRootImpl(viewRoot); - /* verify that predictive back callback registered when RemoteInputView becomes visible */ - view.onVisibilityAggregated(true); + /* verify that predictive back callback registered when RemoteInputView gains focus */ + view.focus(); verify(backInvokedDispatcher).registerOnBackInvokedCallback( eq(OnBackInvokedDispatcher.PRIORITY_OVERLAY), onBackInvokedCallbackCaptor.capture()); - /* verify that same callback unregistered when RemoteInputView becomes invisible */ - view.onVisibilityAggregated(false); + /* verify that same callback unregistered when RemoteInputView loses focus */ + view.onDefocus(false, false, null); verify(backInvokedDispatcher).unregisterOnBackInvokedCallback( eq(onBackInvokedCallbackCaptor.getValue())); } @@ -299,13 +299,12 @@ public class RemoteInputViewTest extends SysuiTestCase { view.onVisibilityAggregated(true); view.setEditTextReferenceToSelf(); + view.focus(); /* capture the callback during registration */ verify(backInvokedDispatcher).registerOnBackInvokedCallback( eq(OnBackInvokedDispatcher.PRIORITY_OVERLAY), onBackInvokedCallbackCaptor.capture()); - view.focus(); - /* invoke the captured callback */ onBackInvokedCallbackCaptor.getValue().onBackInvoked(); |