From dd14a4226674c558a275a312ab2c16d0ec8ec514 Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Tue, 16 Jul 2024 06:49:21 +0200 Subject: [PATCH] feat: setting to keep screen on --- .gitignore | 2 - .../lyricsgrabbr/MainActivity.kt | 2 +- .../data/SettingsPreferencesRepository.kt | 10 ++ .../ui/components/LGAlertDialog.kt | 7 +- .../lyricsgrabbr/ui/screens/Home.kt | 3 +- .../lyricsgrabbr/ui/screens/Lyrics.kt | 130 +++++++++++------- .../lyricsgrabbr/ui/screens/Settings.kt | 35 ++++- .../lyricsgrabbr/utils/Modifiers.kt | 16 --- .../lyricsgrabbr/utils/Resources.kt | 2 +- .../lyricsgrabbr/viewmodels/HomeViewModel.kt | 4 +- .../viewmodels/LyricsViewModel.kt | 8 +- .../viewmodels/SettingsViewModel.kt | 23 +++- app/src/main/res/drawable/spotify.xml | 9 -- app/src/main/res/values-ar/strings.xml | 9 +- app/src/main/res/values/strings.xml | 9 +- 15 files changed, 163 insertions(+), 106 deletions(-) delete mode 100644 app/src/main/java/com/illusionman1212/lyricsgrabbr/utils/Modifiers.kt delete mode 100644 app/src/main/res/drawable/spotify.xml diff --git a/.gitignore b/.gitignore index db8ce29..dc9c670 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -*.iml .gradle /local.properties /.idea/caches @@ -7,7 +6,6 @@ /.idea/workspace.xml /.idea/navEditor.xml /.idea/assetWizardSettings.xml -.DS_Store /build /captures .externalNativeBuild diff --git a/app/src/main/java/com/illusionman1212/lyricsgrabbr/MainActivity.kt b/app/src/main/java/com/illusionman1212/lyricsgrabbr/MainActivity.kt index 2bd7bad..9f35678 100644 --- a/app/src/main/java/com/illusionman1212/lyricsgrabbr/MainActivity.kt +++ b/app/src/main/java/com/illusionman1212/lyricsgrabbr/MainActivity.kt @@ -5,7 +5,6 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Bundle -import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity @@ -127,6 +126,7 @@ class MainActivity : AppCompatActivity() { navController.popBackStack() }, lyricsViewModel = lyricsViewModel, + settingsViewModel = settingsViewModel ) } composable(Routes.Settings.route) { diff --git a/app/src/main/java/com/illusionman1212/lyricsgrabbr/data/SettingsPreferencesRepository.kt b/app/src/main/java/com/illusionman1212/lyricsgrabbr/data/SettingsPreferencesRepository.kt index d0edbb9..4e345c4 100644 --- a/app/src/main/java/com/illusionman1212/lyricsgrabbr/data/SettingsPreferencesRepository.kt +++ b/app/src/main/java/com/illusionman1212/lyricsgrabbr/data/SettingsPreferencesRepository.kt @@ -2,6 +2,7 @@ package com.illusionman1212.lyricsgrabbr.data import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.intPreferencesKey import androidx.datastore.preferences.core.stringSetPreferencesKey @@ -16,6 +17,7 @@ enum class Theme { data class SettingsPreferences( val appTheme: Int = Theme.SYSTEM.ordinal, val whitelist: Set = emptySet(), + val keepScreenOn: Boolean = false, ) class SettingsPreferencesRepository( @@ -24,6 +26,7 @@ class SettingsPreferencesRepository( companion object { private val APP_THEME = intPreferencesKey("app_theme") private val WHITELIST = stringSetPreferencesKey("apps_whitelist") + private val KEEP_SCREEN_ON = booleanPreferencesKey("keep_screen_on") } val preferences = dataStore.data.map { mapSettingsPreferences(it) } @@ -40,6 +43,12 @@ class SettingsPreferencesRepository( } } + suspend fun toggleKeepScreenOn() { + dataStore.edit { prefs -> + prefs[KEEP_SCREEN_ON] = !(prefs[KEEP_SCREEN_ON] ?: false) + } + } + suspend fun removeFromWhitelist(packageName: String) { dataStore.edit { prefs -> prefs[WHITELIST] = (prefs[WHITELIST]?.toMutableSet() ?: emptySet()) - packageName @@ -50,6 +59,7 @@ class SettingsPreferencesRepository( return SettingsPreferences( prefs[APP_THEME] ?: Theme.SYSTEM.ordinal, prefs[WHITELIST] ?: emptySet(), + prefs[KEEP_SCREEN_ON] ?: false, ) } } \ No newline at end of file diff --git a/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/components/LGAlertDialog.kt b/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/components/LGAlertDialog.kt index d5dcc96..081d970 100644 --- a/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/components/LGAlertDialog.kt +++ b/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/components/LGAlertDialog.kt @@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialogDefaults +import androidx.compose.material3.BasicAlertDialog import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface @@ -29,11 +30,11 @@ fun LGAlertDialog( buttons: @Composable () -> Unit, content: @Composable () -> Unit ) { - AlertDialog( + BasicAlertDialog( onDismissRequest = onDismiss, - properties = properties, + properties = properties ) { - Surface ( + Surface( modifier = Modifier.wrapContentHeight().wrapContentWidth(), shape = MaterialTheme.shapes.large, tonalElevation = AlertDialogDefaults.TonalElevation diff --git a/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Home.kt b/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Home.kt index 9b8fb92..3fb9777 100644 --- a/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Home.kt +++ b/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Home.kt @@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -58,7 +57,6 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalHapticFeedback -import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.SpanStyle @@ -74,6 +72,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.DialogProperties import androidx.core.app.ActivityCompat import androidx.lifecycle.Lifecycle +import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.currentStateAsState import androidx.lifecycle.viewmodel.compose.viewModel diff --git a/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Lyrics.kt b/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Lyrics.kt index 5a01609..3c7dcf5 100644 --- a/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Lyrics.kt +++ b/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Lyrics.kt @@ -1,8 +1,14 @@ package com.illusionman1212.lyricsgrabbr.ui.screens +import android.app.Activity +import android.view.WindowManager.LayoutParams +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState @@ -10,7 +16,7 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.MusicNote import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api @@ -23,10 +29,12 @@ import androidx.compose.material3.TextFieldDefaults import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle @@ -36,12 +44,13 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import com.illusionman1212.lyricsgrabbr.R import com.illusionman1212.lyricsgrabbr.ui.components.LGIconButton -import com.illusionman1212.lyricsgrabbr.utils.mirror import com.illusionman1212.lyricsgrabbr.viewmodels.LyricsViewModel +import com.illusionman1212.lyricsgrabbr.viewmodels.SettingsViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -50,13 +59,27 @@ fun LyricsPage( lyricsViewModel: LyricsViewModel = viewModel( factory = LyricsViewModel.Factory ), + settingsViewModel: SettingsViewModel, ) { val uiState = lyricsViewModel.uiState.collectAsStateWithLifecycle().value + val settingsState = settingsViewModel.uiState.collectAsStateWithLifecycle().value + val context = LocalContext.current LaunchedEffect(uiState.song, uiState.artist, uiState.url) { lyricsViewModel.fetchLyricsFromGenius() } + DisposableEffect(Unit) { + val window = (context as Activity).window + if (settingsState.keepScreenOn) { + window.addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON) + } + + onDispose { + window.clearFlags(LayoutParams.FLAG_KEEP_SCREEN_ON) + } + } + Scaffold( topBar = { TopAppBar( @@ -82,8 +105,7 @@ fun LyricsPage( onClick = goBack ) { Icon( - modifier = Modifier.mirror(), - imageVector = Icons.Filled.ArrowBack, + imageVector = Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource( id = R.string.go_back ) @@ -93,53 +115,63 @@ fun LyricsPage( ) }, ) { padding -> - Column( - Modifier - .padding(padding) - .fillMaxSize() - .then( - if (!uiState.isLoading && uiState.lyrics.isNotEmpty()) Modifier.verticalScroll( - rememberScrollState() - ) else Modifier - ), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally, - ) { - if (uiState.isLoading) { - CircularProgressIndicator() - } else { - if (uiState.error != null) { - Text( - uiState.error, - style = MaterialTheme.typography.bodyMedium, - modifier = Modifier.padding(bottom = 32.dp) - ) - } else if (uiState.lyrics.isEmpty()) { - Instrumental() + Column(Modifier.padding(padding)) { + if (settingsState.keepScreenOn) { + Row( + Modifier + .background(MaterialTheme.colorScheme.secondaryContainer) + .fillMaxWidth(), + horizontalArrangement = Arrangement.Center, + ) { + Text(stringResource(id = R.string.screen_will_stay_on).uppercase(), fontSize = 12.sp, color = MaterialTheme.colorScheme.onSecondaryContainer) + } + } + Column( + Modifier + .fillMaxSize() + .then( + if (!uiState.isLoading && uiState.lyrics.isNotEmpty()) Modifier.verticalScroll( + rememberScrollState() + ) else Modifier + ), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + if (uiState.isLoading) { + CircularProgressIndicator() } else { - - CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) { - Column( - Modifier.padding( - top = 12.dp, - start = 12.dp, - end = 12.dp, - bottom = 32.dp - ) - ) { - SelectionContainer { - TextField( - value = uiState.lyrics, - onValueChange = {}, - keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), - readOnly = true, - colors = TextFieldDefaults.colors( - focusedContainerColor = Color.Transparent, - unfocusedContainerColor = Color.Transparent, - focusedIndicatorColor = Color.Transparent, - unfocusedIndicatorColor = Color.Transparent, - ), + if (uiState.error != null) { + Text( + uiState.error, + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(bottom = 32.dp) + ) + } else if (uiState.lyrics.isEmpty()) { + Instrumental() + } else { + CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Ltr) { + Column( + Modifier.padding( + top = 12.dp, + start = 12.dp, + end = 12.dp, + bottom = 32.dp ) + ) { + SelectionContainer { + TextField( + value = uiState.lyrics, + onValueChange = {}, + keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done), + readOnly = true, + colors = TextFieldDefaults.colors( + focusedContainerColor = Color.Transparent, + unfocusedContainerColor = Color.Transparent, + focusedIndicatorColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + ), + ) + } } } } diff --git a/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Settings.kt b/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Settings.kt index 817ef1a..d50634f 100644 --- a/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Settings.kt +++ b/app/src/main/java/com/illusionman1212/lyricsgrabbr/ui/screens/Settings.kt @@ -18,6 +18,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.Apps import androidx.compose.material.icons.filled.Check +import androidx.compose.material.icons.filled.ScreenLockPortrait import androidx.compose.material.icons.outlined.Palette import androidx.compose.material.icons.outlined.Translate import androidx.compose.material3.Icon @@ -34,7 +35,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha -import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource @@ -97,12 +97,13 @@ fun SettingsPage( ) { Appearance(viewModel, uiState) Listening(navigateToWhitelist) + PowerManagement(viewModel, uiState) } } } @Composable -fun Appearance(viewModel: SettingsViewModel, uiState: SettingsState) { +private fun Appearance(viewModel: SettingsViewModel, uiState: SettingsState) { var themeOpenDialog by remember { mutableStateOf(false) } var languageOpenDialog by remember { mutableStateOf(false) } @@ -170,6 +171,20 @@ private fun Listening(navigateToWhitelist: () -> Unit) { } } +@Composable +private fun PowerManagement(viewModel: SettingsViewModel, uiState: SettingsState) { + SettingGroup(title = stringResource(id = R.string.power_management)) { + ToggleSetting( + title = stringResource(id = R.string.keep_device_awake_title), + description = stringResource(id = R.string.keep_device_awake_desc), + icon = Icons.Default.ScreenLockPortrait, + checked = uiState.keepScreenOn + ) { + viewModel.toggleKeepScreenOn() + } + } +} + @Composable fun ThemeDialog( uiState: SettingsState, @@ -311,7 +326,8 @@ fun DialogSetting( @Composable fun ToggleSetting( title: String, - icon: Painter? = null, + description: String? = null, + icon: ImageVector? = null, checked: Boolean, onClick: (Boolean) -> Unit) { @@ -326,11 +342,20 @@ fun ToggleSetting( modifier = Modifier.padding(top = 8.dp, end = 24.dp, bottom = 8.dp), ) { if (icon != null) { - Icon(painter = icon, contentDescription = null, Modifier.width(56.dp)) + Icon(imageVector = icon, contentDescription = null, Modifier.width(56.dp)) } else { Box(modifier = Modifier.width(56.dp)) } - Text(text = title, color = MaterialTheme.colorScheme.onBackground, modifier = Modifier.weight(1.0f)) + Column(Modifier.weight(1f), verticalArrangement = Arrangement.spacedBy(4.dp)) { + Text(text = title, color = MaterialTheme.colorScheme.onBackground) + if (description != null) { + Text( + text = description, + color = ColorSecondaryLight, + fontSize = 14.sp, + ) + } + } Switch( checked = checked, onCheckedChange = null, diff --git a/app/src/main/java/com/illusionman1212/lyricsgrabbr/utils/Modifiers.kt b/app/src/main/java/com/illusionman1212/lyricsgrabbr/utils/Modifiers.kt deleted file mode 100644 index c6d768b..0000000 --- a/app/src/main/java/com/illusionman1212/lyricsgrabbr/utils/Modifiers.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.illusionman1212.lyricsgrabbr.utils - -import android.util.LayoutDirection -import androidx.compose.runtime.Stable -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.scale -import androidx.core.text.layoutDirection -import java.util.Locale - -@Stable -fun Modifier.mirror(): Modifier { - return if (Locale.getDefault().layoutDirection == LayoutDirection.RTL) - this.scale(scaleX = -1f, scaleY = 1f) - else - this -} \ No newline at end of file diff --git a/app/src/main/java/com/illusionman1212/lyricsgrabbr/utils/Resources.kt b/app/src/main/java/com/illusionman1212/lyricsgrabbr/utils/Resources.kt index 60c46ba..b31d0c2 100644 --- a/app/src/main/java/com/illusionman1212/lyricsgrabbr/utils/Resources.kt +++ b/app/src/main/java/com/illusionman1212/lyricsgrabbr/utils/Resources.kt @@ -25,7 +25,7 @@ fun annotatedStringResource( val spannedString = SpannedString(resources.getText(id)) val resultBuilder = AnnotatedString.Builder() resultBuilder.append(spannedString.toString()) - spannedString.getSpans(0, spannedString.length, Annotation::class.java).forEach { annotation -> + spannedString.getSpans(0, spannedString.length, Annotation::class.java).forEach { annotation -> val spanStart = spannedString.getSpanStart(annotation) val spanEnd = spannedString.getSpanEnd(annotation) resultBuilder.addStringAnnotation( diff --git a/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/HomeViewModel.kt b/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/HomeViewModel.kt index 469cc80..89acf39 100644 --- a/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/HomeViewModel.kt +++ b/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/HomeViewModel.kt @@ -96,7 +96,9 @@ class HomeViewModel(private val homeRepository: HomeRepository): ViewModel() { } fun setSong(song: NotificationEvent) { - _uiState.value = _uiState.value.copy(isLoading = true, notification = song, error = null) + _uiState.update { state -> + state.copy(isLoading = true, notification = song, error = null) + } } fun makeRequestToGenius(song: String, artist: String) { diff --git a/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/LyricsViewModel.kt b/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/LyricsViewModel.kt index 46eb853..6b458ec 100644 --- a/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/LyricsViewModel.kt +++ b/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/LyricsViewModel.kt @@ -41,12 +41,16 @@ class LyricsViewModel(private val lyricsRepository: LyricsRepository): ViewModel } fun fetchLyricsFromGenius() { - _uiState.value = _uiState.value.copy(isLoading = true, lyrics = "") + _uiState.update { state -> + state.copy(isLoading = true, lyrics = "") + } viewModelScope.launch { withContext(Dispatchers.IO) { val lyrics = lyricsRepository.fetchLyricsFromGenius(uiState.value.url) - _uiState.value = _uiState.value.copy(isLoading = false, lyrics = lyrics) + _uiState.update { state -> + state.copy(isLoading = false, lyrics = lyrics) + } } } } diff --git a/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/SettingsViewModel.kt b/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/SettingsViewModel.kt index 8d9b072..644b55c 100644 --- a/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/SettingsViewModel.kt +++ b/app/src/main/java/com/illusionman1212/lyricsgrabbr/viewmodels/SettingsViewModel.kt @@ -30,6 +30,7 @@ data class SettingsState( val appTheme: Int = Theme.SYSTEM.ordinal, val applications: Map = emptyMap(), val whitelistSearchQuery: String = "", + val keepScreenOn: Boolean = false, ) class SettingsViewModel(private val settingsPrefsRepo: SettingsPreferencesRepository, context: Context): ViewModel() { @@ -47,6 +48,12 @@ class SettingsViewModel(private val settingsPrefsRepo: SettingsPreferencesReposi } } + fun toggleKeepScreenOn() { + viewModelScope.launch(Dispatchers.IO) { + settingsPrefsRepo.toggleKeepScreenOn() + } + } + private suspend fun getWhitelistedApps(): Set { return settingsPrefsRepo.preferences.first().whitelist } @@ -73,10 +80,9 @@ class SettingsViewModel(private val settingsPrefsRepo: SettingsPreferencesReposi ) } immutablePackages = apps - _uiState.update { - SettingsState( - appTheme = uiState.value.appTheme, - applications = apps, + _uiState.update { state -> + state.copy( + applications = apps ) } } @@ -147,9 +153,12 @@ class SettingsViewModel(private val settingsPrefsRepo: SettingsPreferencesReposi getPackages(context) viewModelScope.launch { settingsPrefsRepo.preferences.collectLatest { - _uiState.value = _uiState.value.copy( - appTheme = it.appTheme, - ) + _uiState.update { state -> + state.copy( + appTheme = it.appTheme, + keepScreenOn = it.keepScreenOn, + ) + } } } } diff --git a/app/src/main/res/drawable/spotify.xml b/app/src/main/res/drawable/spotify.xml deleted file mode 100644 index 1ba7ba6..0000000 --- a/app/src/main/res/drawable/spotify.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 1011197..2058612 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -5,7 +5,6 @@ رجوع إلغاء - تأكيد لقد انتهت مهلة الطلب، حاول مرة أخرى لاحقًا لقد حدث خطأ، حاول مرة أخرى لاحقاً أعد المحاولة @@ -33,16 +32,18 @@ ليلي استخدم مظهر النظام اللغة - الإفتراضي + استخدم لغة النظام الإستماع - القائمة البيضاء تطبيقات القائمة البيضاء اختر التطبيقات التي سيستمع التطبيق إلى إشعاراتها بحث مسح + إدارة إستخدام الطافة + أبق الجهاز مستيقظا + أبق الجهاز مستيقظا على صفحة كلمات الأغاني (يزيد من استخدام البطارية) + ستبقى الشاشة على قيد التشغيل - كلمات الأغنية هذه الأغنية موسيقية diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 65f4e66..a737d5c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,7 +4,6 @@ Go Back Cancel - Confirm Request has timed out, try again later An error has occurred, try again later Retry @@ -32,16 +31,18 @@ Dark Use System Theme Language - Default + Use System Language Listening - Whitelist Whitelist Apps Choose which apps Lyrics Grabbr will listen to Search Clear + Power Management + Keep device awake + Keep device awake on lyrics page (Increases battery usage) + Screen Will Stay On - Lyrics This song is an instrumental