From 0b640926514487687a1a65872cc3e261c4f50169 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Wed, 20 Sep 2023 11:26:03 +0200 Subject: [PATCH] Handle cases when `camerFlash` may be null in `MyCameraImpl` --- .../flashlight/helpers/MyCameraImpl.kt | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyCameraImpl.kt b/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyCameraImpl.kt index e0c96a3..2320cc4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyCameraImpl.kt +++ b/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyCameraImpl.kt @@ -38,6 +38,14 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT fun newInstance(context: Context, cameraTorchListener: CameraTorchListener? = null) = MyCameraImpl(context, cameraTorchListener) } + private val cameraFlash: CameraFlash? + get() { + if (MyCameraImpl.cameraFlash == null) { + handleCameraSetup() + } + return MyCameraImpl.cameraFlash + } + init { handleCameraSetup() stroboFrequency = context.config.stroboscopeFrequency @@ -62,7 +70,7 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT disableFlashlight() } - cameraFlash!!.unregisterListeners() + cameraFlash?.unregisterListeners() if (!tryInitCamera()) { return false @@ -104,7 +112,7 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT disableFlashlight() } - cameraFlash!!.unregisterListeners() + cameraFlash?.unregisterListeners() return if (isSOSRunning) { stopSOS() @@ -131,8 +139,8 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT fun handleCameraSetup() { try { - if (cameraFlash == null) { - cameraFlash = CameraFlash(context, cameraTorchListener) + if (MyCameraImpl.cameraFlash == null) { + MyCameraImpl.cameraFlash = CameraFlash(context, cameraTorchListener) } } catch (e: Exception) { EventBus.getDefault().post(Events.CameraUnavailable()) @@ -157,8 +165,8 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT } try { - cameraFlash!!.initialize() - cameraFlash!!.toggleFlashlight(true) + cameraFlash?.initialize() + cameraFlash?.toggleFlashlight(true) } catch (e: Exception) { context.showErrorToast(e) disableFlashlight() @@ -174,7 +182,7 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT } try { - cameraFlash!!.toggleFlashlight(false) + cameraFlash?.toggleFlashlight(false) } catch (e: Exception) { context.showErrorToast(e) disableFlashlight() @@ -205,7 +213,7 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT } cameraFlash?.release() - cameraFlash = null + MyCameraImpl.cameraFlash = null cameraTorchListener = null isFlashlightOn = false @@ -228,10 +236,10 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT handleCameraSetup() while (!shouldStroboscopeStop) { try { - cameraFlash!!.toggleFlashlight(true) + cameraFlash?.toggleFlashlight(true) val onDuration = if (isStroboSOS) SOS[sosIndex++ % SOS.size] else stroboFrequency Thread.sleep(onDuration) - cameraFlash!!.toggleFlashlight(false) + cameraFlash?.toggleFlashlight(false) val offDuration = if (isStroboSOS) SOS[sosIndex++ % SOS.size] else stroboFrequency Thread.sleep(offDuration) } catch (e: Exception) { @@ -242,9 +250,9 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT // disable flash immediately if stroboscope is stopped and normal flash mode is disabled if (shouldStroboscopeStop && !shouldEnableFlashlight) { handleCameraSetup() - cameraFlash!!.toggleFlashlight(false) - cameraFlash!!.release() - cameraFlash = null + cameraFlash?.toggleFlashlight(false) + cameraFlash?.release() + MyCameraImpl.cameraFlash = null } shouldStroboscopeStop = false @@ -271,19 +279,19 @@ class MyCameraImpl private constructor(val context: Context, private var cameraT } fun getMaximumBrightnessLevel(): Int { - return cameraFlash!!.getMaximumBrightnessLevel() + return cameraFlash?.getMaximumBrightnessLevel() ?: MIN_BRIGHTNESS_LEVEL } fun getCurrentBrightnessLevel(): Int { - return cameraFlash!!.getCurrentBrightnessLevel() + return cameraFlash?.getCurrentBrightnessLevel() ?: DEFAULT_BRIGHTNESS_LEVEL } fun supportsBrightnessControl(): Boolean { - return cameraFlash!!.supportsBrightnessControl() + return cameraFlash?.supportsBrightnessControl() ?: false } fun updateBrightnessLevel(level: Int) { - cameraFlash!!.changeTorchBrightness(level) + cameraFlash?.changeTorchBrightness(level) } fun onCameraNotAvailable() {