Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -62,6 +63,7 @@ class PreferenceRepositoryImp(
val jsonTypeForBluetooth = false
val sensorSamplingRate = 200000
val vibrate = false
val keepScreenOn = false
}


Expand All @@ -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
}
}

Expand All @@ -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)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -123,6 +125,7 @@ fun ControlPadPlayScreen(
onBackPress: (() -> Unit)? = null,
) {


LockScreenOrientation(
orientation = when(controlPad.orientation){
Orientation.PORTRAIT -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
Expand All @@ -136,15 +139,24 @@ 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,
uiState = uiState,
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)
}
}
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -148,6 +151,9 @@ class ControlPadPlayScreenViewModel @Inject constructor(
sendJsonOverBluetooth = preference.sendJsonOverBluetooth
samplingRate = preference.sensorSamplingRate
vibrate = preference.vibrate
_uiState.update {
it.copy(keepScreenOn = preference.keepScreenOn)
}
}
}

Expand All @@ -169,7 +175,6 @@ class ControlPadPlayScreenViewModel @Inject constructor(

}


fun loadControlPadItemsFor(controlPad: ControlPad) {

viewModelScope.launch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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))
}
)
}

)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down Expand Up @@ -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
)
}
}
Expand Down Expand Up @@ -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 -> {}
}
Expand Down