Skip to content

Commit 917863b

Browse files
fix: handle preferred levels above max current level (#148)
* Clamp stale preferred flashlight levels * Keep level validation in camera handling
1 parent fdf75b7 commit 917863b

3 files changed

Lines changed: 25 additions & 7 deletions

File tree

‎app/src/main/kotlin/com/cyb3rko/flashdim/Camera.kt‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,30 @@ internal class Camera(activity: AppCompatActivity) {
7575
fun doesDeviceHaveFlash(packageManager: PackageManager): Boolean =
7676
packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)
7777

78+
fun getValidFlashLevel(
79+
cameraManager: CameraManager,
80+
cameraId: String,
81+
requestedLevel: Int
82+
): Int {
83+
if (requestedLevel < 1) return -1
84+
85+
val maxLevel = cameraManager.getCameraCharacteristics(cameraId)
86+
.get(CameraCharacteristics.FLASH_INFO_STRENGTH_MAXIMUM_LEVEL)
87+
?: return -1
88+
return requestedLevel.coerceAtMost(maxLevel)
89+
}
90+
7891
fun sendLightLevel(context: Context, level: Int, activate: Boolean) {
7992
try {
8093
val cameraManager = context.getSystemService(Context.CAMERA_SERVICE)
8194
as CameraManager
8295
val cameraId = cameraManager.cameraIdList[0]
8396
if (activate) {
84-
if (level == -1) {
97+
val validLevel = getValidFlashLevel(cameraManager, cameraId, level)
98+
if (validLevel == -1) {
8599
cameraManager.setTorchMode(cameraId, true)
86100
} else {
87-
cameraManager.turnOnTorchWithStrengthLevel(cameraId, level)
101+
cameraManager.turnOnTorchWithStrengthLevel(cameraId, validLevel)
88102
}
89103
} else {
90104
cameraManager.setTorchMode(cameraId, false)

‎app/src/main/kotlin/com/cyb3rko/flashdim/activities/MainActivity.kt‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ class MainActivity : AppCompatActivity() {
9696
maxLevel = camera.maxLevel
9797
Safe.initialize(this)
9898
Safe.writeInt(Safe.MAX_LEVEL, maxLevel)
99-
if (Safe.getInt(Safe.PREFERRED_LEVEL, -1) == -1) {
99+
val preferredLevel = Safe.getInt(Safe.PREFERRED_LEVEL, -1)
100+
if (maxLevel > 0 && preferredLevel !in 1..maxLevel) {
100101
Safe.writeInt(Safe.PREFERRED_LEVEL, maxLevel)
101102
}
102103

‎app/src/main/kotlin/com/cyb3rko/flashdim/quicksettings/SettingsTile.kt‎

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import android.os.Looper
2323
import android.service.quicksettings.Tile
2424
import android.service.quicksettings.TileService
2525
import android.util.Log
26+
import com.cyb3rko.flashdim.Camera
2627
import com.cyb3rko.flashdim.handleFlashlightException
2728
import com.cyb3rko.flashdim.utils.Safe
2829

@@ -192,14 +193,16 @@ class SettingsTile : TileService() {
192193
}
193194

194195
private fun sendFlashlightSignal(cameraManager: CameraManager, level: Int, activate: Boolean) {
196+
val cameraId = cameraManager.cameraIdList[0]
195197
if (activate) {
196-
if (level == -1) {
197-
cameraManager.setTorchMode(cameraManager.cameraIdList[0], true)
198+
val validLevel = Camera.getValidFlashLevel(cameraManager, cameraId, level)
199+
if (validLevel == -1) {
200+
cameraManager.setTorchMode(cameraId, true)
198201
} else {
199-
cameraManager.turnOnTorchWithStrengthLevel(cameraManager.cameraIdList[0], level)
202+
cameraManager.turnOnTorchWithStrengthLevel(cameraId, validLevel)
200203
}
201204
} else {
202-
cameraManager.setTorchMode(cameraManager.cameraIdList[0], false)
205+
cameraManager.setTorchMode(cameraId, false)
203206
}
204207
}
205208

0 commit comments

Comments
 (0)