From ff222e95632ff317405e83e88332e2f4ce019dec Mon Sep 17 00:00:00 2001 From: AshishDhyani131 Date: Sat, 9 May 2026 21:02:47 +0530 Subject: [PATCH] feat: changed mode to flashlight tool subsystem --- .../infrastructure/FlashlightSubsystem.kt | 7 ++++ .../infrastructure/IFlashlightSubsystem.kt | 1 + .../flashlight/ui/FragmentToolFlashlight.kt | 42 +++++++++++++++---- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/infrastructure/FlashlightSubsystem.kt b/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/infrastructure/FlashlightSubsystem.kt index 86932c6c12..bc14879107 100644 --- a/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/infrastructure/FlashlightSubsystem.kt +++ b/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/infrastructure/FlashlightSubsystem.kt @@ -39,6 +39,8 @@ class FlashlightSubsystem private constructor(private val context: Context) : IF override val mode: ITopic get() = _mode.distinct() + override var selectedMode: FlashlightMode = FlashlightMode.Torch + override val brightnessLevels: Int get() = (torch?.brightnessLevels ?: 1) - 1 @@ -116,6 +118,7 @@ class FlashlightSubsystem private constructor(private val context: Context) : IF transitionTimer.stop() } _mode.publish(FlashlightMode.Off) + selectedMode = FlashlightMode.Torch FlashlightService.stop(context) torch?.off() } @@ -130,6 +133,9 @@ class FlashlightSubsystem private constructor(private val context: Context) : IF override fun set(mode: FlashlightMode) { + if (mode != FlashlightMode.Off) { + selectedMode = mode + } when (mode) { FlashlightMode.Off -> off() else -> on(mode) @@ -173,6 +179,7 @@ class FlashlightSubsystem private constructor(private val context: Context) : IF if (enabled && getMode() == FlashlightMode.Off) { setBrightness(1f) + selectedMode = FlashlightMode.Torch on(FlashlightMode.Torch, true) } } diff --git a/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/infrastructure/IFlashlightSubsystem.kt b/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/infrastructure/IFlashlightSubsystem.kt index 67524385f9..bea3b8783e 100644 --- a/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/infrastructure/IFlashlightSubsystem.kt +++ b/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/infrastructure/IFlashlightSubsystem.kt @@ -6,6 +6,7 @@ import com.kylecorry.trail_sense.tools.flashlight.domain.FlashlightMode interface IFlashlightSubsystem { val mode: ITopic + var selectedMode: FlashlightMode val brightnessLevels: Int fun setBrightness(brightness: Float) fun toggle() diff --git a/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/ui/FragmentToolFlashlight.kt b/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/ui/FragmentToolFlashlight.kt index e6be707793..f7976e4861 100644 --- a/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/ui/FragmentToolFlashlight.kt +++ b/app/src/main/java/com/kylecorry/trail_sense/tools/flashlight/ui/FragmentToolFlashlight.kt @@ -39,8 +39,6 @@ class FragmentToolFlashlight : BoundFragment() { turnOn() } - private var selectedMode = FlashlightMode.Torch - private val cache by lazy { PreferencesSubsystem.getInstance(requireContext()).preferences } private val prefs by lazy { UserPreferences(requireContext()) } private val formatter by lazy { FormatService.getInstance(requireContext()) } @@ -107,23 +105,40 @@ class FragmentToolFlashlight : BoundFragment() { considerShownIfCancelled = false, ) { _, agreed -> val frequency = if (it == 10) 200 else it - selectedMode = if (agreed) { + val mode = if (agreed) { getStrobeMode(frequency) } else { FlashlightMode.Torch } - turnOn() + flashlight.set(mode) } } else { - selectedMode = when (it) { + val mode = when (it) { 11 -> FlashlightMode.Sos else -> FlashlightMode.Torch } - turnOn() + flashlight.set(mode) } } } + private fun getDialIndex(mode: FlashlightMode): Int { + return when (mode) { + FlashlightMode.Strobe1 -> 1 + FlashlightMode.Strobe2 -> 2 + FlashlightMode.Strobe3 -> 3 + FlashlightMode.Strobe4 -> 4 + FlashlightMode.Strobe5 -> 5 + FlashlightMode.Strobe6 -> 6 + FlashlightMode.Strobe7 -> 7 + FlashlightMode.Strobe8 -> 8 + FlashlightMode.Strobe9 -> 9 + FlashlightMode.Strobe200 -> 10 + FlashlightMode.Sos -> 11 + else -> 0 + } + } + private fun getStrobeMode(frequency: Int): FlashlightMode { return when (frequency) { 1 -> FlashlightMode.Strobe1 @@ -143,6 +158,9 @@ class FragmentToolFlashlight : BoundFragment() { override fun onResume() { super.onResume() flashlightMode = flashlight.getMode() + val index = getDialIndex(flashlightMode) + binding.flashlightDial.selected = index + binding.flashlightDial.scrollToOption(index) updateFlashlightUI() intervalometer.interval(20) binding.flashlightDial.areHapticsEnabled = true @@ -181,7 +199,7 @@ class FragmentToolFlashlight : BoundFragment() { } private fun turnOn() { - flashlight.set(selectedMode) + flashlight.set(flashlight.selectedMode) } private fun turnOff() { @@ -189,8 +207,14 @@ class FragmentToolFlashlight : BoundFragment() { } private fun update() { - flashlightMode = flashlight.getMode() - updateFlashlightUI() + val newMode = flashlight.getMode() + if (newMode != flashlightMode) { + flashlightMode = newMode + updateFlashlightUI() + val index = getDialIndex(flashlightMode) + binding.flashlightDial.selected = index + binding.flashlightDial.scrollToOption(index) + } } private fun updateTimer() {