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

Commit 2a33b625 authored by Vaibhav Devmurari's avatar Vaibhav Devmurari
Browse files

Add support for DND key

Bug: 365920375
Flag: com.android.hardware.input.enable_new_25q2_keycodes
Test: atest KeyGestureEventTests
Change-Id: Ib5d6d8713fbce931ebad0ede97ad08a62b1956ad
parent ffce4018
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -124,6 +124,7 @@ public final class KeyGestureEvent {
    public static final int KEY_GESTURE_TYPE_TOGGLE_MAGNIFICATION = 74;
    public static final int KEY_GESTURE_TYPE_ACTIVATE_SELECT_TO_SPEAK = 75;
    public static final int KEY_GESTURE_TYPE_MAXIMIZE_FREEFORM_WINDOW = 76;
    public static final int KEY_GESTURE_TYPE_TOGGLE_DO_NOT_DISTURB = 77;


    public static final int FLAG_CANCELLED = 1;
@@ -215,7 +216,8 @@ public final class KeyGestureEvent {
            KEY_GESTURE_TYPE_MAGNIFIER_ZOOM_OUT,
            KEY_GESTURE_TYPE_TOGGLE_MAGNIFICATION,
            KEY_GESTURE_TYPE_ACTIVATE_SELECT_TO_SPEAK,
            KEY_GESTURE_TYPE_MAXIMIZE_FREEFORM_WINDOW
            KEY_GESTURE_TYPE_MAXIMIZE_FREEFORM_WINDOW,
            KEY_GESTURE_TYPE_TOGGLE_DO_NOT_DISTURB
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface KeyGestureType {
@@ -788,6 +790,8 @@ public final class KeyGestureEvent {
                return "KEY_GESTURE_TYPE_ACTIVATE_SELECT_TO_SPEAK";
            case KEY_GESTURE_TYPE_MAXIMIZE_FREEFORM_WINDOW:
                return "KEY_GESTURE_TYPE_MAXIMIZE_FREEFORM_WINDOW";
            case KEY_GESTURE_TYPE_TOGGLE_DO_NOT_DISTURB:
                return "KEY_GESTURE_TYPE_TOGGLE_DO_NOT_DISTURB";
            default:
                return Integer.toHexString(value);
        }
+9 −1
Original line number Diff line number Diff line
@@ -801,7 +801,15 @@ final class KeyGestureController {
                        + " interceptKeyBeforeQueueing");
                return true;
            case KeyEvent.KEYCODE_DO_NOT_DISTURB:
                // TODO(b/365920375): Implement 25Q2 keycode implementation in system
                if (enableNew25q2Keycodes()) {
                    if (firstDown) {
                        handleKeyGesture(deviceId, new int[]{KeyEvent.KEYCODE_DO_NOT_DISTURB},
                                /* modifierState = */0,
                                KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_DO_NOT_DISTURB,
                                KeyGestureEvent.ACTION_GESTURE_COMPLETE, displayId, focusedToken,
                                /* flags = */0, /* appLaunchData = */null);
                    }
                }
                return true;
        }

+10 −0
Original line number Diff line number Diff line
@@ -4106,6 +4106,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                    case KeyGestureEvent.KEY_GESTURE_TYPE_ACCESSIBILITY_SHORTCUT:
                    case KeyGestureEvent.KEY_GESTURE_TYPE_CLOSE_ALL_DIALOGS:
                    case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_APPLICATION:
                    case KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_DO_NOT_DISTURB:
                        return true;
                    case KeyGestureEvent.KEY_GESTURE_TYPE_SCREENSHOT_CHORD:
                    case KeyGestureEvent.KEY_GESTURE_TYPE_RINGER_TOGGLE_CHORD:
@@ -4356,6 +4357,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                    dismissKeyboardShortcutsMenu();
                }
                return true;
            case KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_DO_NOT_DISTURB:
                NotificationManager nm = getNotificationService();
                if (nm != null) {
                    boolean isEnabled = nm.getZenMode() != Settings.Global.ZEN_MODE_OFF;
                    nm.setZenMode(isEnabled ? Settings.Global.ZEN_MODE_OFF
                                    : Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, null,
                            "Key gesture DND", true);
                }
                return true;
        }
        return false;
    }
+16 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.os.RemoteException;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import android.provider.Settings;
import android.view.KeyEvent;

import androidx.test.filters.MediumTest;
@@ -755,4 +756,19 @@ public class KeyGestureEventTests extends ShortcutKeyTestBase {
                sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_TALKBACK));
        mPhoneWindowManager.assertTalkBack(false);
    }

    @Test
    public void testKeyGestureToggleDoNotDisturb() {
        mPhoneWindowManager.overrideZenMode(Settings.Global.ZEN_MODE_OFF);
        Assert.assertTrue(
                sendKeyGestureEventComplete(
                        KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_DO_NOT_DISTURB));
        mPhoneWindowManager.assertZenMode(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);

        mPhoneWindowManager.overrideZenMode(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
        Assert.assertTrue(
                sendKeyGestureEventComplete(
                        KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_DO_NOT_DISTURB));
        mPhoneWindowManager.assertZenMode(Settings.Global.ZEN_MODE_OFF);
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -447,6 +447,14 @@ class TestPhoneWindowManager {
        mTestLooper.dispatchAll();
    }

    void overrideZenMode(int mode) {
        doReturn(mode).when(mNotificationManager).getZenMode();
    }

    void assertZenMode(int mode) {
        verify(mNotificationManager).setZenMode(eq(mode), any(), anyString(), eq(true));
    }

    /**
     * Below functions will override the setting or the policy behavior.
     */