Skip to content

Commit cb249cd

Browse files
committed
always turn off flashlight option
1 parent d209cea commit cb249cd

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

app/src/main/java/com/sameerasw/essentials/services/ScreenOffAccessibilityService.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,13 @@ class ScreenOffAccessibilityService : AccessibilityService() {
301301
// Log event for debugging
302302
Log.d("Flashlight", "KeyEvent: action=${event.action}, screenOn=$isScreenOn")
303303

304-
// Only intercept if screen is off
305-
if (!isScreenOn) {
304+
val isAlwaysTurnOffEnabled = prefs.getBoolean("flashlight_always_turn_off_enabled", false)
305+
306+
// Only intercept if screen is off OR (always turn off is enabled AND torch is currently on)
307+
// This allows turning it OFF while screen is on, but prevents turning it ON while screen is on (unless screen is off of course)
308+
val shouldIntercept = !isScreenOn || (isAlwaysTurnOffEnabled && isTorchOn)
309+
310+
if (shouldIntercept) {
306311
if (event.action == KeyEvent.ACTION_DOWN) {
307312
if (event.repeatCount == 0) {
308313
Log.d("Flashlight", "Long press timer started")

app/src/main/java/com/sameerasw/essentials/ui/composables/configs/FlashlightSettingsUI.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import com.sameerasw.essentials.viewmodels.MainViewModel
1515
import com.sameerasw.essentials.ui.components.pickers.HapticFeedbackPicker
1616
import com.sameerasw.essentials.ui.components.pickers.SegmentedPicker
1717
import com.sameerasw.essentials.utils.HapticFeedbackType
18+
import com.sameerasw.essentials.ui.components.cards.IconToggleItem
19+
import com.sameerasw.essentials.utils.HapticUtil
20+
import androidx.compose.ui.platform.LocalView
21+
import com.sameerasw.essentials.R
1822

1923
@Composable
2024
fun FlashlightSettingsUI(
@@ -70,6 +74,23 @@ fun FlashlightSettingsUI(
7074
)
7175
}
7276

77+
val view = LocalView.current
78+
RoundedCardContainer(
79+
modifier = Modifier,
80+
spacing = 0.dp
81+
) {
82+
IconToggleItem(
83+
iconRes = R.drawable.rounded_flashlight_on_24,
84+
title = "Always turn off flashlight",
85+
description = "Even while display is on",
86+
isChecked = viewModel.isFlashlightAlwaysTurnOffEnabled.value,
87+
onCheckedChange = { checked ->
88+
HapticUtil.performVirtualKeyHaptic(view)
89+
viewModel.setFlashlightAlwaysTurnOffEnabled(checked, context)
90+
}
91+
)
92+
}
93+
7394
RoundedCardContainer {
7495
Text(
7596
text = "When the screen is off, long-press the selected Volume button to toggle the flashlight.",

app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class MainViewModel : ViewModel() {
4949
val isSnoozeDebuggingEnabled = mutableStateOf(false)
5050
val isSnoozeFileTransferEnabled = mutableStateOf(false)
5151
val isSnoozeChargingEnabled = mutableStateOf(false)
52+
val isFlashlightAlwaysTurnOffEnabled = mutableStateOf(false)
5253

5354
fun check(context: Context) {
5455
isAccessibilityEnabled.value = isAccessibilityServiceEnabled(context)
@@ -88,6 +89,7 @@ class MainViewModel : ViewModel() {
8889
isSnoozeDebuggingEnabled.value = prefs.getBoolean("snooze_debugging_enabled", false)
8990
isSnoozeFileTransferEnabled.value = prefs.getBoolean("snooze_file_transfer_enabled", false)
9091
isSnoozeChargingEnabled.value = prefs.getBoolean("snooze_charging_enabled", false)
92+
isFlashlightAlwaysTurnOffEnabled.value = prefs.getBoolean("flashlight_always_turn_off_enabled", false)
9193
}
9294

9395
fun setWidgetEnabled(enabled: Boolean, context: Context) {
@@ -492,4 +494,11 @@ class MainViewModel : ViewModel() {
492494
putBoolean("snooze_charging_enabled", enabled)
493495
}
494496
}
497+
498+
fun setFlashlightAlwaysTurnOffEnabled(enabled: Boolean, context: Context) {
499+
isFlashlightAlwaysTurnOffEnabled.value = enabled
500+
context.getSharedPreferences("essentials_prefs", Context.MODE_PRIVATE).edit {
501+
putBoolean("flashlight_always_turn_off_enabled", enabled)
502+
}
503+
}
495504
}

0 commit comments

Comments
 (0)