From 5de7bd235b51a5197f0e58dee1292bcd04d21fe7 Mon Sep 17 00:00:00 2001 From: FineFindus Date: Tue, 6 Aug 2024 15:18:03 +0200 Subject: [PATCH 1/3] feat(tiles/dimmer): restart cycle when torch is disabled externally Changes the DimmerSettingsTile to always start from the dimmest mode if the toch is disabled. Previously it would continue from the last mode, which was confusing to the user, since suddenly the tile acted different when tapped. --- .../com/cyb3rko/flashdim/tiles/DimmerSettingsTile.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/cyb3rko/flashdim/tiles/DimmerSettingsTile.kt b/app/src/main/kotlin/com/cyb3rko/flashdim/tiles/DimmerSettingsTile.kt index abcd065..e088ee5 100644 --- a/app/src/main/kotlin/com/cyb3rko/flashdim/tiles/DimmerSettingsTile.kt +++ b/app/src/main/kotlin/com/cyb3rko/flashdim/tiles/DimmerSettingsTile.kt @@ -28,11 +28,15 @@ import com.cyb3rko.flashdim.utils.Safe class DimmerSettingsTile : TileService() { private var description = "" + private var enabled = false override fun onClick() { if (qsTile.state == Tile.STATE_UNAVAILABLE) return Safe.initialize(applicationContext) - val mode = Safe.getInt(Safe.QUICKTILE_DIM_MODE, DIMMER_MIN) + var mode = Safe.getInt(Safe.QUICKTILE_DIM_MODE, DIMMER_MIN) + if (!enabled) + // torch was disabled externally, continue again from initial state + mode = DIMMER_MIN description = mode.description() val maxLevel = Safe.getInt(Safe.MAX_LEVEL, -1) @@ -73,6 +77,7 @@ class DimmerSettingsTile : TileService() { if (description.isNotEmpty()) qsTile.subtitle = "State: $description" qsTile.state = if (enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE qsTile.updateTile() + this@DimmerSettingsTile.enabled = enabled } }, Handler(Looper.getMainLooper()) From 02f06e0879b9756ab4a7fa086a1951d5634d3230 Mon Sep 17 00:00:00 2001 From: FineFindus Date: Tue, 6 Aug 2024 15:21:16 +0200 Subject: [PATCH 2/3] fix(Tiles/Dimmer): always display off state if torch is disabled Fixes an issue, where if the torch was externally disabled, the mode should continue to show the (now outdated) mode instead of off. --- .../kotlin/com/cyb3rko/flashdim/tiles/DimmerSettingsTile.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/cyb3rko/flashdim/tiles/DimmerSettingsTile.kt b/app/src/main/kotlin/com/cyb3rko/flashdim/tiles/DimmerSettingsTile.kt index e088ee5..e7d45af 100644 --- a/app/src/main/kotlin/com/cyb3rko/flashdim/tiles/DimmerSettingsTile.kt +++ b/app/src/main/kotlin/com/cyb3rko/flashdim/tiles/DimmerSettingsTile.kt @@ -74,7 +74,9 @@ class DimmerSettingsTile : TileService() { object : CameraManager.TorchCallback() { override fun onTorchModeChanged(cameraId: String, enabled: Boolean) { if (qsTile == null) return - if (description.isNotEmpty()) qsTile.subtitle = "State: $description" + qsTile.subtitle = + if (description.isNotEmpty() && enabled) "State: $description" + else "State: ${DIMMER_OFF.description()}" qsTile.state = if (enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE qsTile.updateTile() this@DimmerSettingsTile.enabled = enabled From 63c7b21fac0a222f5d924cbf79b99edc287b6aeb Mon Sep 17 00:00:00 2001 From: Niko Diamadis Date: Sun, 13 Apr 2025 15:53:11 +0200 Subject: [PATCH 3/3] fix: restructure settings tile logic --- .../flashdim/quicksettings/SettingsTile.kt | 137 +++++++++--------- app/src/main/res/xml/preferences.xml | 2 +- 2 files changed, 69 insertions(+), 70 deletions(-) diff --git a/app/src/main/kotlin/com/cyb3rko/flashdim/quicksettings/SettingsTile.kt b/app/src/main/kotlin/com/cyb3rko/flashdim/quicksettings/SettingsTile.kt index 3ea4d2c..9111b2a 100644 --- a/app/src/main/kotlin/com/cyb3rko/flashdim/quicksettings/SettingsTile.kt +++ b/app/src/main/kotlin/com/cyb3rko/flashdim/quicksettings/SettingsTile.kt @@ -31,24 +31,6 @@ class SettingsTile : TileService() { private var description = "" private var enabled = false - override fun onClick() { - if (qsTile.state == Tile.STATE_UNAVAILABLE) return - - var toggleMode = false - try { - Safe.initialize(applicationContext) - toggleMode = Safe.getBoolean(Safe.QUICKTILE_TOGGLE_MODE, true) - } catch (_: Exception) { - Log.e("FlashDim", "Safe operations failed in SettingsTile") - } - - if (toggleMode) { - actAsToggle() - } else { - actAsDimmer() - } - } - override fun onStartListening() { super.onStartListening() if (qsTile == null) { @@ -75,6 +57,41 @@ class SettingsTile : TileService() { cameraManager = null } + override fun onClick() { + if (qsTile.state == Tile.STATE_UNAVAILABLE) return + + var toggleMode = false + try { + Safe.initialize(applicationContext) + toggleMode = Safe.getBoolean(Safe.QUICKTILE_TOGGLE_MODE, true) + } catch (_: Exception) { + Log.e("FlashDim", "Safe operations failed in SettingsTile") + } + + if (toggleMode) { + actAsToggle() + } else { + actAsDimmer() + } + } + + private fun initAsToggle() { + Log.d("FlashDim", "Initializing SettingsTile (toggle)") + cameraManager?.registerTorchCallback( + object : TorchCallback() { + override fun onTorchModeChanged(cameraId: String, enabled: Boolean) { + if (qsTile == null) return + Safe.initialize(applicationContext) + Safe.writeBoolean(Safe.FLASH_ACTIVE, enabled) + this@SettingsTile.enabled = enabled + qsTile.state = if (enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE + qsTile.updateTile() + } + }, + Handler(Looper.getMainLooper()) + ) + } + private fun initAsDimmer() { Log.d("FlashDim", "Initializing SettingsTile (dimmer)") if (Safe.getInt(Safe.MAX_LEVEL, -1) < 2) { @@ -87,13 +104,6 @@ class SettingsTile : TileService() { object : TorchCallback() { override fun onTorchModeChanged(cameraId: String, enabled: Boolean) { if (qsTile == null) return - - qsTile.subtitle = if (description.isNotEmpty() && enabled) { - "State: $description" - } else { - "State: ${DIMMER_OFF.description()}" - } - this@SettingsTile.enabled = enabled qsTile.state = if (enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE qsTile.updateTile() @@ -104,20 +114,34 @@ class SettingsTile : TileService() { } } - private fun initAsToggle() { - Log.d("FlashDim", "Initializing SettingsTile (toggle)") - cameraManager?.registerTorchCallback( - object : TorchCallback() { - override fun onTorchModeChanged(cameraId: String, enabled: Boolean) { - if (qsTile == null) return - Safe.initialize(applicationContext) - Safe.writeBoolean(Safe.FLASH_ACTIVE, enabled) - qsTile.state = if (enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE - qsTile.updateTile() + private fun actAsToggle() { + var level = -1 + try { + if (Safe.getBoolean(Safe.QUICK_SETTINGS_LINK, false)) { + level = Safe.getInt(Safe.INITIAL_LEVEL, 1) + } + } catch (_: Exception) { + Log.e("FlashDim", "Safe operations failed in SettingsTile") + } + + qsTile.subtitle = null + try { + if (cameraManager == null) { + Log.d("FlashDim", "Initializing CameraManager from SettingsTile (toggle)") + cameraManager = getSystemService(CAMERA_SERVICE) as CameraManager + } + cameraManager?.let { + Log.d("FlashDim", "Toggling flashlight from SettingsTile (toggle)") + when (qsTile.state) { + Tile.STATE_INACTIVE -> sendFlashlightSignal(it, level, true) + Tile.STATE_ACTIVE -> sendFlashlightSignal(it, level, false) } - }, - Handler(Looper.getMainLooper()) - ) + } + } catch (e: Exception) { + Log.e("FlashDim", "Camera access failed in SettingsFilel (toggle)") + handleFlashlightException(e) + e.printStackTrace() + } } private fun actAsDimmer() { @@ -128,12 +152,12 @@ class SettingsTile : TileService() { } else { try { stage = Safe.getInt(Safe.QUICKTILE_DIM_STAGE, DIMMER_MIN) - description = stage.description() } catch (_: Exception) { Log.e("FlashDim", "Safe operations failed in SettingsTile") stage = DIMMER_MIN } } + description = stage.description() val maxLevel = Safe.getInt(Safe.MAX_LEVEL, -1) val newLevel = when (stage) { @@ -158,40 +182,15 @@ class SettingsTile : TileService() { handleFlashlightException(e) e.printStackTrace() } - qsTile.subtitle = "State: ${stage.description()}" + qsTile.subtitle = if (!enabled) { + "State: ${DIMMER_MIN.description()}" + } else { + "State: $description" + } qsTile.updateTile() Safe.writeInt(Safe.QUICKTILE_DIM_STAGE, stage.next()) } - private fun actAsToggle() { - var level = -1 - try { - if (Safe.getBoolean(Safe.QUICK_SETTINGS_LINK, false)) { - level = Safe.getInt(Safe.INITIAL_LEVEL, 1) - } - } catch (_: Exception) { - Log.e("FlashDim", "Safe operations failed in SettingsTile") - } - - try { - if (cameraManager == null) { - Log.d("FlashDim", "Initializing CameraManager from SettingsTile (toggle)") - cameraManager = getSystemService(CAMERA_SERVICE) as CameraManager - } - cameraManager?.let { - Log.d("FlashDim", "Toggling flashlight from SettingsTile (toggle)") - when (qsTile.state) { - Tile.STATE_INACTIVE -> sendFlashlightSignal(it, level, true) - Tile.STATE_ACTIVE -> sendFlashlightSignal(it, level, false) - } - } - } catch (e: Exception) { - Log.e("FlashDim", "Camera access failed in SettingsFilel (toggle)") - handleFlashlightException(e) - e.printStackTrace() - } - } - private fun sendFlashlightSignal(cameraManager: CameraManager, level: Int, activate: Boolean) { if (activate) { if (level == -1) { diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index fd29595..732cdc2 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -29,7 +29,7 @@