• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 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 
17 package com.android.systemui.statusbar;
18 
19 import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
20 
21 import android.annotation.NonNull;
22 import android.app.Notification;
23 import android.app.NotificationChannel;
24 import android.app.NotificationManager.Importance;
25 import android.content.pm.ShortcutInfo;
26 import android.service.notification.NotificationListenerService.Ranking;
27 import android.service.notification.SnoozeCriterion;
28 
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.List;
32 
33 /**
34  * Standard builder class for Ranking objects. For use in tests that need to craft the underlying
35  * Ranking object of a NotificationEntry.
36  */
37 public class RankingBuilder {
38     private String mKey = "test_key";
39     private int mRank = 0;
40     private boolean mMatchesInterruptionFilter = false;
41     private int mVisibilityOverride = 0;
42     private int mSuppressedVisualEffects = 0;
43     @Importance private int mImportance = 0;
44     private CharSequence mExplanation = "test_explanation";
45     private String mOverrideGroupKey = null;
46     private NotificationChannel mChannel = null;
47     private ArrayList<String> mAdditionalPeople = null;
48     private ArrayList<SnoozeCriterion> mSnoozeCriteria = null;
49     private boolean mCanShowBadge = false;
50     private int mUserSentiment = 0;
51     private boolean mIsSuspended = false;
52     private long mLastAudiblyAlertedMs = 0;
53     private boolean mNoisy = false;
54     private ArrayList<Notification.Action> mSmartActions = new ArrayList<>();
55     private ArrayList<CharSequence> mSmartReplies = new ArrayList<>();
56     private boolean mCanBubble = false;
57     private boolean mIsTextChanged = false;
58     private boolean mIsConversation = false;
59     private ShortcutInfo mShortcutInfo = null;
60     private int mRankingAdjustment = 0;
61     private boolean mIsBubble = false;
62     private int mProposedImportance = IMPORTANCE_UNSPECIFIED;
63     private boolean mSensitiveContent = false;
64     private String mSummarization = null;
65 
RankingBuilder()66     public RankingBuilder() {
67     }
68 
RankingBuilder(Ranking ranking)69     public RankingBuilder(Ranking ranking) {
70         mKey = ranking.getKey();
71         mRank = ranking.getRank();
72         mMatchesInterruptionFilter = ranking.matchesInterruptionFilter();
73         mVisibilityOverride = ranking.getLockscreenVisibilityOverride();
74         mSuppressedVisualEffects = ranking.getSuppressedVisualEffects();
75         mImportance = ranking.getImportance();
76         mExplanation = ranking.getImportanceExplanation();
77         mOverrideGroupKey = ranking.getOverrideGroupKey();
78         mChannel = ranking.getChannel();
79         mAdditionalPeople = copyList(ranking.getAdditionalPeople());
80         mSnoozeCriteria = copyList(ranking.getSnoozeCriteria());
81         mCanShowBadge = ranking.canShowBadge();
82         mUserSentiment = ranking.getUserSentiment();
83         mIsSuspended = ranking.isSuspended();
84         mLastAudiblyAlertedMs = ranking.getLastAudiblyAlertedMillis();
85         mNoisy = ranking.isNoisy();
86         mSmartActions = copyList(ranking.getSmartActions());
87         mSmartReplies = copyList(ranking.getSmartReplies());
88         mCanBubble = ranking.canBubble();
89         mIsTextChanged = ranking.isTextChanged();
90         mIsConversation = ranking.isConversation();
91         mShortcutInfo = ranking.getConversationShortcutInfo();
92         mRankingAdjustment = ranking.getRankingAdjustment();
93         mIsBubble = ranking.isBubble();
94         mProposedImportance = ranking.getProposedImportance();
95         mSensitiveContent = ranking.hasSensitiveContent();
96         mSummarization = ranking.getSummarization();
97     }
98 
build()99     public Ranking build() {
100         final Ranking ranking = new Ranking();
101         ranking.populate(
102                 mKey,
103                 mRank,
104                 mMatchesInterruptionFilter,
105                 mVisibilityOverride,
106                 mSuppressedVisualEffects,
107                 mImportance,
108                 mExplanation,
109                 mOverrideGroupKey,
110                 mChannel,
111                 mAdditionalPeople,
112                 mSnoozeCriteria,
113                 mCanShowBadge,
114                 mUserSentiment,
115                 mIsSuspended,
116                 mLastAudiblyAlertedMs,
117                 mNoisy,
118                 mSmartActions,
119                 mSmartReplies,
120                 mCanBubble,
121                 mIsTextChanged,
122                 mIsConversation,
123                 mShortcutInfo,
124                 mRankingAdjustment,
125                 mIsBubble,
126                 mProposedImportance,
127                 mSensitiveContent,
128                 mSummarization);
129         return ranking;
130     }
131 
setKey(String key)132     public RankingBuilder setKey(String key) {
133         mKey = key;
134         return this;
135     }
136 
setRank(int rank)137     public RankingBuilder setRank(int rank) {
138         mRank = rank;
139         return this;
140     }
141 
setMatchesInterruptionFilter(boolean matchesInterruptionFilter)142     public RankingBuilder setMatchesInterruptionFilter(boolean matchesInterruptionFilter) {
143         mMatchesInterruptionFilter = matchesInterruptionFilter;
144         return this;
145     }
146 
setVisibilityOverride(int visibilityOverride)147     public RankingBuilder setVisibilityOverride(int visibilityOverride) {
148         mVisibilityOverride = visibilityOverride;
149         return this;
150     }
151 
setSuppressedVisualEffects(int suppressedVisualEffects)152     public RankingBuilder setSuppressedVisualEffects(int suppressedVisualEffects) {
153         mSuppressedVisualEffects = suppressedVisualEffects;
154         return this;
155     }
156 
setExplanation(CharSequence explanation)157     public RankingBuilder setExplanation(CharSequence explanation) {
158         mExplanation = explanation;
159         return this;
160     }
161 
setOverrideGroupKey(String overrideGroupKey)162     public RankingBuilder setOverrideGroupKey(String overrideGroupKey) {
163         mOverrideGroupKey = overrideGroupKey;
164         return this;
165     }
166 
setAdditionalPeople(ArrayList<String> additionalPeople)167     public RankingBuilder setAdditionalPeople(ArrayList<String> additionalPeople) {
168         mAdditionalPeople = additionalPeople;
169         return this;
170     }
171 
setSnoozeCriteria( ArrayList<SnoozeCriterion> snoozeCriteria)172     public RankingBuilder setSnoozeCriteria(
173             ArrayList<SnoozeCriterion> snoozeCriteria) {
174         mSnoozeCriteria = snoozeCriteria;
175         return this;
176     }
177 
setCanShowBadge(boolean canShowBadge)178     public RankingBuilder setCanShowBadge(boolean canShowBadge) {
179         mCanShowBadge = canShowBadge;
180         return this;
181     }
182 
setSuspended(boolean suspended)183     public RankingBuilder setSuspended(boolean suspended) {
184         mIsSuspended = suspended;
185         return this;
186     }
187 
setLastAudiblyAlertedMs(long lastAudiblyAlertedMs)188     public RankingBuilder setLastAudiblyAlertedMs(long lastAudiblyAlertedMs) {
189         mLastAudiblyAlertedMs = lastAudiblyAlertedMs;
190         return this;
191     }
192 
setNoisy(boolean noisy)193     public RankingBuilder setNoisy(boolean noisy) {
194         mNoisy = noisy;
195         return this;
196     }
197 
setCanBubble(boolean canBubble)198     public RankingBuilder setCanBubble(boolean canBubble) {
199         mCanBubble = canBubble;
200         return this;
201     }
202 
setTextChanged(boolean textChanged)203     public RankingBuilder setTextChanged(boolean textChanged) {
204         mIsTextChanged = textChanged;
205         return this;
206     }
207 
setIsConversation(boolean isConversation)208     public RankingBuilder setIsConversation(boolean isConversation) {
209         mIsConversation = isConversation;
210         return this;
211     }
212 
setShortcutInfo(ShortcutInfo shortcutInfo)213     public RankingBuilder setShortcutInfo(ShortcutInfo shortcutInfo) {
214         mShortcutInfo = shortcutInfo;
215         return this;
216     }
217 
setRankingAdjustment(int rankingAdjustment)218     public RankingBuilder setRankingAdjustment(int rankingAdjustment) {
219         mRankingAdjustment = rankingAdjustment;
220         return this;
221     }
222 
setImportance(@mportance int importance)223     public RankingBuilder setImportance(@Importance int importance) {
224         mImportance = importance;
225         return this;
226     }
227 
setProposedImportance(@mportance int importance)228     public RankingBuilder setProposedImportance(@Importance int importance) {
229         mProposedImportance = importance;
230         return this;
231     }
232 
setSensitiveContent(boolean sensitiveContent)233     public RankingBuilder setSensitiveContent(boolean sensitiveContent) {
234         mSensitiveContent = sensitiveContent;
235         return this;
236     }
237 
setUserSentiment(int userSentiment)238     public RankingBuilder setUserSentiment(int userSentiment) {
239         mUserSentiment = userSentiment;
240         return this;
241     }
242 
setChannel(NotificationChannel channel)243     public RankingBuilder setChannel(NotificationChannel channel) {
244         mChannel = channel;
245         return this;
246     }
247 
setSmartActions(@onNull ArrayList<Notification.Action> smartActions)248     public RankingBuilder setSmartActions(@NonNull ArrayList<Notification.Action> smartActions) {
249         mSmartActions = smartActions;
250         return this;
251     }
252 
setSmartActions(Notification.Action... smartActions)253     public RankingBuilder setSmartActions(Notification.Action... smartActions) {
254         mSmartActions = new ArrayList<>(Arrays.asList(smartActions));
255         return this;
256     }
257 
setSmartReplies(@onNull ArrayList<CharSequence> smartReplies)258     public RankingBuilder setSmartReplies(@NonNull ArrayList<CharSequence> smartReplies) {
259         mSmartReplies = smartReplies;
260         return this;
261     }
262 
setSmartReplies(CharSequence... smartReplies)263     public RankingBuilder setSmartReplies(CharSequence... smartReplies) {
264         mSmartReplies = new ArrayList<>(Arrays.asList(smartReplies));
265         return this;
266     }
267 
setSummarization(String summary)268     public RankingBuilder setSummarization(String summary) {
269         mSummarization = summary;
270         return this;
271     }
272 
copyList(List<E> list)273     private static <E> ArrayList<E> copyList(List<E> list) {
274         if (list == null) {
275             return null;
276         } else {
277             return new ArrayList<>(list);
278         }
279     }
280 }
281