diff options
| author | 2017-11-21 20:08:11 +0000 | |
|---|---|---|
| committer | 2017-11-21 20:08:11 +0000 | |
| commit | fe731413dad2cc28cf28b8acb4fd8d1a39a849b6 (patch) | |
| tree | 3e0b99f68b2f47b369c909f9213f55875c1ed8f5 | |
| parent | ea0b479e6cc50ca046552d7a5b3d976c9b558970 (diff) | |
| parent | f9a651d64c687297c0739982bedc7a8a34c778cf (diff) | |
Merge "Global a11y action to lock screen"
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | api/system-current.txt | 1 | ||||
| -rw-r--r-- | api/test-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/accessibilityservice/AccessibilityService.java | 5 | ||||
| -rw-r--r-- | core/java/android/os/PowerManager.java | 6 | ||||
| -rw-r--r-- | core/java/android/view/WindowManagerInternal.java | 5 | ||||
| -rw-r--r-- | services/accessibility/java/com/android/server/accessibility/GlobalActionPerformer.java | 14 | ||||
| -rw-r--r-- | services/core/java/com/android/server/power/PowerManagerService.java | 4 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 5 |
9 files changed, 42 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt index dca75289debd..baf8e156a757 100644 --- a/api/current.txt +++ b/api/current.txt @@ -2777,6 +2777,7 @@ package android.accessibilityservice { field public static final int GESTURE_SWIPE_UP_AND_RIGHT = 14; // 0xe field public static final int GLOBAL_ACTION_BACK = 1; // 0x1 field public static final int GLOBAL_ACTION_HOME = 2; // 0x2 + field public static final int GLOBAL_ACTION_LOCK_SCREEN = 8; // 0x8 field public static final int GLOBAL_ACTION_NOTIFICATIONS = 4; // 0x4 field public static final int GLOBAL_ACTION_POWER_DIALOG = 6; // 0x6 field public static final int GLOBAL_ACTION_QUICK_SETTINGS = 5; // 0x5 diff --git a/api/system-current.txt b/api/system-current.txt index aa3a1e27cb27..a9afdd0455c8 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -2919,6 +2919,7 @@ package android.accessibilityservice { field public static final int GESTURE_SWIPE_UP_AND_RIGHT = 14; // 0xe field public static final int GLOBAL_ACTION_BACK = 1; // 0x1 field public static final int GLOBAL_ACTION_HOME = 2; // 0x2 + field public static final int GLOBAL_ACTION_LOCK_SCREEN = 8; // 0x8 field public static final int GLOBAL_ACTION_NOTIFICATIONS = 4; // 0x4 field public static final int GLOBAL_ACTION_POWER_DIALOG = 6; // 0x6 field public static final int GLOBAL_ACTION_QUICK_SETTINGS = 5; // 0x5 diff --git a/api/test-current.txt b/api/test-current.txt index 57b5222cfc6a..4b49c832a435 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -2777,6 +2777,7 @@ package android.accessibilityservice { field public static final int GESTURE_SWIPE_UP_AND_RIGHT = 14; // 0xe field public static final int GLOBAL_ACTION_BACK = 1; // 0x1 field public static final int GLOBAL_ACTION_HOME = 2; // 0x2 + field public static final int GLOBAL_ACTION_LOCK_SCREEN = 8; // 0x8 field public static final int GLOBAL_ACTION_NOTIFICATIONS = 4; // 0x4 field public static final int GLOBAL_ACTION_POWER_DIALOG = 6; // 0x6 field public static final int GLOBAL_ACTION_QUICK_SETTINGS = 5; // 0x5 diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java index a558d6850af1..8824643db447 100644 --- a/core/java/android/accessibilityservice/AccessibilityService.java +++ b/core/java/android/accessibilityservice/AccessibilityService.java @@ -358,6 +358,11 @@ public abstract class AccessibilityService extends Service { */ public static final int GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN = 7; + /** + * Action to lock the screen + */ + public static final int GLOBAL_ACTION_LOCK_SCREEN = 8; + private static final String LOG_TAG = "AccessibilityService"; /** diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 0fce7a454717..5dd8d05cfb98 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -387,6 +387,12 @@ public final class PowerManager { public static final int GO_TO_SLEEP_REASON_SLEEP_BUTTON = 6; /** + * Go to sleep reason code: Going to sleep by request of an accessibility service + * @hide + */ + public static final int GO_TO_SLEEP_REASON_ACCESSIBILITY = 7; + + /** * Go to sleep flag: Skip dozing state and directly go to full sleep. * @hide */ diff --git a/core/java/android/view/WindowManagerInternal.java b/core/java/android/view/WindowManagerInternal.java index cd1b1908e4d8..d07b2ac980eb 100644 --- a/core/java/android/view/WindowManagerInternal.java +++ b/core/java/android/view/WindowManagerInternal.java @@ -381,4 +381,9 @@ public abstract class WindowManagerInternal { * Sets callback to DragDropController. */ public abstract void registerDragDropControllerCallback(IDragDropCallback callback); + + /** + * @see android.view.IWindowManager#lockNow + */ + public abstract void lockNow(); } diff --git a/services/accessibility/java/com/android/server/accessibility/GlobalActionPerformer.java b/services/accessibility/java/com/android/server/accessibility/GlobalActionPerformer.java index 5db6f7da8102..5867006d6c18 100644 --- a/services/accessibility/java/com/android/server/accessibility/GlobalActionPerformer.java +++ b/services/accessibility/java/com/android/server/accessibility/GlobalActionPerformer.java @@ -21,7 +21,11 @@ import android.app.StatusBarManager; import android.content.Context; import android.hardware.input.InputManager; import android.os.Binder; +import android.os.PowerManager; +import android.os.RemoteException; +import android.os.ServiceManager; import android.os.SystemClock; +import android.view.IWindowManager; import android.view.InputDevice; import android.view.KeyCharacterMap; import android.view.KeyEvent; @@ -72,6 +76,9 @@ public class GlobalActionPerformer { case AccessibilityService.GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN: { return toggleSplitScreen(); } + case AccessibilityService.GLOBAL_ACTION_LOCK_SCREEN: { + return lockScreen(); + } } return false; } finally { @@ -153,4 +160,11 @@ public class GlobalActionPerformer { } return true; } + + private boolean lockScreen() { + mContext.getSystemService(PowerManager.class).goToSleep(SystemClock.uptimeMillis(), + PowerManager.GO_TO_SLEEP_REASON_ACCESSIBILITY, 0); + mWindowManagerService.lockNow(); + return true; + } } diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index 584761c3c0ef..0ca016716cdd 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -1457,6 +1457,10 @@ public final class PowerManagerService extends SystemService case PowerManager.GO_TO_SLEEP_REASON_HDMI: Slog.i(TAG, "Going to sleep due to HDMI standby (uid " + uid +")..."); break; + case PowerManager.GO_TO_SLEEP_REASON_ACCESSIBILITY: + Slog.i(TAG, "Going to sleep by an accessibility service request (uid " + + uid +")..."); + break; default: Slog.i(TAG, "Going to sleep by application request (uid " + uid +")..."); reason = PowerManager.GO_TO_SLEEP_REASON_APPLICATION; diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 465653938672..e123bef133d6 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -7455,6 +7455,11 @@ public class WindowManagerService extends IWindowManager.Stub public void registerDragDropControllerCallback(IDragDropCallback callback) { mDragDropController.registerCallback(callback); } + + @Override + public void lockNow() { + WindowManagerService.this.lockNow(null); + } } void registerAppFreezeListener(AppFreezeListener listener) { |