Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3db0392c authored by Johannes Gallmann's avatar Johannes Gallmann
Browse files

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
parent 7dd64558
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -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() {
+5 −6
Original line number Diff line number Diff line
@@ -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();