diff options
| -rw-r--r-- | services/core/java/com/android/server/policy/ShortcutManager.java | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/policy/ShortcutManager.java b/services/core/java/com/android/server/policy/ShortcutManager.java index 990862431799..928444275854 100644 --- a/services/core/java/com/android/server/policy/ShortcutManager.java +++ b/services/core/java/com/android/server/policy/ShortcutManager.java @@ -26,6 +26,7 @@ import android.text.TextUtils; import android.util.Log; import android.util.SparseArray; import android.view.KeyCharacterMap; +import android.view.KeyEvent; import com.android.internal.util.XmlUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -47,8 +48,10 @@ class ShortcutManager { private static final String ATTRIBUTE_CLASS = "class"; private static final String ATTRIBUTE_SHORTCUT = "shortcut"; private static final String ATTRIBUTE_CATEGORY = "category"; + private static final String ATTRIBUTE_SHIFT = "shift"; private final SparseArray<ShortcutInfo> mShortcuts = new SparseArray<>(); + private final SparseArray<ShortcutInfo> mShiftShortcuts = new SparseArray<>(); private final Context mContext; @@ -75,17 +78,21 @@ class ShortcutManager { public Intent getIntent(KeyCharacterMap kcm, int keyCode, int metaState) { ShortcutInfo shortcut = null; + // If the Shift key is preesed, then search for the shift shortcuts. + boolean isShiftOn = (metaState & KeyEvent.META_SHIFT_ON) == KeyEvent.META_SHIFT_ON; + SparseArray<ShortcutInfo> shortcutMap = isShiftOn ? mShiftShortcuts : mShortcuts; + // First try the exact keycode (with modifiers). int shortcutChar = kcm.get(keyCode, metaState); if (shortcutChar != 0) { - shortcut = mShortcuts.get(shortcutChar); + shortcut = shortcutMap.get(shortcutChar); } // Next try the primary character on that key. if (shortcut == null) { shortcutChar = Character.toLowerCase(kcm.getDisplayLabel(keyCode)); if (shortcutChar != 0) { - shortcut = mShortcuts.get(shortcutChar); + shortcut = shortcutMap.get(shortcutChar); } } @@ -114,6 +121,7 @@ class ShortcutManager { String className = parser.getAttributeValue(null, ATTRIBUTE_CLASS); String shortcutName = parser.getAttributeValue(null, ATTRIBUTE_SHORTCUT); String categoryName = parser.getAttributeValue(null, ATTRIBUTE_CATEGORY); + String shiftName = parser.getAttributeValue(null, ATTRIBUTE_SHIFT); if (TextUtils.isEmpty(shortcutName)) { Log.w(TAG, "Unable to get shortcut for: " + packageName + "/" + className); @@ -121,6 +129,7 @@ class ShortcutManager { } final int shortcutChar = shortcutName.charAt(0); + final boolean isShiftShortcut = (shiftName != null && shiftName.equals("true")); final Intent intent; final String title; @@ -158,7 +167,11 @@ class ShortcutManager { } ShortcutInfo shortcut = new ShortcutInfo(title, intent); - mShortcuts.put(shortcutChar, shortcut); + if (isShiftShortcut) { + mShiftShortcuts.put(shortcutChar, shortcut); + } else { + mShortcuts.put(shortcutChar, shortcut); + } } } catch (XmlPullParserException e) { Log.w(TAG, "Got exception parsing bookmarks.", e); |