Merge "Fix jank in showing conditions and suggestions in cold start." into oc-mr1-dev
am: 51c83353fe
Change-Id: I869238f4c9198dbd167ab02d18e41e0e67001c38
This commit is contained in:
@@ -75,6 +75,7 @@ public class DashboardSummary extends InstrumentedFragment
|
||||
private DashboardFeatureProvider mDashboardFeatureProvider;
|
||||
private SuggestionFeatureProvider mSuggestionFeatureProvider;
|
||||
private boolean isOnCategoriesChangedCalled;
|
||||
private boolean mOnConditionsChangedCalled;
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
@@ -237,10 +238,21 @@ public class DashboardSummary extends InstrumentedFragment
|
||||
@Override
|
||||
public void onConditionsChanged() {
|
||||
Log.d(TAG, "onConditionsChanged");
|
||||
final boolean scrollToTop = mLayoutManager.findFirstCompletelyVisibleItemPosition() <= 1;
|
||||
mAdapter.setConditions(mConditionManager.getConditions());
|
||||
if (scrollToTop) {
|
||||
mDashboard.scrollToPosition(0);
|
||||
// Bypass refreshing the conditions on the first call of onConditionsChanged.
|
||||
// onConditionsChanged is called immediately everytime we start listening to the conditions
|
||||
// change when we gain window focus. Since the conditions are passed to the adapter's
|
||||
// constructor when we create the view, the first handling is not necessary.
|
||||
// But, on the subsequent calls we need to handle it because there might be real changes to
|
||||
// conditions.
|
||||
if (mOnConditionsChangedCalled) {
|
||||
final boolean scrollToTop =
|
||||
mLayoutManager.findFirstCompletelyVisibleItemPosition() <= 1;
|
||||
mAdapter.setConditions(mConditionManager.getConditions());
|
||||
if (scrollToTop) {
|
||||
mDashboard.scrollToPosition(0);
|
||||
}
|
||||
} else {
|
||||
mOnConditionsChangedCalled = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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();
|
||||
|
Reference in New Issue
Block a user