Loading packages/SettingsLib/src/com/android/settingslib/drawer/DashboardCategory.java +8 −7 Original line number Diff line number Diff line Loading @@ -94,17 +94,18 @@ public class DashboardCategory implements Parcelable { * Sort priority value and package name for tiles in this category. */ public synchronized void sortTiles(String skipPackageName) { // Sort mTiles based on [priority, package within priority] // Sort mTiles based on [order, package within order] Collections.sort(mTiles, (tile1, tile2) -> { // First sort by order final int orderCompare = tile2.getOrder() - tile1.getOrder(); if (orderCompare != 0) { return orderCompare; } // Then sort by package name, skip package take precedence final String package1 = tile1.getPackageName(); final String package2 = tile2.getPackageName(); final int packageCompare = CASE_INSENSITIVE_ORDER.compare(package1, package2); // First sort by priority final int priorityCompare = tile2.priority - tile1.priority; if (priorityCompare != 0) { return priorityCompare; } // Then sort by package name, skip package take precedence if (packageCompare != 0) { if (TextUtils.equals(package1, skipPackageName)) { return -1; Loading packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java +33 −18 Original line number Diff line number Diff line Loading @@ -16,9 +16,11 @@ package com.android.settingslib.drawer; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL; import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY; Loading Loading @@ -64,16 +66,6 @@ public class Tile implements Parcelable { */ public ArrayList<UserHandle> userHandle = new ArrayList<>(); /** * Priority of the intent filter that created this tile, used for display ordering. */ public int priority; /** * Optional key to use for this tile. */ public String key; /** * The metaData from the activity that defines this tile. */ Loading Loading @@ -105,9 +97,7 @@ public class Tile implements Parcelable { userHandle.add(UserHandle.CREATOR.createFromParcel(in)); } mCategory = in.readString(); priority = in.readInt(); mMetaData = in.readBundle(); key = in.readString(); } @Override Loading @@ -127,9 +117,7 @@ public class Tile implements Parcelable { userHandle.get(i).writeToParcel(dest, flags); } dest.writeString(mCategory); dest.writeInt(priority); dest.writeBundle(mMetaData); dest.writeString(key); } public String getPackageName() { Loading @@ -155,16 +143,43 @@ public class Tile implements Parcelable { } /** * Priority of the intent filter that created this tile, used for display ordering. * Priority of this tile, used for display ordering. */ public int getPriority() { public int getOrder() { if (hasOrder()) { return mMetaData.getInt(META_DATA_KEY_ORDER); } else { return 0; } } public boolean hasOrder() { return mMetaData.containsKey(META_DATA_KEY_ORDER) && mMetaData.get(META_DATA_KEY_ORDER) instanceof Integer; } public Bundle getMetaData() { return mMetaData; } /** * Optional key to use for this tile. */ public String getKey(Context context) { if (!hasKey()) { return null; } if (mMetaData.get(META_DATA_PREFERENCE_KEYHINT) instanceof Integer) { return context.getResources().getString(mMetaData.getInt(META_DATA_PREFERENCE_KEYHINT)); } else { return mMetaData.getString(META_DATA_PREFERENCE_KEYHINT); } } public boolean hasKey() { return mMetaData != null && mMetaData.containsKey(META_DATA_PREFERENCE_KEYHINT); } /** * Optional icon to show for this tile. * Loading Loading @@ -238,5 +253,5 @@ public class Tile implements Parcelable { } public static final Comparator<Tile> TILE_COMPARATOR = (lhs, rhs) -> rhs.priority - lhs.priority; (lhs, rhs) -> rhs.getOrder() - lhs.getOrder(); } packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java +9 −17 Original line number Diff line number Diff line Loading @@ -65,20 +65,17 @@ public class TileUtils { * * <p>A summary my be defined by meta-data named {@link #META_DATA_PREFERENCE_SUMMARY} */ public static final String EXTRA_SETTINGS_ACTION = "com.android.settings.action.EXTRA_SETTINGS"; public static final String EXTRA_SETTINGS_ACTION = "com.android.settings.action.EXTRA_SETTINGS"; /** * @See {@link #EXTRA_SETTINGS_ACTION}. */ private static final String IA_SETTINGS_ACTION = "com.android.settings.action.IA_SETTINGS"; private static final String IA_SETTINGS_ACTION = "com.android.settings.action.IA_SETTINGS"; /** * Same as #EXTRA_SETTINGS_ACTION but used for the platform Settings activities. */ private static final String SETTINGS_ACTION = "com.android.settings.action.SETTINGS"; private static final String SETTINGS_ACTION = "com.android.settings.action.SETTINGS"; private static final String OPERATOR_SETTINGS = "com.android.settings.OPERATOR_APPLICATION_SETTING"; Loading Loading @@ -111,6 +108,12 @@ public class TileUtils { */ public static final String META_DATA_PREFERENCE_KEYHINT = "com.android.settings.keyhint"; /** * Order of the item that should be displayed on screen. Bigger value items displays closer on * top. */ public static final String META_DATA_KEY_ORDER = "com.android.settings.order"; /** * Name of the meta-data item that should be set in the AndroidManifest.xml * to specify the icon that should be displayed for the preference. Loading Loading @@ -303,7 +306,6 @@ public class TileUtils { Tile tile = addedCache.get(key); if (tile == null) { tile = new Tile(activityInfo, categoryKey); tile.priority = usePriority ? resolved.priority : 0; updateTileData(context, tile, activityInfo, activityInfo.applicationInfo, pm); if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title); addedCache.put(key, tile); Loading @@ -323,7 +325,6 @@ public class TileUtils { if (applicationInfo.isSystemApp()) { CharSequence title = null; String summary = null; String keyHint = null; // Get the activity's meta-data try { Loading @@ -345,13 +346,6 @@ public class TileUtils { summary = metaData.getString(META_DATA_PREFERENCE_SUMMARY); } } if (metaData.containsKey(META_DATA_PREFERENCE_KEYHINT)) { if (metaData.get(META_DATA_PREFERENCE_KEYHINT) instanceof Integer) { keyHint = res.getString(metaData.getInt(META_DATA_PREFERENCE_KEYHINT)); } else { keyHint = metaData.getString(META_DATA_PREFERENCE_KEYHINT); } } } } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) { if (DEBUG) Log.d(LOG_TAG, "Couldn't find info", e); Loading @@ -366,8 +360,6 @@ public class TileUtils { // Set title and summary for the preference tile.title = title; tile.summary = summary; // Suggest a key for this tile tile.key = keyHint; return true; } Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java +26 −0 Original line number Diff line number Diff line package com.android.settingslib.drawer; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; Loading Loading @@ -120,4 +121,29 @@ public class TileTest { final Tile tile2 = new Tile(activityInfo, "category"); assertThat(tile2.isIconTintable(RuntimeEnvironment.application)).isTrue(); } @Test public void getPriority_noMetadata_return0() { final Tile tile = new Tile(mActivityInfo, "category"); assertThat(tile.getOrder()).isEqualTo(0); } @Test public void getPriority_badMetadata_return0() { mActivityInfo.metaData.putString(META_DATA_KEY_ORDER, "1"); final Tile tile = new Tile(mActivityInfo, "category"); assertThat(tile.getOrder()).isEqualTo(0); } @Test public void getPriority_validMetadata_returnMetadataValue() { mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 1); final Tile tile = new Tile(mActivityInfo, "category"); assertThat(tile.getOrder()).isEqualTo(1); } } packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java +12 −19 Original line number Diff line number Diff line Loading @@ -16,6 +16,12 @@ package com.android.settingslib.drawer; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; Loading Loading @@ -47,7 +53,6 @@ import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings.Global; import android.text.TextUtils; import android.util.ArrayMap; import android.util.Pair; Loading Loading @@ -131,7 +136,7 @@ public class TileUtilsTest { null /* defaultCategory */, outTiles, false /* usePriority */); assertThat(outTiles.size()).isEqualTo(1); assertThat(outTiles.get(0).key).isEqualTo(keyHint); assertThat(outTiles.get(0).getKey(mContext)).isEqualTo(keyHint); } @Test Loading Loading @@ -361,16 +366,16 @@ public class TileUtilsTest { info.activityInfo.name = "123"; info.activityInfo.metaData = new Bundle(); info.activityInfo.metaData.putString("com.android.settings.category", category); info.activityInfo.metaData.putInt("com.android.settings.icon", 314159); info.activityInfo.metaData.putString("com.android.settings.summary", "static-summary"); info.activityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON, 314159); info.activityInfo.metaData.putString(META_DATA_PREFERENCE_SUMMARY, "static-summary"); if (keyHint != null) { info.activityInfo.metaData.putString("com.android.settings.keyhint", keyHint); info.activityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, keyHint); } if (iconUri != null) { info.activityInfo.metaData.putString("com.android.settings.icon_uri", iconUri); info.activityInfo.metaData.putString(META_DATA_PREFERENCE_ICON_URI, iconUri); } if (summaryUri != null) { info.activityInfo.metaData.putString("com.android.settings.summary_uri", summaryUri); info.activityInfo.metaData.putString(META_DATA_PREFERENCE_SUMMARY_URI, summaryUri); } if (titleResId != 0) { info.activityInfo.metaData.putInt(TileUtils.META_DATA_PREFERENCE_TITLE, titleResId); Loading @@ -383,16 +388,4 @@ public class TileUtilsTest { } return info; } private void addMetadataToInfo(ResolveInfo info, String key, String value) { if (!TextUtils.isEmpty(key)) { if (info.activityInfo == null) { info.activityInfo = new ActivityInfo(); } if (info.activityInfo.metaData == null) { info.activityInfo.metaData = new Bundle(); } info.activityInfo.metaData.putString(key, value); } } } Loading
packages/SettingsLib/src/com/android/settingslib/drawer/DashboardCategory.java +8 −7 Original line number Diff line number Diff line Loading @@ -94,17 +94,18 @@ public class DashboardCategory implements Parcelable { * Sort priority value and package name for tiles in this category. */ public synchronized void sortTiles(String skipPackageName) { // Sort mTiles based on [priority, package within priority] // Sort mTiles based on [order, package within order] Collections.sort(mTiles, (tile1, tile2) -> { // First sort by order final int orderCompare = tile2.getOrder() - tile1.getOrder(); if (orderCompare != 0) { return orderCompare; } // Then sort by package name, skip package take precedence final String package1 = tile1.getPackageName(); final String package2 = tile2.getPackageName(); final int packageCompare = CASE_INSENSITIVE_ORDER.compare(package1, package2); // First sort by priority final int priorityCompare = tile2.priority - tile1.priority; if (priorityCompare != 0) { return priorityCompare; } // Then sort by package name, skip package take precedence if (packageCompare != 0) { if (TextUtils.equals(package1, skipPackageName)) { return -1; Loading
packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java +33 −18 Original line number Diff line number Diff line Loading @@ -16,9 +16,11 @@ package com.android.settingslib.drawer; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL; import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY; Loading Loading @@ -64,16 +66,6 @@ public class Tile implements Parcelable { */ public ArrayList<UserHandle> userHandle = new ArrayList<>(); /** * Priority of the intent filter that created this tile, used for display ordering. */ public int priority; /** * Optional key to use for this tile. */ public String key; /** * The metaData from the activity that defines this tile. */ Loading Loading @@ -105,9 +97,7 @@ public class Tile implements Parcelable { userHandle.add(UserHandle.CREATOR.createFromParcel(in)); } mCategory = in.readString(); priority = in.readInt(); mMetaData = in.readBundle(); key = in.readString(); } @Override Loading @@ -127,9 +117,7 @@ public class Tile implements Parcelable { userHandle.get(i).writeToParcel(dest, flags); } dest.writeString(mCategory); dest.writeInt(priority); dest.writeBundle(mMetaData); dest.writeString(key); } public String getPackageName() { Loading @@ -155,16 +143,43 @@ public class Tile implements Parcelable { } /** * Priority of the intent filter that created this tile, used for display ordering. * Priority of this tile, used for display ordering. */ public int getPriority() { public int getOrder() { if (hasOrder()) { return mMetaData.getInt(META_DATA_KEY_ORDER); } else { return 0; } } public boolean hasOrder() { return mMetaData.containsKey(META_DATA_KEY_ORDER) && mMetaData.get(META_DATA_KEY_ORDER) instanceof Integer; } public Bundle getMetaData() { return mMetaData; } /** * Optional key to use for this tile. */ public String getKey(Context context) { if (!hasKey()) { return null; } if (mMetaData.get(META_DATA_PREFERENCE_KEYHINT) instanceof Integer) { return context.getResources().getString(mMetaData.getInt(META_DATA_PREFERENCE_KEYHINT)); } else { return mMetaData.getString(META_DATA_PREFERENCE_KEYHINT); } } public boolean hasKey() { return mMetaData != null && mMetaData.containsKey(META_DATA_PREFERENCE_KEYHINT); } /** * Optional icon to show for this tile. * Loading Loading @@ -238,5 +253,5 @@ public class Tile implements Parcelable { } public static final Comparator<Tile> TILE_COMPARATOR = (lhs, rhs) -> rhs.priority - lhs.priority; (lhs, rhs) -> rhs.getOrder() - lhs.getOrder(); }
packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java +9 −17 Original line number Diff line number Diff line Loading @@ -65,20 +65,17 @@ public class TileUtils { * * <p>A summary my be defined by meta-data named {@link #META_DATA_PREFERENCE_SUMMARY} */ public static final String EXTRA_SETTINGS_ACTION = "com.android.settings.action.EXTRA_SETTINGS"; public static final String EXTRA_SETTINGS_ACTION = "com.android.settings.action.EXTRA_SETTINGS"; /** * @See {@link #EXTRA_SETTINGS_ACTION}. */ private static final String IA_SETTINGS_ACTION = "com.android.settings.action.IA_SETTINGS"; private static final String IA_SETTINGS_ACTION = "com.android.settings.action.IA_SETTINGS"; /** * Same as #EXTRA_SETTINGS_ACTION but used for the platform Settings activities. */ private static final String SETTINGS_ACTION = "com.android.settings.action.SETTINGS"; private static final String SETTINGS_ACTION = "com.android.settings.action.SETTINGS"; private static final String OPERATOR_SETTINGS = "com.android.settings.OPERATOR_APPLICATION_SETTING"; Loading Loading @@ -111,6 +108,12 @@ public class TileUtils { */ public static final String META_DATA_PREFERENCE_KEYHINT = "com.android.settings.keyhint"; /** * Order of the item that should be displayed on screen. Bigger value items displays closer on * top. */ public static final String META_DATA_KEY_ORDER = "com.android.settings.order"; /** * Name of the meta-data item that should be set in the AndroidManifest.xml * to specify the icon that should be displayed for the preference. Loading Loading @@ -303,7 +306,6 @@ public class TileUtils { Tile tile = addedCache.get(key); if (tile == null) { tile = new Tile(activityInfo, categoryKey); tile.priority = usePriority ? resolved.priority : 0; updateTileData(context, tile, activityInfo, activityInfo.applicationInfo, pm); if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title); addedCache.put(key, tile); Loading @@ -323,7 +325,6 @@ public class TileUtils { if (applicationInfo.isSystemApp()) { CharSequence title = null; String summary = null; String keyHint = null; // Get the activity's meta-data try { Loading @@ -345,13 +346,6 @@ public class TileUtils { summary = metaData.getString(META_DATA_PREFERENCE_SUMMARY); } } if (metaData.containsKey(META_DATA_PREFERENCE_KEYHINT)) { if (metaData.get(META_DATA_PREFERENCE_KEYHINT) instanceof Integer) { keyHint = res.getString(metaData.getInt(META_DATA_PREFERENCE_KEYHINT)); } else { keyHint = metaData.getString(META_DATA_PREFERENCE_KEYHINT); } } } } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) { if (DEBUG) Log.d(LOG_TAG, "Couldn't find info", e); Loading @@ -366,8 +360,6 @@ public class TileUtils { // Set title and summary for the preference tile.title = title; tile.summary = summary; // Suggest a key for this tile tile.key = keyHint; return true; } Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java +26 −0 Original line number Diff line number Diff line package com.android.settingslib.drawer; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; Loading Loading @@ -120,4 +121,29 @@ public class TileTest { final Tile tile2 = new Tile(activityInfo, "category"); assertThat(tile2.isIconTintable(RuntimeEnvironment.application)).isTrue(); } @Test public void getPriority_noMetadata_return0() { final Tile tile = new Tile(mActivityInfo, "category"); assertThat(tile.getOrder()).isEqualTo(0); } @Test public void getPriority_badMetadata_return0() { mActivityInfo.metaData.putString(META_DATA_KEY_ORDER, "1"); final Tile tile = new Tile(mActivityInfo, "category"); assertThat(tile.getOrder()).isEqualTo(0); } @Test public void getPriority_validMetadata_returnMetadataValue() { mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 1); final Tile tile = new Tile(mActivityInfo, "category"); assertThat(tile.getOrder()).isEqualTo(1); } }
packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java +12 −19 Original line number Diff line number Diff line Loading @@ -16,6 +16,12 @@ package com.android.settingslib.drawer; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; Loading Loading @@ -47,7 +53,6 @@ import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings.Global; import android.text.TextUtils; import android.util.ArrayMap; import android.util.Pair; Loading Loading @@ -131,7 +136,7 @@ public class TileUtilsTest { null /* defaultCategory */, outTiles, false /* usePriority */); assertThat(outTiles.size()).isEqualTo(1); assertThat(outTiles.get(0).key).isEqualTo(keyHint); assertThat(outTiles.get(0).getKey(mContext)).isEqualTo(keyHint); } @Test Loading Loading @@ -361,16 +366,16 @@ public class TileUtilsTest { info.activityInfo.name = "123"; info.activityInfo.metaData = new Bundle(); info.activityInfo.metaData.putString("com.android.settings.category", category); info.activityInfo.metaData.putInt("com.android.settings.icon", 314159); info.activityInfo.metaData.putString("com.android.settings.summary", "static-summary"); info.activityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON, 314159); info.activityInfo.metaData.putString(META_DATA_PREFERENCE_SUMMARY, "static-summary"); if (keyHint != null) { info.activityInfo.metaData.putString("com.android.settings.keyhint", keyHint); info.activityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, keyHint); } if (iconUri != null) { info.activityInfo.metaData.putString("com.android.settings.icon_uri", iconUri); info.activityInfo.metaData.putString(META_DATA_PREFERENCE_ICON_URI, iconUri); } if (summaryUri != null) { info.activityInfo.metaData.putString("com.android.settings.summary_uri", summaryUri); info.activityInfo.metaData.putString(META_DATA_PREFERENCE_SUMMARY_URI, summaryUri); } if (titleResId != 0) { info.activityInfo.metaData.putInt(TileUtils.META_DATA_PREFERENCE_TITLE, titleResId); Loading @@ -383,16 +388,4 @@ public class TileUtilsTest { } return info; } private void addMetadataToInfo(ResolveInfo info, String key, String value) { if (!TextUtils.isEmpty(key)) { if (info.activityInfo == null) { info.activityInfo = new ActivityInfo(); } if (info.activityInfo.metaData == null) { info.activityInfo.metaData = new Bundle(); } info.activityInfo.metaData.putString(key, value); } } }