OSDN Git Service

Revert "Revert "Filter and display top 3 suggestions for exclusive type""
authorFan Zhang <zhfan@google.com>
Fri, 12 May 2017 18:12:58 +0000 (18:12 +0000)
committerFan Zhang <zhfan@google.com>
Fri, 12 May 2017 18:12:58 +0000 (18:12 +0000)
This reverts commit 184ae963e78bd70f15339d9a89542688881332db.

Change-Id: Iac60fc52a5b0c153945c22b97394546a529d3bb4

src/com/android/settings/dashboard/DashboardSummary.java
src/com/android/settings/dashboard/suggestions/SuggestionDismissController.java
src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java
src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java
tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java

index f3a78aa..9f6c61c 100644 (file)
@@ -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<Tile> suggestions = mSuggestionParser.getSuggestions(isSmartSuggestionEnabled);
+            final SuggestionList sl = mSuggestionParser.getSuggestions(isSmartSuggestionEnabled);
+            final List<Tile> suggestions = sl.getSuggestions();
+
             if (isSmartSuggestionEnabled) {
                 List<String> 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;
         }
 
index 820963f..776bd1e 100644 (file)
@@ -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 {
 
index 14f5e9c..a5a6d7a 100644 (file)
@@ -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<Tile> suggestions, List<String> suggestionIds);
 
     /**
+     * Only keep top few suggestions from exclusive suggestions.
+     */
+    void filterExclusiveSuggestions(List<Tile> suggestions);
+
+    /**
      * Dismisses a suggestion.
      */
     void dismissSuggestion(Context context, SuggestionParser parser, Tile suggestion);
index 01097bc..0a14232 100644 (file)
@@ -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<Tile> 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;
index e85621e..4d9c1ec 100644 (file)
@@ -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;
index 9eddd04..8ddb393 100644 (file)
@@ -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<Tile> 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);
+    }
 }