From 60fc16f2c431290f65b383b3b48da448fb2cf323 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Fri, 27 Oct 2023 16:44:53 +0200 Subject: [PATCH] current stand --- app/src/main/AndroidManifest.xml | 10 ++ .../myzel394/alibi/receivers/BootReceiver.kt | 43 ++++++++ .../alibi/services/RecorderService.kt | 4 + .../SettingsScreen/atoms/BootBehaviorTile.kt | 101 ++++++++++++++++++ app/src/main/res/values/strings.xml | 2 + 5 files changed, 160 insertions(+) create mode 100644 app/src/main/java/app/myzel394/alibi/receivers/BootReceiver.kt create mode 100644 app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/BootBehaviorTile.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8f67b7c..3df9a3d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/app/myzel394/alibi/receivers/BootReceiver.kt b/app/src/main/java/app/myzel394/alibi/receivers/BootReceiver.kt new file mode 100644 index 0000000..d413458 --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/receivers/BootReceiver.kt @@ -0,0 +1,43 @@ +package app.myzel394.alibi.receivers + +import android.content.BroadcastReceiver +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.ServiceConnection +import android.os.IBinder +import androidx.core.content.ContextCompat +import app.myzel394.alibi.services.AudioRecorderService +import app.myzel394.alibi.services.RecorderService +import app.myzel394.alibi.ui.enums.Screen +import app.myzel394.alibi.ui.models.AudioRecorderModel + +class BootReceiver : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + println("Received new intent: ${intent?.action}") + + if (intent?.action == Intent.ACTION_BOOT_COMPLETED) { + println("Starting service") + + val connection = object : ServiceConnection { + override fun onServiceConnected(className: ComponentName, service: IBinder) { + ((service as RecorderService.RecorderBinder).getService() as AudioRecorderService).also { recorder -> + recorder.startRecording() + } + } + + override fun onServiceDisconnected(arg0: ComponentName) { + } + } + + val intent = Intent(context, AudioRecorderService::class.java).apply { + action = "initStart" + } + println("Starting service checking context") + if (context != null) { + println("Starting service with context") + ContextCompat.startForegroundService(context, intent) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt b/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt index 02b5797..b670965 100644 --- a/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt +++ b/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt @@ -57,6 +57,10 @@ abstract class RecorderService : Service() { } } + "initStart" -> { + startRecording() + } + "changeState" -> { val newState = intent.getStringExtra("newState")?.let { RecorderState.valueOf(it) diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/BootBehaviorTile.kt b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/BootBehaviorTile.kt new file mode 100644 index 0000000..efa48da --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/BootBehaviorTile.kt @@ -0,0 +1,101 @@ +package app.myzel394.alibi.ui.components.SettingsScreen.atoms + +import androidx.appcompat.app.AppCompatDelegate +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.CheckCircle +import androidx.compose.material.icons.filled.Smartphone +import androidx.compose.material.icons.filled.Translate +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.core.os.LocaleListCompat +import app.myzel394.alibi.R +import app.myzel394.alibi.SUPPORTED_LOCALES +import app.myzel394.alibi.db.AppSettings +import app.myzel394.alibi.ui.components.atoms.SettingsTile +import app.myzel394.alibi.ui.utils.IconResource +import com.maxkeppeker.sheets.core.models.base.ButtonStyle +import com.maxkeppeker.sheets.core.models.base.Header +import com.maxkeppeker.sheets.core.models.base.IconSource +import com.maxkeppeker.sheets.core.models.base.SelectionButton +import com.maxkeppeker.sheets.core.models.base.rememberUseCaseState +import com.maxkeppeler.sheets.list.ListDialog +import com.maxkeppeler.sheets.list.models.ListOption +import com.maxkeppeler.sheets.list.models.ListSelection +import java.util.Locale + +/* +val BOOT_BEHAVIOR_TITLE_MAP = mapOf( + AppSettings.BootBehavior.SHOW_NOTIFICATION to R.string.ui_settings_bootBehavior_values_SHOW_NOTIFICATION_title, + AppSettings.BootBehavior.START_RECORDING to R.string.ui_settings_bootBehavior_values_START_RECORDING_title +) + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun BootBehaviorTile() { + val showDialog = rememberUseCaseState() + + ListDialog( + state = showDialog, + header = Header.Default( + title = stringResource(R.string.ui_settings_bootBehavior_title), + icon = IconSource( + painter = IconResource.fromImageVector(Icons.Default.Smartphone) + .asPainterResource(), + contentDescription = null, + ) + ), + selection = ListSelection.Single( + showRadioButtons = true, + options = AppSettings.BootBehavior.entries.map { + ListOption( + titleText = stringResource("ui_settings_bootBehavior_values_${it.name}_title"), + subtitleText = stringResource("ui_settings_bootBehavior_values_${it.name}_subtitle"), + ) + }.toList(), + options = IntRange(0, AppSettings.BootBehavior.entries.size).map { index -> + val locale = locales[index]!! + + ListOption( + titleText = locale.displayName, + subtitleText = locale.getDisplayName(Locale.ENGLISH), + ) + }.toList(), + positiveButton = SelectionButton( + icon = IconSource( + painter = IconResource.fromImageVector(Icons.Default.CheckCircle) + .asPainterResource(), + contentDescription = null, + ), + text = stringResource(android.R.string.ok), + type = ButtonStyle.TEXT, + ) + ) { index, _ -> + AppCompatDelegate.setApplicationLocales( + LocaleListCompat.forLanguageTags( + locales[index]!!.toLanguageTag(), + ), + ) + }, + ) + SettingsTile( + firstModifier = Modifier + .fillMaxHeight() + .clickable { + showDialog.show() + }, + title = stringResource(R.string.ui_settings_bootBehavior_title), + leading = { + Icon( + Icons.Default.Smartphone, + contentDescription = null, + ) + }, + ) +} + + */ \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 76c30ab..17065ce 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -109,4 +109,6 @@ Become a GitHub Sponsor Delete Recordings Immediately If enabled, Alibi will immediately delete recordings after you have saved the file. + Boot Behavior + Show a notification \ No newline at end of file