| Index: chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java
|
| index fe71f72f5bb93f1bde5d77994f9734df79a08692..5c20a3cd205fbad809b1d98858cb7d211649be22 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java
|
| @@ -30,6 +30,7 @@
|
| import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.ChromeSwitches;
|
| import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
|
| +import org.chromium.chrome.browser.preferences.PrefServiceBridge;
|
| import org.chromium.chrome.browser.preferences.Preferences;
|
| import org.chromium.chrome.browser.preferences.PreferencesLauncher;
|
| import org.chromium.chrome.browser.preferences.website.SingleCategoryPreferences;
|
| @@ -70,6 +71,8 @@
|
| // uniqueness of pending intents when necessary.
|
| private static final int PENDING_INTENT_REQUEST_CODE = 0;
|
|
|
| + private static final int[] EMPTY_VIBRATION_PATTERN = new int[0];
|
| +
|
| private static NotificationPlatformBridge sInstance;
|
| private static NotificationManagerProxy sNotificationManagerOverride;
|
|
|
| @@ -411,25 +414,26 @@ static String getOriginFromTag(@Nullable String tag) {
|
| }
|
|
|
| /**
|
| - * Generates the notfiication defaults from vibrationPattern's size and silent.
|
| + * Generates the notification defaults from vibrationPattern's size and silent.
|
| *
|
| * Use the system's default ringtone, vibration and indicator lights unless the notification
|
| * has been marked as being silent.
|
| * If a vibration pattern is set, the notification should use the provided pattern
|
| - * rather than the defaulting to system settings.
|
| + * rather than defaulting to the system settings.
|
| *
|
| * @param vibrationPatternLength Vibration pattern's size for the Notification.
|
| * @param silent Whether the default sound, vibration and lights should be suppressed.
|
| + * @param vibrateEnabled Whether vibration is enabled in preferences.
|
| * @return The generated notification's default value.
|
| */
|
| @VisibleForTesting
|
| - static int makeDefaults(int vibrationPatternLength, boolean silent) {
|
| + static int makeDefaults(int vibrationPatternLength, boolean silent, boolean vibrateEnabled) {
|
| assert !silent || vibrationPatternLength == 0;
|
|
|
| if (silent) return 0;
|
|
|
| int defaults = Notification.DEFAULT_ALL;
|
| - if (vibrationPatternLength > 0) {
|
| + if (vibrationPatternLength > 0 || !vibrateEnabled) {
|
| defaults &= ~Notification.DEFAULT_VIBRATE;
|
| }
|
| return defaults;
|
| @@ -552,10 +556,16 @@ private void displayNotification(long persistentNotificationId, String origin, S
|
| // one, so add it after the other actions.
|
| notificationBuilder.addSettingsAction(settingsIconId, settingsTitle, pendingSettingsIntent);
|
|
|
| - notificationBuilder.setDefaults(makeDefaults(vibrationPattern.length, silent));
|
| - if (vibrationPattern.length > 0) {
|
| - notificationBuilder.setVibrate(makeVibrationPattern(vibrationPattern));
|
| + // The Android framework applies a fallback vibration pattern for the sound when the device
|
| + // is in vibrate mode, there is no custom pattern, and the vibration default has been
|
| + // disabled. To truly prevent vibration, provide a custom empty pattern.
|
| + boolean vibrateEnabled = PrefServiceBridge.getInstance().isNotificationsVibrateEnabled();
|
| + if (!vibrateEnabled) {
|
| + vibrationPattern = EMPTY_VIBRATION_PATTERN;
|
| }
|
| + notificationBuilder.setDefaults(
|
| + makeDefaults(vibrationPattern.length, silent, vibrateEnabled));
|
| + notificationBuilder.setVibrate(makeVibrationPattern(vibrationPattern));
|
|
|
| String platformTag = makePlatformTag(persistentNotificationId, origin, tag);
|
| if (webApkPackage.isEmpty()) {
|
|
|