summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/input/KeyGestureEvent.java6
-rw-r--r--services/core/java/com/android/server/input/KeyGestureController.java10
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java10
-rw-r--r--services/tests/wmtests/src/com/android/server/policy/KeyGestureEventTests.java16
-rw-r--r--services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java8
5 files changed, 48 insertions, 2 deletions
diff --git a/core/java/android/hardware/input/KeyGestureEvent.java b/core/java/android/hardware/input/KeyGestureEvent.java
index af756b9217d3..47ef461dd53d 100644
--- a/core/java/android/hardware/input/KeyGestureEvent.java
+++ b/core/java/android/hardware/input/KeyGestureEvent.java
@@ -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);
}
diff --git a/services/core/java/com/android/server/input/KeyGestureController.java b/services/core/java/com/android/server/input/KeyGestureController.java
index 99c01ce5c15a..5f7ad2797368 100644
--- a/services/core/java/com/android/server/input/KeyGestureController.java
+++ b/services/core/java/com/android/server/input/KeyGestureController.java
@@ -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;
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index a883f1ebc6fe..889b02d4afc6 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -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;
}
diff --git a/services/tests/wmtests/src/com/android/server/policy/KeyGestureEventTests.java b/services/tests/wmtests/src/com/android/server/policy/KeyGestureEventTests.java
index 864572331977..f322ee8f2b20 100644
--- a/services/tests/wmtests/src/com/android/server/policy/KeyGestureEventTests.java
+++ b/services/tests/wmtests/src/com/android/server/policy/KeyGestureEventTests.java
@@ -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);
+ }
}
diff --git a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
index 9db76d47fed7..5d30c76ec9f1 100644
--- a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
+++ b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
@@ -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.
*/