mirror of
https://github.com/home-assistant/android
synced 2024-07-05 17:18:55 +00:00
Add clear_notification support to Wear OS (#3956)
- Move the clear_notification command to common extensions and add support in the Wear OS app
This commit is contained in:
parent
a94c90e5aa
commit
cda25479d6
|
@ -49,6 +49,7 @@ import io.homeassistant.companion.android.common.data.prefs.PrefsRepository
|
|||
import io.homeassistant.companion.android.common.data.servers.ServerManager
|
||||
import io.homeassistant.companion.android.common.notifications.DeviceCommandData
|
||||
import io.homeassistant.companion.android.common.notifications.NotificationData
|
||||
import io.homeassistant.companion.android.common.notifications.clearNotification
|
||||
import io.homeassistant.companion.android.common.notifications.commandBeaconMonitor
|
||||
import io.homeassistant.companion.android.common.notifications.commandBleTransmitter
|
||||
import io.homeassistant.companion.android.common.notifications.createChannelID
|
||||
|
@ -61,7 +62,6 @@ import io.homeassistant.companion.android.common.notifications.parseColor
|
|||
import io.homeassistant.companion.android.common.notifications.parseVibrationPattern
|
||||
import io.homeassistant.companion.android.common.notifications.prepareText
|
||||
import io.homeassistant.companion.android.common.util.TextToSpeechData
|
||||
import io.homeassistant.companion.android.common.util.cancel
|
||||
import io.homeassistant.companion.android.common.util.cancelGroupIfNeeded
|
||||
import io.homeassistant.companion.android.common.util.getActiveNotification
|
||||
import io.homeassistant.companion.android.common.util.speakText
|
||||
|
@ -145,7 +145,6 @@ class MessagingManager @Inject constructor(
|
|||
|
||||
// special action constants
|
||||
const val REQUEST_LOCATION_UPDATE = "request_location_update"
|
||||
const val CLEAR_NOTIFICATION = "clear_notification"
|
||||
const val REMOVE_CHANNEL = "remove_channel"
|
||||
const val COMMAND_DND = "command_dnd"
|
||||
const val COMMAND_RINGER_MODE = "command_ringer_mode"
|
||||
|
@ -309,9 +308,8 @@ class MessagingManager @Inject constructor(
|
|||
Log.d(TAG, "Request location update")
|
||||
requestAccurateLocationUpdate()
|
||||
}
|
||||
jsonData[NotificationData.MESSAGE] == CLEAR_NOTIFICATION && !jsonData["tag"].isNullOrBlank() -> {
|
||||
Log.d(TAG, "Clearing notification with tag: ${jsonData["tag"]}")
|
||||
clearNotification(jsonData["tag"]!!)
|
||||
jsonData[NotificationData.MESSAGE] == NotificationData.CLEAR_NOTIFICATION && !jsonData["tag"].isNullOrBlank() -> {
|
||||
clearNotification(context, jsonData["tag"]!!)
|
||||
}
|
||||
jsonData[NotificationData.MESSAGE] == REMOVE_CHANNEL && !jsonData[NotificationData.CHANNEL].isNullOrBlank() -> {
|
||||
Log.d(TAG, "Removing Notification channel ${jsonData[NotificationData.CHANNEL]}")
|
||||
|
@ -545,15 +543,6 @@ class MessagingManager @Inject constructor(
|
|||
context.sendBroadcast(intent)
|
||||
}
|
||||
|
||||
private fun clearNotification(tag: String) {
|
||||
val notificationManagerCompat = NotificationManagerCompat.from(context)
|
||||
|
||||
val messageId = tag.hashCode()
|
||||
|
||||
// Clear notification
|
||||
notificationManagerCompat.cancel(tag, messageId, true)
|
||||
}
|
||||
|
||||
private fun removeNotificationChannel(channelName: String) {
|
||||
val notificationManagerCompat = NotificationManagerCompat.from(context)
|
||||
|
||||
|
@ -886,7 +875,6 @@ class MessagingManager @Inject constructor(
|
|||
|
||||
/**
|
||||
* Create and show a simple notification containing the received FCM message.
|
||||
*
|
||||
*/
|
||||
private suspend fun sendNotification(data: Map<String, String>, id: Long? = null, received: Long? = null) {
|
||||
val notificationManagerCompat = NotificationManagerCompat.from(context)
|
||||
|
|
|
@ -22,6 +22,7 @@ import com.mikepenz.iconics.utils.colorFilter
|
|||
import com.mikepenz.iconics.utils.toAndroidIconCompat
|
||||
import com.vdurmont.emoji.EmojiParser
|
||||
import io.homeassistant.companion.android.common.R
|
||||
import io.homeassistant.companion.android.common.util.cancel
|
||||
import io.homeassistant.companion.android.common.util.generalChannel
|
||||
import java.util.Locale
|
||||
|
||||
|
@ -51,6 +52,9 @@ object NotificationData {
|
|||
|
||||
const val MEDIA_STREAM = "media_stream"
|
||||
val ALARM_STREAMS = listOf(ALARM_STREAM, ALARM_STREAM_MAX)
|
||||
|
||||
// special action constants
|
||||
const val CLEAR_NOTIFICATION = "clear_notification"
|
||||
}
|
||||
|
||||
fun createChannelID(
|
||||
|
@ -279,3 +283,10 @@ fun handleText(
|
|||
builder.setStyle(NotificationCompat.BigTextStyle().bigText(text))
|
||||
}
|
||||
}
|
||||
|
||||
fun clearNotification(context: Context, tag: String) {
|
||||
Log.d(NotificationData.TAG, "Clearing notification with tag: $tag")
|
||||
val notificationManagerCompat = NotificationManagerCompat.from(context)
|
||||
val messageId = tag.hashCode()
|
||||
notificationManagerCompat.cancel(tag, messageId, true)
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext
|
|||
import io.homeassistant.companion.android.common.data.servers.ServerManager
|
||||
import io.homeassistant.companion.android.common.notifications.DeviceCommandData
|
||||
import io.homeassistant.companion.android.common.notifications.NotificationData
|
||||
import io.homeassistant.companion.android.common.notifications.clearNotification
|
||||
import io.homeassistant.companion.android.common.notifications.commandBeaconMonitor
|
||||
import io.homeassistant.companion.android.common.notifications.commandBleTransmitter
|
||||
import io.homeassistant.companion.android.common.notifications.getGroupNotificationBuilder
|
||||
|
@ -64,6 +65,9 @@ class MessagingManager @Inject constructor(
|
|||
val allowCommands = serverManager.integrationRepository(serverId).isTrusted()
|
||||
val message = notificationData[NotificationData.MESSAGE]
|
||||
when {
|
||||
message == NotificationData.CLEAR_NOTIFICATION && !notificationData["tag"].isNullOrBlank() -> {
|
||||
clearNotification(context, notificationData["tag"]!!)
|
||||
}
|
||||
message == DeviceCommandData.COMMAND_BEACON_MONITOR && allowCommands -> {
|
||||
if (!commandBeaconMonitor(context, notificationData)) {
|
||||
sendNotification(notificationData, now)
|
||||
|
|
Loading…
Reference in New Issue
Block a user