summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2017-11-21 20:08:11 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-11-21 20:08:11 +0000
commitfe731413dad2cc28cf28b8acb4fd8d1a39a849b6 (patch)
tree3e0b99f68b2f47b369c909f9213f55875c1ed8f5
parentea0b479e6cc50ca046552d7a5b3d976c9b558970 (diff)
parentf9a651d64c687297c0739982bedc7a8a34c778cf (diff)
Merge "Global a11y action to lock screen"
-rw-r--r--api/current.txt1
-rw-r--r--api/system-current.txt1
-rw-r--r--api/test-current.txt1
-rw-r--r--core/java/android/accessibilityservice/AccessibilityService.java5
-rw-r--r--core/java/android/os/PowerManager.java6
-rw-r--r--core/java/android/view/WindowManagerInternal.java5
-rw-r--r--services/accessibility/java/com/android/server/accessibility/GlobalActionPerformer.java14
-rw-r--r--services/core/java/com/android/server/power/PowerManagerService.java4
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java5
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) {