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