diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 325df5b89fd..11fef7eb2d7 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 67eae1e7d29..f3a78aa341f 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 a8e294c1585..c2f76467448 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