Merge "Add accessibility action to open power long-press dialog"
diff --git a/api/current.txt b/api/current.txt
index a40f08d..d55cac6 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -2603,6 +2603,7 @@
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_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
field public static final int GLOBAL_ACTION_RECENTS = 3; // 0x3
field public static final java.lang.String SERVICE_INTERFACE = "android.accessibilityservice.AccessibilityService";
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index cbc8150..19a91a6 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -353,6 +353,11 @@
*/
public static final int GLOBAL_ACTION_QUICK_SETTINGS = 5;
+ /**
+ * Action to open the power long-press dialog.
+ */
+ public static final int GLOBAL_ACTION_POWER_DIALOG = 6;
+
private static final String LOG_TAG = "AccessibilityService";
/**
diff --git a/core/java/android/view/WindowManagerInternal.java b/core/java/android/view/WindowManagerInternal.java
index bf5c84e..38e3723 100644
--- a/core/java/android/view/WindowManagerInternal.java
+++ b/core/java/android/view/WindowManagerInternal.java
@@ -164,6 +164,11 @@
public abstract void getWindowFrame(IBinder token, Rect outBounds);
/**
+ * Opens the global actions dialog.
+ */
+ public abstract void showGlobalActions();
+
+ /**
* Invalidate all visible windows. Then report back on the callback once all windows have
* redrawn.
*/
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index ee542a1..5f0fa18 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -1162,6 +1162,12 @@
public void showRecentApps();
/**
+ * Show the global actions dialog.
+ * @hide
+ */
+ public void showGlobalActions();
+
+ /**
* @return The current height of the input method window.
*/
public int getInputMethodWindowVisibleHeightLw();
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 0b1252e..28f7a0f 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -527,6 +527,7 @@
private static final int MSG_WINDOW_MANAGER_DRAWN_COMPLETE = 7;
private static final int MSG_WAKING_UP = 8;
private static final int MSG_DISPATCH_SHOW_RECENTS = 9;
+ private static final int MSG_DISPATCH_SHOW_GLOBAL_ACTIONS = 10;
private class PolicyHandler extends Handler {
@Override
@@ -547,6 +548,9 @@
case MSG_DISPATCH_SHOW_RECENTS:
showRecentApps(false);
break;
+ case MSG_DISPATCH_SHOW_GLOBAL_ACTIONS:
+ showGlobalActionsInternal();
+ break;
case MSG_KEYGUARD_DRAWN_COMPLETE:
if (DEBUG_WAKEUP) Slog.w(TAG, "Setting mKeyguardDrawComplete");
mKeyguardDrawComplete = true;
@@ -859,8 +863,7 @@
if (!performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false)) {
performAuditoryFeedbackForAccessibilityIfNeed();
}
- sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
- showGlobalActionsDialog();
+ showGlobalActionsInternal();
break;
case LONG_PRESS_POWER_SHUT_OFF:
case LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM:
@@ -880,7 +883,14 @@
}
};
- void showGlobalActionsDialog() {
+ @Override
+ public void showGlobalActions() {
+ mHandler.removeMessages(MSG_DISPATCH_SHOW_GLOBAL_ACTIONS);
+ mHandler.sendEmptyMessage(MSG_DISPATCH_SHOW_GLOBAL_ACTIONS);
+ }
+
+ void showGlobalActionsInternal() {
+ sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
if (mGlobalActions == null) {
mGlobalActions = new GlobalActions(mContext, mWindowManagerFuncs);
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 1be1572..ee7eb9f 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -2443,6 +2443,9 @@
case AccessibilityService.GLOBAL_ACTION_QUICK_SETTINGS: {
expandQuickSettings();
} return true;
+ case AccessibilityService.GLOBAL_ACTION_POWER_DIALOG: {
+ showGlobalActions();
+ } return true;
}
return false;
} finally {
@@ -2781,6 +2784,10 @@
Binder.restoreCallingIdentity(token);
}
+ private void showGlobalActions() {
+ mWindowManagerService.showGlobalActions();
+ }
+
private IAccessibilityInteractionConnection getConnectionLocked(int windowId) {
if (DEBUG) {
Slog.i(LOG_TAG, "Trying to get interaction connection to windowId: " + windowId);
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 771b53b..396ec8f 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -5171,6 +5171,10 @@
}
}
+ void showGlobalActions() {
+ mPolicy.showGlobalActions();
+ }
+
@Override
public void closeSystemDialogs(String reason) {
synchronized(mWindowMap) {
@@ -11130,7 +11134,12 @@
@Override
public boolean isKeyguardLocked() {
- return isKeyguardLocked();
+ return WindowManagerService.this.isKeyguardLocked();
+ }
+
+ @Override
+ public void showGlobalActions() {
+ WindowManagerService.this.showGlobalActions();
}
@Override