From 59fd017ce568eb75190fdcf830c005f66cf094c0 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 12 May 2017 18:12:58 +0000 Subject: [PATCH] Revert "Revert "Filter and display top 3 suggestions for exclusive type"" This reverts commit 184ae963e78bd70f15339d9a89542688881332db. Change-Id: Iac60fc52a5b0c153945c22b97394546a529d3bb4 --- .../settings/dashboard/DashboardSummary.java | 10 ++++++++-- .../suggestions/SuggestionDismissController.java | 2 +- .../suggestions/SuggestionFeatureProvider.java | 7 ++++++- .../suggestions/SuggestionFeatureProviderImpl.java | 17 ++++++++++++++++- .../SuggestionDismissControllerTest.java | 2 +- .../SuggestionFeatureProviderImplTest.java | 21 ++++++++++++++++++++- 6 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java index f3a78aa341..9f6c61cda2 100644 --- a/src/com/android/settings/dashboard/DashboardSummary.java +++ b/src/com/android/settings/dashboard/DashboardSummary.java @@ -41,12 +41,13 @@ import com.android.settings.dashboard.suggestions.SuggestionDismissController; import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; import com.android.settings.dashboard.suggestions.SuggestionsChecks; import com.android.settings.overlay.FeatureFactory; -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 com.android.settingslib.suggestions.SuggestionList; +import com.android.settingslib.suggestions.SuggestionParser; import java.util.ArrayList; import java.util.List; @@ -257,7 +258,9 @@ public class DashboardSummary extends InstrumentedFragment final Context context = getContext(); boolean isSmartSuggestionEnabled = mSuggestionFeatureProvider.isSmartSuggestionEnabled(context); - List suggestions = mSuggestionParser.getSuggestions(isSmartSuggestionEnabled); + final SuggestionList sl = mSuggestionParser.getSuggestions(isSmartSuggestionEnabled); + final List suggestions = sl.getSuggestions(); + if (isSmartSuggestionEnabled) { List suggestionIds = new ArrayList<>(suggestions.size()); for (Tile suggestion : suggestions) { @@ -275,6 +278,9 @@ public class DashboardSummary extends InstrumentedFragment suggestions.remove(i--); } } + if (sl.isExclusiveSuggestionCategory()) { + mSuggestionFeatureProvider.filterExclusiveSuggestions(suggestions); + } return suggestions; } diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionDismissController.java b/src/com/android/settings/dashboard/suggestions/SuggestionDismissController.java index 820963f5a0..776bd1e997 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionDismissController.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionDismissController.java @@ -22,8 +22,8 @@ import android.support.v7.widget.helper.ItemTouchHelper; import com.android.settings.R; import com.android.settings.overlay.FeatureFactory; -import com.android.settingslib.SuggestionParser; import com.android.settingslib.drawer.Tile; +import com.android.settingslib.suggestions.SuggestionParser; public class SuggestionDismissController extends ItemTouchHelper.SimpleCallback { diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java index 14f5e9ceb6..a5a6d7a6d5 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java @@ -18,8 +18,8 @@ package com.android.settings.dashboard.suggestions; import android.content.Context; -import com.android.settingslib.SuggestionParser; import com.android.settingslib.drawer.Tile; +import com.android.settingslib.suggestions.SuggestionParser; import java.util.List; @@ -46,6 +46,11 @@ public interface SuggestionFeatureProvider { void rankSuggestions(final List suggestions, List suggestionIds); /** + * Only keep top few suggestions from exclusive suggestions. + */ + void filterExclusiveSuggestions(List suggestions); + + /** * Dismisses a suggestion. */ void dismissSuggestion(Context context, SuggestionParser parser, Tile suggestion); diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java index 01097bc7d9..0a14232038 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java @@ -18,17 +18,21 @@ package com.android.settings.dashboard.suggestions; import android.content.Context; import android.content.pm.PackageManager; +import android.util.Log; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.overlay.FeatureFactory; -import com.android.settingslib.SuggestionParser; import com.android.settingslib.drawer.Tile; +import com.android.settingslib.suggestions.SuggestionParser; import java.util.List; public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider { + private static final String TAG = "SuggestionFeature"; + private static final int EXCLUSIVE_SUGGESTION_MAX_COUNT = 3; + private final SuggestionRanker mSuggestionRanker; private final MetricsFeatureProvider mMetricsFeatureProvider; @@ -62,6 +66,17 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider } @Override + public void filterExclusiveSuggestions(List suggestions) { + if (suggestions == null) { + return; + } + for (int i = suggestions.size() - 1; i >= EXCLUSIVE_SUGGESTION_MAX_COUNT; i--) { + Log.d(TAG, "Removing exclusive suggestion"); + suggestions.remove(i); + } + } + + @Override public void dismissSuggestion(Context context, SuggestionParser parser, Tile suggestion) { if (parser == null || suggestion == null || context == null) { return; diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java index e85621e7b7..4d9c1ec66d 100644 --- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java @@ -24,8 +24,8 @@ import com.android.settings.R; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.testutils.FakeFeatureFactory; -import com.android.settingslib.SuggestionParser; import com.android.settingslib.drawer.Tile; +import com.android.settingslib.suggestions.SuggestionParser; import org.junit.Before; import org.junit.Test; diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java index 9eddd047bf..8ddb393c81 100644 --- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java @@ -24,8 +24,8 @@ import com.android.internal.logging.nano.MetricsProto; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.testutils.FakeFeatureFactory; -import com.android.settingslib.SuggestionParser; import com.android.settingslib.drawer.Tile; +import com.android.settingslib.suggestions.SuggestionParser; import org.junit.Before; import org.junit.Test; @@ -36,6 +36,9 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import java.util.ArrayList; +import java.util.List; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; @@ -153,4 +156,20 @@ public class SuggestionFeatureProviderImplTest { PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } + + @Test + public void filterExclusiveSuggestions_shouldOnlyKeepFirst3() { + final List suggestions = new ArrayList<>(); + suggestions.add(new Tile()); + suggestions.add(new Tile()); + suggestions.add(new Tile()); + suggestions.add(new Tile()); + suggestions.add(new Tile()); + suggestions.add(new Tile()); + suggestions.add(new Tile()); + + mProvider.filterExclusiveSuggestions(suggestions); + + assertThat(suggestions).hasSize(3); + } } -- 2.11.0