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); + } }