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

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

Issue 1054573002: Implement support for notification.vibrate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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.app.NotificationManager; 8 import android.app.NotificationManager;
9 import android.app.PendingIntent; 9 import android.app.PendingIntent;
10 import android.content.Context; 10 import android.content.Context;
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 URI uri = new URI(parts[1]); 283 URI uri = new URI(parts[1]);
284 if (uri.getHost() != null) return parts[1]; 284 if (uri.getHost() != null) return parts[1];
285 } catch (URISyntaxException e) { 285 } catch (URISyntaxException e) {
286 Log.e(TAG, "Expected to find a valid url in the notification tag ext ra.", e); 286 Log.e(TAG, "Expected to find a valid url in the notification tag ext ra.", e);
287 return null; 287 return null;
288 } 288 }
289 return null; 289 return null;
290 } 290 }
291 291
292 /** 292 /**
293 * Generates the notfiication defaults from vibratePattern's size and silent .
294 *
295 * Use the system's default ringtone, vibration and indicator lights unless the notification
296 * has been marked as being silent, for example because it's low priority.
Peter Beverloo 2015/05/01 17:17:59 "for example because it's low priority." -> we don
Sanghyun Park 2015/05/04 07:00:43 Done.
297 * If a vibration pattern is set, the notification should use the provided p attern
298 * rather than the defaulting to system settings.
299 *
300 * @param vibratePatternLength Vibration pattern's size for the Notification .
301 * @param silent Whether the default sound, vibration and lights should be s uppressed.
302 * @return The generated notification's default value.
303 * Returns 0 if silent is true.
Peter Beverloo 2015/05/01 17:17:59 No need for lines 303-306 in the description, one
Sanghyun Park 2015/05/04 07:00:43 Okay, I'll remove these lines.
304 * Returns Notification.DEFAULT_ALL if silent is false and vibration 's length is 0.
305 * Returns Notification.DEFAULT_ALL & ~Notification.DEFAULT_VIBRATE
306 * if silent is false and vibration's length is greater than 0.
307 */
308 @VisibleForTesting
309 static int makeDefaults(int vibratePatternLength, boolean silent) {
310 assert silent && vibratePatternLength == 0;
311
312 if (silent) return 0;
313
314 int defaults = Notification.DEFAULT_ALL;
315 if (vibratePatternLength > 0) {
316 defaults &= ~Notification.DEFAULT_VIBRATE;
317 }
318 return defaults;
319 }
320
321 /**
322 * Generates the vibration pattern used in Android notification.
323 *
324 * In Android platform, the first value indicates the number of
Peter Beverloo 2015/05/01 17:17:59 nit: the linebreaks are kind of odd in this commen
Sanghyun Park 2015/05/04 07:00:44 Done.
325 * milliseconds to wait before turning the vibrator on unlike Blink.
326 * So, we need to insert any value at the beginning of vibrate value.
327 *
328 * @param vibratePattern Vibration pattern for the Notification.
Peter Beverloo 2015/05/01 17:17:59 --> Vibration pattern following the Web Vibration
Sanghyun Park 2015/05/04 07:00:43 Done.
329 * @return The generated vibration pattern for Android.
Peter Beverloo 2015/05/01 17:17:59 --> Vibration pattern following the Android syntax
Sanghyun Park 2015/05/04 07:00:43 Done.
330 */
331 @VisibleForTesting
332 static long[] makeVibratePattern(int[] vibratePattern) {
333 long[] pattern = new long[vibratePattern.length + 1];
334 for (int i = 0; i < vibratePattern.length; ++i) {
335 pattern[i + 1] = vibratePattern[i];
336 }
337 return pattern;
338 }
339
340 /**
293 * Displays a notification with the given details. 341 * Displays a notification with the given details.
294 * 342 *
295 * @param persistentNotificationId The persistent id of the notification. 343 * @param persistentNotificationId The persistent id of the notification.
296 * @param origin Full text of the origin, including the protocol, owning thi s notification. 344 * @param origin Full text of the origin, including the protocol, owning thi s notification.
297 * @param tag A string identifier for this notification. If the tag is not e mpty, the new 345 * @param tag A string identifier for this notification. If the tag is not e mpty, the new
298 * notification will replace the previous notification with the s ame tag and origin, 346 * notification will replace the previous notification with the s ame tag and origin,
299 * if present. If no matching previous notification is present, t he new one will just 347 * if present. If no matching previous notification is present, t he new one will just
300 * be added. 348 * be added.
301 * @param title Title to be displayed in the notification. 349 * @param title Title to be displayed in the notification.
302 * @param body Message to be displayed in the notification. Will be trimmed to one line of 350 * @param body Message to be displayed in the notification. Will be trimmed to one line of
303 * text by the Android notification system. 351 * text by the Android notification system.
304 * @param icon Icon to be displayed in the notification. When this isn't a v alid Bitmap, a 352 * @param icon Icon to be displayed in the notification. When this isn't a v alid Bitmap, a
305 * default icon will be generated instead. 353 * default icon will be generated instead.
354 * @param vibratePattern Vibration pattern for the Notification.
Peter Beverloo 2015/05/01 17:17:59 --> Vibration pattern following the Web Vibration
Sanghyun Park 2015/05/04 07:00:43 Done.
306 * @param silent Whether the default sound, vibration and lights should be s uppressed. 355 * @param silent Whether the default sound, vibration and lights should be s uppressed.
356 * @see https://developer.android.com/reference/android/app/Notification.htm l
307 */ 357 */
308 @CalledByNative 358 @CalledByNative
309 private void displayNotification(long persistentNotificationId, String origi n, String tag, 359 private void displayNotification(long persistentNotificationId, String origi n, String tag,
310 String title, String body, Bitmap icon, boolean silent) { 360 String title, String body, Bitmap icon, int[] vibratePattern, boolea n silent) {
Peter Beverloo 2015/05/01 17:17:59 nit: rename this to vibrationPattern?
Sanghyun Park 2015/05/04 07:00:43 Done.
311 if (icon == null || icon.getWidth() == 0) { 361 if (icon == null || icon.getWidth() == 0) {
312 icon = getIconGenerator().generateIconForUrl(origin, true); 362 icon = getIconGenerator().generateIconForUrl(origin, true);
313 } 363 }
314 364
315 Resources res = mAppContext.getResources(); 365 Resources res = mAppContext.getResources();
316 366
317 // The data used to make each intent unique according to the rules of In tent#filterEquals. 367 // The data used to make each intent unique according to the rules of In tent#filterEquals.
318 // Without this, the pending intents derived from them may be reused, be cause extras are 368 // Without this, the pending intents derived from them may be reused, be cause extras are
319 // not taken into account for the filterEquals comparison. 369 // not taken into account for the filterEquals comparison.
320 Uri intentData = Uri.parse(origin).buildUpon().fragment( 370 Uri intentData = Uri.parse(origin).buildUpon().fragment(
(...skipping 19 matching lines...) Expand all
340 NotificationConstants.ACTION_CLICK_NOTIFICATION, 390 NotificationConstants.ACTION_CLICK_NOTIFICATION,
341 persistentNotificationId, origin, tag, intentData)) 391 persistentNotificationId, origin, tag, intentData))
342 .setDeleteIntent(getPendingIntent( 392 .setDeleteIntent(getPendingIntent(
343 NotificationConstants.ACTION_CLOSE_NOTIFICATION, 393 NotificationConstants.ACTION_CLOSE_NOTIFICATION,
344 persistentNotificationId, origin, tag, intentData)) 394 persistentNotificationId, origin, tag, intentData))
345 .addAction(R.drawable.settings_cog, 395 .addAction(R.drawable.settings_cog,
346 res.getString(R.string.page_info_site_settings_button ), 396 res.getString(R.string.page_info_site_settings_button ),
347 pendingSettingsIntent) 397 pendingSettingsIntent)
348 .setSubText(origin); 398 .setSubText(origin);
349 399
350 // Use the system's default ringtone, vibration and indicator lights unl ess the notification 400 notificationBuilder.setDefaults(makeDefaults(vibratePattern.length, sile nt));
351 // has been marked as being silent, for example because it's low priorit y. 401 if (vibratePattern.length > 0) {
352 if (!silent) notificationBuilder.setDefaults(Notification.DEFAULT_ALL); 402 notificationBuilder.setVibrate(makeVibratePattern(vibratePattern));
403 }
353 404
354 String platformTag = makePlatformTag(persistentNotificationId, origin, t ag); 405 String platformTag = makePlatformTag(persistentNotificationId, origin, t ag);
355 mNotificationManager.notify(platformTag, PLATFORM_ID, notificationBuilde r.build()); 406 mNotificationManager.notify(platformTag, PLATFORM_ID, notificationBuilde r.build());
356 } 407 }
357 408
358 /** 409 /**
359 * Ensures the existance of an icon generator, which is created lazily. 410 * Ensures the existance of an icon generator, which is created lazily.
360 * 411 *
361 * @return The icon generator which can be used. 412 * @return The icon generator which can be used.
362 */ 413 */
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 origin, tag); 487 origin, tag);
437 } 488 }
438 489
439 private static native void nativeInitializeNotificationUIManager(); 490 private static native void nativeInitializeNotificationUIManager();
440 491
441 private native boolean nativeOnNotificationClicked(long nativeNotificationUI ManagerAndroid, 492 private native boolean nativeOnNotificationClicked(long nativeNotificationUI ManagerAndroid,
442 long persistentNotificationId, String origin, String tag); 493 long persistentNotificationId, String origin, String tag);
443 private native boolean nativeOnNotificationClosed(long nativeNotificationUIM anagerAndroid, 494 private native boolean nativeOnNotificationClosed(long nativeNotificationUIM anagerAndroid,
444 long persistentNotificationId, String origin, String tag); 495 long persistentNotificationId, String origin, String tag);
445 } 496 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698