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

Commit d2f0b835 authored by Liana Kazanova (xWF)'s avatar Liana Kazanova (xWF) Committed by Android (Google) Code Review
Browse files

Revert "Pass Long press assistant start, complete, cancel events"

Revert submission 33464207-support_gemini_power_key_animation

Reason for revert: DroidMonitor: Potential culprit for http://b/417498518 - verifying through ABTD before revert submission. This is part of the standard investigation process, and does not mean your CL will be reverted.

Bug: 417498518

Reverted changes: /q/submissionid:33464207-support_gemini_power_key_animation

Change-Id: I3d03a33d83a78663dc7137143aa4b123222a72e4
parent a12cc693
Loading
Loading
Loading
Loading
+3 −26
Original line number Diff line number Diff line
@@ -132,8 +132,7 @@ public final class KeyGestureEvent {
    public static final int KEY_GESTURE_TYPE_SWITCH_TO_PREVIOUS_DESK = 77;
    public static final int KEY_GESTURE_TYPE_SWITCH_TO_NEXT_DESK = 78;

    public static final int FLAG_CANCELLED = 1 << 0;
    public static final int FLAG_LONG_PRESS = 1 << 1;
    public static final int FLAG_CANCELLED = 1;

    // NOTE: Valid KeyGestureEvent streams:
    //       - GESTURE_START -> GESTURE_CANCEL
@@ -405,10 +404,6 @@ public final class KeyGestureEvent {
        return (mKeyGestureEvent.flags & FLAG_CANCELLED) != 0;
    }

    public boolean isLongPress() {
        return (mKeyGestureEvent.flags & FLAG_LONG_PRESS) != 0;
    }

    public int getLogEvent() {
        if (getKeyGestureType() == KEY_GESTURE_TYPE_LAUNCH_APPLICATION) {
            return getLogEventFromLaunchAppData(getAppLaunchData());
@@ -437,9 +432,9 @@ public final class KeyGestureEvent {
                + "keycodes = " + java.util.Arrays.toString(mKeyGestureEvent.keycodes) + ", "
                + "modifierState = " + mKeyGestureEvent.modifierState + ", "
                + "keyGestureType = " + keyGestureTypeToString(mKeyGestureEvent.gestureType) + ", "
                + "action = " + actionToString(mKeyGestureEvent.action) + ", "
                + "action = " + mKeyGestureEvent.action + ", "
                + "displayId = " + mKeyGestureEvent.displayId + ", "
                + "flags = " + flagsToString(mKeyGestureEvent.flags) + ", "
                + "flags = " + mKeyGestureEvent.flags + ", "
                + "appLaunchData = " + getAppLaunchData()
                + " }";
    }
@@ -824,22 +819,4 @@ public final class KeyGestureEvent {
                return Integer.toHexString(value);
        }
    }

    private static String actionToString(int action) {
        return action == ACTION_GESTURE_START ? "START" : "COMPLETE";
    }

    private static String flagsToString(int flags) {
        StringBuilder res = new StringBuilder();
        if ((flags & FLAG_CANCELLED) != 0) {
            res.append("CANCELLED");
        }
        if ((flags & FLAG_LONG_PRESS) != 0) {
            if (!res.isEmpty()) {
                res.append(" | ");
            }
            res.append("LONG_PRESS");
        }
        return res.toString();
    }
}
+9 −11
Original line number Diff line number Diff line
@@ -1051,22 +1051,20 @@ final class KeyGestureController {

    @MainThread
    private void notifyKeyGestureEvent(AidlKeyGestureEvent event) {
        notifyAllListeners(event);
        KeyGestureEvent keyGestureEvent = new KeyGestureEvent(event);
        while (mLastHandledEvents.size() >= MAX_TRACKED_EVENTS) {
            mLastHandledEvents.removeFirst();
        }
        mLastHandledEvents.addLast(keyGestureEvent);
        boolean complete = keyGestureEvent.getAction() == KeyGestureEvent.ACTION_GESTURE_COMPLETE
                && !keyGestureEvent.isCancelled();
        if (complete) {
        InputDevice device = getInputDevice(event.deviceId);
        if (device == null) {
            return;
        }
        KeyGestureEvent keyGestureEvent = new KeyGestureEvent(event);
        if (event.action == KeyGestureEvent.ACTION_GESTURE_COMPLETE) {
            KeyboardMetricsCollector.logKeyboardSystemsEventReportedAtom(device, event.keycodes,
                    event.modifierState, keyGestureEvent.getLogEvent());
        }
        notifyAllListeners(event);
        while (mLastHandledEvents.size() >= MAX_TRACKED_EVENTS) {
            mLastHandledEvents.removeFirst();
        }
        mLastHandledEvents.addLast(keyGestureEvent);
    }

    @MainThread
+27 −77
Original line number Diff line number Diff line
@@ -82,9 +82,7 @@ import static android.view.contentprotection.flags.Flags.createAccessibilityOver

import static com.android.hardware.input.Flags.enableNew25q2Keycodes;
import static com.android.hardware.input.Flags.hidBluetoothWakeup;
import static com.android.server.policy.SingleKeyGestureEvent.ACTION_CANCEL;
import static com.android.server.policy.SingleKeyGestureEvent.ACTION_COMPLETE;
import static com.android.server.policy.SingleKeyGestureEvent.ACTION_START;
import static com.android.server.policy.SingleKeyGestureEvent.SINGLE_KEY_GESTURE_TYPE_LONG_PRESS;
import static com.android.server.policy.SingleKeyGestureEvent.SINGLE_KEY_GESTURE_TYPE_PRESS;
import static com.android.server.policy.SingleKeyGestureEvent.SINGLE_KEY_GESTURE_TYPE_VERY_LONG_PRESS;
@@ -1445,6 +1443,21 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        final int behavior = getResolvedLongPressOnPowerBehavior();
        Slog.d(TAG, "powerLongPress: eventTime=" + eventTime
                + " mLongPressOnPowerBehavior=" + mLongPressOnPowerBehavior);

        // Sending a synthetic KeyEvent to StatusBar service with flag FLAG_LONG_PRESS set, when
        // power button is long pressed
        if (enableLppAssistInvocationEffect()) {
            // Long press is detected in a callback, so there's no explicit hardware KeyEvent
            // available here. Instead, we create a synthetic power key event that has properties
            // similar to the original one.
            final KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KEYCODE_POWER);
            event.setFlags(KeyEvent.FLAG_LONG_PRESS);
            // setting both downTime and eventTime as same as downTime is sent as eventTime for long
            // press event in SingleKeyGestureDetector's handler
            event.setTime(eventTime, eventTime);
            sendSystemKeyToStatusBarAsync(event);
        }

        switch (behavior) {
            case LONG_PRESS_POWER_NOTHING:
                break;
@@ -2496,12 +2509,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            final long startTime = event.getStartTime();
            final int displayId = event.getDisplayId();
            final int pressCount = event.getPressCount();
            final int action = event.getAction();
            switch (event.getType()) {
                case SINGLE_KEY_GESTURE_TYPE_PRESS:
                    if (action != ACTION_COMPLETE) {
            if (event.getAction() != ACTION_COMPLETE) {
                return;
            }
            switch (event.getType()) {
                case SINGLE_KEY_GESTURE_TYPE_PRESS:
                    if (event.getPressCount() > 1) {
                        onMultiPress(startTime, pressCount, displayId);
                    } else {
@@ -2509,12 +2521,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                    }
                    break;
                case SINGLE_KEY_GESTURE_TYPE_LONG_PRESS:
                    onLongPress(event);
                    onLongPress(startTime);
                    break;
                case SINGLE_KEY_GESTURE_TYPE_VERY_LONG_PRESS:
                    if (action != ACTION_COMPLETE) {
                        return;
                    }
                    onVeryLongPress();
                    break;
            }
@@ -2536,39 +2545,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            }
        }

        private void onLongPress(@NonNull SingleKeyGestureEvent event) {
        private void onLongPress(long downTime) {
            if (mSingleKeyGestureDetector.beganFromNonInteractive()
                    && !mSupportLongPressPowerWhenNonInteractive) {
                Slog.v(TAG, "Not support long press power when device is not interactive.");
                return;
            }
            // If Assistant mapped to long press, we send start, complete and cancel gesture
            // This is done to allow Assistant launch animation in SysUI. Will extend
            // this to all single key gestures after moving Single key gestures to
            // KeyGestureController.
            if (enableLppAssistInvocationEffect()) {
                // TODO(b/358569822): Remove this synthetic key event and directly listen to key
                //  gesture event in SysUI
                if (event.getAction() == ACTION_COMPLETE) {
                    // Long press is detected in a callback, so there's no explicit hardware
                    // KeyEvent available here. Instead, we create a synthetic power key event that
                    // has properties similar to the original one.
                    final KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KEYCODE_POWER);
                    keyEvent.setFlags(KeyEvent.FLAG_LONG_PRESS);
                    // setting both downTime and eventTime as same as downTime is sent as eventTime
                    // for long press event in SingleKeyGestureDetector's handler
                    keyEvent.setTime(event.getStartTime(), event.getEventTime());
                    sendSystemKeyToStatusBarAsync(keyEvent);
                }
                if (getResolvedLongPressOnPowerBehavior() == LONG_PRESS_POWER_ASSISTANT) {
                    handleSingleKeyGestureInKeyGestureController(
                            KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_ASSISTANT, event);
                    return;
                }
            }
            if (event.getAction() == ACTION_COMPLETE) {
                powerLongPress(event.getStartTime());
            }

            powerLongPress(downTime);
        }

        private void onVeryLongPress() {
@@ -2801,34 +2785,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

    // TODO(b/358569822): This is temporarily added to allow single key gestures to be processed
    //  through key gesture infra but keep the detection logic in PWM.
    private void handleSingleKeyGestureInKeyGestureController(
            @KeyGestureEvent.KeyGestureType int keyGestureType,
            @NonNull SingleKeyGestureEvent event) {
        int flags = 0;
        if (event.getType() == SINGLE_KEY_GESTURE_TYPE_LONG_PRESS) {
            flags |= KeyGestureEvent.FLAG_LONG_PRESS;
        } else {
            // Currently not supporting non-long press gestures
            return;
        }
        if (event.getAction() == ACTION_CANCEL) {
            flags |= KeyGestureEvent.FLAG_CANCELLED;
        }
        mInputManagerInternal.handleKeyGestureInKeyGestureController(
                new KeyGestureEvent.Builder()
                        .setKeycodes(new int[]{event.getKeyCode()})
                        .setDeviceId(event.getDeviceId())
                        .setKeyGestureType(keyGestureType)
                        .setFlags(flags)
                        .setAction(event.getAction() == ACTION_START
                                ? KeyGestureEvent.ACTION_GESTURE_START
                                : KeyGestureEvent.ACTION_GESTURE_COMPLETE)
                        .setDisplayId(event.getDisplayId())
                        .build());
    }

    private void initSingleKeyGestureRules(Looper looper) {
        mSingleKeyGestureDetector = SingleKeyGestureDetector.get(mContext, looper);
        mSingleKeyGestureDetector.addRule(new PowerKeyRule());
@@ -3477,9 +3433,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        int modifierState = event.getModifierState();
        boolean keyguardOn = keyguardOn();
        boolean canLaunchApp = isUserSetupComplete() && !keyguardOn;
        boolean isPowerKeyPressed = Arrays.stream(event.getKeycodes()).anyMatch(
                (keycode) -> keycode == KeyEvent.KEYCODE_POWER);
        if (complete && isPowerKeyPressed) {
        if (!event.isCancelled() && Arrays.stream(event.getKeycodes()).anyMatch(
                (keycode) -> keycode == KeyEvent.KEYCODE_POWER)) {
            mPowerKeyHandled = true;
        }
        switch (gestureType) {
@@ -3499,15 +3454,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                break;
            case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_ASSISTANT:
            case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_VOICE_ASSISTANT:
                boolean isPowerLongPress = event.isLongPress() && isPowerKeyPressed;
                boolean shouldLaunchAssist = complete && (canLaunchApp || isPowerLongPress);
                if (shouldLaunchAssist) {
                    launchAssistAction(
                            isPowerLongPress ? null : Intent.EXTRA_ASSIST_INPUT_HINT_KEYBOARD,
                if (complete && canLaunchApp) {
                    launchAssistAction(Intent.EXTRA_ASSIST_INPUT_HINT_KEYBOARD,
                            deviceId, SystemClock.uptimeMillis(),
                            isPowerLongPress
                                    ? AssistUtils.INVOCATION_TYPE_POWER_BUTTON_LONG_PRESS
                                    : AssistUtils.INVOCATION_TYPE_UNKNOWN);
                            AssistUtils.INVOCATION_TYPE_UNKNOWN);
                }
                break;
            case KeyGestureEvent.KEY_GESTURE_TYPE_HOME: