Keyboard shortcuts: sort application items
Sorts entries for application shortcuts by label,
case insensitive with nulls and/or empty labels last.
Bug: 28014459
Change-Id: I405a72bc312e4a81a3013b816385dc8c23f9feec
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
index fff1491..3d36aa4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java
@@ -58,11 +58,15 @@
import com.android.systemui.recents.Recents;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import static android.content.Context.LAYOUT_INFLATER_SERVICE;
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
+import com.google.android.collect.Lists;
+
/**
* Contains functionality for handling keyboard shortcuts.
*/
@@ -76,11 +80,32 @@
private final Handler mHandler = new Handler(Looper.getMainLooper());
private final Context mContext;
private final IPackageManager mPackageManager;
- private final OnClickListener dialogCloseListener = new DialogInterface.OnClickListener() {
+ private final OnClickListener mDialogCloseListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dismissKeyboardShortcutsDialog();
}
};
+ private final Comparator<KeyboardShortcutInfo> mApplicationItemsComparator =
+ new Comparator<KeyboardShortcutInfo>() {
+ @Override
+ public int compare(KeyboardShortcutInfo ksh1, KeyboardShortcutInfo ksh2) {
+ boolean ksh1ShouldBeLast = ksh1.getLabel() == null
+ || ksh1.getLabel().toString().isEmpty();
+ boolean ksh2ShouldBeLast = ksh2.getLabel() == null
+ || ksh2.getLabel().toString().isEmpty();
+ if (ksh1ShouldBeLast && ksh2ShouldBeLast) {
+ return 0;
+ }
+ if (ksh1ShouldBeLast) {
+ return 1;
+ }
+ if (ksh2ShouldBeLast) {
+ return -1;
+ }
+ return (ksh1.getLabel().toString()).compareToIgnoreCase(
+ ksh2.getLabel().toString());
+ }
+ };
private Dialog mKeyboardShortcutsDialog;
private KeyCharacterMap mKeyCharacterMap;
@@ -320,9 +345,7 @@
private KeyboardShortcutGroup getDefaultApplicationShortcuts() {
final int userId = mContext.getUserId();
- final KeyboardShortcutGroup applicationGroup = new KeyboardShortcutGroup(
- mContext.getString(R.string.keyboard_shortcut_group_applications),
- true);
+ List<KeyboardShortcutInfo> keyboardShortcutInfoAppItems = Lists.newArrayList();
// Assist.
final AssistUtils assistUtils = new AssistUtils(mContext);
@@ -340,7 +363,7 @@
assistPackageInfo.applicationInfo.packageName,
assistPackageInfo.applicationInfo.icon);
- applicationGroup.addItem(new KeyboardShortcutInfo(
+ keyboardShortcutInfoAppItems.add(new KeyboardShortcutInfo(
mContext.getString(R.string.keyboard_shortcut_group_applications_assist),
assistIcon,
KeyEvent.KEYCODE_UNKNOWN,
@@ -350,7 +373,7 @@
// Browser.
final Icon browserIcon = getIconForIntentCategory(Intent.CATEGORY_APP_BROWSER, userId);
if (browserIcon != null) {
- applicationGroup.addItem(new KeyboardShortcutInfo(
+ keyboardShortcutInfoAppItems.add(new KeyboardShortcutInfo(
mContext.getString(R.string.keyboard_shortcut_group_applications_browser),
browserIcon,
KeyEvent.KEYCODE_B,
@@ -361,7 +384,7 @@
// Contacts.
final Icon contactsIcon = getIconForIntentCategory(Intent.CATEGORY_APP_CONTACTS, userId);
if (contactsIcon != null) {
- applicationGroup.addItem(new KeyboardShortcutInfo(
+ keyboardShortcutInfoAppItems.add(new KeyboardShortcutInfo(
mContext.getString(R.string.keyboard_shortcut_group_applications_contacts),
contactsIcon,
KeyEvent.KEYCODE_C,
@@ -371,7 +394,7 @@
// Email.
final Icon emailIcon = getIconForIntentCategory(Intent.CATEGORY_APP_EMAIL, userId);
if (emailIcon != null) {
- applicationGroup.addItem(new KeyboardShortcutInfo(
+ keyboardShortcutInfoAppItems.add(new KeyboardShortcutInfo(
mContext.getString(R.string.keyboard_shortcut_group_applications_email),
emailIcon,
KeyEvent.KEYCODE_E,
@@ -381,7 +404,7 @@
// Messaging.
final Icon messagingIcon = getIconForIntentCategory(Intent.CATEGORY_APP_MESSAGING, userId);
if (messagingIcon != null) {
- applicationGroup.addItem(new KeyboardShortcutInfo(
+ keyboardShortcutInfoAppItems.add(new KeyboardShortcutInfo(
mContext.getString(R.string.keyboard_shortcut_group_applications_im),
messagingIcon,
KeyEvent.KEYCODE_T,
@@ -391,7 +414,7 @@
// Music.
final Icon musicIcon = getIconForIntentCategory(Intent.CATEGORY_APP_MUSIC, userId);
if (musicIcon != null) {
- applicationGroup.addItem(new KeyboardShortcutInfo(
+ keyboardShortcutInfoAppItems.add(new KeyboardShortcutInfo(
mContext.getString(R.string.keyboard_shortcut_group_applications_music),
musicIcon,
KeyEvent.KEYCODE_P,
@@ -401,14 +424,24 @@
// Calendar.
final Icon calendarIcon = getIconForIntentCategory(Intent.CATEGORY_APP_CALENDAR, userId);
if (calendarIcon != null) {
- applicationGroup.addItem(new KeyboardShortcutInfo(
+ keyboardShortcutInfoAppItems.add(new KeyboardShortcutInfo(
mContext.getString(R.string.keyboard_shortcut_group_applications_calendar),
calendarIcon,
KeyEvent.KEYCODE_L,
KeyEvent.META_META_ON));
}
- return applicationGroup.getItems().size() == 0 ? null : applicationGroup;
+ final int itemsSize = keyboardShortcutInfoAppItems.size();
+ if (itemsSize == 0) {
+ return null;
+ }
+
+ // Sorts by label, case insensitive with nulls and/or empty labels last.
+ Collections.sort(keyboardShortcutInfoAppItems, mApplicationItemsComparator);
+ return new KeyboardShortcutGroup(
+ mContext.getString(R.string.keyboard_shortcut_group_applications),
+ keyboardShortcutInfoAppItems,
+ true);
}
private Icon getIconForIntentCategory(String intentCategory, int userId) {
@@ -459,7 +492,7 @@
populateKeyboardShortcuts((LinearLayout) keyboardShortcutsView.findViewById(
R.id.keyboard_shortcuts_container), keyboardShortcutGroups);
dialogBuilder.setView(keyboardShortcutsView);
- dialogBuilder.setPositiveButton(R.string.quick_settings_done, dialogCloseListener);
+ dialogBuilder.setPositiveButton(R.string.quick_settings_done, mDialogCloseListener);
mKeyboardShortcutsDialog = dialogBuilder.create();
mKeyboardShortcutsDialog.setCanceledOnTouchOutside(true);
Window keyboardShortcutsWindow = mKeyboardShortcutsDialog.getWindow();