show/hide brightness seekbar from camera callback

This commit is contained in:
darthpaul 2022-11-09 09:36:08 +00:00
parent 75eca9e3f0
commit 87b678e4bb
4 changed files with 40 additions and 12 deletions

View File

@ -19,6 +19,7 @@ import com.simplemobiletools.commons.models.FAQItem
import com.simplemobiletools.flashlight.BuildConfig import com.simplemobiletools.flashlight.BuildConfig
import com.simplemobiletools.flashlight.R import com.simplemobiletools.flashlight.R
import com.simplemobiletools.flashlight.extensions.config import com.simplemobiletools.flashlight.extensions.config
import com.simplemobiletools.flashlight.helpers.CameraTorchListener
import com.simplemobiletools.flashlight.helpers.MIN_BRIGHTNESS_LEVEL import com.simplemobiletools.flashlight.helpers.MIN_BRIGHTNESS_LEVEL
import com.simplemobiletools.flashlight.helpers.MyCameraImpl import com.simplemobiletools.flashlight.helpers.MyCameraImpl
import com.simplemobiletools.flashlight.models.Events import com.simplemobiletools.flashlight.models.Events
@ -54,10 +55,6 @@ class MainActivity : SimpleActivity() {
flashlight_btn.setOnClickListener { flashlight_btn.setOnClickListener {
mCameraImpl!!.toggleFlashlight() mCameraImpl!!.toggleFlashlight()
if (mCameraImpl?.supportsBrightnessControl() == true) {
brightness_bar.beInvisibleIf(brightness_bar.isVisible)
stroboscope_bar.beInvisible()
}
} }
sos_btn.setOnClickListener { sos_btn.setOnClickListener {
@ -184,7 +181,13 @@ class MainActivity : SimpleActivity() {
} }
private fun setupCameraImpl() { private fun setupCameraImpl() {
mCameraImpl = MyCameraImpl.newInstance(this) mCameraImpl = MyCameraImpl.newInstance(this, object : CameraTorchListener {
override fun onTorchEnabled(isEnabled: Boolean) {
if (mCameraImpl?.supportsBrightnessControl() == true) {
brightness_bar.beVisibleIf(isEnabled)
}
}
})
if (config.turnFlashlightOn) { if (config.turnFlashlightOn) {
mCameraImpl!!.enableFlashlight() mCameraImpl!!.enableFlashlight()
} }
@ -233,7 +236,6 @@ class MainActivity : SimpleActivity() {
sos_btn.setTextColor(if (isSOSRunning) getProperPrimaryColor() else getContrastColor()) sos_btn.setTextColor(if (isSOSRunning) getProperPrimaryColor() else getContrastColor())
} else if (mCameraImpl!!.toggleStroboscope()) { } else if (mCameraImpl!!.toggleStroboscope()) {
stroboscope_bar.beInvisibleIf(stroboscope_bar.isVisible()) stroboscope_bar.beInvisibleIf(stroboscope_bar.isVisible())
brightness_bar.beInvisible()
changeIconColor(if (stroboscope_bar.isVisible()) getProperPrimaryColor() else getContrastColor(), stroboscope_btn) changeIconColor(if (stroboscope_bar.isVisible()) getProperPrimaryColor() else getContrastColor(), stroboscope_btn)
} }
} }

View File

@ -0,0 +1,5 @@
package com.simplemobiletools.flashlight.helpers
interface CameraTorchListener {
fun onTorchEnabled(isEnabled:Boolean)
}

View File

@ -1,5 +1,6 @@
package com.simplemobiletools.flashlight.helpers package com.simplemobiletools.flashlight.helpers
import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.graphics.SurfaceTexture import android.graphics.SurfaceTexture
import android.hardware.Camera import android.hardware.Camera
@ -14,7 +15,7 @@ import com.simplemobiletools.flashlight.extensions.updateWidgets
import com.simplemobiletools.flashlight.models.Events import com.simplemobiletools.flashlight.models.Events
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
class MyCameraImpl(val context: Context) { class MyCameraImpl private constructor(val context: Context, private val cameraTorchListener: CameraTorchListener?) {
var stroboFrequency = 1000L var stroboFrequency = 1000L
companion object { companion object {
@ -40,7 +41,7 @@ class MyCameraImpl(val context: Context) {
@Volatile @Volatile
private var isSOSRunning = false private var isSOSRunning = false
fun newInstance(context: Context) = MyCameraImpl(context) fun newInstance(context: Context, cameraTorchListener: CameraTorchListener? = null) = MyCameraImpl(context, cameraTorchListener)
} }
init { init {
@ -140,9 +141,10 @@ class MyCameraImpl(val context: Context) {
} }
} }
@SuppressLint("NewApi")
private fun setupMarshmallowCamera() { private fun setupMarshmallowCamera() {
if (marshmallowCamera == null) { if (marshmallowCamera == null) {
marshmallowCamera = PostMarshmallowCamera(context) marshmallowCamera = PostMarshmallowCamera(context, cameraTorchListener)
} }
} }
@ -209,6 +211,7 @@ class MyCameraImpl(val context: Context) {
val mainRunnable = Runnable { stateChanged(true) } val mainRunnable = Runnable { stateChanged(true) }
Handler(context.mainLooper).post(mainRunnable) Handler(context.mainLooper).post(mainRunnable)
marshmallowCamera?.initialize()
} }
private fun disableFlashlight() { private fun disableFlashlight() {
@ -254,6 +257,7 @@ class MyCameraImpl(val context: Context) {
isFlashlightOn = false isFlashlightOn = false
shouldStroboscopeStop = true shouldStroboscopeStop = true
marshmallowCamera?.cleanUp()
} }
private val stroboscope = Runnable { private val stroboscope = Runnable {

View File

@ -1,22 +1,32 @@
package com.simplemobiletools.flashlight.helpers package com.simplemobiletools.flashlight.helpers
import android.annotation.TargetApi
import android.content.Context import android.content.Context
import android.hardware.camera2.CameraCharacteristics import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraManager import android.hardware.camera2.CameraManager
import android.os.Build import android.os.Build
import android.os.Handler import android.os.Handler
import androidx.annotation.RequiresApi
import com.simplemobiletools.commons.extensions.showErrorToast import com.simplemobiletools.commons.extensions.showErrorToast
import com.simplemobiletools.commons.helpers.isTiramisuPlus import com.simplemobiletools.commons.helpers.isTiramisuPlus
import com.simplemobiletools.flashlight.extensions.config import com.simplemobiletools.flashlight.extensions.config
import com.simplemobiletools.flashlight.models.Events import com.simplemobiletools.flashlight.models.Events
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
internal class PostMarshmallowCamera constructor(val context: Context) { @RequiresApi(Build.VERSION_CODES.M)
internal class PostMarshmallowCamera(
private val context: Context,
private val cameraTorchListener: CameraTorchListener? = null,
) {
private val manager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager private val manager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
private var cameraId: String? = null private var cameraId: String? = null
private val torchCallback = object : CameraManager.TorchCallback() {
override fun onTorchModeChanged(cameraId: String, enabled: Boolean) {
cameraTorchListener?.onTorchEnabled(enabled)
}
}
init { init {
try { try {
cameraId = manager.cameraIdList[0] ?: "0" cameraId = manager.cameraIdList[0] ?: "0"
@ -25,7 +35,6 @@ internal class PostMarshmallowCamera constructor(val context: Context) {
} }
} }
@TargetApi(Build.VERSION_CODES.M)
fun toggleMarshmallowFlashlight(enable: Boolean) { fun toggleMarshmallowFlashlight(enable: Boolean) {
try { try {
manager.setTorchMode(cameraId!!, enable) manager.setTorchMode(cameraId!!, enable)
@ -69,4 +78,12 @@ internal class PostMarshmallowCamera constructor(val context: Context) {
} }
return brightnessLevel return brightnessLevel
} }
fun initialize() {
manager.registerTorchCallback(torchCallback, Handler(context.mainLooper))
}
fun cleanUp() {
manager.unregisterTorchCallback(torchCallback)
}
} }