From 3c0f1a8dce0e746ab78bac9510862acafa33422e Mon Sep 17 00:00:00 2001 From: Daniel Shokouhi Date: Thu, 8 Oct 2020 08:20:41 -0700 Subject: [PATCH] Allow notifications to use the alarm stream (#1019) * Allow notifications to use the alarm stream * Review comment --- .../android/notifications/MessagingService.kt | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/app/src/full/java/io/homeassistant/companion/android/notifications/MessagingService.kt b/app/src/full/java/io/homeassistant/companion/android/notifications/MessagingService.kt index 94a74e308..028a08a97 100644 --- a/app/src/full/java/io/homeassistant/companion/android/notifications/MessagingService.kt +++ b/app/src/full/java/io/homeassistant/companion/android/notifications/MessagingService.kt @@ -1,5 +1,6 @@ package io.homeassistant.companion.android.notifications +import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent @@ -7,6 +8,8 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Color +import android.media.AudioAttributes +import android.media.AudioManager import android.media.RingtoneManager import android.os.Build import android.speech.tts.TextToSpeech @@ -206,7 +209,8 @@ class MessagingService : FirebaseMessagingService() { val notificationBuilder = NotificationCompat.Builder(this, channelId) .setSmallIcon(R.drawable.ic_stat_ic_notification) - .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) + + handleSound(notificationBuilder, data) handlePersistent(notificationBuilder, tag, data) @@ -329,6 +333,18 @@ class MessagingService : FirebaseMessagingService() { return groupNotificationBuilder } + private fun handleSound( + builder: NotificationCompat.Builder, + data: Map + ) { + if (data["channel"] == "alarm_stream") { + builder.setCategory(Notification.CATEGORY_ALARM) + builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM), AudioManager.STREAM_ALARM) + } else { + builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) + } + } + private fun handleColor( builder: NotificationCompat.Builder, data: Map @@ -595,6 +611,9 @@ class MessagingService : FirebaseMessagingService() { handleImportance(data) ) + if (channelName == "alarm_stream") + handleChannelSound(channel) + setChannelLedColor(data, channel) setChannelVibrationPattern(data, channel) notificationManagerCompat.createNotificationChannel(channel) @@ -628,6 +647,17 @@ class MessagingService : FirebaseMessagingService() { } } + @RequiresApi(Build.VERSION_CODES.O) + private fun handleChannelSound( + channel: NotificationChannel + ) { + val audioAttributes = AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_ALARM) + .build() + channel.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM), audioAttributes) + } + private fun parseVibrationPattern( vibrationPattern: String? ): LongArray {