Add metadata handling for specifying tile order.

- if tile order is set in the metadata, it will be used as preference
order instead of the intent priority specified.

Change-Id: If1a09219ece7bb71fc476aad60dc66d7653dfd28
Fixes: 65172575
Test: make RunSettingsRoboTests
This commit is contained in:
Doris Ling
2017-09-18 14:58:31 -07:00
parent 211ea46815
commit c879239238
2 changed files with 44 additions and 6 deletions

View File

@@ -62,6 +62,8 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
private static final String DASHBOARD_TILE_PREF_KEY_PREFIX = "dashboard_tile_pref_";
private static final String META_DATA_KEY_INTENT_ACTION = "com.android.settings.intent.action";
@VisibleForTesting
static final String META_DATA_KEY_ORDER = "com.android.settings.order";
protected final Context mContext;
@@ -142,9 +144,14 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
final Bundle metadata = tile.metaData;
String clsName = null;
String action = null;
Integer order = null;
if (metadata != null) {
clsName = metadata.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS);
action = metadata.getString(META_DATA_KEY_INTENT_ACTION);
if (metadata.containsKey(META_DATA_KEY_ORDER)
&& metadata.get(META_DATA_KEY_ORDER) instanceof Integer) {
order = metadata.getInt(META_DATA_KEY_ORDER);
}
}
if (!TextUtils.isEmpty(clsName)) {
pref.setFragment(clsName);
@@ -160,19 +167,23 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
});
}
final String skipOffsetPackageName = activity.getPackageName();
// Use negated priority for order, because tile priority is based on intent-filter
// (larger value has higher priority). However pref order defines smaller value has
// higher priority.
if (tile.priority != 0) {
// If order is set in the meta data, use that order. Otherwise, check the intent priority.
if (order == null && tile.priority != 0) {
// Use negated priority for order, because tile priority is based on intent-filter
// (larger value has higher priority). However pref order defines smaller value has
// higher priority.
order = -tile.priority;
}
if (order != null) {
boolean shouldSkipBaseOrderOffset = false;
if (tile.intent != null) {
shouldSkipBaseOrderOffset = TextUtils.equals(
skipOffsetPackageName, tile.intent.getComponent().getPackageName());
}
if (shouldSkipBaseOrderOffset || baseOrder == Preference.DEFAULT_ORDER) {
pref.setOrder(-tile.priority);
pref.setOrder(order);
} else {
pref.setOrder(-tile.priority + baseOrder);
pref.setOrder(order + baseOrder);
}
}
}