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