mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-19 15:15:26 +02:00
current stand
This commit is contained in:
parent
76bfb97dad
commit
60fc16f2c4
@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".UpdateSettingsApp"
|
android:name=".UpdateSettingsApp"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
@ -56,6 +58,14 @@
|
|||||||
android:name="autoStoreLocales"
|
android:name="autoStoreLocales"
|
||||||
android:value="true" />
|
android:value="true" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
<receiver
|
||||||
|
android:name=".receivers.BootReceiver"
|
||||||
|
android:exported="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -57,6 +57,10 @@ abstract class RecorderService : Service() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"initStart" -> {
|
||||||
|
startRecording()
|
||||||
|
}
|
||||||
|
|
||||||
"changeState" -> {
|
"changeState" -> {
|
||||||
val newState = intent.getStringExtra("newState")?.let {
|
val newState = intent.getStringExtra("newState")?.let {
|
||||||
RecorderState.valueOf(it)
|
RecorderState.valueOf(it)
|
||||||
|
@ -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, Int>(
|
||||||
|
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,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
@ -109,4 +109,6 @@
|
|||||||
<string name="ui_about_contribute_donation_githubSponsors">Become a GitHub Sponsor</string>
|
<string name="ui_about_contribute_donation_githubSponsors">Become a GitHub Sponsor</string>
|
||||||
<string name="ui_settings_option_deleteRecordingsImmediately_title">Delete Recordings Immediately</string>
|
<string name="ui_settings_option_deleteRecordingsImmediately_title">Delete Recordings Immediately</string>
|
||||||
<string name="ui_settings_option_deleteRecordingsImmediately_description">If enabled, Alibi will immediately delete recordings after you have saved the file.</string>
|
<string name="ui_settings_option_deleteRecordingsImmediately_description">If enabled, Alibi will immediately delete recordings after you have saved the file.</string>
|
||||||
|
<string name="ui_settings_bootBehavior_title">Boot Behavior</string>
|
||||||
|
<string name="ui_settings_bootBehavior_values_SHOW_NOTIFICATION_title">Show a notification</string>
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user