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 RankingBuilder()65 public RankingBuilder() { 66 } 67 RankingBuilder(Ranking ranking)68 public RankingBuilder(Ranking ranking) { 69 mKey = ranking.getKey(); 70 mRank = ranking.getRank(); 71 mMatchesInterruptionFilter = ranking.matchesInterruptionFilter(); 72 mVisibilityOverride = ranking.getLockscreenVisibilityOverride(); 73 mSuppressedVisualEffects = ranking.getSuppressedVisualEffects(); 74 mImportance = ranking.getImportance(); 75 mExplanation = ranking.getImportanceExplanation(); 76 mOverrideGroupKey = ranking.getOverrideGroupKey(); 77 mChannel = ranking.getChannel(); 78 mAdditionalPeople = copyList(ranking.getAdditionalPeople()); 79 mSnoozeCriteria = copyList(ranking.getSnoozeCriteria()); 80 mCanShowBadge = ranking.canShowBadge(); 81 mUserSentiment = ranking.getUserSentiment(); 82 mIsSuspended = ranking.isSuspended(); 83 mLastAudiblyAlertedMs = ranking.getLastAudiblyAlertedMillis(); 84 mNoisy = ranking.isNoisy(); 85 mSmartActions = copyList(ranking.getSmartActions()); 86 mSmartReplies = copyList(ranking.getSmartReplies()); 87 mCanBubble = ranking.canBubble(); 88 mIsTextChanged = ranking.isTextChanged(); 89 mIsConversation = ranking.isConversation(); 90 mShortcutInfo = ranking.getConversationShortcutInfo(); 91 mRankingAdjustment = ranking.getRankingAdjustment(); 92 mIsBubble = ranking.isBubble(); 93 mProposedImportance = ranking.getProposedImportance(); 94 mSensitiveContent = ranking.hasSensitiveContent(); 95 } 96 build()97 public Ranking build() { 98 final Ranking ranking = new Ranking(); 99 ranking.populate( 100 mKey, 101 mRank, 102 mMatchesInterruptionFilter, 103 mVisibilityOverride, 104 mSuppressedVisualEffects, 105 mImportance, 106 mExplanation, 107 mOverrideGroupKey, 108 mChannel, 109 mAdditionalPeople, 110 mSnoozeCriteria, 111 mCanShowBadge, 112 mUserSentiment, 113 mIsSuspended, 114 mLastAudiblyAlertedMs, 115 mNoisy, 116 mSmartActions, 117 mSmartReplies, 118 mCanBubble, 119 mIsTextChanged, 120 mIsConversation, 121 mShortcutInfo, 122 mRankingAdjustment, 123 mIsBubble, 124 mProposedImportance, 125 mSensitiveContent); 126 return ranking; 127 } 128 setKey(String key)129 public RankingBuilder setKey(String key) { 130 mKey = key; 131 return this; 132 } 133 setRank(int rank)134 public RankingBuilder setRank(int rank) { 135 mRank = rank; 136 return this; 137 } 138 setMatchesInterruptionFilter(boolean matchesInterruptionFilter)139 public RankingBuilder setMatchesInterruptionFilter(boolean matchesInterruptionFilter) { 140 mMatchesInterruptionFilter = matchesInterruptionFilter; 141 return this; 142 } 143 setVisibilityOverride(int visibilityOverride)144 public RankingBuilder setVisibilityOverride(int visibilityOverride) { 145 mVisibilityOverride = visibilityOverride; 146 return this; 147 } 148 setSuppressedVisualEffects(int suppressedVisualEffects)149 public RankingBuilder setSuppressedVisualEffects(int suppressedVisualEffects) { 150 mSuppressedVisualEffects = suppressedVisualEffects; 151 return this; 152 } 153 setExplanation(CharSequence explanation)154 public RankingBuilder setExplanation(CharSequence explanation) { 155 mExplanation = explanation; 156 return this; 157 } 158 setOverrideGroupKey(String overrideGroupKey)159 public RankingBuilder setOverrideGroupKey(String overrideGroupKey) { 160 mOverrideGroupKey = overrideGroupKey; 161 return this; 162 } 163 setAdditionalPeople(ArrayList<String> additionalPeople)164 public RankingBuilder setAdditionalPeople(ArrayList<String> additionalPeople) { 165 mAdditionalPeople = additionalPeople; 166 return this; 167 } 168 setSnoozeCriteria( ArrayList<SnoozeCriterion> snoozeCriteria)169 public RankingBuilder setSnoozeCriteria( 170 ArrayList<SnoozeCriterion> snoozeCriteria) { 171 mSnoozeCriteria = snoozeCriteria; 172 return this; 173 } 174 setCanShowBadge(boolean canShowBadge)175 public RankingBuilder setCanShowBadge(boolean canShowBadge) { 176 mCanShowBadge = canShowBadge; 177 return this; 178 } 179 setSuspended(boolean suspended)180 public RankingBuilder setSuspended(boolean suspended) { 181 mIsSuspended = suspended; 182 return this; 183 } 184 setLastAudiblyAlertedMs(long lastAudiblyAlertedMs)185 public RankingBuilder setLastAudiblyAlertedMs(long lastAudiblyAlertedMs) { 186 mLastAudiblyAlertedMs = lastAudiblyAlertedMs; 187 return this; 188 } 189 setNoisy(boolean noisy)190 public RankingBuilder setNoisy(boolean noisy) { 191 mNoisy = noisy; 192 return this; 193 } 194 setCanBubble(boolean canBubble)195 public RankingBuilder setCanBubble(boolean canBubble) { 196 mCanBubble = canBubble; 197 return this; 198 } 199 setTextChanged(boolean textChanged)200 public RankingBuilder setTextChanged(boolean textChanged) { 201 mIsTextChanged = textChanged; 202 return this; 203 } 204 setIsConversation(boolean isConversation)205 public RankingBuilder setIsConversation(boolean isConversation) { 206 mIsConversation = isConversation; 207 return this; 208 } 209 setShortcutInfo(ShortcutInfo shortcutInfo)210 public RankingBuilder setShortcutInfo(ShortcutInfo shortcutInfo) { 211 mShortcutInfo = shortcutInfo; 212 return this; 213 } 214 setRankingAdjustment(int rankingAdjustment)215 public RankingBuilder setRankingAdjustment(int rankingAdjustment) { 216 mRankingAdjustment = rankingAdjustment; 217 return this; 218 } 219 setImportance(@mportance int importance)220 public RankingBuilder setImportance(@Importance int importance) { 221 mImportance = importance; 222 return this; 223 } 224 setProposedImportance(@mportance int importance)225 public RankingBuilder setProposedImportance(@Importance int importance) { 226 mProposedImportance = importance; 227 return this; 228 } 229 setSensitiveContent(boolean sensitiveContent)230 public RankingBuilder setSensitiveContent(boolean sensitiveContent) { 231 mSensitiveContent = sensitiveContent; 232 return this; 233 } 234 setUserSentiment(int userSentiment)235 public RankingBuilder setUserSentiment(int userSentiment) { 236 mUserSentiment = userSentiment; 237 return this; 238 } 239 setChannel(NotificationChannel channel)240 public RankingBuilder setChannel(NotificationChannel channel) { 241 mChannel = channel; 242 return this; 243 } 244 setSmartActions(@onNull ArrayList<Notification.Action> smartActions)245 public RankingBuilder setSmartActions(@NonNull ArrayList<Notification.Action> smartActions) { 246 mSmartActions = smartActions; 247 return this; 248 } 249 setSmartActions(Notification.Action... smartActions)250 public RankingBuilder setSmartActions(Notification.Action... smartActions) { 251 mSmartActions = new ArrayList<>(Arrays.asList(smartActions)); 252 return this; 253 } 254 setSmartReplies(@onNull ArrayList<CharSequence> smartReplies)255 public RankingBuilder setSmartReplies(@NonNull ArrayList<CharSequence> smartReplies) { 256 mSmartReplies = smartReplies; 257 return this; 258 } 259 setSmartReplies(CharSequence... smartReplies)260 public RankingBuilder setSmartReplies(CharSequence... smartReplies) { 261 mSmartReplies = new ArrayList<>(Arrays.asList(smartReplies)); 262 return this; 263 } 264 copyList(List<E> list)265 private static <E> ArrayList<E> copyList(List<E> list) { 266 if (list == null) { 267 return null; 268 } else { 269 return new ArrayList<>(list); 270 } 271 } 272 } 273