Rebuild suggestions when suggestions are dismissed

When suggestions are swiped away, refresh the suggestion categories
so that suggestions previously suppressed because it's lower priority
or because there is an exclusive suggestion now has a chance to be
shown.

Test: cd tests/robotests && mma
Bug: 36811621
Change-Id: I1a1ae1624c2f69153d95d238b2143ac9273e117d
This commit is contained in:
Maurice Lam
2017-03-31 17:13:39 -07:00
parent cfa0941535
commit cbf797e65c
3 changed files with 27 additions and 25 deletions

View File

@@ -39,7 +39,6 @@ import com.android.settings.SettingsActivity;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.dashboard.conditional.Condition;
import com.android.settings.dashboard.conditional.ConditionAdapterUtils;
import com.android.settings.dashboard.suggestions.SuggestionDismissController;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.drawer.DashboardCategory;
@@ -49,7 +48,7 @@ import java.util.ArrayList;
import java.util.List;
public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.DashboardItemHolder>
implements SummaryLoader.SummaryConsumer, SuggestionDismissController.Callback {
implements SummaryLoader.SummaryConsumer {
public static final String TAG = "DashboardAdapter";
private static final String STATE_SUGGESTION_LIST = "suggestion_list";
private static final String STATE_CATEGORY_LIST = "category_list";
@@ -342,26 +341,6 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
notifyDashboardDataChanged(prevData);
}
@Override
public Tile getSuggestionForPosition(int position) {
return (Tile) mDashboardData.getItemEntityByPosition(position);
}
@Override
public void onSuggestionDismissed(Tile suggestion) {
final List<Tile> suggestions = mDashboardData.getSuggestions();
if (suggestions == null) {
return;
}
suggestions.remove(suggestion);
final DashboardData prevData = mDashboardData;
mDashboardData = new DashboardData.Builder(prevData)
.setSuggestions(suggestions)
.build();
notifyDashboardDataChanged(prevData);
}
@VisibleForTesting
void onBindSuggestionHeader(final DashboardItemHolder holder, DashboardData
.SuggestionHeaderData data) {

View File

@@ -34,7 +34,9 @@ import com.android.settings.core.InstrumentedFragment;
import com.android.settings.dashboard.conditional.Condition;
import com.android.settings.dashboard.conditional.ConditionAdapterUtils;
import com.android.settings.dashboard.conditional.ConditionManager;
import com.android.settings.dashboard.conditional.ConditionManager.ConditionListener;
import com.android.settings.dashboard.conditional.FocusRecyclerView;
import com.android.settings.dashboard.conditional.FocusRecyclerView.FocusListener;
import com.android.settings.dashboard.suggestions.SuggestionDismissController;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.dashboard.suggestions.SuggestionsChecks;
@@ -43,14 +45,15 @@ import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.CategoryKey;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.SettingsDrawerActivity;
import com.android.settingslib.drawer.SettingsDrawerActivity.CategoryListener;
import com.android.settingslib.drawer.Tile;
import java.util.ArrayList;
import java.util.List;
public class DashboardSummary extends InstrumentedFragment
implements SettingsDrawerActivity.CategoryListener, ConditionManager.ConditionListener,
FocusRecyclerView.FocusListener {
implements CategoryListener, ConditionListener,
FocusListener, SuggestionDismissController.Callback {
public static final boolean DEBUG = false;
private static final boolean DEBUG_TIMING = false;
private static final int MAX_WAIT_MILLIS = 700;
@@ -195,7 +198,7 @@ public class DashboardSummary extends InstrumentedFragment
mAdapter = new DashboardAdapter(getContext(), bundle, mConditionManager.getConditions());
mDashboard.setAdapter(mAdapter);
mSuggestionDismissHandler = new SuggestionDismissController(
getContext(), mDashboard, mSuggestionParser, mAdapter);
getContext(), mDashboard, mSuggestionParser, this);
mDashboard.setItemAnimator(new DashboardItemAnimator());
mSummaryLoader.setSummaryConsumer(mAdapter);
ConditionAdapterUtils.addDismiss(mDashboard);
@@ -236,6 +239,18 @@ public class DashboardSummary extends InstrumentedFragment
}
}
@Override
public Tile getSuggestionForPosition(int position) {
return (Tile) mAdapter.getItem(mAdapter.getItemId(position));
}
@Override
public void onSuggestionDismissed(Tile suggestion) {
// Refresh the UI to pick up suggestions that can now be shown because, say, a higher
// priority suggestion has been dismissed, or an exclusive suggestion category is emptied.
rebuildUI();
}
private class SuggestionLoader extends AsyncTask<Void, Void, List<Tile>> {
@Override
protected List<Tile> doInBackground(Void... params) {

View File

@@ -24,6 +24,7 @@ import com.android.settings.TestConfig;
import com.android.settings.dashboard.conditional.ConditionManager;
import com.android.settings.dashboard.conditional.FocusRecyclerView;
import com.android.settingslib.drawer.CategoryKey;
import com.android.settingslib.drawer.Tile;
import org.junit.Before;
import org.junit.Test;
@@ -109,4 +110,11 @@ public class DashboardSummaryTest {
mSummary.onCategoriesChanged();
verify(mSummary).rebuildUI();
}
@Test
public void onSuggestionDismissed_categoryShouldBeRefreshed() {
doNothing().when(mSummary).rebuildUI();
mSummary.onSuggestionDismissed(mock(Tile.class));
verify(mSummary).rebuildUI();
}
}