File tree Expand file tree Collapse file tree
app/src/main/kotlin/com/cyb3rko/flashdim Expand file tree Collapse file tree Original file line number Diff line number Diff 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 )
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change @@ -23,6 +23,7 @@ import android.os.Looper
2323import android.service.quicksettings.Tile
2424import android.service.quicksettings.TileService
2525import android.util.Log
26+ import com.cyb3rko.flashdim.Camera
2627import com.cyb3rko.flashdim.handleFlashlightException
2728import 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
You can’t perform that action at this time.
0 commit comments