Change how we enable/disable vibration for notifications.

fork-5.53.8
Cody Henthorne 2021-06-07 15:44:38 -04:00 zatwierdzone przez GitHub
rodzic 334cf669ed
commit 02f0301f25
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
1 zmienionych plików z 29 dodań i 9 usunięć

Wyświetl plik

@ -44,6 +44,8 @@ public class NotificationChannels {
private static final String TAG = Log.tag(NotificationChannels.class); private static final String TAG = Log.tag(NotificationChannels.class);
private static final long[] EMPTY_VIBRATION_PATTERN = new long[] { 0 };
private static class Version { private static class Version {
static final int MESSAGES_CATEGORY = 2; static final int MESSAGES_CATEGORY = 2;
static final int CALLS_PRIORITY_BUMP = 3; static final int CALLS_PRIORITY_BUMP = 3;
@ -183,7 +185,7 @@ public class NotificationChannels {
setLedPreference(channel, SignalStore.settings().getMessageLedColor()); setLedPreference(channel, SignalStore.settings().getMessageLedColor());
channel.setGroup(CATEGORY_MESSAGES); channel.setGroup(CATEGORY_MESSAGES);
channel.enableVibration(vibrationEnabled); setVibrationEnabled(channel, vibrationEnabled);
if (messageSound != null) { if (messageSound != null) {
channel.setSound(messageSound, new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN) channel.setSound(messageSound, new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
@ -358,7 +360,7 @@ public class NotificationChannels {
} }
Log.i(TAG, "Updating default vibrate with value: " + enabled); Log.i(TAG, "Updating default vibrate with value: " + enabled);
updateMessageChannel(context, channel -> channel.enableVibration(enabled)); updateMessageChannel(context, channel -> setVibrationEnabled(channel, enabled));
} }
/** /**
@ -376,15 +378,34 @@ public class NotificationChannels {
boolean enabled = vibrateState == VibrateState.DEFAULT ? getMessageVibrate(context) : vibrateState == VibrateState.ENABLED; boolean enabled = vibrateState == VibrateState.DEFAULT ? getMessageVibrate(context) : vibrateState == VibrateState.ENABLED;
String newChannelId = generateChannelIdFor(recipient); String newChannelId = generateChannelIdFor(recipient);
boolean success = updateExistingChannel(ServiceUtil.getNotificationManager(context),
recipient.getNotificationChannel(), boolean success = updateExistingChannel(ServiceUtil.getNotificationManager(context),
newChannelId, recipient.getNotificationChannel(),
channel -> channel.enableVibration(enabled)); newChannelId,
channel -> setVibrationEnabled(channel, enabled));
DatabaseFactory.getRecipientDatabase(context).setNotificationChannel(recipient.getId(), success ? newChannelId : null); DatabaseFactory.getRecipientDatabase(context).setNotificationChannel(recipient.getId(), success ? newChannelId : null);
ensureCustomChannelConsistency(context); ensureCustomChannelConsistency(context);
} }
/**
* Some devices don't seem to respect the vibration flag on a notification channel. To disable, we
* instead set the pattern to be empty.
*
* Note: Calling {@link NotificationChannel#setVibrationPattern(long[])} with null will clear the empty
* vibration pattern (if any) but also set the enable vibration flag to false, hence the two steps to enable.
* Likewise, setting the pattern to any non-zero length array will set enable vibration flag to true.
*/
@TargetApi(26)
private static void setVibrationEnabled(@NonNull NotificationChannel channel, boolean enabled) {
if (enabled) {
channel.setVibrationPattern(null);
channel.enableVibration(true);
} else {
channel.setVibrationPattern(EMPTY_VIBRATION_PATTERN);
}
}
/** /**
* Whether or not the default messages notification channel is enabled. Note that "enabled" just * Whether or not the default messages notification channel is enabled. Note that "enabled" just
* means receiving notifications in some capacity -- a user could have it enabled, but set it to a * means receiving notifications in some capacity -- a user could have it enabled, but set it to a
@ -524,7 +545,7 @@ public class NotificationChannels {
NotificationChannel joinEvents = new NotificationChannel(JOIN_EVENTS, context.getString(R.string.NotificationChannel_contact_joined_signal), NotificationManager.IMPORTANCE_DEFAULT); NotificationChannel joinEvents = new NotificationChannel(JOIN_EVENTS, context.getString(R.string.NotificationChannel_contact_joined_signal), NotificationManager.IMPORTANCE_DEFAULT);
messages.setGroup(CATEGORY_MESSAGES); messages.setGroup(CATEGORY_MESSAGES);
messages.enableVibration(SignalStore.settings().isMessageVibrateEnabled()); setVibrationEnabled(messages, SignalStore.settings().isMessageVibrateEnabled());
messages.setSound(SignalStore.settings().getMessageNotificationSound(), getRingtoneAudioAttributes()); messages.setSound(SignalStore.settings().getMessageNotificationSound(), getRingtoneAudioAttributes());
setLedPreference(messages, SignalStore.settings().getMessageLedColor()); setLedPreference(messages, SignalStore.settings().getMessageLedColor());
@ -532,8 +553,7 @@ public class NotificationChannels {
backups.setShowBadge(false); backups.setShowBadge(false);
lockedStatus.setShowBadge(false); lockedStatus.setShowBadge(false);
other.setShowBadge(false); other.setShowBadge(false);
other.setVibrationPattern(new long[]{0}); setVibrationEnabled(other, false);
other.enableVibration(true);
voiceNotes.setShowBadge(false); voiceNotes.setShowBadge(false);
joinEvents.setShowBadge(false); joinEvents.setShowBadge(false);