diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 7bbffc7813b..3b6d4f8cd6f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -244,10 +244,8 @@
-
+
-
-
-
+
-
-
+
-
-
+
-
-
-
+
-
-
+
-
-
@@ -904,15 +895,6 @@
android:resource="@string/display_dashboard_summary"/>
-
-
-
-
-
-
+
-
@@ -965,10 +946,8 @@
-
+
-
-
@@ -1009,10 +988,8 @@
-
+
-
-
-
+
-
-
+
-
-
-
+
-
-
@@ -1752,11 +1724,9 @@
-
+
-
-
@@ -2156,9 +2126,8 @@
-
+
-
@@ -2310,9 +2279,8 @@
-
+
-
@@ -2500,9 +2468,8 @@
-
+
-
@@ -2518,7 +2485,6 @@
android:value="true" />
-
-
+
-
-
@@ -2986,7 +2950,7 @@
-
+
@@ -3007,7 +2971,7 @@
-
+
diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
index e995e008ba2..4848bf6b049 100644
--- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
+++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
@@ -45,10 +45,13 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceGroup;
/**
@@ -97,9 +100,26 @@ public class CreateShortcutPreferenceController extends BasePreferenceController
group.removeAll();
final List shortcuts = queryShortcuts();
final Context uiContext = preference.getContext();
+ if (shortcuts.isEmpty()) {
+ return;
+ }
+ PreferenceCategory category = new PreferenceCategory(uiContext);
+ group.addPreference(category);
+ int bucket = 0;
for (ResolveInfo info : shortcuts) {
+ // Priority is not consecutive (aka, jumped), add a divider between prefs.
+ final int currentBucket = info.priority / 10;
+ boolean needDivider = currentBucket != bucket;
+ bucket = currentBucket;
+ if (needDivider) {
+ // add a new Category
+ category = new PreferenceCategory(uiContext);
+ group.addPreference(category);
+ }
+
final Preference pref = new Preference(uiContext);
pref.setTitle(info.loadLabel(mPackageManager));
+ pref.setKey(info.activityInfo.getComponentName().flattenToString());
pref.setOnPreferenceClickListener(clickTarget -> {
if (mHost == null) {
return false;
@@ -112,7 +132,7 @@ public class CreateShortcutPreferenceController extends BasePreferenceController
mHost.finish();
return true;
});
- group.addPreference(pref);
+ category.addPreference(pref);
}
}
@@ -184,6 +204,7 @@ public class CreateShortcutPreferenceController extends BasePreferenceController
}
shortcuts.add(info);
}
+ Collections.sort(shortcuts, SHORTCUT_COMPARATOR);
return shortcuts;
}
@@ -228,4 +249,13 @@ public class CreateShortcutPreferenceController extends BasePreferenceController
view.draw(canvas);
return bitmap;
}
+
+ private static final Comparator SHORTCUT_COMPARATOR =
+ new Comparator() {
+
+ @Override
+ public int compare(ResolveInfo i1, ResolveInfo i2) {
+ return i1.priority - i2.priority;
+ }
+ };
}
diff --git a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java
index 6e04a22b0e0..6bccfe5f784 100644
--- a/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/shortcut/CreateShortcutPreferenceControllerTest.java
@@ -104,7 +104,7 @@ public class CreateShortcutPreferenceControllerTest {
}
@Test
- public void queryActivities_shouldOnlyIncludeSystemApp() {
+ public void queryShortcuts_shouldOnlyIncludeSystemApp() {
final ResolveInfo ri1 = new ResolveInfo();
ri1.activityInfo = new ActivityInfo();
ri1.activityInfo.name = "activity1";
@@ -124,4 +124,30 @@ public class CreateShortcutPreferenceControllerTest {
assertThat(info).hasSize(1);
assertThat(info.get(0)).isEqualTo(ri2);
}
+
+ @Test
+ public void queryShortcuts_shouldSortBasedOnPriority() {
+ final ResolveInfo ri1 = new ResolveInfo();
+ ri1.priority = 100;
+ ri1.activityInfo = new ActivityInfo();
+ ri1.activityInfo.name = "activity1";
+ ri1.activityInfo.applicationInfo = new ApplicationInfo();
+ ri1.activityInfo.applicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
+
+ final ResolveInfo ri2 = new ResolveInfo();
+ ri1.priority = 50;
+ ri2.activityInfo = new ActivityInfo();
+ ri2.activityInfo.name = "activity2";
+ ri2.activityInfo.applicationInfo = new ApplicationInfo();
+ ri2.activityInfo.applicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
+
+ mPackageManager.addResolveInfoForIntent(
+ new Intent(CreateShortcutPreferenceController.SHORTCUT_PROBE),
+ Arrays.asList(ri1, ri2));
+
+ final List info = mController.queryShortcuts();
+ assertThat(info).hasSize(2);
+ assertThat(info.get(0)).isEqualTo(ri2);
+ assertThat(info.get(1)).isEqualTo(ri1);
+ }
}