Fix race condition and optimize categoryUpdater refresh

- In SettingsActivity, do not call updateCategories() if nothing
  changed.
- In SummaryLoader, create a mapping between tile key and summary. This
  is necessary to handle a race condition where category is refreshed
  after summary load.
- In DashboardSummary, refresh Tile's summary to latest cache value
  everytime category is refreshed.

Change-Id: I61389b8ba614ba7e34939325bada6e1bd6fa6709
Fix: 63149109
Test: robotests
This commit is contained in:
Fan Zhang
2017-07-05 13:46:04 -07:00
parent ff45106b49
commit aeb94f0e5c
5 changed files with 127 additions and 61 deletions

View File

@@ -19,11 +19,12 @@ package com.android.settings.dashboard;
import android.app.Activity;
import android.support.v7.widget.LinearLayoutManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.dashboard.conditional.ConditionManager;
import com.android.settings.dashboard.conditional.FocusRecyclerView;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.drawer.CategoryKey;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.Tile;
import org.junit.Before;
@@ -34,6 +35,7 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -57,6 +59,8 @@ public class DashboardSummaryTest {
private LinearLayoutManager mLayoutManager;
@Mock
private ConditionManager mConditionManager;
@Mock
private SummaryLoader mSummaryLoader;
private DashboardSummary mSummary;
@@ -70,12 +74,15 @@ public class DashboardSummaryTest {
ReflectionHelpers.setField(mSummary, "mDashboard", mDashboard);
ReflectionHelpers.setField(mSummary, "mLayoutManager", mLayoutManager);
ReflectionHelpers.setField(mSummary, "mConditionManager", mConditionManager);
ReflectionHelpers.setField(mSummary, "mSummaryLoader", mSummaryLoader);
}
@Test
public void updateCategoryAndSuggestion_shouldGetCategoryFromFeatureProvider() {
doReturn(mock(Activity.class)).when(mSummary).getActivity();
mSummary.updateCategoryAndSuggestion(null);
verify(mSummaryLoader).updateSummaryToCache(nullable(DashboardCategory.class));
verify(mDashboardFeatureProvider).getTilesForCategory(CategoryKey.CATEGORY_HOMEPAGE);
}