blob: a89092040e7171199612d593e9f7e1784bca5553 [file] [log] [blame]
Fan Zhange138ef12017-05-11 15:29:56 -07001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.settingslib.suggestions;
18
19import android.content.Intent;
Fan Zhange138ef12017-05-11 15:29:56 -070020import android.util.ArrayMap;
21import android.util.ArraySet;
22
23import com.android.settingslib.drawer.Tile;
24
25import java.util.ArrayList;
26import java.util.List;
27import java.util.Map;
28import java.util.Set;
29
30public class SuggestionList {
31 // Category -> list of suggestion map
32 private final Map<SuggestionCategory, List<Tile>> mSuggestions;
33
34 // A flatten list of all suggestions.
35 private List<Tile> mSuggestionList;
36
37 public SuggestionList() {
38 mSuggestions = new ArrayMap<>();
39 }
40
41 public void addSuggestions(SuggestionCategory category, List<Tile> suggestions) {
42 mSuggestions.put(category, suggestions);
43 }
44
45 public List<Tile> getSuggestions() {
46 if (mSuggestionList != null) {
47 return mSuggestionList;
48 }
49 mSuggestionList = new ArrayList<>();
50 for (List<Tile> suggestions : mSuggestions.values()) {
51 mSuggestionList.addAll(suggestions);
52 }
53 dedupeSuggestions(mSuggestionList);
54 return mSuggestionList;
55 }
56
57 public boolean isExclusiveSuggestionCategory() {
58 if (mSuggestions.size() != 1) {
59 // If there is no category, or more than 1 category, it's not exclusive by definition.
60 return false;
61 }
62 for (SuggestionCategory category : mSuggestions.keySet()) {
63 if (category.exclusive) {
64 return true;
65 }
66 }
67 return false;
68 }
69
Fan Zhange138ef12017-05-11 15:29:56 -070070 /**
71 * Filter suggestions list so they are all unique.
72 */
73 private void dedupeSuggestions(List<Tile> suggestions) {
74 final Set<String> intents = new ArraySet<>();
75 for (int i = suggestions.size() - 1; i >= 0; i--) {
76 final Tile suggestion = suggestions.get(i);
77 final String intentUri = suggestion.intent.toUri(Intent.URI_INTENT_SCHEME);
78 if (intents.contains(intentUri)) {
79 suggestions.remove(i);
80 } else {
81 intents.add(intentUri);
82 }
83 }
84 }
85}