Remove priority from intent-filters for IA items

And use ORDER metadata instead.

Bug: 77600770
Test: robotests
Change-Id: I9862c89ff5b601fbb9fb53eaa91f03d95d501284
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e2e89bd..3627b63 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -183,9 +183,10 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
             </intent-filter>
-            <intent-filter android:priority="11">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS"/>
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="11"/>
             <meta-data android:name="com.android.settings.category"
                 android:value="com.android.settings.category.ia.homepage"/>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
@@ -208,9 +209,10 @@
                 <action android:name="android.settings.BLUETOOTH_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-            <intent-filter android:priority="10">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS"/>
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="10"/>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment"/>
             <meta-data android:name="com.android.settings.category"
@@ -889,9 +891,10 @@
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.SHORTCUT" />
             </intent-filter>
-            <intent-filter android:priority="7">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="7"/>
             <meta-data android:name="com.android.settings.category"
                 android:value="com.android.settings.category.ia.homepage" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
@@ -1252,9 +1255,10 @@
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
             </intent-filter>
-            <intent-filter android:priority="4">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="4"/>
             <meta-data android:name="com.android.settings.category"
                        android:value="com.android.settings.category.ia.homepage" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
@@ -1405,9 +1409,10 @@
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.SHORTCUT" />
             </intent-filter>
-            <intent-filter android:priority="2">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="2"/>
             <meta-data android:name="com.android.settings.category"
                 android:value="com.android.settings.category.ia.homepage" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
@@ -1738,9 +1743,10 @@
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.SHORTCUT" />
             </intent-filter>
-            <intent-filter android:priority="5">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="5"/>
             <meta-data android:name="com.android.settings.category"
                 android:value="com.android.settings.category.ia.homepage" />
             <meta-data android:name="com.android.settings.title"
@@ -2133,9 +2139,10 @@
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.SHORTCUT" />
             </intent-filter>
-            <intent-filter android:priority="8">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="8"/>
             <meta-data android:name="com.android.settings.category"
                 android:value="com.android.settings.category.ia.homepage" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
@@ -2504,9 +2511,10 @@
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.SHORTCUT" />
             </intent-filter>
-            <intent-filter android:priority="6">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="6"/>
             <meta-data android:name="com.android.settings.category"
                        android:value="com.android.settings.category.ia.homepage" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
@@ -2925,9 +2933,10 @@
             android:icon="@drawable/ic_homepage_apps"
             android:taskAffinity="com.android.settings"
             android:parentActivityName="Settings">
-            <intent-filter android:priority="9">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS"/>
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="9"/>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.AppAndNotificationDashboardFragment"/>
             <meta-data android:name="com.android.settings.category"
@@ -2942,7 +2951,7 @@
             android:icon="@drawable/ic_homepage_accounts"
             android:taskAffinity="com.android.settings"
             android:parentActivityName="Settings">
-            <intent-filter android:priority="3">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS"/>
             </intent-filter>
             <intent-filter android:priority="1">
@@ -2953,6 +2962,7 @@
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.SHORTCUT" />
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="3"/>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.accounts.AccountDashboardFragment"/>
             <meta-data android:name="com.android.settings.category"
@@ -2967,13 +2977,14 @@
             android:icon="@drawable/ic_homepage_system_dashboard"
             android:taskAffinity="com.android.settings"
             android:parentActivityName="Settings">
-            <intent-filter android:priority="-1">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS"/>
             </intent-filter>
             <intent-filter android:priority="70">
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.SHORTCUT" />
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="-1"/>
             <meta-data android:name="com.android.settings.category"
                        android:value="com.android.settings.category.ia.homepage"/>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
@@ -2987,13 +2998,14 @@
                   android:icon="@drawable/ic_homepage_support"
                   android:theme="@android:style/Theme.DeviceDefault.Light.Panel"
                   android:enabled="@bool/config_support_enabled">
-            <intent-filter android:priority="-2">
+            <intent-filter>
                 <action android:name="com.android.settings.action.SETTINGS"/>
             </intent-filter>
             <intent-filter>
                 <action android:name="com.android.settings.action.SUPPORT_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
+            <meta-data android:name="com.android.settings.order" android:value="-2"/>
             <meta-data android:name="com.android.settings.category"
                        android:value="com.android.settings.category.ia.homepage"/>
             <meta-data android:name="com.android.settings.summary"
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 9e8664e..e4dd7a6 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -61,8 +61,6 @@
     private static final String TAG = "DashboardFeatureImpl";
     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;
 
@@ -120,8 +118,8 @@
         if (tile == null) {
             return null;
         }
-        if (!TextUtils.isEmpty(tile.key)) {
-            return tile.key;
+        if (tile.hasKey()) {
+            return tile.getKey(mContext);
         }
         final StringBuilder sb = new StringBuilder(DASHBOARD_TILE_PREF_KEY_PREFIX);
         final ComponentName component = tile.getIntent().getComponent();
@@ -146,14 +144,10 @@
         final Bundle metadata = tile.getMetaData();
         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);
@@ -170,14 +164,10 @@
             });
         }
         final String skipOffsetPackageName = activity.getPackageName();
-        // 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) {
+
+
+        if (tile.hasOrder()) {
+            final int order = tile.getOrder();
             boolean shouldSkipBaseOrderOffset = TextUtils.equals(
                     skipOffsetPackageName, tile.getIntent().getComponent().getPackageName());
             if (shouldSkipBaseOrderOffset || baseOrder == Preference.DEFAULT_ORDER) {
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
index f297cb1..6b19e59 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
@@ -15,6 +15,8 @@
  */
 package com.android.settings.accounts;
 
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.Matchers.any;
@@ -118,7 +120,7 @@
                 .thenReturn(mock(ResolveInfo.class));
 
         final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
-        tile.key = "key";
+        mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
         mActivityInfo.metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT);
         mActivityInfo.metaData.putString(METADATA_ACCOUNT_TYPE, "com.abc");
         mActivityInfo.metaData.putString("com.android.settings.intent.action",
@@ -129,9 +131,10 @@
         final FragmentActivity activity = Robolectric.setupActivity(FragmentActivity.class);
         final Preference preference = new Preference(mContext);
         dashboardFeatureProvider.bindPreferenceToTile(activity,
-                MetricsProto.MetricsEvent.DASHBOARD_SUMMARY, preference, tile, "key",
+                MetricsProto.MetricsEvent.DASHBOARD_SUMMARY, preference, tile, null /* key */,
                 Preference.DEFAULT_ORDER);
 
+        assertThat(preference.getKey()).isEqualTo(tile.getKey(mContext));
         preference.performClick();
 
         final Intent intent = Shadows.shadowOf(activity).getNextStartedActivityForResult().intent;
diff --git a/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java b/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java
index 0f44c85..61ef390 100644
--- a/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/CategoryManagerTest.java
@@ -17,14 +17,14 @@
 package com.android.settings.dashboard;
 
 import static com.android.settingslib.drawer.CategoryKey.CATEGORY_HOMEPAGE;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER;
 
 import static com.google.common.truth.Truth.assertThat;
 
-import android.content.ComponentName;
 import android.content.Context;
-import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
+import android.os.Bundle;
 import android.util.Pair;
 
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -132,20 +132,24 @@
         // Create some fake tiles that are not sorted.
         final String testPackage = "com.android.test";
         final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class1";
-        final Tile tile1 = new Tile(mActivityInfo, category.key);
-        tile1.priority = 100;
-
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class2";
-        final Tile tile2 = new Tile(mActivityInfo, category.key);
-        tile2.priority = 50;
-
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class3";
-        final Tile tile3 = new Tile(mActivityInfo, category.key);
-        tile3.priority = 200;
+        final ActivityInfo activityInfo1 = new ActivityInfo();
+        activityInfo1.metaData = new Bundle();
+        activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 100);
+        activityInfo1.packageName = testPackage;
+        activityInfo1.name = "class1";
+        final ActivityInfo activityInfo2 = new ActivityInfo();
+        activityInfo2.metaData = new Bundle();
+        activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 50);
+        activityInfo2.packageName = testPackage;
+        activityInfo2.name = "class2";
+        final ActivityInfo activityInfo3 = new ActivityInfo();
+        activityInfo3.metaData = new Bundle();
+        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 200);
+        activityInfo3.packageName = testPackage;
+        activityInfo3.name = "class3";
+        final Tile tile1 = new Tile(activityInfo1, category.key);
+        final Tile tile2 = new Tile(activityInfo2, category.key);
+        final Tile tile3 = new Tile(activityInfo3, category.key);
 
         category.addTile(tile1);
         category.addTile(tile2);
@@ -168,22 +172,25 @@
         final String testPackage1 = "com.android.test1";
         final String testPackage2 = "com.android.test2";
         final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
+        final ActivityInfo activityInfo1 = new ActivityInfo();
+        activityInfo1.metaData = new Bundle();
+        activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 100);
+        activityInfo1.packageName = testPackage2;
+        activityInfo1.name = "class1";
+        final ActivityInfo activityInfo2 = new ActivityInfo();
+        activityInfo2.metaData = new Bundle();
+        activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 100);
+        activityInfo2.packageName = testPackage1;
+        activityInfo2.name = "class2";
+        final ActivityInfo activityInfo3 = new ActivityInfo();
+        activityInfo3.metaData = new Bundle();
+        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 50);
+        activityInfo3.packageName = testPackage1;
+        activityInfo3.name = "class3";
 
-        mActivityInfo.packageName = testPackage2;
-        mActivityInfo.name = "class1";
-        final Tile tile1 = new Tile(mActivityInfo, category.key);
-        tile1.priority = 100;
-
-        mActivityInfo.packageName = testPackage1;
-        mActivityInfo.name = "class2";
-        final Tile tile2 = new Tile(mActivityInfo, category.key);
-        tile2.priority = 100;
-
-        mActivityInfo.packageName = testPackage1;
-        mActivityInfo.name = "class3";
-        final Tile tile3 = new Tile(mActivityInfo, category.key);
-        tile3.priority = 50;
-
+        final Tile tile1 = new Tile(activityInfo1, category.key);
+        final Tile tile2 = new Tile(activityInfo2, category.key);
+        final Tile tile3 = new Tile(activityInfo3, category.key);
         category.addTile(tile1);
         category.addTile(tile2);
         category.addTile(tile3);
@@ -203,22 +210,24 @@
         // Create some fake tiles that are not sorted.
         final String testPackage = mContext.getPackageName();
         final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
-
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class1";
-        final Tile tile1 = new Tile(mActivityInfo, category.key);
-        tile1.priority = 100;
-
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class2";
-        final Tile tile2 = new Tile(mActivityInfo, category.key);
-        tile2.priority = 100;
-
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class3";
-        final Tile tile3 = new Tile(mActivityInfo, category.key);
-        tile3.priority = 50;
-
+        final ActivityInfo activityInfo1 = new ActivityInfo();
+        activityInfo1.packageName = testPackage;
+        activityInfo1.name = "class1";
+        activityInfo1.metaData = new Bundle();
+        activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 100);
+        final ActivityInfo activityInfo2 = new ActivityInfo();
+        activityInfo2.packageName = testPackage;
+        activityInfo2.name = "class2";
+        activityInfo2.metaData = new Bundle();
+        activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 100);
+        final ActivityInfo activityInfo3 = new ActivityInfo();
+        activityInfo3.packageName = testPackage;
+        activityInfo3.name = "class3";
+        activityInfo3.metaData = new Bundle();
+        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 50);
+        final Tile tile1 = new Tile(activityInfo1, category.key);
+        final Tile tile2 = new Tile(activityInfo2, category.key);
+        final Tile tile3 = new Tile(activityInfo3, category.key);
         category.addTile(tile1);
         category.addTile(tile2);
         category.addTile(tile3);
@@ -239,22 +248,32 @@
         final String testPackage = mContext.getPackageName();
         final String testPackage2 = "com.google.test2";
         final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class1";
-        final Tile tile1 = new Tile(mActivityInfo, category.key);
-        tile1.priority = 2;
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class2";
-        final Tile tile2 = new Tile(mActivityInfo, category.key);
-        tile2.priority = 1;
-        mActivityInfo.packageName = testPackage2;
-        mActivityInfo.name = "class0";
-        final Tile tile3 = new Tile(mActivityInfo, category.key);
-        tile3.priority = 0;
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class3";
-        final Tile tile4 = new Tile(mActivityInfo, category.key);
-        tile4.priority = -1;
+
+        final ActivityInfo activityInfo1 = new ActivityInfo();
+        activityInfo1.packageName = testPackage;
+        activityInfo1.name = "class1";
+        activityInfo1.metaData = new Bundle();
+        activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 2);
+        final ActivityInfo activityInfo2 = new ActivityInfo();
+        activityInfo2.packageName = testPackage;
+        activityInfo2.name = "class2";
+        activityInfo2.metaData = new Bundle();
+        activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 1);
+        final ActivityInfo activityInfo3 = new ActivityInfo();
+        activityInfo3.packageName = testPackage2;
+        activityInfo3.name = "class0";
+        activityInfo3.metaData = new Bundle();
+        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 0);
+        final ActivityInfo activityInfo4 = new ActivityInfo();
+        activityInfo4.packageName = testPackage;
+        activityInfo4.name = "class3";
+        activityInfo4.metaData = new Bundle();
+        activityInfo4.metaData.putInt(META_DATA_KEY_ORDER, -1);
+
+        final Tile tile1 = new Tile(activityInfo1, category.key);
+        final Tile tile2 = new Tile(activityInfo2, category.key);
+        final Tile tile4 = new Tile(activityInfo4, category.key);
+        final Tile tile3 = new Tile(activityInfo3, category.key);
         category.addTile(tile1);
         category.addTile(tile2);
         category.addTile(tile3);
@@ -278,21 +297,24 @@
         final String testPackage2 = "com.google.test2";
         final String testPackage3 = "com.abcde.test3";
         final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
-        mActivityInfo.packageName = testPackage2;
-        mActivityInfo.name = "class1";
-        final Tile tile1 = new Tile(mActivityInfo, category.key);
-        tile1.priority = 1;
-
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class2";
-        final Tile tile2 = new Tile(mActivityInfo, category.key);
-        tile2.priority = 1;
-
-        mActivityInfo.packageName = testPackage3;
-        mActivityInfo.name = "class3";
-        final Tile tile3 = new Tile(mActivityInfo, category.key);
-        tile3.priority = 1;
-
+        final ActivityInfo activityInfo1 = new ActivityInfo();
+        activityInfo1.packageName = testPackage2;
+        activityInfo1.name = "class1";
+        activityInfo1.metaData = new Bundle();
+        activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 1);
+        final ActivityInfo activityInfo2 = new ActivityInfo();
+        activityInfo2.packageName = testPackage;
+        activityInfo2.name = "class2";
+        activityInfo2.metaData = new Bundle();
+        activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 1);
+        final ActivityInfo activityInfo3 = new ActivityInfo();
+        activityInfo3.packageName = testPackage3;
+        activityInfo3.name = "class3";
+        activityInfo3.metaData = new Bundle();
+        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 1);
+        final Tile tile1 = new Tile(activityInfo1, category.key);
+        final Tile tile2 = new Tile(activityInfo2, category.key);
+        final Tile tile3 = new Tile(activityInfo3, category.key);
         category.addTile(tile1);
         category.addTile(tile2);
         category.addTile(tile3);
@@ -312,21 +334,24 @@
         // Create some unique tiles
         final String testPackage = mContext.getPackageName();
         final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class1";
-        final Tile tile1 = new Tile(mActivityInfo, category.key);
-        tile1.priority = 100;
-
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class2";
-        final Tile tile2 = new Tile(mActivityInfo, category.key);
-        tile2.priority = 100;
-
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class3";
-        final Tile tile3 = new Tile(mActivityInfo, category.key);
-        tile3.priority = 50;
-
+        final ActivityInfo activityInfo1 = new ActivityInfo();
+        activityInfo1.packageName = testPackage;
+        activityInfo1.name = "class1";
+        activityInfo1.metaData = new Bundle();
+        activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 100);
+        final ActivityInfo activityInfo2 = new ActivityInfo();
+        activityInfo2.packageName = testPackage;
+        activityInfo2.name = "class2";
+        activityInfo2.metaData = new Bundle();
+        activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 100);
+        final ActivityInfo activityInfo3 = new ActivityInfo();
+        activityInfo3.packageName = testPackage;
+        activityInfo3.name = "class3";
+        activityInfo3.metaData = new Bundle();
+        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 50);
+        final Tile tile1 = new Tile(activityInfo1, category.key);
+        final Tile tile2 = new Tile(activityInfo2, category.key);
+        final Tile tile3 = new Tile(activityInfo3, category.key);
         category.addTile(tile1);
         category.addTile(tile2);
         category.addTile(tile3);
@@ -342,14 +367,25 @@
         // Create tiles pointing to same intent.
         final String testPackage = mContext.getPackageName();
         final DashboardCategory category = new DashboardCategory(CATEGORY_HOMEPAGE);
-        mActivityInfo.packageName = testPackage;
-        mActivityInfo.name = "class1";
-        final Tile tile1 = new Tile(mActivityInfo, category.key);
-        tile1.priority = 100;
-        final Tile tile2 = new Tile(mActivityInfo, category.key);
-        tile2.priority = 100;
-        final Tile tile3 = new Tile(mActivityInfo, category.key);
-        tile3.priority = 50;
+        final ActivityInfo activityInfo1 = new ActivityInfo();
+        activityInfo1.packageName = testPackage;
+        activityInfo1.name = "class1";
+        activityInfo1.metaData = new Bundle();
+        activityInfo1.metaData.putInt(META_DATA_KEY_ORDER, 100);
+        final ActivityInfo activityInfo2 = new ActivityInfo();
+        activityInfo2.packageName = testPackage;
+        activityInfo2.name = "class1";
+        activityInfo2.metaData = new Bundle();
+        activityInfo2.metaData.putInt(META_DATA_KEY_ORDER, 100);
+        final ActivityInfo activityInfo3 = new ActivityInfo();
+        activityInfo3.packageName = testPackage;
+        activityInfo3.name = "class1";
+        activityInfo3.metaData = new Bundle();
+        activityInfo3.metaData.putInt(META_DATA_KEY_ORDER, 50);
+
+        final Tile tile1 = new Tile(activityInfo1, category.key);
+        final Tile tile2 = new Tile(activityInfo2, category.key);
+        final Tile tile3 = new Tile(activityInfo3, category.key);
         category.addTile(tile1);
         category.addTile(tile2);
         category.addTile(tile3);
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
index 18576d3..adc1ac0 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
@@ -16,7 +16,9 @@
 
 package com.android.settings.dashboard;
 
+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_KEYHINT;
 import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL;
 import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY;
 
@@ -119,12 +121,12 @@
     public void bindPreference_shouldBindAllData() {
         final Preference preference = new Preference(RuntimeEnvironment.application);
         final Tile tile = spy(new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE));
+        mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10);
         tile.title = "title";
         tile.summary = "summary";
         doReturn(Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565)))
                 .when(tile).getIcon(any(Context.class));
         mActivityInfo.metaData.putString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS, "HI");
-        tile.priority = 10;
         mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.SETTINGS_GESTURES,
                 preference, tile, "123", Preference.DEFAULT_ORDER);
 
@@ -133,21 +135,21 @@
         assertThat(preference.getIcon()).isNotNull();
         assertThat(preference.getFragment()).isEqualTo(
                 mActivityInfo.metaData.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS));
-        assertThat(preference.getOrder()).isEqualTo(-tile.priority);
+        assertThat(preference.getOrder()).isEqualTo(tile.getOrder());
     }
 
     @Test
     public void bindPreference_noFragmentMetadata_shouldBindIntent() {
         final Preference preference = new Preference(RuntimeEnvironment.application);
+        mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10);
         final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
-        tile.priority = 10;
 
         mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.SETTINGS_GESTURES,
                 preference, tile, "123", Preference.DEFAULT_ORDER);
 
         assertThat(preference.getFragment()).isNull();
         assertThat(preference.getOnPreferenceClickListener()).isNotNull();
-        assertThat(preference.getOrder()).isEqualTo(-tile.priority);
+        assertThat(preference.getOrder()).isEqualTo(tile.getOrder());
     }
 
     @Test
@@ -273,12 +275,12 @@
     @Test
     public void bindPreference_withNullKeyTileKey_shouldUseTileKey() {
         final Preference preference = new Preference(RuntimeEnvironment.application);
+        mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
         final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
-        tile.key = "key";
         mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
                 preference, tile, null /* key */, Preference.DEFAULT_ORDER);
 
-        assertThat(preference.getKey()).isEqualTo(tile.key);
+        assertThat(preference.getKey()).isEqualTo(tile.getKey(mContext));
     }
 
     @Test
@@ -287,7 +289,7 @@
         final Preference preference = new Preference(RuntimeEnvironment.application);
         mActivityInfo.packageName = RuntimeEnvironment.application.getPackageName();
         final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
-        tile.key = "key";
+        mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
         mActivityInfo.metaData.putString(TileUtils.META_DATA_PREFERENCE_ICON_URI,
                 "content://com.android.settings/tile_icon");
         mImpl.bindIcon(preference, tile);
@@ -296,24 +298,25 @@
     }
 
     @Test
-    public void bindPreference_withBaseOrder_shouldOffsetPriority() {
+    public void bindPreference_withBaseOrder_shouldOffsetOrder() {
         final int baseOrder = 100;
         final Preference preference = new Preference(RuntimeEnvironment.application);
+        mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10);
         final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
-        tile.priority = 10;
+
         mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
                 preference, tile, "123", baseOrder);
 
-        assertThat(preference.getOrder()).isEqualTo(-tile.priority + baseOrder);
+        assertThat(preference.getOrder()).isEqualTo(tile.getOrder() + baseOrder);
     }
 
     @Test
     public void bindPreference_withOrderMetadata_shouldUseOrderInMetadata() {
         final Preference preference = new Preference(RuntimeEnvironment.application);
         final int testOrder = -30;
+        mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10);
         final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
-        mActivityInfo.metaData.putInt(mImpl.META_DATA_KEY_ORDER, testOrder);
-        tile.priority = 10;
+        mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, testOrder);
         mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
                 preference, tile, "123", Preference.DEFAULT_ORDER);
 
@@ -324,12 +327,12 @@
     public void bindPreference_invalidOrderMetadata_shouldIgnore() {
         final Preference preference = new Preference(RuntimeEnvironment.application);
         final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
-        mActivityInfo.metaData.putString(mImpl.META_DATA_KEY_ORDER, "hello");
-        tile.priority = 10;
+        mActivityInfo.metaData.putString(META_DATA_KEY_ORDER, "hello");
+
         mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
                 preference, tile, "123", Preference.DEFAULT_ORDER);
 
-        assertThat(preference.getOrder()).isEqualTo(-tile.priority);
+        assertThat(preference.getOrder()).isEqualTo(Preference.DEFAULT_ORDER);
     }
 
     @Test
@@ -337,7 +340,7 @@
         FragmentActivity activity = Robolectric.buildActivity(FragmentActivity.class).get();
         final Preference preference = new Preference(RuntimeEnvironment.application);
         final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
-        tile.key = "key";
+        mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
         mActivityInfo.metaData.putString("com.android.settings.intent.action", "TestAction");
         tile.userHandle = null;
         mImpl.bindPreferenceToTile(activity, MetricsProto.MetricsEvent.SETTINGS_GESTURES,
@@ -360,7 +363,7 @@
         final ShadowApplication application = ShadowApplication.getInstance();
         final Preference preference = new Preference(application.getApplicationContext());
         final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
-        tile.key = "key";
+        mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
         mActivityInfo.metaData.putString("com.android.settings.intent.action", "TestAction");
         tile.userHandle = null;
 
diff --git a/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java b/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java
index a4fd8d1..06d5a96 100644
--- a/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.dashboard;
 
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.Mockito.verifyZeroInteractions;
@@ -23,6 +25,7 @@
 
 import android.app.Activity;
 import android.content.pm.ActivityInfo;
+import android.os.Bundle;
 
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -35,6 +38,7 @@
 import org.junit.runner.RunWith;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.Robolectric;
+import org.robolectric.RuntimeEnvironment;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 public class SummaryLoaderTest {
@@ -90,11 +94,13 @@
         final ActivityInfo activityInfo = new ActivityInfo();
         activityInfo.packageName = "pkg";
         activityInfo.name = "cls";
+        activityInfo.metaData = new Bundle();
+        activityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "123");
         final Tile tile = new Tile(activityInfo, category.key);
-        tile.key = "123";
+
         category.addTile(tile);
         when(mFeatureFactory.dashboardFeatureProvider.getDashboardKeyForTile(tile))
-                .thenReturn(tile.key);
+                .thenReturn(tile.getKey(RuntimeEnvironment.application));
 
         mSummaryLoader.updateSummaryIfNeeded(tile, testSummary);
         tile.summary = null;