Merge "Add payload for condition card to reuse the viewholder"
diff --git a/src/com/android/settings/dashboard/DashboardData.java b/src/com/android/settings/dashboard/DashboardData.java
index 0fc994b..147f39e 100644
--- a/src/com/android/settings/dashboard/DashboardData.java
+++ b/src/com/android/settings/dashboard/DashboardData.java
@@ -16,6 +16,7 @@
 package com.android.settings.dashboard;
 
 import android.annotation.IntDef;
+import android.support.annotation.Nullable;
 import android.support.v7.util.DiffUtil;
 import android.text.TextUtils;
 import com.android.settings.dashboard.conditional.Condition;
@@ -350,6 +351,15 @@
         public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
             return mOldItems.get(oldItemPosition).equals(mNewItems.get(newItemPosition));
         }
+
+        @Nullable
+        @Override
+        public Object getChangePayload(int oldItemPosition, int newItemPosition) {
+            if (mOldItems.get(oldItemPosition).type == Item.TYPE_CONDITION_CARD) {
+                return "condition"; // return anything but null to mark the payload
+            }
+            return null;
+         }
     }
 
     /**
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
index 52c2103..abea565 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
@@ -196,6 +196,31 @@
         testDiffUtil(mDashboardDataWithOneConditions, mDashboardDataWithNoItems, testResultData);
     }
 
+    @Test
+    public void testPayload_ItemConditionCard_returnNotNull() {
+        final DashboardData.ItemsDataDiffCallback callback = new DashboardData
+                .ItemsDataDiffCallback(
+                mDashboardDataWithOneConditions.getItemList(),
+                mDashboardDataWithOneConditions.getItemList());
+
+        // Item in position 0 is condition card, which payload should not be null
+        assertThat(callback.getChangePayload(0, 0)).isNotEqualTo(null);
+    }
+
+    @Test
+    public void testPayload_ItemNotConditionCard_returnNull() {
+        final DashboardData.ItemsDataDiffCallback callback = new DashboardData
+                .ItemsDataDiffCallback(
+                mDashboardDataWithOneConditions.getItemList(),
+                mDashboardDataWithOneConditions.getItemList());
+
+        // Only item in position 0 is condition card, so others' payload should be null
+        for (int i = 1; i < mDashboardDataWithOneConditions.getItemList().size(); i++) {
+            assertThat(callback.getChangePayload(i, i)).isEqualTo(null);
+        }
+
+    }
+
     /**
      * Test when using the
      * {@link com.android.settings.dashboard.DashboardData.ItemsDataDiffCallback}