Add payload for condition card to reuse the viewholder

Bug: 30319913
Test: make RunSettingsRoboTests
Change-Id: Ib08a301203f4075f0553386f7db1a68d69bde436
This commit is contained in:
jackqdyulei
2016-10-28 11:11:21 -07:00
parent 301fe80fa7
commit 022d4476c7
2 changed files with 35 additions and 0 deletions

View File

@@ -16,6 +16,7 @@
package com.android.settings.dashboard; package com.android.settings.dashboard;
import android.annotation.IntDef; import android.annotation.IntDef;
import android.support.annotation.Nullable;
import android.support.v7.util.DiffUtil; import android.support.v7.util.DiffUtil;
import android.text.TextUtils; import android.text.TextUtils;
import com.android.settings.dashboard.conditional.Condition; import com.android.settings.dashboard.conditional.Condition;
@@ -350,6 +351,15 @@ public class DashboardData {
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
return mOldItems.get(oldItemPosition).equals(mNewItems.get(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;
}
} }
/** /**

View File

@@ -196,6 +196,31 @@ public class DashboardDataTest {
testDiffUtil(mDashboardDataWithOneConditions, mDashboardDataWithNoItems, testResultData); 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 * Test when using the
* {@link com.android.settings.dashboard.DashboardData.ItemsDataDiffCallback} * {@link com.android.settings.dashboard.DashboardData.ItemsDataDiffCallback}