Fix jank in showing conditions and suggestions in cold start.

When we first initialize the dashboard view, and register the condition
listener, it will trigger the condition changed callback immediately.
This results in unnecessary refresh of the dashboard header. Add check
to not do the refresh when we first initialize the view.

Change-Id: If7c69637463734c150b7f5eb7f3c042cf73837fa
Fixes: 64811475
Test: make RunSettingsRoboTests
This commit is contained in:
Doris Ling
2017-08-24 13:09:57 -07:00
parent efcc8be05c
commit 5b01294d84
2 changed files with 32 additions and 4 deletions

View File

@@ -36,6 +36,7 @@ import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -90,6 +91,7 @@ public class DashboardSummaryTest {
public void onConditionChanged_PositionAtTop_ScrollToTop() {
when(mLayoutManager.findFirstCompletelyVisibleItemPosition()).thenReturn(1);
mSummary.onConditionsChanged();
mSummary.onConditionsChanged();
verify(mDashboard).scrollToPosition(0);
}
@@ -97,9 +99,23 @@ public class DashboardSummaryTest {
public void onConditionChanged_PositionNotTop_RemainPosition() {
when(mLayoutManager.findFirstCompletelyVisibleItemPosition()).thenReturn(2);
mSummary.onConditionsChanged();
mSummary.onConditionsChanged();
verify(mDashboard, never()).scrollToPosition(0);
}
@Test
public void onConditionChanged_firstCall_shouldIgnore() {
mSummary.onConditionsChanged();
verify(mAdapter, never()).setConditions(any());
}
@Test
public void onConditionChanged_secondCall_shouldSetConditionsOnAdapter() {
mSummary.onConditionsChanged();
mSummary.onConditionsChanged();
verify(mAdapter).setConditions(any());
}
@Test
public void onCategoryChanged_noRebuildOnFirstCall() {
doReturn(mock(Activity.class)).when(mSummary).getActivity();