diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt
index e71f3231..d2f6c140 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt
@@ -40,17 +40,11 @@ import com.simplemobiletools.camera.views.FocusCircleView
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.Release
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.layout_flash.*
+import kotlinx.android.synthetic.main.layout_top.*
import java.util.concurrent.TimeUnit
import kotlin.math.abs
-import kotlinx.android.synthetic.main.activity_main.*
-import kotlinx.android.synthetic.main.layout_flash.flash_auto
-import kotlinx.android.synthetic.main.layout_flash.flash_off
-import kotlinx.android.synthetic.main.layout_flash.flash_on
-import kotlinx.android.synthetic.main.layout_flash.flash_toggle_group
-import kotlinx.android.synthetic.main.layout_top.change_resolution
-import kotlinx.android.synthetic.main.layout_top.default_icons
-import kotlinx.android.synthetic.main.layout_top.settings
-import kotlinx.android.synthetic.main.layout_top.toggle_flash
class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, CameraXPreviewListener {
private companion object {
@@ -352,7 +346,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
mTimerHandler = Handler(Looper.getMainLooper())
setupPreviewImage(true)
- val initialFlashlightState = if (mIsInPhotoMode) config.flashlightState else FLASH_OFF
+ val initialFlashlightState = if (mIsInPhotoMode && config.flashlightState != FLASH_ALWAYS_ON) config.flashlightState else FLASH_OFF
mPreview!!.setFlashlightState(initialFlashlightState)
updateFlashlightState(initialFlashlightState)
initFlashModeTransitionNames()
@@ -363,6 +357,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
flash_auto.transitionName = "$baseName$FLASH_AUTO"
flash_off.transitionName = "$baseName$FLASH_OFF"
flash_on.transitionName = "$baseName$FLASH_ON"
+ flash_always_on.transitionName = "$baseName$FLASH_ALWAYS_ON"
}
private fun initButtons() {
@@ -384,10 +379,13 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
flash_auto.setShadowIcon(R.drawable.ic_flash_auto_vector)
flash_auto.setOnClickListener { selectFlashMode(FLASH_AUTO) }
+
+ flash_always_on.setShadowIcon(R.drawable.ic_flashlight_vector)
+ flash_always_on.setOnClickListener { selectFlashMode(FLASH_ALWAYS_ON) }
}
@SuppressLint("ClickableViewAccessibility")
- private fun initModeSwitcher(){
+ private fun initModeSwitcher() {
val gestureDetector = GestureDetector(this, object : GestureDetector.SimpleOnGestureListener() {
override fun onFling(event1: MotionEvent, event2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
val deltaX = event1.x - event2.x
@@ -456,7 +454,8 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
val flashDrawable = when (state) {
FLASH_OFF -> R.drawable.ic_flash_off_vector
FLASH_ON -> R.drawable.ic_flash_on_vector
- else -> R.drawable.ic_flash_auto_vector
+ FLASH_AUTO -> R.drawable.ic_flash_auto_vector
+ else -> R.drawable.ic_flashlight_vector
}
toggle_flash.setShadowIcon(flashDrawable)
toggle_flash.transitionName = "${getString(R.string.toggle_flash)}$state"
@@ -849,6 +848,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
val transitionSet = createTransition()
TransitionManager.go(flashModeScene, transitionSet)
flash_auto.beVisibleIf(photoCapture)
+ flash_always_on.beVisibleIf(photoCapture)
flash_toggle_group.check(config.flashlightState.toFlashModeId())
flash_toggle_group.beVisible()
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Int.kt b/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Int.kt
index 78767ee3..5a2f9877 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Int.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/extensions/Int.kt
@@ -3,6 +3,7 @@ package com.simplemobiletools.camera.extensions
import androidx.camera.core.CameraSelector
import androidx.camera.core.ImageCapture
import com.simplemobiletools.camera.R
+import com.simplemobiletools.camera.helpers.FLASH_ALWAYS_ON
import com.simplemobiletools.camera.helpers.FLASH_AUTO
import com.simplemobiletools.camera.helpers.FLASH_OFF
import com.simplemobiletools.camera.helpers.FLASH_ON
@@ -12,6 +13,7 @@ fun Int.toCameraXFlashMode(): Int {
FLASH_ON -> ImageCapture.FLASH_MODE_ON
FLASH_OFF -> ImageCapture.FLASH_MODE_OFF
FLASH_AUTO -> ImageCapture.FLASH_MODE_AUTO
+ FLASH_ALWAYS_ON -> ImageCapture.FLASH_MODE_OFF
else -> throw IllegalArgumentException("Unknown mode: $this")
}
}
@@ -30,6 +32,7 @@ fun Int.toFlashModeId(): Int {
FLASH_ON -> R.id.flash_on
FLASH_OFF -> R.id.flash_off
FLASH_AUTO -> R.id.flash_auto
+ FLASH_ALWAYS_ON -> R.id.flash_always_on
else -> throw IllegalArgumentException("Unknown mode: $this")
}
}
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Constants.kt
index 25de1cd6..d3c075e0 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Constants.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/Constants.kt
@@ -24,6 +24,7 @@ const val CAPTURE_MODE = "capture_mode"
const val FLASH_OFF = 0
const val FLASH_ON = 1
const val FLASH_AUTO = 2
+const val FLASH_ALWAYS_ON = 3
fun compensateDeviceRotation(orientation: Int) = when (orientation) {
ORIENT_LANDSCAPE_LEFT -> 270
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt b/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt
index 89cf2500..50c40428 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt
@@ -395,15 +395,17 @@ class CameraXPreview(
}
override fun setFlashlightState(state: Int) {
- val newFlashMode = state.toCameraXFlashMode()
- if (!isPhotoCapture) {
- camera?.cameraControl?.enableTorch(newFlashMode == FLASH_MODE_ON)
+ if (isPhotoCapture) {
+ camera?.cameraControl?.enableTorch(state == FLASH_ALWAYS_ON)
+ } else {
+ camera?.cameraControl?.enableTorch(state == FLASH_ON || state == FLASH_ALWAYS_ON)
}
+ val newFlashMode = state.toCameraXFlashMode()
flashMode = newFlashMode
imageCapture?.flashMode = newFlashMode
- val appFlashMode = flashMode.toAppFlashMode()
- config.flashlightState = appFlashMode
- listener.onChangeFlashMode(appFlashMode)
+
+ config.flashlightState = state
+ listener.onChangeFlashMode(state)
}
override fun tryTakePicture() {
diff --git a/app/src/main/res/drawable/ic_flashlight_vector.xml b/app/src/main/res/drawable/ic_flashlight_vector.xml
new file mode 100644
index 00000000..1fc85f00
--- /dev/null
+++ b/app/src/main/res/drawable/ic_flashlight_vector.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/app/src/main/res/layout/layout_flash.xml b/app/src/main/res/layout/layout_flash.xml
index 2f2c05b0..2babccb2 100644
--- a/app/src/main/res/layout/layout_flash.xml
+++ b/app/src/main/res/layout/layout_flash.xml
@@ -10,7 +10,6 @@
app:singleSelection="true"
tools:visibility="visible">
-
+