diff --git a/app/src/main/java/com/github/umer0586/droidpad/data/Preference.kt b/app/src/main/java/com/github/umer0586/droidpad/data/Preference.kt index bc08397..ca60d92 100644 --- a/app/src/main/java/com/github/umer0586/droidpad/data/Preference.kt +++ b/app/src/main/java/com/github/umer0586/droidpad/data/Preference.kt @@ -26,5 +26,6 @@ data class Preference( val builderScreenLandscapeResolution : Resolution, val sendJsonOverBluetooth: Boolean, val sensorSamplingRate: Int, - val vibrate: Boolean + val vibrate: Boolean, + val keepScreenOn: Boolean ) \ No newline at end of file diff --git a/app/src/main/java/com/github/umer0586/droidpad/data/repositoriesimp/PreferenceRepositoryImp.kt b/app/src/main/java/com/github/umer0586/droidpad/data/repositoriesimp/PreferenceRepositoryImp.kt index 095f568..e2eef01 100644 --- a/app/src/main/java/com/github/umer0586/droidpad/data/repositoriesimp/PreferenceRepositoryImp.kt +++ b/app/src/main/java/com/github/umer0586/droidpad/data/repositoriesimp/PreferenceRepositoryImp.kt @@ -54,6 +54,7 @@ class PreferenceRepositoryImp( val jsonTypeForBluetooth = booleanPreferencesKey("JSON_TYPE_FOR_BLUETOOTH") val sensorSamplingRate = intPreferencesKey("SENSOR_SAMPLING_RATE") val vibrate = booleanPreferencesKey("VIBRATE") + val keepScreenOn = booleanPreferencesKey("KEEP_SCREEN_ON") } private object Defaults { @@ -62,6 +63,7 @@ class PreferenceRepositoryImp( val jsonTypeForBluetooth = false val sensorSamplingRate = 200000 val vibrate = false + val keepScreenOn = false } @@ -72,6 +74,7 @@ class PreferenceRepositoryImp( pref[Key.jsonTypeForBluetooth] = preference.sendJsonOverBluetooth pref[Key.sensorSamplingRate] = preference.sensorSamplingRate pref[Key.vibrate] = preference.vibrate + pref[Key.keepScreenOn] = preference.keepScreenOn } } @@ -82,7 +85,8 @@ class PreferenceRepositoryImp( builderScreenLandscapeResolution = Resolution.fromJson(pref[Key.builderScreenLandscapeResolution] ?: Defaults.builderScreenLandscapeResolution), sendJsonOverBluetooth = pref[Key.jsonTypeForBluetooth] ?: Defaults.jsonTypeForBluetooth, sensorSamplingRate = pref[Key.sensorSamplingRate] ?: Defaults.sensorSamplingRate, - vibrate = pref[Key.vibrate] ?: Defaults.vibrate + vibrate = pref[Key.vibrate] ?: Defaults.vibrate, + keepScreenOn = pref[Key.keepScreenOn] ?: Defaults.keepScreenOn ) }.flowOn(ioDispatcher) diff --git a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/NavScreen.kt b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/NavScreen.kt index 0381912..7aa594d 100644 --- a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/NavScreen.kt +++ b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/NavScreen.kt @@ -20,6 +20,7 @@ package com.github.umer0586.droidpad.ui.screens +import android.view.Window import androidx.compose.runtime.Composable import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.NavHostController diff --git a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadplayscreen/ControlPadPlayScreen.kt b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadplayscreen/ControlPadPlayScreen.kt index 2c09ff6..d237b83 100644 --- a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadplayscreen/ControlPadPlayScreen.kt +++ b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadplayscreen/ControlPadPlayScreen.kt @@ -20,7 +20,9 @@ package com.github.umer0586.droidpad.ui.screens.controlpadplayscreen import android.content.pm.ActivityInfo +import android.view.WindowManager import androidx.activity.compose.BackHandler +import androidx.activity.compose.LocalActivity import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.detectTapGestures @@ -123,6 +125,7 @@ fun ControlPadPlayScreen( onBackPress: (() -> Unit)? = null, ) { + LockScreenOrientation( orientation = when(controlPad.orientation){ Orientation.PORTRAIT -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT @@ -136,6 +139,13 @@ fun ControlPadPlayScreen( viewModel.loadControlPadItemsFor(controlPad) } + val window = LocalActivity.current?.window + LaunchedEffect(uiState.keepScreenOn) { + if(uiState.keepScreenOn){ + window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } + } + ControlPlayScreenContent( controlPad = controlPad, @@ -143,8 +153,10 @@ fun ControlPadPlayScreen( onUiEvent = {event-> viewModel.onEvent(event) - if(event is ControlPadPlayScreenEvent.OnBackPress) + if(event is ControlPadPlayScreenEvent.OnBackPress) { onBackPress?.invoke() + window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } } ) } diff --git a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadplayscreen/ControlPadPlayScreenViewModel.kt b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadplayscreen/ControlPadPlayScreenViewModel.kt index b928863..83fe929 100644 --- a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadplayscreen/ControlPadPlayScreenViewModel.kt +++ b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadplayscreen/ControlPadPlayScreenViewModel.kt @@ -20,6 +20,8 @@ package com.github.umer0586.droidpad.ui.screens.controlpadplayscreen import android.util.Log +import android.view.Window +import android.view.WindowManager import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.snapshots.SnapshotStateList @@ -89,7 +91,8 @@ data class ControlPadPlayScreenState( val isConnected: Boolean = false, val controlPadBackgroundColor : Long = Color.Red.value.toLong(), val hostAddress: String = "", - val isBluetoothEnabled: Boolean = false + val isBluetoothEnabled: Boolean = false, + val keepScreenOn: Boolean = false ) sealed interface ControlPadPlayScreenEvent { data object OnConnectClick : ControlPadPlayScreenEvent @@ -148,6 +151,9 @@ class ControlPadPlayScreenViewModel @Inject constructor( sendJsonOverBluetooth = preference.sendJsonOverBluetooth samplingRate = preference.sensorSamplingRate vibrate = preference.vibrate + _uiState.update { + it.copy(keepScreenOn = preference.keepScreenOn) + } } } @@ -169,7 +175,6 @@ class ControlPadPlayScreenViewModel @Inject constructor( } - fun loadControlPadItemsFor(controlPad: ControlPad) { viewModelScope.launch { diff --git a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadsscreen/ControlPadsScreen.kt b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadsscreen/ControlPadsScreen.kt index a2137fb..45026ef 100644 --- a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadsscreen/ControlPadsScreen.kt +++ b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadsscreen/ControlPadsScreen.kt @@ -24,6 +24,8 @@ import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.net.Uri +import android.view.Window +import android.view.WindowManager import android.widget.Toast import androidx.compose.foundation.background import androidx.compose.foundation.clickable diff --git a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/preferencescreen/PreferenceScreen.kt b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/preferencescreen/PreferenceScreen.kt index b87d079..ccefd7d 100644 --- a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/preferencescreen/PreferenceScreen.kt +++ b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/preferencescreen/PreferenceScreen.kt @@ -131,6 +131,20 @@ fun PreferenceScreenContent( } ) + + ListItem( + headlineContent = {Text("Keep screen on")}, + supportingContent = { Text("Keep the screen on when on a control pad screen.") }, + trailingContent = { + Switch( + checked = uiState.keepScreenOn, + onCheckedChange = { + onEvent(PreferenceScreenEvent.OnKeepScreenOnChange(it)) + } + ) + } + + ) } } diff --git a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/preferencescreen/PreferenceScreenViewModel.kt b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/preferencescreen/PreferenceScreenViewModel.kt index 814d6ac..2dd8406 100644 --- a/app/src/main/java/com/github/umer0586/droidpad/ui/screens/preferencescreen/PreferenceScreenViewModel.kt +++ b/app/src/main/java/com/github/umer0586/droidpad/ui/screens/preferencescreen/PreferenceScreenViewModel.kt @@ -15,13 +15,15 @@ import javax.inject.Inject data class PreferenceScreenState( val jsonForBluetooth: Boolean = false, val sensorSamplingRate: Int = 200000, - val vibrate: Boolean = false + val vibrate: Boolean = false, + val keepScreenOn: Boolean = false ) sealed interface PreferenceScreenEvent{ data class OnJsonForBluetoothChange(val jsonForBluetooth: Boolean) : PreferenceScreenEvent data class OnSensorSamplingRateChange(val sensorSamplingRate: Int) : PreferenceScreenEvent data class OnVibrateChange(val vibrate: Boolean) : PreferenceScreenEvent + data class OnKeepScreenOnChange(val keepScreenOn: Boolean) : PreferenceScreenEvent data object OnSensorSamplingRateChangeFinished : PreferenceScreenEvent data object OnBackClick : PreferenceScreenEvent } @@ -50,7 +52,8 @@ class PreferenceScreenViewModel @Inject constructor( it.copy( jsonForBluetooth = pref.sendJsonOverBluetooth, sensorSamplingRate = pref.sensorSamplingRate, - vibrate = pref.vibrate + vibrate = pref.vibrate, + keepScreenOn = pref.keepScreenOn ) } } @@ -91,6 +94,16 @@ class PreferenceScreenViewModel @Inject constructor( } } } + is PreferenceScreenEvent.OnKeepScreenOnChange -> { + _uiState.update { + it.copy(keepScreenOn = event.keepScreenOn) + } + viewModelScope.launch { + preferenceRepository.updatePreference { + it.copy(keepScreenOn = event.keepScreenOn) + } + } + } PreferenceScreenEvent.OnBackClick -> {} }