Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/notifications/ChannelsInitializer.java

Issue 2807213002: [Android O] Initialize channels on first launch/upgrade (Closed)
Patch Set: With added tests for ChannelsUpdater Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.notifications; 5 package org.chromium.chrome.browser.notifications;
6 6
7 import android.annotation.TargetApi; 7 import android.annotation.TargetApi;
8 import android.app.NotificationManager; 8 import android.app.NotificationManager;
9 import android.os.Build; 9 import android.os.Build;
10 import android.support.annotation.StringDef; 10 import android.support.annotation.StringDef;
(...skipping 17 matching lines...) Expand all
28 public static final String CHANNEL_ID_SITES = "sites"; 28 public static final String CHANNEL_ID_SITES = "sites";
29 29
30 @StringDef({CHANNEL_GROUP_ID_GENERAL}) 30 @StringDef({CHANNEL_GROUP_ID_GENERAL})
31 @Retention(RetentionPolicy.SOURCE) 31 @Retention(RetentionPolicy.SOURCE)
32 private @interface ChannelGroupId {} 32 private @interface ChannelGroupId {}
33 static final String CHANNEL_GROUP_ID_GENERAL = "general"; 33 static final String CHANNEL_GROUP_ID_GENERAL = "general";
34 34
35 // Map defined in static inner class so it's only initialized lazily. 35 // Map defined in static inner class so it's only initialized lazily.
36 @TargetApi(Build.VERSION_CODES.N) // for NotificationManager.IMPORTANCE_* co nstants 36 @TargetApi(Build.VERSION_CODES.N) // for NotificationManager.IMPORTANCE_* co nstants
37 private static class PredefinedChannels { 37 private static class PredefinedChannels {
38 /**
39 * The set of predefined channels to be initialized on startup.
40 * {@link ChannelsUpdater#CHANNELS_VERSION} must be incremented every ti me an entry is
Peter Beverloo 2017/04/11 19:08:29 Maybe consider making this a static member of Chan
awdf 2017/04/12 13:58:15 Done.
41 * modified, removed or added to this map.
42 */
38 private static final Map<String, Channel> MAP; 43 private static final Map<String, Channel> MAP;
39 static { 44 static {
40 Map<String, Channel> map = new HashMap<>(); 45 Map<String, Channel> map = new HashMap<>();
41 map.put(CHANNEL_ID_BROWSER, 46 map.put(CHANNEL_ID_BROWSER,
42 new Channel(CHANNEL_ID_BROWSER, 47 new Channel(CHANNEL_ID_BROWSER,
43 org.chromium.chrome.R.string.notification_category_b rowser, 48 org.chromium.chrome.R.string.notification_category_b rowser,
44 NotificationManager.IMPORTANCE_LOW, CHANNEL_GROUP_ID _GENERAL)); 49 NotificationManager.IMPORTANCE_LOW, CHANNEL_GROUP_ID _GENERAL));
45 map.put(CHANNEL_ID_SITES, 50 map.put(CHANNEL_ID_SITES,
46 new Channel(CHANNEL_ID_SITES, 51 new Channel(CHANNEL_ID_SITES,
47 org.chromium.chrome.R.string.notification_category_s ites, 52 org.chromium.chrome.R.string.notification_category_s ites,
(...skipping 13 matching lines...) Expand all
61 MAP = Collections.unmodifiableMap(map); 66 MAP = Collections.unmodifiableMap(map);
62 } 67 }
63 } 68 }
64 69
65 private final NotificationManagerProxy mNotificationManager; 70 private final NotificationManagerProxy mNotificationManager;
66 71
67 public ChannelsInitializer(NotificationManagerProxy notificationManagerProxy ) { 72 public ChannelsInitializer(NotificationManagerProxy notificationManagerProxy ) {
68 mNotificationManager = notificationManagerProxy; 73 mNotificationManager = notificationManagerProxy;
69 } 74 }
70 75
76 public void initializeStartupChannels() {
77 for (@ChannelId String channelId : PredefinedChannels.MAP.keySet()) {
78 ensureInitialized(channelId);
79 }
80 }
81
82 void deleteAllChannels() {
83 for (String channelId : mNotificationManager.getNotificationChannelIds() ) {
84 mNotificationManager.deleteNotificationChannel(channelId);
85 }
86 }
87
71 /** 88 /**
72 * Ensures the given channel has been created on the notification manager so a notification 89 * Ensures the given channel has been created on the notification manager so a notification
73 * can be safely posted to it. This should only be used for channels that ar e predefined in 90 * can be safely posted to it. This should only be used for channels that ar e predefined in
74 * ChannelsInitializer. 91 * ChannelsInitializer.
75 * 92 *
76 * Calling this is a (potentially lengthy) no-op if the channel has already been created. 93 * Calling this is a (potentially lengthy) no-op if the channel has already been created.
77 * 94 *
78 * @param channelId The ID of the channel to be initialized. 95 * @param channelId The ID of the channel to be initialized.
79 */ 96 */
80 public void ensureInitialized(@ChannelId String channelId) { 97 public void ensureInitialized(@ChannelId String channelId) {
81 if (!PredefinedChannels.MAP.containsKey(channelId)) { 98 if (!PredefinedChannels.MAP.containsKey(channelId)) {
82 throw new IllegalStateException("Could not initialize channel: " + c hannelId); 99 throw new IllegalStateException("Could not initialize channel: " + c hannelId);
83 } 100 }
84 Channel channel = PredefinedChannels.MAP.get(channelId); 101 Channel channel = PredefinedChannels.MAP.get(channelId);
85 // Channel group must be created before the channel. 102 // Channel group must be created before the channel.
86 mNotificationManager.createNotificationChannelGroup( 103 mNotificationManager.createNotificationChannelGroup(
87 PredefinedChannelGroups.MAP.get(channel.mGroupId)); 104 PredefinedChannelGroups.MAP.get(channel.mGroupId));
88 mNotificationManager.createNotificationChannel(channel); 105 mNotificationManager.createNotificationChannel(channel);
89 } 106 }
90 107
91 /** 108 /**
92 * Helper class containing notification channel properties. 109 * Helper class containing notification channel properties.
93 */ 110 */
94 public static class Channel { 111 public static class Channel {
95 @ChannelId 112 @ChannelId
96 final String mId; 113 public final String mId;
97 final int mNameResId; 114 final int mNameResId;
98 final int mImportance; 115 final int mImportance;
99 @ChannelGroupId 116 @ChannelGroupId
100 final String mGroupId; 117 final String mGroupId;
101 118
102 Channel(@ChannelId String id, int nameResId, int importance, 119 Channel(@ChannelId String id, int nameResId, int importance,
103 @ChannelGroupId String groupId) { 120 @ChannelGroupId String groupId) {
104 this.mId = id; 121 this.mId = id;
105 this.mNameResId = nameResId; 122 this.mNameResId = nameResId;
106 this.mImportance = importance; 123 this.mImportance = importance;
107 this.mGroupId = groupId; 124 this.mGroupId = groupId;
108 } 125 }
109 } 126 }
110 127
111 /** 128 /**
112 * Helper class containing notification channel group properties. 129 * Helper class containing notification channel group properties.
113 */ 130 */
114 public static class ChannelGroup { 131 public static class ChannelGroup {
115 @ChannelGroupId 132 @ChannelGroupId
116 final String mId; 133 final String mId;
117 final int mNameResId; 134 final int mNameResId;
118 135
119 ChannelGroup(@ChannelGroupId String id, int nameResId) { 136 ChannelGroup(@ChannelGroupId String id, int nameResId) {
120 this.mId = id; 137 this.mId = id;
121 this.mNameResId = nameResId; 138 this.mNameResId = nameResId;
122 } 139 }
123 } 140 }
124 } 141 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698