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