mirror of
https://github.com/home-assistant/android
synced 2024-07-22 10:54:12 +00:00
Add deeplinks to Wear OS sensor sync notifications (#3105)
Add deeplinks to Wear sensor sync notifications
This commit is contained in:
parent
fd7a593c41
commit
442cb25e59
|
@ -2,6 +2,7 @@ package io.homeassistant.companion.android.sensors
|
|||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.NotificationManager
|
||||
import android.app.PendingIntent
|
||||
import android.bluetooth.BluetoothAdapter
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
|
@ -99,11 +100,17 @@ class SensorReceiver : SensorReceiverBase() {
|
|||
WifiManager.WIFI_STATE_CHANGED_ACTION to NetworkSensorManager.wifiState.id,
|
||||
)
|
||||
|
||||
override fun getSensorSettingsIntent(context: Context, id: String): Intent? {
|
||||
return SettingsActivity.newInstance(context).apply {
|
||||
putExtra("fragment", "sensors/$id")
|
||||
override fun getSensorSettingsIntent(
|
||||
context: Context,
|
||||
sensorId: String,
|
||||
sensorManagerId: String,
|
||||
notificationId: Int
|
||||
): PendingIntent? {
|
||||
val intent = SettingsActivity.newInstance(context).apply {
|
||||
putExtra("fragment", "sensors/$sensorId")
|
||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
|
||||
}
|
||||
return PendingIntent.getActivity(context, notificationId, intent, PendingIntent.FLAG_IMMUTABLE)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,7 +69,12 @@ abstract class SensorReceiverBase : BroadcastReceiver() {
|
|||
|
||||
protected abstract val skippableActions: Map<String, String>
|
||||
|
||||
protected abstract fun getSensorSettingsIntent(context: Context, id: String): Intent?
|
||||
protected abstract fun getSensorSettingsIntent(
|
||||
context: Context,
|
||||
sensorId: String,
|
||||
sensorManagerId: String,
|
||||
notificationId: Int
|
||||
): PendingIntent?
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
Log.d(tag, "Received intent: ${intent.action}")
|
||||
|
@ -244,9 +249,7 @@ abstract class SensorReceiverBase : BroadcastReceiver() {
|
|||
context.getSystemService<NotificationManager>()?.let { notificationManager ->
|
||||
createNotificationChannel(context)
|
||||
val notificationId = "$sensorCoreSyncChannel-${basicSensor.id}".hashCode()
|
||||
val notificationIntent = getSensorSettingsIntent(context, basicSensor.id)?.let {
|
||||
PendingIntent.getActivity(context, notificationId, it, PendingIntent.FLAG_IMMUTABLE)
|
||||
}
|
||||
val notificationIntent = getSensorSettingsIntent(context, basicSensor.id, manager.id(), notificationId)
|
||||
val notification = NotificationCompat.Builder(context, sensorCoreSyncChannel)
|
||||
.setSmallIcon(R.drawable.ic_stat_ic_notification)
|
||||
.setContentTitle(context.getString(basicSensor.name))
|
||||
|
|
|
@ -8,6 +8,7 @@ import androidx.compose.runtime.setValue
|
|||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.navigation.NavType
|
||||
import androidx.navigation.navArgument
|
||||
import androidx.navigation.navDeepLink
|
||||
import androidx.wear.compose.navigation.SwipeDismissableNavHost
|
||||
import androidx.wear.compose.navigation.composable
|
||||
import androidx.wear.compose.navigation.rememberSwipeDismissableNavController
|
||||
|
@ -33,6 +34,8 @@ private const val SCREEN_SELECT_TILE_SHORTCUT = "select_tile_shortcut"
|
|||
private const val SCREEN_SET_TILE_TEMPLATE = "set_tile_template"
|
||||
private const val SCREEN_SET_TILE_TEMPLATE_REFRESH_INTERVAL = "set_tile_template_refresh_interval"
|
||||
|
||||
const val DEEPLINK_SENSOR_MANAGER = "ha_wear://$SCREEN_SINGLE_SENSOR_MANAGER"
|
||||
|
||||
@Composable
|
||||
fun LoadHomePage(
|
||||
mainViewModel: MainViewModel
|
||||
|
@ -215,6 +218,9 @@ fun LoadHomePage(
|
|||
navArgument(name = ARG_SCREEN_SENSOR_MANAGER_ID) {
|
||||
type = NavType.StringType
|
||||
}
|
||||
),
|
||||
deepLinks = listOf(
|
||||
navDeepLink { uriPattern = "$DEEPLINK_SENSOR_MANAGER/{$ARG_SCREEN_SENSOR_MANAGER_ID}" }
|
||||
)
|
||||
) { backStackEntry ->
|
||||
val sensorManagerId =
|
||||
|
|
|
@ -2,12 +2,15 @@ package io.homeassistant.companion.android.sensors
|
|||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.NotificationManager
|
||||
import android.app.PendingIntent
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.media.AudioManager
|
||||
import android.net.wifi.WifiManager
|
||||
import android.os.Build
|
||||
import android.os.PowerManager
|
||||
import androidx.core.app.TaskStackBuilder
|
||||
import androidx.core.net.toUri
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.BuildConfig
|
||||
import io.homeassistant.companion.android.common.sensors.AudioSensorManager
|
||||
|
@ -20,6 +23,8 @@ import io.homeassistant.companion.android.common.sensors.PowerSensorManager
|
|||
import io.homeassistant.companion.android.common.sensors.SensorManager
|
||||
import io.homeassistant.companion.android.common.sensors.SensorReceiverBase
|
||||
import io.homeassistant.companion.android.common.sensors.StepsSensorManager
|
||||
import io.homeassistant.companion.android.home.HomeActivity
|
||||
import io.homeassistant.companion.android.home.views.DEEPLINK_SENSOR_MANAGER
|
||||
|
||||
@AndroidEntryPoint
|
||||
class SensorReceiver : SensorReceiverBase() {
|
||||
|
@ -83,5 +88,21 @@ class SensorReceiver : SensorReceiverBase() {
|
|||
"com.google.android.clockwork.actions.WET_MODE_ENDED" to WetModeSensorManager.wetModeSensor.id
|
||||
)
|
||||
|
||||
override fun getSensorSettingsIntent(context: Context, id: String): Intent? = null
|
||||
override fun getSensorSettingsIntent(
|
||||
context: Context,
|
||||
sensorId: String,
|
||||
sensorManagerId: String,
|
||||
notificationId: Int
|
||||
): PendingIntent? {
|
||||
val intent = Intent(
|
||||
Intent.ACTION_VIEW,
|
||||
"$DEEPLINK_SENSOR_MANAGER/$sensorManagerId".toUri(),
|
||||
context,
|
||||
HomeActivity::class.java
|
||||
)
|
||||
return TaskStackBuilder.create(context).run {
|
||||
addNextIntentWithParentStack(intent)
|
||||
getPendingIntent(notificationId, PendingIntent.FLAG_UPDATE_CURRENT)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue