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

Commit 70beba04 authored by wilsonshih's avatar wilsonshih
Browse files

Attemp handle back key when enable onBackInvoked callback.

Unlike normal activity, recents would receive key event from input
consumer instead of go throught ViewRootImpl, so when adapt to
predictive back API, recents should try to handle back key when receive
key event.

Flag: ACONFIG launcher.enable_predictive_back_gesture ENABLED
Bug: 333428882
Test: switch to 3-button mode, go to live tile, verify back key can
dismiss recents.

Change-Id: Ibe6d9b2475a0b89b12dc4b34251a2a92926b5a4e
parent 42ecab5c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@
             android:configChanges="keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenSize|screenLayout|smallestScreenSize"
             android:resizeableActivity="true"
             android:resumeWhilePausing="true"
             android:enableOnBackInvokedCallback="false"
             android:taskAffinity=""/>

        <!-- Content provider to settings search. The autority should be same as the packageName -->
+23 −0
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ import android.os.Trace;
import android.util.AttributeSet;
import android.view.Display;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AnalogClock;
import android.widget.TextClock;
@@ -839,6 +840,28 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer
        }
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        return tryHandleBackKey(event) || super.dispatchKeyEvent(event);
    }

    // TODO (b/267248420) Once the recents input consumer has been removed, there is no need to
    //  handle the back key specially.
    private boolean tryHandleBackKey(KeyEvent event) {
        // Unlike normal activity, recents can receive input event from InputConsumer, so the input
        // event won't go through ViewRootImpl#InputStage#onProcess.
        // So when receive back key, try to do the same check thing in
        // ViewRootImpl#NativePreImeInputStage#onProcess
        if (!Utilities.ATLEAST_U || !enablePredictiveBackGesture()
                || event.getKeyCode() != KeyEvent.KEYCODE_BACK
                || event.getAction() != KeyEvent.ACTION_UP || event.isCanceled()) {
            return false;
        }

        getOnBackAnimationCallback().onBackInvoked();
        return true;
    }

    @Override
    protected void registerBackDispatcher() {
        if (!enablePredictiveBackGesture()) {