diff --git a/app/src/main/java/eu/darken/capod/common/debug/recording/ui/RecorderActivity.kt b/app/src/main/java/eu/darken/capod/common/debug/recording/ui/RecorderActivity.kt index 0fa3b331..efcb0ad3 100644 --- a/app/src/main/java/eu/darken/capod/common/debug/recording/ui/RecorderActivity.kt +++ b/app/src/main/java/eu/darken/capod/common/debug/recording/ui/RecorderActivity.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.lifecycle.compose.LifecycleResumeEffect import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.compose.ui.graphics.luminance import androidx.compose.ui.graphics.toArgb @@ -56,15 +57,47 @@ class RecorderActivity : Activity2() { insetsController.isAppearanceLightNavigationBars = useDarkIcons } + var hasShared by remember { mutableStateOf(false) } + LaunchedEffect(Unit) { vm.events.collect { event -> when (event) { - is RecorderActivityVM.Event.ShareIntent -> startActivity(event.intent) + is RecorderActivityVM.Event.ShareIntent -> { + hasShared = true + startActivity(event.intent) + } is RecorderActivityVM.Event.Finish -> finish() } } } + var showSentConfirm by remember { mutableStateOf(false) } + + LifecycleResumeEffect(hasShared) { + if (hasShared) { + showSentConfirm = true + hasShared = false + } + onPauseOrDispose {} + } + + if (showSentConfirm) { + LaunchedEffect(Unit) { + MaterialAlertDialogBuilder(this@RecorderActivity).apply { + setTitle(R.string.support_debuglog_sent_title) + setMessage(R.string.support_debuglog_sent_message) + setPositiveButton(R.string.general_done_action) { _, _ -> + showSentConfirm = false + vm.discard() + } + setNegativeButton(R.string.general_cancel_action) { _, _ -> + showSentConfirm = false + } + setOnCancelListener { showSentConfirm = false } + }.show() + } + } + var showDeleteConfirm by remember { mutableStateOf(false) } if (showDeleteConfirm) { diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/support/contactform/ContactFormScreen.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/support/contactform/ContactFormScreen.kt index ea25e312..e096ddb6 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/support/contactform/ContactFormScreen.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/support/contactform/ContactFormScreen.kt @@ -69,13 +69,37 @@ fun ContactFormScreenHost(vm: ContactFormViewModel = hiltViewModel()) { ErrorEventHandler(vm) NavigationEventHandler(vm) - LifecycleResumeEffect(Unit) { + val context = LocalContext.current + val snackbarHostState = remember { SnackbarHostState() } + + var hasSentEmail by remember { mutableStateOf(false) } + var showSentConfirm by remember { mutableStateOf(false) } + + LifecycleResumeEffect(hasSentEmail) { vm.refreshLogSessions() + if (hasSentEmail) { + showSentConfirm = true + hasSentEmail = false + } onPauseOrDispose {} } - val context = LocalContext.current - val snackbarHostState = remember { SnackbarHostState() } + if (showSentConfirm) { + LaunchedEffect(Unit) { + MaterialAlertDialogBuilder(context).apply { + setTitle(R.string.support_contact_sent_title) + setMessage(R.string.support_contact_sent_message) + setPositiveButton(R.string.general_done_action) { _, _ -> + showSentConfirm = false + vm.confirmSent() + } + setNegativeButton(R.string.general_cancel_action) { _, _ -> + showSentConfirm = false + } + setOnCancelListener { showSentConfirm = false } + }.show() + } + } var showShortRecordingWarning by remember { mutableStateOf(false) } @@ -84,8 +108,10 @@ fun ContactFormScreenHost(vm: ContactFormViewModel = hiltViewModel()) { when (event) { is ContactFormViewModel.Event.OpenEmail -> { try { + hasSentEmail = true context.startActivity(event.intent) } catch (e: ActivityNotFoundException) { + hasSentEmail = false snackbarHostState.showSnackbar( context.getString(R.string.support_contact_no_email_app) ) diff --git a/app/src/main/java/eu/darken/capod/main/ui/settings/support/contactform/ContactFormViewModel.kt b/app/src/main/java/eu/darken/capod/main/ui/settings/support/contactform/ContactFormViewModel.kt index ebe207cf..fcf6272b 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/settings/support/contactform/ContactFormViewModel.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/settings/support/contactform/ContactFormViewModel.kt @@ -151,6 +151,15 @@ class ContactFormViewModel @Inject constructor( if (result != null) autoSelectSessionId = result.sessionId } + fun confirmSent() = launch { + val selectedId = stater.value().selectedSessionId + if (selectedId != null) { + log(TAG) { "confirmSent() deleting session $selectedId" } + sessionManager.deleteSession(selectedId) + } + navUp() + } + fun send() = launch { val currentState = stater.value() if (!currentState.canSend) return@launch diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3a2d5f6f..99c1d3be 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -399,4 +399,10 @@ Delete debug log? This debug log will be permanently deleted. + + Log sent? + Was the debug log sent successfully? The log will be deleted. + Email sent? + Was the email sent successfully? The attached debug log will be deleted. + \ No newline at end of file