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}
