Wrap null safe calls to cameraFlash with toasting

This commit is contained in:
Ensar Sarajčić 2023-09-20 11:57:47 +02:00
parent 0b64092651
commit 97b5389bc6

View File

@ -70,7 +70,9 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT
disableFlashlight() disableFlashlight()
} }
cameraFlash?.unregisterListeners() cameraFlash.runOrToast {
unregisterListeners()
}
if (!tryInitCamera()) { if (!tryInitCamera()) {
return false return false
@ -112,7 +114,9 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT
disableFlashlight() disableFlashlight()
} }
cameraFlash?.unregisterListeners() cameraFlash.runOrToast {
unregisterListeners()
}
return if (isSOSRunning) { return if (isSOSRunning) {
stopSOS() stopSOS()
@ -165,8 +169,10 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT
} }
try { try {
cameraFlash?.initialize() cameraFlash.runOrToast {
cameraFlash?.toggleFlashlight(true) initialize()
toggleFlashlight(true)
}
} catch (e: Exception) { } catch (e: Exception) {
context.showErrorToast(e) context.showErrorToast(e)
disableFlashlight() disableFlashlight()
@ -182,7 +188,9 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT
} }
try { try {
cameraFlash?.toggleFlashlight(false) cameraFlash.runOrToast {
toggleFlashlight(false)
}
} catch (e: Exception) { } catch (e: Exception) {
context.showErrorToast(e) context.showErrorToast(e)
disableFlashlight() disableFlashlight()
@ -206,13 +214,17 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT
} }
fun releaseCamera() { fun releaseCamera() {
cameraFlash?.unregisterListeners() cameraFlash.runOrToast {
unregisterListeners()
}
if (isFlashlightOn) { if (isFlashlightOn) {
disableFlashlight() disableFlashlight()
} }
cameraFlash?.release() cameraFlash.runOrToast {
release()
}
MyCameraImpl.cameraFlash = null MyCameraImpl.cameraFlash = null
cameraTorchListener = null cameraTorchListener = null
@ -236,10 +248,14 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT
handleCameraSetup() handleCameraSetup()
while (!shouldStroboscopeStop) { while (!shouldStroboscopeStop) {
try { try {
cameraFlash?.toggleFlashlight(true) cameraFlash.runOrToast {
toggleFlashlight(true)
}
val onDuration = if (isStroboSOS) SOS[sosIndex++ % SOS.size] else stroboFrequency val onDuration = if (isStroboSOS) SOS[sosIndex++ % SOS.size] else stroboFrequency
Thread.sleep(onDuration) Thread.sleep(onDuration)
cameraFlash?.toggleFlashlight(false) cameraFlash.runOrToast {
toggleFlashlight(false)
}
val offDuration = if (isStroboSOS) SOS[sosIndex++ % SOS.size] else stroboFrequency val offDuration = if (isStroboSOS) SOS[sosIndex++ % SOS.size] else stroboFrequency
Thread.sleep(offDuration) Thread.sleep(offDuration)
} catch (e: Exception) { } catch (e: Exception) {
@ -250,8 +266,10 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT
// disable flash immediately if stroboscope is stopped and normal flash mode is disabled // disable flash immediately if stroboscope is stopped and normal flash mode is disabled
if (shouldStroboscopeStop && !shouldEnableFlashlight) { if (shouldStroboscopeStop && !shouldEnableFlashlight) {
handleCameraSetup() handleCameraSetup()
cameraFlash?.toggleFlashlight(false) cameraFlash.runOrToast {
cameraFlash?.release() toggleFlashlight(false)
release()
}
MyCameraImpl.cameraFlash = null MyCameraImpl.cameraFlash = null
} }
@ -279,22 +297,41 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT
} }
fun getMaximumBrightnessLevel(): Int { fun getMaximumBrightnessLevel(): Int {
return cameraFlash?.getMaximumBrightnessLevel() ?: MIN_BRIGHTNESS_LEVEL return cameraFlash.runOrToastWithDefault(MIN_BRIGHTNESS_LEVEL) {
getMaximumBrightnessLevel()
}
} }
fun getCurrentBrightnessLevel(): Int { fun getCurrentBrightnessLevel(): Int {
return cameraFlash?.getCurrentBrightnessLevel() ?: DEFAULT_BRIGHTNESS_LEVEL return cameraFlash.runOrToastWithDefault(DEFAULT_BRIGHTNESS_LEVEL) {
getCurrentBrightnessLevel()
}
} }
fun supportsBrightnessControl(): Boolean { fun supportsBrightnessControl(): Boolean {
return cameraFlash?.supportsBrightnessControl() ?: false return cameraFlash.runOrToastWithDefault(false) {
supportsBrightnessControl()
}
} }
fun updateBrightnessLevel(level: Int) { fun updateBrightnessLevel(level: Int) {
cameraFlash?.changeTorchBrightness(level) cameraFlash.runOrToast {
changeTorchBrightness(level)
}
} }
fun onCameraNotAvailable() { fun onCameraNotAvailable() {
disableFlashlight() disableFlashlight()
} }
private fun <T> CameraFlash?.runOrToastWithDefault(defaultValue: T, block: CameraFlash.() -> T): T {
return try {
this!!.block()
} catch (e: Exception) {
context.showErrorToast(e)
defaultValue
}
}
private fun CameraFlash?.runOrToast(block: CameraFlash.() -> Unit) = runOrToastWithDefault(Unit, block)
} }