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:
@@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user