Skip to content

Commit f479249

Browse files
TimoPtrCopilot
andauthored
Add support for OpenAssistSettings (#6534)
* Add support for OpenVoiceDeviceSettings * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Revert copilot changes * Adjust name of command to assist/settings * Adjust Ktlint --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 54e7b2e commit f479249

File tree

18 files changed

+170
-40
lines changed

18 files changed

+170
-40
lines changed

app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,10 @@ internal class FrontendViewModel @VisibleForTesting constructor(
321321
_navigationEvents.tryEmit(FrontendNavigationEvent.NavigateToSettings)
322322
}
323323

324+
is FrontendHandlerEvent.OpenAssistSettings -> {
325+
_navigationEvents.tryEmit(FrontendNavigationEvent.NavigateToAssistSettings)
326+
}
327+
324328
is FrontendHandlerEvent.ShowAssist -> {
325329
_navigationEvents.tryEmit(
326330
FrontendNavigationEvent.NavigateToAssist(

app/src/main/kotlin/io/homeassistant/companion/android/frontend/externalbus/incoming/IncomingExternalBusMessage.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,21 @@ data class ConnectionStatusPayload(val event: String) {
9090
data class ConfigGetMessage(override val id: Int? = null) : IncomingExternalBusMessage
9191

9292
/**
93-
* Message requesting the app's to open its settings.
93+
* Message requesting the app to open its settings.
9494
* No response is expected for this message
9595
*/
9696
@Serializable
9797
@SerialName("config_screen/show")
9898
data class OpenSettingsMessage(override val id: Int? = null) : IncomingExternalBusMessage
9999

100+
/**
101+
* Message requesting the app to open its assist settings
102+
* No response is expected for this message
103+
*/
104+
@Serializable
105+
@SerialName("assist/settings")
106+
data class OpenAssistSettingsMessage(override val id: Int? = null) : IncomingExternalBusMessage
107+
100108
/**
101109
* Message indicating that the frontend theme has changed.
102110
*

app/src/main/kotlin/io/homeassistant/companion/android/frontend/externalbus/outgoing/OutgoingExternalBusMessage.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ data class ConfigResult(
7272
val downloadFileSupported: Boolean = true,
7373
val appVersion: String,
7474
val hasEntityAddTo: Boolean = true,
75+
val hasAssistSettings: Boolean = true,
7576
) {
7677
companion object {
7778
fun create(

app/src/main/kotlin/io/homeassistant/companion/android/frontend/handler/FrontendHandlerEvent.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ sealed interface FrontendHandlerEvent {
3030
*/
3131
data object OpenSettings : FrontendHandlerEvent
3232

33+
/**
34+
* User tapped the companion app assist settings button in the frontend.
35+
*/
36+
data object OpenAssistSettings : FrontendHandlerEvent
37+
3338
/**
3439
* User triggered the voice assistant from the frontend.
3540
*/

app/src/main/kotlin/io/homeassistant/companion/android/frontend/handler/FrontendMessageHandler.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import io.homeassistant.companion.android.frontend.externalbus.incoming.ConfigGe
1313
import io.homeassistant.companion.android.frontend.externalbus.incoming.ConnectionStatusMessage
1414
import io.homeassistant.companion.android.frontend.externalbus.incoming.IncomingExternalBusMessage
1515
import io.homeassistant.companion.android.frontend.externalbus.incoming.OpenAssistMessage
16+
import io.homeassistant.companion.android.frontend.externalbus.incoming.OpenAssistSettingsMessage
1617
import io.homeassistant.companion.android.frontend.externalbus.incoming.OpenSettingsMessage
1718
import io.homeassistant.companion.android.frontend.externalbus.incoming.ThemeUpdateMessage
1819
import io.homeassistant.companion.android.frontend.externalbus.incoming.UnknownIncomingMessage
@@ -164,6 +165,11 @@ class FrontendMessageHandler @Inject constructor(
164165
FrontendHandlerEvent.OpenSettings
165166
}
166167

168+
is OpenAssistSettingsMessage -> {
169+
Timber.d("Open assist settings request received with id: ${message.id}")
170+
FrontendHandlerEvent.OpenAssistSettings
171+
}
172+
167173
is OpenAssistMessage -> {
168174
Timber.d("Open assist request received with id: ${message.id}")
169175
FrontendHandlerEvent.ShowAssist(

app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import io.homeassistant.companion.android.frontend.FrontendScreen
1818
import io.homeassistant.companion.android.frontend.FrontendViewModel
1919
import io.homeassistant.companion.android.frontend.FrontendViewState
2020
import io.homeassistant.companion.android.launch.HAStartDestinationRoute
21+
import io.homeassistant.companion.android.settings.SettingsActivity
2122
import io.homeassistant.companion.android.util.getActivity
2223
import io.homeassistant.companion.android.webview.WebViewActivity
2324
import kotlinx.coroutines.flow.SharedFlow
@@ -60,7 +61,7 @@ internal fun NavController.navigateToFrontend(
6061
internal fun NavGraphBuilder.frontendScreen(
6162
navController: NavController,
6263
onOpenExternalLink: suspend (Uri) -> Unit = {},
63-
onNavigateToSettings: () -> Unit,
64+
onNavigateToSettings: (SettingsActivity.Deeplink?) -> Unit,
6465
onSecurityLevelHelpClick: suspend () -> Unit,
6566
onOpenLocationSettings: () -> Unit,
6667
onConfigureHomeNetwork: (serverId: Int) -> Unit,
@@ -90,7 +91,7 @@ internal fun NavGraphBuilder.frontendScreen(
9091
viewModel = viewModel,
9192
onOpenExternalLink = onOpenExternalLink,
9293
onBlockInsecureHelpClick = onSecurityLevelHelpClick,
93-
onOpenSettings = onNavigateToSettings,
94+
onOpenSettings = { onNavigateToSettings(null) },
9495
onOpenLocationSettings = onOpenLocationSettings,
9596
onConfigureHomeNetwork = onConfigureHomeNetwork,
9697
onSecurityLevelHelpClick = onSecurityLevelHelpClick,
@@ -117,14 +118,18 @@ internal fun NavGraphBuilder.frontendScreen(
117118
@VisibleForTesting
118119
internal fun FrontendNavigationHandler(
119120
navigationEvents: SharedFlow<FrontendNavigationEvent>,
120-
onNavigateToSettings: () -> Unit,
121+
onNavigateToSettings: (SettingsActivity.Deeplink?) -> Unit,
121122
onNavigateToAssist: (serverId: Int, pipelineId: String?, startListening: Boolean) -> Unit,
122123
) {
123124
LaunchedEffect(Unit) {
124125
navigationEvents.collect { event ->
125126
when (event) {
126127
is FrontendNavigationEvent.NavigateToSettings -> {
127-
onNavigateToSettings()
128+
onNavigateToSettings(null)
129+
}
130+
131+
is FrontendNavigationEvent.NavigateToAssistSettings -> {
132+
onNavigateToSettings(SettingsActivity.Deeplink.AssistSettings)
128133
}
129134

130135
is FrontendNavigationEvent.NavigateToAssist -> {

app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigationEvent.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ sealed interface FrontendNavigationEvent {
1414
/** Navigate to the app settings screen */
1515
data object NavigateToSettings : FrontendNavigationEvent
1616

17+
/** Navigate to the assist settings screen */
18+
data object NavigateToAssistSettings : FrontendNavigationEvent
19+
1720
/** Navigate to the voice assistant (Assist) screen */
1821
data class NavigateToAssist(val serverId: Int, val pipelineId: String?, val startListening: Boolean) :
1922
FrontendNavigationEvent

app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsActivity.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import io.homeassistant.companion.android.R
2222
import io.homeassistant.companion.android.authenticator.Authenticator
2323
import io.homeassistant.companion.android.common.R as commonR
2424
import io.homeassistant.companion.android.common.data.servers.ServerManager
25+
import io.homeassistant.companion.android.settings.assist.AssistSettingsFragment
2526
import io.homeassistant.companion.android.settings.developer.DeveloperSettingsFragment
2627
import io.homeassistant.companion.android.settings.notification.NotificationHistoryFragment
2728
import io.homeassistant.companion.android.settings.qs.ManageTilesFragment
@@ -68,6 +69,7 @@ class SettingsActivity : BaseActivity() {
6869
data class QSTile(val tileId: String) : Deeplink
6970
data class Sensor(val sensorId: String) : Deeplink
7071
data object Websocket : Deeplink
72+
data object AssistSettings : Deeplink
7173
}
7274

7375
override fun onCreate(savedInstanceState: Bundle?) {
@@ -107,6 +109,7 @@ class SettingsActivity : BaseActivity() {
107109
Deeplink.NotificationHistory -> NotificationHistoryFragment::class.java
108110
is Deeplink.Sensor -> SensorDetailFragment::class.java
109111
is Deeplink.QSTile -> ManageTilesFragment::class.java
112+
Deeplink.AssistSettings -> AssistSettingsFragment::class.java
110113
else -> SettingsFragment::class.java
111114
},
112115
when (settingsNavigation) {
Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,11 @@
11
package io.homeassistant.companion.android.settings.navigation
22

33
import androidx.navigation.NavController
4-
import androidx.navigation.NavGraphBuilder
5-
import androidx.navigation.NavOptions
6-
import androidx.navigation.activity
74
import io.homeassistant.companion.android.settings.SettingsActivity
8-
import kotlinx.serialization.Serializable
95

10-
@Serializable
11-
internal data object SettingsRoute
12-
13-
internal fun NavGraphBuilder.settingsScreen() {
14-
activity<SettingsRoute> {
15-
activityClass = SettingsActivity::class
16-
}
17-
}
18-
19-
fun NavController.navigateToSettings(navOptions: NavOptions? = null) {
20-
navigate(SettingsRoute, navOptions)
6+
/**
7+
* Navigates to the [SettingsActivity], optionally deep linking to a specific settings screen.
8+
*/
9+
fun NavController.navigateToSettings(deeplink: SettingsActivity.Deeplink? = null) {
10+
context.startActivity(SettingsActivity.newInstance(context, deeplink))
2111
}

app/src/main/kotlin/io/homeassistant/companion/android/util/compose/HANavHost.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import io.homeassistant.companion.android.onboarding.sethomenetwork.navigation.n
2828
import io.homeassistant.companion.android.onboarding.sethomenetwork.navigation.setHomeNetworkScreen
2929
import io.homeassistant.companion.android.onboarding.wearOnboarding
3030
import io.homeassistant.companion.android.settings.navigation.navigateToSettings
31-
import io.homeassistant.companion.android.settings.navigation.settingsScreen
3231

3332
/**
3433
* Navigation host for the main application.
@@ -108,7 +107,7 @@ internal fun HANavHost(
108107
navController.navigateToUri(uri.toString(), onShowSnackbar)
109108
},
110109
onNavigateToSettings = {
111-
navController.navigateToSettings()
110+
navController.navigateToSettings(it)
112111
},
113112
onSecurityLevelHelpClick = {
114113
navController.navigateToUri(URL_SECURITY_LEVEL_DOCUMENTATION, onShowSnackbar)
@@ -129,7 +128,7 @@ internal fun HANavHost(
129128
navController.navigateToUri(URL_SECURITY_LEVEL_DOCUMENTATION, onShowSnackbar)
130129
},
131130
)
132-
settingsScreen()
131+
133132
if (isAutomotive) {
134133
carAppActivity(navController)
135134
}

0 commit comments

Comments
 (0)