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

Commit 6a4c96f6 authored by Josh Yang's avatar Josh Yang Committed by Android (Google) Code Review
Browse files

Merge "Make STEM_PRIMARY gestures executable when they are intercepted at...

Merge "Make STEM_PRIMARY gestures executable when they are intercepted at queueing stage." into main
parents 8e259dd8 46288faf
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -4995,6 +4995,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                }
                break;
            }
            case KeyEvent.KEYCODE_STEM_PRIMARY: {
                if (down && event.getRepeatCount() == 0 && (result & ACTION_PASS_TO_USER) == 0) {
                    // We've decided not to pass key to user at queueing stage. Make the gesture
                    // executable.
                    setDeferredKeyActionsExecutableAsync(keyCode, event.getDownTime());
                }
                break;
            }
            case KeyEvent.KEYCODE_VIDEO_APP_1:
            case KeyEvent.KEYCODE_VIDEO_APP_2:
            case KeyEvent.KEYCODE_VIDEO_APP_3:
+22 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.app.ActivityTaskManager.RootTaskInfo;
import android.content.ComponentName;
import android.os.RemoteException;
import android.provider.Settings;
import android.view.Display;

import org.junit.Test;

@@ -103,6 +104,27 @@ public class StemKeyGestureTests extends ShortcutKeyTestBase {
        mPhoneWindowManager.assertActivityTargetLaunched(targetComponent);
    }

    @Test
    public void stemSingleKey_launchTargetActivity_whenScreenIsOff() {
        overrideBehavior(
                STEM_PRIMARY_BUTTON_SHORT_PRESS,
                SHORT_PRESS_PRIMARY_LAUNCH_TARGET_ACTIVITY);
        setUpPhoneWindowManager(/* supportSettingsUpdate= */ true);
        mPhoneWindowManager.overrideShouldEarlyShortPressOnStemPrimary(false);
        mPhoneWindowManager.overrideStartActivity();
        mPhoneWindowManager.setKeyguardServiceDelegateIsShowing(false);
        mPhoneWindowManager.overrideIsUserSetupComplete(true);
        mPhoneWindowManager.assumeResolveActivityNotNull();
        mPhoneWindowManager.overrideDisplayState(Display.STATE_OFF);
        ComponentName targetComponent = ComponentName.unflattenFromString(TEST_TARGET_ACTIVITY);
        mPhoneWindowManager.overrideStemPressTargetActivity(targetComponent);
        mPhoneWindowManager.overrideKeyEventPolicyFlags(0);

        sendKey(KEYCODE_STEM_PRIMARY);

        mPhoneWindowManager.assertActivityTargetLaunched(targetComponent);
    }

    @Test
    public void stemSingleKey_appHasOverridePermission_consumedByApp_notOpenAllApp() {
        overrideBehavior(STEM_PRIMARY_BUTTON_SHORT_PRESS, SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS);
+8 −2
Original line number Diff line number Diff line
@@ -180,6 +180,8 @@ class TestPhoneWindowManager {
    private boolean mIsTalkBackEnabled;
    private boolean mIsTalkBackShortcutGestureEnabled;

    private int mKeyEventPolicyFlags = FLAG_INTERACTIVE;

    private class TestTalkbackShortcutController extends TalkbackShortcutController {
        TestTalkbackShortcutController(Context context) {
            super(context);
@@ -379,12 +381,12 @@ class TestPhoneWindowManager {
    }

    int interceptKeyBeforeQueueing(KeyEvent event) {
        return mPhoneWindowManager.interceptKeyBeforeQueueing(event, FLAG_INTERACTIVE);
        return mPhoneWindowManager.interceptKeyBeforeQueueing(event, mKeyEventPolicyFlags);
    }

    long interceptKeyBeforeDispatching(KeyEvent event) {
        return mPhoneWindowManager.interceptKeyBeforeDispatching(mInputToken, event,
                FLAG_INTERACTIVE);
                mKeyEventPolicyFlags);
    }

    void dispatchUnhandledKey(KeyEvent event) {
@@ -588,6 +590,10 @@ class TestPhoneWindowManager {
                .when(mButtonOverridePermissionChecker).canAppOverrideSystemKey(any(), anyInt());
    }

    void overrideKeyEventPolicyFlags(int flags) {
        mKeyEventPolicyFlags = flags;
    }

    /**
     * Below functions will check the policy behavior could be invoked.
     */