diff --git a/app/src/main/java/io/homeassistant/companion/android/assist/AssistActivity.kt b/app/src/main/java/io/homeassistant/companion/android/assist/AssistActivity.kt index f0d7dd43478..54037902656 100644 --- a/app/src/main/java/io/homeassistant/companion/android/assist/AssistActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/assist/AssistActivity.kt @@ -23,6 +23,7 @@ import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.BaseActivity import io.homeassistant.companion.android.assist.ui.AssistSheetView import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.webview.WebViewActivity @AndroidEntryPoint class AssistActivity : BaseActivity() { @@ -90,6 +91,8 @@ class AssistActivity : BaseActivity() { ) } + val fromFrontend = intent.getBooleanExtra(EXTRA_FROM_FRONTEND, false) + WindowCompat.setDecorFitsSystemWindows(window, false) setContent { MdcTheme { @@ -103,9 +106,25 @@ class AssistActivity : BaseActivity() { conversation = viewModel.conversation, pipelines = viewModel.pipelines, inputMode = viewModel.inputMode, - fromFrontend = intent.getBooleanExtra(EXTRA_FROM_FRONTEND, false), + fromFrontend = fromFrontend, currentPipeline = viewModel.currentPipeline, onSelectPipeline = viewModel::changePipeline, + onManagePipelines = + if (fromFrontend && viewModel.userCanManagePipelines()) { + { + startActivity( + WebViewActivity.newInstance( + this, + "config/voice-assistants/assistants" + ).apply { + flags += Intent.FLAG_ACTIVITY_NEW_TASK // Delivers data in onNewIntent + } + ) + finish() + } + } else { + null + }, onChangeInput = viewModel::onChangeInput, onTextInput = viewModel::onTextInput, onMicrophoneInput = viewModel::onMicrophoneInput, diff --git a/app/src/main/java/io/homeassistant/companion/android/assist/AssistViewModel.kt b/app/src/main/java/io/homeassistant/companion/android/assist/AssistViewModel.kt index 6c63f3a1e2a..022ba184be8 100644 --- a/app/src/main/java/io/homeassistant/companion/android/assist/AssistViewModel.kt +++ b/app/src/main/java/io/homeassistant/companion/android/assist/AssistViewModel.kt @@ -152,6 +152,8 @@ class AssistViewModel @Inject constructor( } } + fun userCanManagePipelines(): Boolean = serverManager.getServer()?.user?.isAdmin == true + fun changePipeline(serverId: Int, id: String) = viewModelScope.launch { if (serverId == selectedServerId && id == selectedPipeline?.id) return@launch diff --git a/app/src/main/java/io/homeassistant/companion/android/assist/ui/AssistSheetView.kt b/app/src/main/java/io/homeassistant/companion/android/assist/ui/AssistSheetView.kt index 0be573b7e91..082278c3e3a 100644 --- a/app/src/main/java/io/homeassistant/companion/android/assist/ui/AssistSheetView.kt +++ b/app/src/main/java/io/homeassistant/companion/android/assist/ui/AssistSheetView.kt @@ -34,6 +34,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.ButtonDefaults +import androidx.compose.material.Divider import androidx.compose.material.DropdownMenu import androidx.compose.material.DropdownMenuItem import androidx.compose.material.ExperimentalMaterialApi @@ -91,6 +92,7 @@ fun AssistSheetView( currentPipeline: AssistUiPipeline?, fromFrontend: Boolean, onSelectPipeline: (Int, String) -> Unit, + onManagePipelines: (() -> Unit)?, onChangeInput: () -> Unit, onTextInput: (String) -> Unit, onMicrophoneInput: () -> Unit, @@ -133,7 +135,8 @@ fun AssistSheetView( pipelines = pipelines, currentPipeline = currentPipeline, fromFrontend = fromFrontend, - onSelectPipeline = onSelectPipeline + onSelectPipeline = onSelectPipeline, + onManagePipelines = onManagePipelines ) LazyColumn( state = lazyListState, @@ -169,7 +172,8 @@ fun AssistSheetHeader( pipelines: List, currentPipeline: AssistUiPipeline?, fromFrontend: Boolean, - onSelectPipeline: (Int, String) -> Unit + onSelectPipeline: (Int, String) -> Unit, + onManagePipelines: (() -> Unit)? ) = Column(verticalArrangement = Arrangement.Center) { Text( text = stringResource(if (fromFrontend) commonR.string.assist else commonR.string.app_name), @@ -219,6 +223,12 @@ fun AssistSheetHeader( ) } } + if (onManagePipelines != null) { + Divider() + DropdownMenuItem(onClick = { onManagePipelines() }) { + Text(stringResource(commonR.string.assist_manage_pipelines)) + } + } } } } diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 19c7a68aff3..0f8d393b444 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -1065,6 +1065,7 @@ Oops, an error has occurred How can I assist? Log in to Home Assistant to start using Assist + Manage assistants To use Assist with your voice, allow Home Assistant to access the microphone Send text Start listening