diff options
| -rw-r--r-- | core/res/res/values/config.xml | 1 | ||||
| -rw-r--r-- | core/res/res/values/strings.xml | 3 | ||||
| -rw-r--r-- | core/res/res/values/symbols.xml | 1 | ||||
| -rw-r--r-- | policy/src/com/android/internal/policy/impl/GlobalActions.java | 37 |
4 files changed, 42 insertions, 0 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 20c46eabfb6b..708fe672b947 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1571,6 +1571,7 @@ --> <string-array translatable="false" name="config_globalActionsList"> <item>power</item> + <item>lockdown</item> <item>bugreport</item> <item>users</item> </string-array> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 7d474a41c8d0..6e92b07ee026 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -443,6 +443,9 @@ <!-- label for item that launches settings in phone options dialog [CHAR LIMIT=15]--> <string name="global_action_settings">Settings</string> + <!-- label for item that locks the phone and enforces that it can't be unlocked without entering a credential. [CHAR LIMIT=15] --> + <string name="global_action_lockdown">Lock now</string> + <!-- Text to use when the number in a notification info is too large (greater than status_bar_notification_info_maxnum, defined in values/config.xml) and must be truncated. May need to be localized diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 3e82d0823d69..74424593a0a4 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1425,6 +1425,7 @@ <java-symbol type="string" name="global_action_silent_mode_off_status" /> <java-symbol type="string" name="global_action_silent_mode_on_status" /> <java-symbol type="string" name="global_action_toggle_silent_mode" /> + <java-symbol type="string" name="global_action_lockdown" /> <java-symbol type="string" name="invalidPuk" /> <java-symbol type="string" name="lockscreen_carrier_default" /> <java-symbol type="style" name="Animation.LockScreen" /> diff --git a/policy/src/com/android/internal/policy/impl/GlobalActions.java b/policy/src/com/android/internal/policy/impl/GlobalActions.java index 0c16b78ca441..56a8f7cb9daa 100644 --- a/policy/src/com/android/internal/policy/impl/GlobalActions.java +++ b/policy/src/com/android/internal/policy/impl/GlobalActions.java @@ -21,6 +21,7 @@ import com.android.internal.app.AlertController.AlertParams; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.TelephonyProperties; import com.android.internal.R; +import com.android.internal.widget.LockPatternUtils; import android.app.ActivityManagerNative; import android.app.AlertDialog; @@ -64,6 +65,8 @@ import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.WindowManager; +import android.view.WindowManagerGlobal; +import android.view.WindowManagerInternal; import android.view.WindowManagerPolicy.WindowManagerFuncs; import android.widget.AdapterView; import android.widget.BaseAdapter; @@ -94,6 +97,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac private static final String GLOBAL_ACTION_KEY_SILENT = "silent"; private static final String GLOBAL_ACTION_KEY_USERS = "users"; private static final String GLOBAL_ACTION_KEY_SETTINGS = "settings"; + private static final String GLOBAL_ACTION_KEY_LOCKDOWN = "lockdown"; private final Context mContext; private final WindowManagerFuncs mWindowManagerFuncs; @@ -279,6 +283,8 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac addUsersToMenu(mItems); } else if (GLOBAL_ACTION_KEY_SETTINGS.equals(actionKey)) { mItems.add(getSettingsAction()); + } else if (GLOBAL_ACTION_KEY_LOCKDOWN.equals(actionKey) && hasTrustAgents()) { + mItems.add(getLockdownAction()); } else { Log.e(TAG, "Invalid global action key " + actionKey); } @@ -317,6 +323,11 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac return dialog; } + private boolean hasTrustAgents() { + // TODO: Add implementation. + return true; + } + private final class PowerAction extends SinglePressAction implements LongPressAction { private PowerAction() { super(com.android.internal.R.drawable.ic_lock_power_off, @@ -419,6 +430,32 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac }; } + private Action getLockdownAction() { + return new SinglePressAction(com.android.internal.R.drawable.ic_lock_lock, + R.string.global_action_lockdown) { + + @Override + public void onPress() { + new LockPatternUtils(mContext).requireCredentialEntry(UserHandle.USER_ALL); + try { + WindowManagerGlobal.getWindowManagerService().lockNow(null); + } catch (RemoteException e) { + Log.e(TAG, "Error while trying to lock device.", e); + } + } + + @Override + public boolean showDuringKeyguard() { + return true; + } + + @Override + public boolean showBeforeProvisioning() { + return false; + } + }; + } + private UserInfo getCurrentUser() { try { return ActivityManagerNative.getDefault().getCurrentUser(); |