private DashboardFeatureProvider mDashboardFeatureProvider;
private SuggestionFeatureProvider mSuggestionFeatureProvider;
private boolean isOnCategoriesChangedCalled;
+ private boolean mOnConditionsChangedCalled;
@Override
public int getMetricsCategory() {
@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;
}
}
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;
public void onConditionChanged_PositionAtTop_ScrollToTop() {
when(mLayoutManager.findFirstCompletelyVisibleItemPosition()).thenReturn(1);
mSummary.onConditionsChanged();
+ mSummary.onConditionsChanged();
verify(mDashboard).scrollToPosition(0);
}
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();
doNothing().when(mSummary).rebuildUI();