From cbf797e65ceb4e41ef094a861b8db23733965578 Mon Sep 17 00:00:00 2001 From: Maurice Lam Date: Fri, 31 Mar 2017 17:13:39 -0700 Subject: [PATCH] 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 --- .../settings/dashboard/DashboardAdapter.java | 23 +--------------------- .../settings/dashboard/DashboardSummary.java | 21 +++++++++++++++++--- .../settings/dashboard/DashboardSummaryTest.java | 8 ++++++++ 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 325df5b89f..11fef7eb2d 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -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 - 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 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) { diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java index 67eae1e7d2..f3a78aa341 100644 --- a/src/com/android/settings/dashboard/DashboardSummary.java +++ b/src/com/android/settings/dashboard/DashboardSummary.java @@ -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> { @Override protected List doInBackground(Void... params) { diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java index a8e294c158..c2f7646744 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java @@ -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(); + } } \ No newline at end of file -- 2.11.0