Skip to content

Commit dfd228b

Browse files
authored
Merge pull request #35 from Neznak/main
Add optional keep screen on functionality
2 parents 609a4ae + 130173f commit dfd228b

File tree

8 files changed

+59
-7
lines changed

8 files changed

+59
-7
lines changed

app/src/main/java/com/github/umer0586/droidpad/data/Preference.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,6 @@ data class Preference(
2626
val builderScreenLandscapeResolution : Resolution,
2727
val sendJsonOverBluetooth: Boolean,
2828
val sensorSamplingRate: Int,
29-
val vibrate: Boolean
29+
val vibrate: Boolean,
30+
val keepScreenOn: Boolean
3031
)

app/src/main/java/com/github/umer0586/droidpad/data/repositoriesimp/PreferenceRepositoryImp.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class PreferenceRepositoryImp(
5454
val jsonTypeForBluetooth = booleanPreferencesKey("JSON_TYPE_FOR_BLUETOOTH")
5555
val sensorSamplingRate = intPreferencesKey("SENSOR_SAMPLING_RATE")
5656
val vibrate = booleanPreferencesKey("VIBRATE")
57+
val keepScreenOn = booleanPreferencesKey("KEEP_SCREEN_ON")
5758
}
5859

5960
private object Defaults {
@@ -62,6 +63,7 @@ class PreferenceRepositoryImp(
6263
val jsonTypeForBluetooth = false
6364
val sensorSamplingRate = 200000
6465
val vibrate = false
66+
val keepScreenOn = false
6567
}
6668

6769

@@ -72,6 +74,7 @@ class PreferenceRepositoryImp(
7274
pref[Key.jsonTypeForBluetooth] = preference.sendJsonOverBluetooth
7375
pref[Key.sensorSamplingRate] = preference.sensorSamplingRate
7476
pref[Key.vibrate] = preference.vibrate
77+
pref[Key.keepScreenOn] = preference.keepScreenOn
7578
}
7679
}
7780

@@ -82,7 +85,8 @@ class PreferenceRepositoryImp(
8285
builderScreenLandscapeResolution = Resolution.fromJson(pref[Key.builderScreenLandscapeResolution] ?: Defaults.builderScreenLandscapeResolution),
8386
sendJsonOverBluetooth = pref[Key.jsonTypeForBluetooth] ?: Defaults.jsonTypeForBluetooth,
8487
sensorSamplingRate = pref[Key.sensorSamplingRate] ?: Defaults.sensorSamplingRate,
85-
vibrate = pref[Key.vibrate] ?: Defaults.vibrate
88+
vibrate = pref[Key.vibrate] ?: Defaults.vibrate,
89+
keepScreenOn = pref[Key.keepScreenOn] ?: Defaults.keepScreenOn
8690
)
8791
}.flowOn(ioDispatcher)
8892

app/src/main/java/com/github/umer0586/droidpad/ui/screens/NavScreen.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package com.github.umer0586.droidpad.ui.screens
2121

2222

23+
import android.view.Window
2324
import androidx.compose.runtime.Composable
2425
import androidx.navigation.NavGraph.Companion.findStartDestination
2526
import androidx.navigation.NavHostController

app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadplayscreen/ControlPadPlayScreen.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
package com.github.umer0586.droidpad.ui.screens.controlpadplayscreen
2121

2222
import android.content.pm.ActivityInfo
23+
import android.view.WindowManager
2324
import androidx.activity.compose.BackHandler
25+
import androidx.activity.compose.LocalActivity
2426
import androidx.compose.foundation.background
2527
import androidx.compose.foundation.clickable
2628
import androidx.compose.foundation.gestures.detectTapGestures
@@ -123,6 +125,7 @@ fun ControlPadPlayScreen(
123125
onBackPress: (() -> Unit)? = null,
124126
) {
125127

128+
126129
LockScreenOrientation(
127130
orientation = when(controlPad.orientation){
128131
Orientation.PORTRAIT -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
@@ -136,15 +139,24 @@ fun ControlPadPlayScreen(
136139
viewModel.loadControlPadItemsFor(controlPad)
137140
}
138141

142+
val window = LocalActivity.current?.window
143+
LaunchedEffect(uiState.keepScreenOn) {
144+
if(uiState.keepScreenOn){
145+
window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
146+
}
147+
}
148+
139149

140150
ControlPlayScreenContent(
141151
controlPad = controlPad,
142152
uiState = uiState,
143153
onUiEvent = {event->
144154
viewModel.onEvent(event)
145155

146-
if(event is ControlPadPlayScreenEvent.OnBackPress)
156+
if(event is ControlPadPlayScreenEvent.OnBackPress) {
147157
onBackPress?.invoke()
158+
window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
159+
}
148160
}
149161
)
150162
}

app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadplayscreen/ControlPadPlayScreenViewModel.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
package com.github.umer0586.droidpad.ui.screens.controlpadplayscreen
2121

2222
import android.util.Log
23+
import android.view.Window
24+
import android.view.WindowManager
2325
import androidx.compose.runtime.mutableStateListOf
2426
import androidx.compose.runtime.mutableStateMapOf
2527
import androidx.compose.runtime.snapshots.SnapshotStateList
@@ -89,7 +91,8 @@ data class ControlPadPlayScreenState(
8991
val isConnected: Boolean = false,
9092
val controlPadBackgroundColor : Long = Color.Red.value.toLong(),
9193
val hostAddress: String = "",
92-
val isBluetoothEnabled: Boolean = false
94+
val isBluetoothEnabled: Boolean = false,
95+
val keepScreenOn: Boolean = false
9396
)
9497
sealed interface ControlPadPlayScreenEvent {
9598
data object OnConnectClick : ControlPadPlayScreenEvent
@@ -148,6 +151,9 @@ class ControlPadPlayScreenViewModel @Inject constructor(
148151
sendJsonOverBluetooth = preference.sendJsonOverBluetooth
149152
samplingRate = preference.sensorSamplingRate
150153
vibrate = preference.vibrate
154+
_uiState.update {
155+
it.copy(keepScreenOn = preference.keepScreenOn)
156+
}
151157
}
152158
}
153159

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

170176
}
171177

172-
173178
fun loadControlPadItemsFor(controlPad: ControlPad) {
174179

175180
viewModelScope.launch {

app/src/main/java/com/github/umer0586/droidpad/ui/screens/controlpadsscreen/ControlPadsScreen.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import android.content.Context
2424
import android.content.Intent
2525
import android.content.pm.PackageManager
2626
import android.net.Uri
27+
import android.view.Window
28+
import android.view.WindowManager
2729
import android.widget.Toast
2830
import androidx.compose.foundation.background
2931
import androidx.compose.foundation.clickable

app/src/main/java/com/github/umer0586/droidpad/ui/screens/preferencescreen/PreferenceScreen.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,20 @@ fun PreferenceScreenContent(
131131
}
132132

133133
)
134+
135+
ListItem(
136+
headlineContent = {Text("Keep screen on")},
137+
supportingContent = { Text("Keep the screen on when on a control pad screen.") },
138+
trailingContent = {
139+
Switch(
140+
checked = uiState.keepScreenOn,
141+
onCheckedChange = {
142+
onEvent(PreferenceScreenEvent.OnKeepScreenOnChange(it))
143+
}
144+
)
145+
}
146+
147+
)
134148
}
135149
}
136150

app/src/main/java/com/github/umer0586/droidpad/ui/screens/preferencescreen/PreferenceScreenViewModel.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@ import javax.inject.Inject
1515
data class PreferenceScreenState(
1616
val jsonForBluetooth: Boolean = false,
1717
val sensorSamplingRate: Int = 200000,
18-
val vibrate: Boolean = false
18+
val vibrate: Boolean = false,
19+
val keepScreenOn: Boolean = false
1920
)
2021

2122
sealed interface PreferenceScreenEvent{
2223
data class OnJsonForBluetoothChange(val jsonForBluetooth: Boolean) : PreferenceScreenEvent
2324
data class OnSensorSamplingRateChange(val sensorSamplingRate: Int) : PreferenceScreenEvent
2425
data class OnVibrateChange(val vibrate: Boolean) : PreferenceScreenEvent
26+
data class OnKeepScreenOnChange(val keepScreenOn: Boolean) : PreferenceScreenEvent
2527
data object OnSensorSamplingRateChangeFinished : PreferenceScreenEvent
2628
data object OnBackClick : PreferenceScreenEvent
2729
}
@@ -50,7 +52,8 @@ class PreferenceScreenViewModel @Inject constructor(
5052
it.copy(
5153
jsonForBluetooth = pref.sendJsonOverBluetooth,
5254
sensorSamplingRate = pref.sensorSamplingRate,
53-
vibrate = pref.vibrate
55+
vibrate = pref.vibrate,
56+
keepScreenOn = pref.keepScreenOn
5457
)
5558
}
5659
}
@@ -91,6 +94,16 @@ class PreferenceScreenViewModel @Inject constructor(
9194
}
9295
}
9396
}
97+
is PreferenceScreenEvent.OnKeepScreenOnChange -> {
98+
_uiState.update {
99+
it.copy(keepScreenOn = event.keepScreenOn)
100+
}
101+
viewModelScope.launch {
102+
preferenceRepository.updatePreference {
103+
it.copy(keepScreenOn = event.keepScreenOn)
104+
}
105+
}
106+
}
94107

95108
PreferenceScreenEvent.OnBackClick -> {}
96109
}

0 commit comments

Comments
 (0)