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

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

Issue 2702023002: Migrate web notifications to ChromeNotificationBuilder (Closed)
Patch Set: rebase Created 3 years, 9 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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.app.Notification; 7 import android.app.Notification;
8 import android.content.Context; 8 import android.content.Context;
9 import android.content.res.Resources; 9 import android.content.res.Resources;
10 import android.graphics.Bitmap; 10 import android.graphics.Bitmap;
11 import android.graphics.BitmapFactory; 11 import android.graphics.BitmapFactory;
12 import android.graphics.drawable.BitmapDrawable; 12 import android.graphics.drawable.BitmapDrawable;
13 import android.graphics.drawable.Drawable; 13 import android.graphics.drawable.Drawable;
14 import android.os.Build; 14 import android.os.Build;
15 import android.os.StrictMode; 15 import android.os.StrictMode;
16 import android.os.SystemClock; 16 import android.os.SystemClock;
17 import android.text.format.DateFormat; 17 import android.text.format.DateFormat;
18 import android.util.DisplayMetrics; 18 import android.util.DisplayMetrics;
19 import android.util.TypedValue; 19 import android.util.TypedValue;
20 import android.view.View; 20 import android.view.View;
21 import android.widget.RemoteViews; 21 import android.widget.RemoteViews;
22 22
23 import org.chromium.base.ApiCompatibilityUtils; 23 import org.chromium.base.ApiCompatibilityUtils;
24 import org.chromium.base.VisibleForTesting; 24 import org.chromium.base.VisibleForTesting;
25 import org.chromium.base.metrics.RecordHistogram; 25 import org.chromium.base.metrics.RecordHistogram;
26 import org.chromium.chrome.R; 26 import org.chromium.chrome.R;
27 import org.chromium.chrome.browser.ChromeApplication;
27 import org.chromium.ui.base.LocalizationUtils; 28 import org.chromium.ui.base.LocalizationUtils;
28 29
29 import java.util.Date; 30 import java.util.Date;
30 import java.util.concurrent.TimeUnit; 31 import java.util.concurrent.TimeUnit;
31 32
32 /** 33 /**
33 * Builds a notification using the given inputs. Uses RemoteViews to provide a c ustom layout. 34 * Builds a notification using the given inputs. Uses RemoteViews to provide a c ustom layout.
34 */ 35 */
35 public class CustomNotificationBuilder extends NotificationBuilderBase { 36 public class CustomNotificationBuilder extends NotificationBuilderBase {
36 /** 37 /**
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 view.setViewVisibility(smallIconId, View.VISIBLE); 131 view.setViewVisibility(smallIconId, View.VISIBLE);
131 if (mSmallIconBitmap != null) { 132 if (mSmallIconBitmap != null) {
132 view.setImageViewBitmap(smallIconId, mSmallIconBitmap); 133 view.setImageViewBitmap(smallIconId, mSmallIconBitmap);
133 } else { 134 } else {
134 view.setImageViewResource(smallIconId, mSmallIconId); 135 view.setImageViewResource(smallIconId, mSmallIconId);
135 } 136 }
136 } 137 }
137 addActionButtons(bigView); 138 addActionButtons(bigView);
138 configureSettingsButton(bigView); 139 configureSettingsButton(bigView);
139 140
140 // Note: this is not a NotificationCompat builder so be mindful of the 141 // Note: under the hood this is not a NotificationCompat builder so be m indful of the
141 // API level of methods you call on the builder. 142 // API level of methods you call on the builder.
142 Notification.Builder builder = new Notification.Builder(mContext); 143 // TODO(crbug.com/697104) We should probably use a Compat builder.
144 ChromeNotificationBuilder builder =
145 ((ChromeApplication) mContext.getApplicationContext())
146 .createChromeNotificationBuilder(false /* preferCompat * /,
147 NotificationConstants.CATEGORY_ID_SITES,
148 mContext.getString(
149 org.chromium.chrome.R.string.notificatio n_category_sites),
150 NotificationConstants.CATEGORY_GROUP_ID_GENERAL,
151 mContext.getString(org.chromium.chrome.R.string
152 .notification_categor y_group_general));
143 builder.setTicker(mTickerText); 153 builder.setTicker(mTickerText);
144 builder.setContentIntent(mContentIntent); 154 builder.setContentIntent(mContentIntent);
145 builder.setDeleteIntent(mDeleteIntent); 155 builder.setDeleteIntent(mDeleteIntent);
146 builder.setDefaults(mDefaults); 156 builder.setDefaults(mDefaults);
147 builder.setVibrate(mVibratePattern); 157 builder.setVibrate(mVibratePattern);
148 builder.setWhen(mTimestamp); 158 builder.setWhen(mTimestamp);
149 builder.setOnlyAlertOnce(!mRenotify); 159 builder.setOnlyAlertOnce(!mRenotify);
150 ApiCompatibilityUtils.setContentViewForNotificationBuilder(builder, comp actView); 160 builder.setContent(compactView);
151 161
152 // Some things are duplicated in the builder to ensure the notification shows correctly on 162 // Some things are duplicated in the builder to ensure the notification shows correctly on
153 // Wear devices and custom lock screens. 163 // Wear devices and custom lock screens.
154 builder.setContentTitle(mTitle); 164 builder.setContentTitle(mTitle);
155 builder.setContentText(mBody); 165 builder.setContentText(mBody);
156 builder.setSubText(mOrigin); 166 builder.setSubText(mOrigin);
157 builder.setLargeIcon(getNormalizedLargeIcon()); 167 builder.setLargeIcon(getNormalizedLargeIcon());
158 setSmallIconOnBuilder(builder, mSmallIconId, mSmallIconBitmap); 168 setSmallIconOnBuilder(builder, mSmallIconId, mSmallIconBitmap);
159 for (Action action : mActions) { 169 for (Action action : mActions) {
160 addActionToBuilder(builder, action); 170 addActionToBuilder(builder, action);
161 } 171 }
162 if (mSettingsAction != null) { 172 if (mSettingsAction != null) {
163 addActionToBuilder(builder, mSettingsAction); 173 addActionToBuilder(builder, mSettingsAction);
164 } 174 }
165 setGroupOnBuilder(builder, mOrigin); 175 setGroupOnBuilder(builder, mOrigin);
166 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 176 builder.setPublicVersion(createPublicNotification(mContext));
167 // Notification.Builder.setPublicVersion was added in Android L.
168 builder.setPublicVersion(createPublicNotification(mContext));
169 }
170 177
171 return ApiCompatibilityUtils.notificationWithBigContentView(builder, big View); 178 return builder.buildWithBigContentView(bigView);
172 } 179 }
173 180
174 /** 181 /**
175 * If there are actions, shows the button related views, and adds a button f or each action. 182 * If there are actions, shows the button related views, and adds a button f or each action.
176 */ 183 */
177 private void addActionButtons(RemoteViews bigView) { 184 private void addActionButtons(RemoteViews bigView) {
178 // Remove the existing buttons in case an existing notification is being updated. 185 // Remove the existing buttons in case an existing notification is being updated.
179 bigView.removeAllViews(R.id.buttons); 186 bigView.removeAllViews(R.id.buttons);
180 187
181 // Always set the visibility of the views associated with the action but tons. The current 188 // Always set the visibility of the views associated with the action but tons. The current
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 } 321 }
315 322
316 /** 323 /**
317 * Whether to use the Material look and feel or fall back to Holo. 324 * Whether to use the Material look and feel or fall back to Holo.
318 */ 325 */
319 @VisibleForTesting 326 @VisibleForTesting
320 static boolean useMaterial() { 327 static boolean useMaterial() {
321 return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; 328 return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
322 } 329 }
323 } 330 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698