Merge "Fix jank in showing conditions and suggestions in cold start." into oc-mr1-dev am: 51c83353fe

am: e80bb0d5ce

Change-Id: Id3de7150516804bc7a08c665943769c27173fc9a
This commit is contained in:
Doris Ling
2017-08-25 03:48:07 +00:00
committed by android-build-merger
2 changed files with 32 additions and 4 deletions

View File

@@ -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,11 +238,22 @@ public class DashboardSummary extends InstrumentedFragment
@Override
public void onConditionsChanged() {
Log.d(TAG, "onConditionsChanged");
final boolean scrollToTop = mLayoutManager.findFirstCompletelyVisibleItemPosition() <= 1;
// 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;
}
}
@Override

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();