Add DiffCallback to handle Contextual Cards update.

Use DiffCallback in ContextualCardsAdapter to only update items that
are changed instead of touching those unchanged ones.

Also fix a bug where ConditionContexualCardCard#onStart is incorrectly
skipped.

Fixes: 112245748
Bug: 118165942
Test: robotests
Change-Id: I7989d621764fe40a3fceb8c9f40baced840818ba
This commit is contained in:
Emily Chuang
2018-10-16 18:49:29 +08:00
committed by Fan Zhang
parent 0a546d1916
commit 18a99faaf1
6 changed files with 80 additions and 17 deletions

View File

@@ -19,6 +19,8 @@ package com.android.settings.homepage.conditional;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -53,7 +55,7 @@ public class ConditionManagerTest {
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mManager = new ConditionManager(mContext, mConditionListener);
mManager = spy(new ConditionManager(mContext, mConditionListener));
assertThat(mManager.mCandidates.size()).isEqualTo(mManager.mCardControllers.size());
@@ -94,11 +96,13 @@ public class ConditionManagerTest {
@Test
public void startMonitoringStateChange_multipleTimes_shouldRegisterOnce() {
mManager.startMonitoringStateChange();
mManager.startMonitoringStateChange();
mManager.startMonitoringStateChange();
final int loopCount = 10;
for (int i = 0; i < loopCount; i++) {
mManager.startMonitoringStateChange();
}
verify(mController).startMonitoringStateChange();
verify(mManager, times(loopCount)).onConditionChanged();
}
@Test