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 e495b398..19722fa3 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt
@@ -27,6 +27,8 @@ import com.google.android.material.tabs.TabLayout
import com.simplemobiletools.camera.BuildConfig
import com.simplemobiletools.camera.R
import com.simplemobiletools.camera.extensions.config
+import com.simplemobiletools.camera.extensions.fadeIn
+import com.simplemobiletools.camera.extensions.fadeOut
import com.simplemobiletools.camera.extensions.toFlashModeId
import com.simplemobiletools.camera.helpers.*
import com.simplemobiletools.camera.implementations.CameraXInitializer
@@ -37,10 +39,16 @@ 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 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 {
@@ -74,7 +82,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
super.onCreate(savedInstanceState)
appLaunched(BuildConfig.APPLICATION_ID)
requestWindowFeature(Window.FEATURE_NO_TITLE)
- WindowCompat.setDecorFitsSystemWindows(window, false)
initVariables()
tryInitCamera()
@@ -243,9 +250,9 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
if (isTiramisuPlus()) {
handlePermission(PERMISSION_READ_MEDIA_IMAGES) { grantedReadImages ->
if (grantedReadImages) {
- handlePermission(PERMISSION_READ_MEDIA_VIDEO) { grantedReadVideos ->
- callback.invoke(grantedReadVideos)
- }
+ handlePermission(PERMISSION_READ_MEDIA_VIDEO, callback)
+ } else {
+ callback.invoke(false)
}
}
} else {
@@ -290,6 +297,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
defaultScene = Scene(top_options, default_icons)
flashModeScene = Scene(top_options, flash_toggle_group)
+ WindowCompat.setDecorFitsSystemWindows(window, false)
ViewCompat.setOnApplyWindowInsetsListener(view_holder) { _, windowInsets ->
val safeInsetBottom = windowInsets.displayCutout?.safeInsetBottom ?: 0
val safeInsetTop = windowInsets.displayCutout?.safeInsetTop ?: 0
@@ -524,11 +532,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
}
}
- private fun showTimer() {
- video_rec_curr_timer.beVisible()
- setupTimer()
- }
-
private fun hideTimer() {
video_rec_curr_timer.text = 0.getFormattedDuration()
video_rec_curr_timer.beGone()
@@ -536,15 +539,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
mTimerHandler.removeCallbacksAndMessages(null)
}
- private fun setupTimer() {
- runOnUiThread(object : Runnable {
- override fun run() {
- video_rec_curr_timer.text = mCurrVideoRecTimer++.getFormattedDuration()
- mTimerHandler.postDelayed(this, 1000L)
- }
- })
- }
-
private fun resumeCameraItems() {
if (!mIsInPhotoMode) {
initVideoButtons()
@@ -557,7 +551,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
private fun hasPhotoModePermissions(): Boolean {
return if (isTiramisuPlus()) {
- hasPermission(PERMISSION_READ_MEDIA_IMAGES) && hasPermission(PERMISSION_CAMERA)
+ hasPermission(PERMISSION_READ_MEDIA_IMAGES) && hasPermission(PERMISSION_READ_MEDIA_VIDEO) && hasPermission(PERMISSION_CAMERA)
} else {
hasPermission(PERMISSION_WRITE_STORAGE) && hasPermission(PERMISSION_CAMERA)
}
@@ -681,21 +675,28 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
override fun onVideoRecordingStarted() {
camera_mode_tab.beInvisible()
- shutter.isSelected = true
- toggle_camera.beInvisible()
+ video_rec_curr_timer.beVisible()
+
+ toggle_camera.fadeOut()
+ last_photo_video_preview.fadeOut()
+
change_resolution.isEnabled = false
settings.isEnabled = false
- video_rec_curr_timer.beVisible()
+ shutter.isSelected = true
}
override fun onVideoRecordingStopped() {
camera_mode_tab.beVisible()
- shutter.isSelected = false
+
+ toggle_camera.fadeIn()
+ last_photo_video_preview.fadeIn()
+
video_rec_curr_timer.text = 0.getFormattedDuration()
video_rec_curr_timer.beGone()
+
+ shutter.isSelected = false
change_resolution.isEnabled = true
settings.isEnabled = true
- toggle_camera.beVisible()
}
override fun onVideoDurationChanged(durationNanos: Long) {
@@ -820,33 +821,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
button.iconTint = ColorStateList(states, iconColors)
}
- fun setRecordingState(isRecording: Boolean) {
- runOnUiThread {
- if (isRecording) {
- shutter.isSelected = true
- toggle_camera.beInvisible()
- showTimer()
- } else {
- shutter.isSelected = false
- hideTimer()
- }
- }
- }
-
- fun videoSaved(uri: Uri) {
- setupPreviewImage(false)
- if (isVideoCaptureIntent()) {
- Intent().apply {
- data = uri
- flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
- setResult(Activity.RESULT_OK, this)
- }
- finish()
- }
- }
-
- fun drawFocusCircle(x: Float, y: Float) = mFocusCircleView.drawFocusCircle(x, y)
-
override fun mediaSaved(path: String) {
rescanPaths(arrayListOf(path)) {
setupPreviewImage(true)
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/extensions/View.kt b/app/src/main/kotlin/com/simplemobiletools/camera/extensions/View.kt
new file mode 100644
index 00000000..66fed9bd
--- /dev/null
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/extensions/View.kt
@@ -0,0 +1,12 @@
+package com.simplemobiletools.camera.extensions
+
+import android.view.View
+import com.simplemobiletools.commons.helpers.SHORT_ANIMATION_DURATION
+
+fun View.fadeIn() {
+ animate().alpha(1f).setDuration(SHORT_ANIMATION_DURATION).withStartAction { isClickable = true }.start()
+}
+
+fun View.fadeOut() {
+ animate().alpha(0f).setDuration(SHORT_ANIMATION_DURATION).withEndAction { isClickable = false }.start()
+}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 50eb37ae..91e32770 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -6,8 +6,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
- android:background="@android:color/black"
- android:fitsSystemWindows="true">
+ android:background="@android:color/black">