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:
@@ -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 DASHBOARD_TILE_PREF_KEY_PREFIX = "dashboard_tile_pref_";
|
||||||
private static final String META_DATA_KEY_INTENT_ACTION = "com.android.settings.intent.action";
|
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;
|
protected final Context mContext;
|
||||||
|
|
||||||
@@ -142,9 +144,14 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
|
|||||||
final Bundle metadata = tile.metaData;
|
final Bundle metadata = tile.metaData;
|
||||||
String clsName = null;
|
String clsName = null;
|
||||||
String action = null;
|
String action = null;
|
||||||
|
Integer order = null;
|
||||||
if (metadata != null) {
|
if (metadata != null) {
|
||||||
clsName = metadata.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS);
|
clsName = metadata.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS);
|
||||||
action = metadata.getString(META_DATA_KEY_INTENT_ACTION);
|
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)) {
|
if (!TextUtils.isEmpty(clsName)) {
|
||||||
pref.setFragment(clsName);
|
pref.setFragment(clsName);
|
||||||
@@ -160,19 +167,23 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
final String skipOffsetPackageName = activity.getPackageName();
|
final String skipOffsetPackageName = activity.getPackageName();
|
||||||
// Use negated priority for order, because tile priority is based on intent-filter
|
// If order is set in the meta data, use that order. Otherwise, check the intent priority.
|
||||||
// (larger value has higher priority). However pref order defines smaller value has
|
if (order == null && tile.priority != 0) {
|
||||||
// higher priority.
|
// Use negated priority for order, because tile priority is based on intent-filter
|
||||||
if (tile.priority != 0) {
|
// (larger value has higher priority). However pref order defines smaller value has
|
||||||
|
// higher priority.
|
||||||
|
order = -tile.priority;
|
||||||
|
}
|
||||||
|
if (order != null) {
|
||||||
boolean shouldSkipBaseOrderOffset = false;
|
boolean shouldSkipBaseOrderOffset = false;
|
||||||
if (tile.intent != null) {
|
if (tile.intent != null) {
|
||||||
shouldSkipBaseOrderOffset = TextUtils.equals(
|
shouldSkipBaseOrderOffset = TextUtils.equals(
|
||||||
skipOffsetPackageName, tile.intent.getComponent().getPackageName());
|
skipOffsetPackageName, tile.intent.getComponent().getPackageName());
|
||||||
}
|
}
|
||||||
if (shouldSkipBaseOrderOffset || baseOrder == Preference.DEFAULT_ORDER) {
|
if (shouldSkipBaseOrderOffset || baseOrder == Preference.DEFAULT_ORDER) {
|
||||||
pref.setOrder(-tile.priority);
|
pref.setOrder(order);
|
||||||
} else {
|
} else {
|
||||||
pref.setOrder(-tile.priority + baseOrder);
|
pref.setOrder(order + baseOrder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -314,6 +314,33 @@ public class DashboardFeatureProviderImplTest {
|
|||||||
assertThat(preference.getOrder()).isEqualTo(-tile.priority + baseOrder);
|
assertThat(preference.getOrder()).isEqualTo(-tile.priority + baseOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bindPreference_withOrderMetadata_shouldUseOrderInMetadata() {
|
||||||
|
final Preference preference = new Preference(RuntimeEnvironment.application);
|
||||||
|
final int testOrder = -30;
|
||||||
|
final Tile tile = new Tile();
|
||||||
|
tile.metaData = new Bundle();
|
||||||
|
tile.metaData.putInt(mImpl.META_DATA_KEY_ORDER, testOrder);
|
||||||
|
tile.priority = 10;
|
||||||
|
mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
|
||||||
|
preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||||
|
|
||||||
|
assertThat(preference.getOrder()).isEqualTo(testOrder);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bindPreference_invalidOrderMetadata_shouldIgnore() {
|
||||||
|
final Preference preference = new Preference(RuntimeEnvironment.application);
|
||||||
|
final Tile tile = new Tile();
|
||||||
|
tile.metaData = new Bundle();
|
||||||
|
tile.metaData.putString(mImpl.META_DATA_KEY_ORDER, "hello");
|
||||||
|
tile.priority = 10;
|
||||||
|
mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
|
||||||
|
preference, tile, "123", Preference.DEFAULT_ORDER);
|
||||||
|
|
||||||
|
assertThat(preference.getOrder()).isEqualTo(-tile.priority);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void bindPreference_withIntentActionMetatdata_shouldSetLaunchAction() {
|
public void bindPreference_withIntentActionMetatdata_shouldSetLaunchAction() {
|
||||||
Activity activity = Robolectric.buildActivity(Activity.class).get();
|
Activity activity = Robolectric.buildActivity(Activity.class).get();
|
||||||
|
Reference in New Issue
Block a user