Override homepage tile positions for silky home
Create configs to record the packages and orders of homepage tiles and
then according to these data to override homepage tile positions.
Bug: 168166015
Test: visual with turning on/off silky home
Change-Id: I3fcb54ac531a124101084bb40064b5a7227bf311
diff --git a/res/values/config.xml b/res/values/config.xml
index 9a6e486..d34c481 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -473,4 +473,10 @@
<!-- Authority of advanced device battery prediction -->
<string name="config_battery_prediction_authority" translatable="false"></string>
+
+ <!-- Packages for overriding tile positions on the homepage -->
+ <string-array name="config_homepage_tile_packages" translatable="false"/>
+
+ <!-- Orders for overriding tile positions on the homepage -->
+ <integer-array name="config_homepage_tile_orders"/>
</resources>
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 0243b8a..9c00e4b 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -184,6 +184,9 @@
pref.setOrder(order + baseOrder);
}
}
+
+ overrideTilePosition(tile, pref);
+
return outObservers.isEmpty() ? null : outObservers;
}
@@ -457,4 +460,25 @@
}
return eligibleUsers;
}
+
+ private void overrideTilePosition(Tile tile, Preference pref) {
+ if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.SILKY_HOME)
+ && TextUtils.equals(tile.getCategory(), CategoryKey.CATEGORY_HOMEPAGE)) {
+ final String[] homepageTilePackages = mContext.getResources().getStringArray(
+ R.array.config_homepage_tile_packages);
+ final int[] homepageTileOrders = mContext.getResources().getIntArray(
+ R.array.config_homepage_tile_orders);
+ if (homepageTilePackages.length == 0
+ || homepageTilePackages.length != homepageTileOrders.length) {
+ return;
+ }
+
+ for (int i = 0; i < homepageTilePackages.length; i++) {
+ if (TextUtils.equals(tile.getPackageName(), homepageTilePackages[i])) {
+ pref.setOrder(homepageTileOrders[i]);
+ return;
+ }
+ }
+ }
+ }
}
diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml
index b1d4be9..af02d45 100644
--- a/tests/robotests/res/values-mcc999/config.xml
+++ b/tests/robotests/res/values-mcc999/config.xml
@@ -100,4 +100,14 @@
<!-- Uri to query non-public Slice Uris. -->
<string name="config_non_public_slice_query_uri" translatable="false">content://com.android.settings.slices/test</string>
+
+ <!-- Packages for overriding tile positions on the homepage -->
+ <string-array name="config_homepage_tile_packages" translatable="false">
+ <item>com.android.settings</item>
+ </string-array>
+
+ <!-- Orders for overriding tile positions on the homepage -->
+ <integer-array name="config_homepage_tile_orders">
+ <item>100</item>
+ </integer-array>
</resources>
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
index 36bc376..a0024c0 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
@@ -707,4 +707,18 @@
assertThat(preference.getSummary()).isEqualTo(
mContext.getText(R.string.about_settings_summary));
}
+
+ @Test
+ @Config(qualifiers = "mcc999")
+ public void bindPreference_specificHomepageTile_shouldOverridePosition() {
+ FeatureFlagUtils.setEnabled(mContext, FeatureFlags.SILKY_HOME, true);
+ final Preference preference = new Preference(RuntimeEnvironment.application);
+ final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
+
+ mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
+ MetricsEvent.VIEW_UNKNOWN, preference, tile, null /*key */,
+ Preference.DEFAULT_ORDER);
+
+ assertThat(preference.getOrder()).isEqualTo(100);
+ }
}