From f8eca405c1140691cb7cb8ab8f3dc05e05cb7955 Mon Sep 17 00:00:00 2001 From: Alison Cichowlas Date: Fri, 5 Aug 2016 14:50:27 -0400 Subject: [PATCH] Add restart to GlobalActions. Update power icon in GlobalActions for consistency with new restart icon. Bug: 30395806 Change-Id: I5ab20c15c889384fb685fc678fbf9ed912fcde5d --- .../android/view/WindowManagerPolicy.java | 1 + core/res/res/drawable/ic_lock_power_off.xml | 36 +++++++++++-------- core/res/res/drawable/ic_restart.xml | 28 +++++++++++++++ core/res/res/values/config.xml | 2 ++ core/res/res/values/strings.xml | 4 +++ core/res/res/values/symbols.xml | 4 +++ .../android/server/policy/GlobalActions.java | 35 ++++++++++++++++++ .../server/wm/WindowManagerService.java | 6 ++++ 8 files changed, 101 insertions(+), 15 deletions(-) create mode 100644 core/res/res/drawable/ic_restart.xml diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index 17d306eb88570..b52e4b019f8fe 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -484,6 +484,7 @@ public interface WindowManagerPolicy { public void switchInputMethod(boolean forwardDirection); public void shutdown(boolean confirm); + public void reboot(boolean confirm); public void rebootSafeMode(boolean confirm); /** diff --git a/core/res/res/drawable/ic_lock_power_off.xml b/core/res/res/drawable/ic_lock_power_off.xml index 718f17ed0c196..babd1be220cb0 100644 --- a/core/res/res/drawable/ic_lock_power_off.xml +++ b/core/res/res/drawable/ic_lock_power_off.xml @@ -1,19 +1,25 @@ - - - - + + + diff --git a/core/res/res/drawable/ic_restart.xml b/core/res/res/drawable/ic_restart.xml new file mode 100644 index 0000000000000..47ac483fa3115 --- /dev/null +++ b/core/res/res/drawable/ic_restart.xml @@ -0,0 +1,28 @@ + + + + + diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 2835c6f5fa0ad..1e9e51e79ce0d 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2071,9 +2071,11 @@ "bugreport" = Take bug report, if available "silent" = silent mode "users" = list of users + "restart" = restart device --> power + restart bugreport users diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 8d3cd487e644e..6c26165d4a3a8 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -482,6 +482,10 @@ Power off + + + @string/sim_restart_button + Bug report diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 2a40c0836ae55..63d2713c5df1a 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1589,6 +1589,7 @@ + @@ -2680,4 +2681,7 @@ + + + diff --git a/services/core/java/com/android/server/policy/GlobalActions.java b/services/core/java/com/android/server/policy/GlobalActions.java index 6fc15f0216e4b..bb91f76ecf30a 100644 --- a/services/core/java/com/android/server/policy/GlobalActions.java +++ b/services/core/java/com/android/server/policy/GlobalActions.java @@ -103,6 +103,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac private static final String GLOBAL_ACTION_KEY_LOCKDOWN = "lockdown"; private static final String GLOBAL_ACTION_KEY_VOICEASSIST = "voiceassist"; private static final String GLOBAL_ACTION_KEY_ASSIST = "assist"; + private static final String GLOBAL_ACTION_KEY_RESTART = "restart"; private final Context mContext; private final WindowManagerFuncs mWindowManagerFuncs; @@ -298,6 +299,8 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac mItems.add(getVoiceAssistAction()); } else if (GLOBAL_ACTION_KEY_ASSIST.equals(actionKey)) { mItems.add(getAssistAction()); + } else if (GLOBAL_ACTION_KEY_RESTART.equals(actionKey)) { + mItems.add(new RestartAction()); } else { Log.e(TAG, "Invalid global action key " + actionKey); } @@ -369,6 +372,38 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac } } + private final class RestartAction extends SinglePressAction implements LongPressAction { + private RestartAction() { + super(R.drawable.ic_restart, R.string.global_action_restart); + } + + @Override + public boolean onLongPress() { + UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE); + if (!um.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) { + mWindowManagerFuncs.rebootSafeMode(true); + return true; + } + return false; + } + + @Override + public boolean showDuringKeyguard() { + return true; + } + + @Override + public boolean showBeforeProvisioning() { + return true; + } + + @Override + public void onPress() { + mWindowManagerFuncs.reboot(false /* confirm */); + } + } + + private class BugReportAction extends SinglePressAction implements LongPressAction { public BugReportAction() { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index c66f09cd792e2..6fdfaa25e14e1 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5721,6 +5721,12 @@ public class WindowManagerService extends IWindowManager.Stub ShutdownThread.shutdown(mContext, PowerManager.SHUTDOWN_USER_REQUESTED, confirm); } + // Called by window manager policy. Not exposed externally. + @Override + public void reboot(boolean confirm) { + ShutdownThread.reboot(mContext, PowerManager.SHUTDOWN_USER_REQUESTED, confirm); + } + // Called by window manager policy. Not exposed externally. @Override public void rebootSafeMode(boolean confirm) {