diff options
| author | Justin Koh <justinkoh@google.com> | 2014-04-21 17:50:40 -0700 |
|---|---|---|
| committer | Justin Koh <justinkoh@google.com> | 2014-04-22 10:01:47 -0700 |
| commit | 3b9a3cc02ecb025f8b1f322015c7d1fb46222f9e (patch) | |
| tree | b8007a781ee5090b4efe17cb05ae48d663bb35e5 | |
| parent | 04acf38ce281f86bd0f28485405c59e489657dfb (diff) | |
| download | frameworks_base-3b9a3cc02ecb025f8b1f322015c7d1fb46222f9e.zip frameworks_base-3b9a3cc02ecb025f8b1f322015c7d1fb46222f9e.tar.gz frameworks_base-3b9a3cc02ecb025f8b1f322015c7d1fb46222f9e.tar.bz2 | |
Update GlobalActions for watches.
Update GlobalActions for watches: only have power off and settings, due to
limited real estate.
Change-Id: Ie3cbbb287f8c71c8c16a00637c83da6921d56e2e
| -rw-r--r-- | core/res/res/drawable-hdpi/ic_settings.png | bin | 0 -> 1805 bytes | |||
| -rw-r--r-- | core/res/res/drawable-mdpi/ic_settings.png | bin | 0 -> 1261 bytes | |||
| -rw-r--r-- | core/res/res/drawable-xhdpi/ic_settings.png | bin | 0 -> 2569 bytes | |||
| -rw-r--r-- | core/res/res/drawable-xxhdpi/ic_settings.png | bin | 0 -> 3220 bytes | |||
| -rw-r--r-- | core/res/res/values-watch/config.xml | 30 | ||||
| -rw-r--r-- | core/res/res/values/config.xml | 18 | ||||
| -rw-r--r-- | core/res/res/values/strings.xml | 3 | ||||
| -rw-r--r-- | core/res/res/values/symbols.xml | 3 | ||||
| -rw-r--r-- | policy/src/com/android/internal/policy/impl/GlobalActions.java | 225 |
9 files changed, 193 insertions, 86 deletions
diff --git a/core/res/res/drawable-hdpi/ic_settings.png b/core/res/res/drawable-hdpi/ic_settings.png Binary files differnew file mode 100644 index 0000000..cfa539f --- /dev/null +++ b/core/res/res/drawable-hdpi/ic_settings.png diff --git a/core/res/res/drawable-mdpi/ic_settings.png b/core/res/res/drawable-mdpi/ic_settings.png Binary files differnew file mode 100644 index 0000000..e6237eb --- /dev/null +++ b/core/res/res/drawable-mdpi/ic_settings.png diff --git a/core/res/res/drawable-xhdpi/ic_settings.png b/core/res/res/drawable-xhdpi/ic_settings.png Binary files differnew file mode 100644 index 0000000..208089d --- /dev/null +++ b/core/res/res/drawable-xhdpi/ic_settings.png diff --git a/core/res/res/drawable-xxhdpi/ic_settings.png b/core/res/res/drawable-xxhdpi/ic_settings.png Binary files differnew file mode 100644 index 0000000..452942e --- /dev/null +++ b/core/res/res/drawable-xxhdpi/ic_settings.png diff --git a/core/res/res/values-watch/config.xml b/core/res/res/values-watch/config.xml new file mode 100644 index 0000000..4c4d0ce --- /dev/null +++ b/core/res/res/values-watch/config.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2014, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<!-- These resources are around just to allow their values to be customized + for watch products. Do not translate. --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Only show power and settings items due to smaller real estate. --> + <string-array translatable="false" name="config_globalActionsList"> + <item>power</item> + <item>settings</item> + </string-array> + +</resources>
\ No newline at end of file diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index bc60608..cafa0a5 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1420,4 +1420,22 @@ <!-- default window inset isRound property --> <bool name="config_windowIsRound">false</bool> + <!-- Defines the default set of global actions. Actions may still be disabled or hidden based + on the current state of the device. + Each item must be one of the following strings: + "power" = Power off + "settings" = An action to launch settings + "airplane" = Airplane mode toggle + "bugreport" = Take bug report, if available + "silent" = silent mode + "users" = list of users + --> + <string-array translatable="false" name="config_globalActionsList"> + <item>power</item> + <item>airplane</item> + <item>bugreport</item> + <item>silent</item> + <item>users</item> + </string-array> + </resources> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 5c848f3..b4a03f7 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -399,6 +399,9 @@ <!-- status message in phone options dialog for when airplane mode is off --> <string name="global_actions_airplane_mode_off_status">Airplane mode is OFF</string> + <!-- label for item that launches settings in phone options dialog [CHAR LIMIT=15]--> + <string name="global_action_settings">Settings</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 aa8db01..bb82357 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -988,6 +988,7 @@ <java-symbol type="array" name="config_operatorConsideredNonRoaming" /> <java-symbol type="array" name="config_sameNamedOperatorConsideredRoaming" /> <java-symbol type="array" name="config_callBarringMMI" /> + <java-symbol type="array" name="config_globalActionsList" /> <java-symbol type="drawable" name="default_wallpaper" /> <java-symbol type="drawable" name="indicator_input_error" /> @@ -1389,6 +1390,7 @@ <java-symbol type="string" name="global_actions_airplane_mode_on_status" /> <java-symbol type="string" name="global_actions_toggle_airplane_mode" /> <java-symbol type="string" name="global_action_bug_report" /> + <java-symbol type="string" name="global_action_settings" /> <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" /> @@ -1461,6 +1463,7 @@ <java-symbol type="color" name="input_method_navigation_guard" /> <java-symbol type="drawable" name="ic_notification_ime_default" /> <java-symbol type="drawable" name="ic_menu_refresh" /> + <java-symbol type="drawable" name="ic_settings" /> <java-symbol type="drawable" name="stat_notify_car_mode" /> <java-symbol type="drawable" name="stat_notify_disabled" /> <java-symbol type="drawable" name="stat_notify_disk_full" /> diff --git a/policy/src/com/android/internal/policy/impl/GlobalActions.java b/policy/src/com/android/internal/policy/impl/GlobalActions.java index 7c0735b..98b5a5a 100644 --- a/policy/src/com/android/internal/policy/impl/GlobalActions.java +++ b/policy/src/com/android/internal/policy/impl/GlobalActions.java @@ -51,6 +51,7 @@ import android.service.dreams.IDreamManager; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; import android.telephony.TelephonyManager; +import android.util.ArraySet; import android.util.Log; import android.util.TypedValue; import android.view.InputDevice; @@ -83,6 +84,15 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac private static final boolean SHOW_SILENT_TOGGLE = true; + /* Valid settings for global actions keys. + * see config.xml config_globalActionList */ + private static final String GLOBAL_ACTION_KEY_POWER = "power"; + private static final String GLOBAL_ACTION_KEY_AIRPLANE = "airplane"; + private static final String GLOBAL_ACTION_KEY_BUGREPORT = "bugreport"; + 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 final Context mContext; private final WindowManagerFuncs mWindowManagerFuncs; private final AudioManager mAudioManager; @@ -234,92 +244,36 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac onAirplaneModeChanged(); mItems = new ArrayList<Action>(); - - // first: power off - mItems.add( - new SinglePressAction( - com.android.internal.R.drawable.ic_lock_power_off, - R.string.global_action_power_off) { - - public void onPress() { - // shutdown by making sure radio and power are handled accordingly. - mWindowManagerFuncs.shutdown(true); - } - - public boolean onLongPress() { - mWindowManagerFuncs.rebootSafeMode(true); - return true; - } - - public boolean showDuringKeyguard() { - return true; - } - - public boolean showBeforeProvisioning() { - return true; - } - }); - - // next: airplane mode - mItems.add(mAirplaneModeOn); - - // next: bug report, if enabled - if (Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.BUGREPORT_IN_POWER_MENU, 0) != 0 && isCurrentUserOwner()) { - mItems.add( - new SinglePressAction(com.android.internal.R.drawable.stat_sys_adb, - R.string.global_action_bug_report) { - - public void onPress() { - AlertDialog.Builder builder = new AlertDialog.Builder(mContext); - builder.setTitle(com.android.internal.R.string.bugreport_title); - builder.setMessage(com.android.internal.R.string.bugreport_message); - builder.setNegativeButton(com.android.internal.R.string.cancel, null); - builder.setPositiveButton(com.android.internal.R.string.report, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // Add a little delay before executing, to give the - // dialog a chance to go away before it takes a - // screenshot. - mHandler.postDelayed(new Runnable() { - @Override public void run() { - try { - ActivityManagerNative.getDefault() - .requestBugReport(); - } catch (RemoteException e) { - } - } - }, 500); - } - }); - AlertDialog dialog = builder.create(); - dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); - dialog.show(); - } - - public boolean onLongPress() { - return false; - } - - public boolean showDuringKeyguard() { - return true; - } - - public boolean showBeforeProvisioning() { - return false; - } - }); - } - - // last: silent mode - if (mShowSilentToggle) { - mItems.add(mSilentModeAction); - } - - // one more thing: optionally add a list of users to switch to - if (SystemProperties.getBoolean("fw.power_user_switcher", false)) { - addUsersToMenu(mItems); + String[] defaultActions = mContext.getResources().getStringArray( + com.android.internal.R.array.config_globalActionsList); + + ArraySet<String> addedKeys = new ArraySet<String>(); + for (int i = 0; i < defaultActions.length; i++) { + String actionKey = defaultActions[i]; + if (addedKeys.contains(actionKey)) { + // If we already have added this, don't add it again. + continue; + } + if (GLOBAL_ACTION_KEY_POWER.equals(actionKey)) { + mItems.add(getPowerAction()); + } else if (GLOBAL_ACTION_KEY_AIRPLANE.equals(actionKey)) { + mItems.add(mAirplaneModeOn); + } else if (GLOBAL_ACTION_KEY_BUGREPORT.equals(actionKey) + && (Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.BUGREPORT_IN_POWER_MENU, 0) != 0 && isCurrentUserOwner())) { + mItems.add(getBugReportAction()); + } else if (GLOBAL_ACTION_KEY_SILENT.equals(actionKey) && mShowSilentToggle) { + mItems.add(mSilentModeAction); + } else if (GLOBAL_ACTION_KEY_USERS.equals(actionKey) + && SystemProperties.getBoolean("fw.power_user_switcher", false)) { + addUsersToMenu(mItems); + } else if (GLOBAL_ACTION_KEY_SETTINGS.equals(actionKey)) { + mItems.add(getSettingsAction()); + } else { + Log.e(TAG, "Invalid global action key " + actionKey); + } + // Add here so we don't add more than one. + addedKeys.add(actionKey); } mAdapter = new MyAdapter(); @@ -349,6 +303,105 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac return dialog; } + private Action getPowerAction() { + return new SinglePressAction( + com.android.internal.R.drawable.ic_lock_power_off, + R.string.global_action_power_off) { + + public void onPress() { + // shutdown by making sure radio and power are handled accordingly. + mWindowManagerFuncs.shutdown(true); + } + + public boolean onLongPress() { + mWindowManagerFuncs.rebootSafeMode(true); + return true; + } + + public boolean showDuringKeyguard() { + return true; + } + + public boolean showBeforeProvisioning() { + return true; + } + }; + } + + private Action getBugReportAction() { + return new SinglePressAction(com.android.internal.R.drawable.stat_sys_adb, + R.string.global_action_bug_report) { + + public void onPress() { + AlertDialog.Builder builder = new AlertDialog.Builder(mContext); + builder.setTitle(com.android.internal.R.string.bugreport_title); + builder.setMessage(com.android.internal.R.string.bugreport_message); + builder.setNegativeButton(com.android.internal.R.string.cancel, null); + builder.setPositiveButton(com.android.internal.R.string.report, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Add a little delay before executing, to give the + // dialog a chance to go away before it takes a + // screenshot. + mHandler.postDelayed(new Runnable() { + @Override public void run() { + try { + ActivityManagerNative.getDefault() + .requestBugReport(); + } catch (RemoteException e) { + } + } + }, 500); + } + }); + AlertDialog dialog = builder.create(); + dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); + dialog.show(); + } + + public boolean onLongPress() { + return false; + } + + public boolean showDuringKeyguard() { + return true; + } + + public boolean showBeforeProvisioning() { + return false; + } + }; + } + + private Action getSettingsAction() { + return new SinglePressAction(com.android.internal.R.drawable.ic_settings, + R.string.global_action_settings) { + + @Override + public void onPress() { + Intent intent = new Intent(Settings.ACTION_SETTINGS); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivity(intent); + } + + @Override + public boolean onLongPress() { + return false; + } + + @Override + public boolean showDuringKeyguard() { + return true; + } + + @Override + public boolean showBeforeProvisioning() { + return false; + } + }; + } + private UserInfo getCurrentUser() { try { return ActivityManagerNative.getDefault().getCurrentUser(); |
