From 6bc74d8066b7837f5f0d6ea4a7b1be1218e0e321 Mon Sep 17 00:00:00 2001
From: darthpaul <paulakhamiogu@gmail.com>
Date: Wed, 13 Jul 2022 16:16:17 +0100
Subject: [PATCH 1/5] fix warnings in activity_main - add contentDescription
 attribute on the ImageView icons for accessibility

---
 app/src/main/res/layout/activity_main.xml | 23 ++++++++++++++++-------
 app/src/main/res/values/strings.xml       |  7 +++++++
 2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 690e9001..0b5ac725 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/view_holder"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -10,7 +11,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
 
-    <ImageView
+    <View
         android:id="@+id/capture_black_screen"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
@@ -21,7 +22,8 @@
         android:id="@+id/settings"
         android:layout_width="@dimen/icon_size"
         android:layout_height="@dimen/icon_size"
-        android:layout_alignParentRight="true"
+        android:layout_alignParentEnd="true"
+        android:contentDescription="@string/settings"
         android:padding="@dimen/normal_margin"
         android:src="@drawable/ic_settings_cog_vector" />
 
@@ -30,7 +32,8 @@
         android:layout_width="@dimen/icon_size"
         android:layout_height="@dimen/icon_size"
         android:layout_below="@+id/settings"
-        android:layout_alignParentRight="true"
+        android:layout_alignParentEnd="true"
+        android:contentDescription="@string/toggle_photo_video"
         android:padding="@dimen/normal_margin"
         android:src="@drawable/ic_video_vector" />
 
@@ -39,7 +42,8 @@
         android:layout_width="@dimen/icon_size"
         android:layout_height="@dimen/icon_size"
         android:layout_below="@+id/toggle_photo_video"
-        android:layout_alignParentRight="true"
+        android:layout_alignParentEnd="true"
+        android:contentDescription="@string/resolution"
         android:padding="@dimen/normal_margin"
         android:src="@drawable/ic_resolution_vector" />
 
@@ -48,13 +52,15 @@
         android:layout_width="@dimen/icon_size"
         android:layout_height="@dimen/icon_size"
         android:layout_below="@+id/change_resolution"
-        android:layout_alignParentRight="true"
+        android:layout_alignParentEnd="true"
+        android:contentDescription="@string/view_last_media"
         android:padding="@dimen/medium_margin" />
 
     <LinearLayout
         android:id="@+id/btn_holder"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+
         android:layout_alignParentBottom="true"
         android:gravity="center_horizontal|bottom">
 
@@ -63,6 +69,7 @@
             android:layout_width="@dimen/icon_size"
             android:layout_height="@dimen/icon_size"
             android:layout_weight="1"
+            android:contentDescription="@string/toggle_camera"
             android:padding="@dimen/normal_margin"
             android:src="@drawable/ic_camera_front_vector" />
 
@@ -71,6 +78,7 @@
             android:layout_width="@dimen/icon_size"
             android:layout_height="@dimen/icon_size"
             android:layout_weight="1"
+            android:contentDescription="@string/shutter"
             android:src="@drawable/ic_shutter_vector" />
 
         <ImageView
@@ -78,6 +86,7 @@
             android:layout_width="@dimen/icon_size"
             android:layout_height="@dimen/icon_size"
             android:layout_weight="1"
+            android:contentDescription="@string/toggle_flash"
             android:padding="@dimen/normal_margin"
             android:src="@drawable/ic_flash_off_vector" />
 
@@ -89,8 +98,8 @@
         android:layout_height="wrap_content"
         android:layout_above="@+id/btn_holder"
         android:layout_centerHorizontal="true"
-        android:text="00:00"
         android:textColor="@android:color/white"
-        android:visibility="gone" />
+        android:visibility="gone"
+        tools:text="00:00" />
 
 </RelativeLayout>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a8d052e9..88fda290 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -24,6 +24,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">What photo compression quality should I set?</string>
     <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>

From 9c021c655b02eb14983c53b2ec086f4022aa71c2 Mon Sep 17 00:00:00 2001
From: darthpaul <paulakhamiogu@gmail.com>
Date: Wed, 13 Jul 2022 16:39:18 +0100
Subject: [PATCH 2/5] do some optimisations for pre SDK 29 devices

---
 .../camera/activities/MainActivity.kt         | 44 ++++++++++-----
 .../camera/activities/SettingsActivity.kt     | 14 +++--
 .../camera/dialogs/ChangeResolutionDialogX.kt |  2 +-
 .../camera/helpers/MediaOutputHelper.kt       | 55 ++++++++++++++++---
 .../camera/helpers/VideoQualityManager.kt     |  2 +-
 .../camera/implementations/CameraXPreview.kt  |  6 +-
 .../camera/models/MediaOutput.kt              |  6 ++
 7 files changed, 99 insertions(+), 30 deletions(-)

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 d5679f65..cd06b2da 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt
@@ -7,6 +7,7 @@ import android.hardware.SensorManager
 import android.net.Uri
 import android.os.Bundle
 import android.os.Handler
+import android.os.Looper
 import android.provider.MediaStore
 import android.util.Log
 import android.view.*
@@ -31,9 +32,11 @@ import java.util.concurrent.TimeUnit
 import kotlinx.android.synthetic.main.activity_main.*
 
 class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, CameraXPreviewListener {
-    private val TAG = "MainActivity"
-    private val FADE_DELAY = 5000L
-    private val CAPTURE_ANIMATION_DURATION = 100L
+    companion object {
+        private const val TAG = "MainActivity"
+        private const val FADE_DELAY = 5000L
+        private const val CAPTURE_ANIMATION_DURATION = 100L
+    }
 
     lateinit var mTimerHandler: Handler
     private lateinit var mOrientationEventListener: OrientationEventListener
@@ -49,14 +52,8 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
     private var mCurrVideoRecTimer = 0
     var mLastHandledOrientation = 0
 
+    @Suppress("DEPRECATION")
     override fun onCreate(savedInstanceState: Bundle?) {
-        window.addFlags(
-            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or
-                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
-                WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or
-                WindowManager.LayoutParams.FLAG_FULLSCREEN
-        )
-
         useDynamicTheme = false
         super.onCreate(savedInstanceState)
         appLaunched(BuildConfig.APPLICATION_ID)
@@ -67,6 +64,22 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
         supportActionBar?.hide()
         checkWhatsNewDialog()
         setupOrientationEventListener()
+        if (isRPlus()) {
+            setShowWhenLocked(true)
+            setTurnScreenOn(true)
+            window.insetsController?.hide(WindowInsets.Type.statusBars())
+        } else if (isOreoMr1Plus()) {
+            setShowWhenLocked(true)
+            setTurnScreenOn(true)
+            window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
+        } else {
+            window.addFlags(
+                WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or
+                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
+                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or
+                    WindowManager.LayoutParams.FLAG_FULLSCREEN
+            )
+        }
     }
 
     override fun onResume() {
@@ -238,8 +251,8 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
         mFocusCircleView = FocusCircleView(applicationContext)
         view_holder.addView(mFocusCircleView)
 
-        mTimerHandler = Handler()
-        mFadeHandler = Handler()
+        mTimerHandler = Handler(Looper.getMainLooper())
+        mFadeHandler = Handler(Looper.getMainLooper())
         setupPreviewImage(true)
 
         val initialFlashlightState = FLASH_OFF
@@ -439,8 +452,13 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
         view.isClickable = value != .0f
     }
 
+    @Suppress("DEPRECATION")
     private fun hideNavigationBarIcons() {
-        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE
+        if (isRPlus()) {
+            window.insetsController?.hide(WindowInsets.Type.systemBars())
+        } else {
+            window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE
+        }
     }
 
     private fun showTimer() {
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/camera/activities/SettingsActivity.kt
index a7114ca3..5b7596e9 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/activities/SettingsActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/activities/SettingsActivity.kt
@@ -1,8 +1,10 @@
 package com.simplemobiletools.camera.activities
 
+import android.annotation.SuppressLint
 import android.os.Bundle
 import android.view.Menu
 import android.view.MenuItem
+import androidx.core.content.res.ResourcesCompat
 import com.simplemobiletools.camera.BuildConfig
 import com.simplemobiletools.camera.R
 import com.simplemobiletools.camera.extensions.config
@@ -14,6 +16,7 @@ import com.simplemobiletools.commons.helpers.NavigationIcon
 import com.simplemobiletools.commons.models.FAQItem
 import com.simplemobiletools.commons.models.RadioItem
 import java.util.Locale
+import kotlin.system.exitProcess
 import kotlinx.android.synthetic.main.activity_settings.*
 
 class SettingsActivity : SimpleActivity() {
@@ -77,7 +80,7 @@ class SettingsActivity : SimpleActivity() {
 
         // make sure the corners at ripple fit the stroke rounded corners
         if (settings_purchase_thank_you_holder.isGone()) {
-            settings_use_english_holder.background = resources.getDrawable(R.drawable.ripple_top_corners, theme)
+            settings_use_english_holder.background = ResourcesCompat.getDrawable(resources, R.drawable.ripple_top_corners, theme)
         }
 
         settings_purchase_thank_you_holder.setOnClickListener {
@@ -97,13 +100,13 @@ class SettingsActivity : SimpleActivity() {
         settings_use_english.isChecked = config.useEnglish
 
         if (settings_use_english_holder.isGone() && settings_purchase_thank_you_holder.isGone()) {
-            settings_keep_settings_visible_holder.background = resources.getDrawable(R.drawable.ripple_all_corners, theme)
+            settings_keep_settings_visible_holder.background = ResourcesCompat.getDrawable(resources, R.drawable.ripple_all_corners, theme)
         }
 
         settings_use_english_holder.setOnClickListener {
             settings_use_english.toggle()
             config.useEnglish = settings_use_english.isChecked
-            System.exit(0)
+            exitProcess(0)
         }
     }
 
@@ -172,8 +175,8 @@ class SettingsActivity : SimpleActivity() {
         settings_save_photos_holder.setOnClickListener {
             FilePickerDialog(this, config.savePhotosFolder, false, showFAB = true) {
                 val path = it
-                handleSAFDialog(it) {
-                    if (it) {
+                handleSAFDialog(it) { success ->
+                    if (success) {
                         config.savePhotosFolder = path
                         settings_save_photos.text = getLastPart(config.savePhotosFolder)
                     }
@@ -206,6 +209,7 @@ class SettingsActivity : SimpleActivity() {
         }
     }
 
+    @SuppressLint("SetTextI18n")
     private fun updatePhotoQuality(quality: Int) {
         settings_photo_quality.text = "$quality%"
     }
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/dialogs/ChangeResolutionDialogX.kt b/app/src/main/kotlin/com/simplemobiletools/camera/dialogs/ChangeResolutionDialogX.kt
index 2e3c8a19..05e25133 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/dialogs/ChangeResolutionDialogX.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/dialogs/ChangeResolutionDialogX.kt
@@ -90,7 +90,7 @@ class ChangeResolutionDialogX(
                 if (isFrontCamera) {
                     config.frontVideoResIndex = selectionIndex
                 } else {
-                    config.backPhotoResIndex = selectionIndex
+                    config.backVideoResIndex = selectionIndex
                 }
                 dialog?.dismiss()
                 callback.invoke()
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt
index 62b29dfd..2e790450 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt
@@ -12,6 +12,8 @@ import com.simplemobiletools.camera.extensions.getRandomMediaName
 import com.simplemobiletools.camera.models.MediaOutput
 import com.simplemobiletools.commons.activities.BaseSimpleActivity
 import com.simplemobiletools.commons.extensions.*
+import com.simplemobiletools.commons.helpers.isOreoPlus
+import com.simplemobiletools.commons.helpers.isQPlus
 import java.io.File
 import java.io.OutputStream
 
@@ -25,6 +27,7 @@ class MediaOutputHelper(
     companion object {
         private const val TAG = "MediaOutputHelper"
         private const val MODE = "rw"
+        private const val EXTERNAL_VOLUME = "external"
         private const val IMAGE_MIME_TYPE = "image/jpeg"
         private const val VIDEO_MIME_TYPE = "video/mp4"
     }
@@ -53,37 +56,56 @@ class MediaOutputHelper(
     fun getVideoMediaOutput(): MediaOutput {
         return if (is3rdPartyIntent) {
             if (outputUri != null) {
-                val fileDescriptor = openFileDescriptor(outputUri)
-                if (fileDescriptor != null) {
-                    MediaOutput.FileDescriptorMediaOutput(fileDescriptor, outputUri)
+                if (isOreoPlus()) {
+                    val fileDescriptor = openFileDescriptor(outputUri)
+                    if (fileDescriptor != null) {
+                        MediaOutput.FileDescriptorMediaOutput(fileDescriptor, outputUri)
+                    } else {
+                        errorHandler.showSaveToInternalStorage()
+                        getMediaStoreOutput(isPhoto = false)
+                    }
                 } else {
-                    errorHandler.showSaveToInternalStorage()
-                    getMediaStoreOutput(isPhoto = false)
+                    val path = activity.getRealPathFromURI(outputUri)
+                    if (path != null) {
+                        MediaOutput.FileMediaOutput(File(path), outputUri)
+                    } else {
+                        errorHandler.showSaveToInternalStorage()
+                        getMediaStoreOutput(isPhoto = false)
+                    }
                 }
             } else {
                 getMediaStoreOutput(isPhoto = false)
             }
         } else {
-            getFileDescriptorMediaOutput() ?: getMediaStoreOutput(isPhoto = false)
+            if (isOreoPlus()) {
+                getFileDescriptorMediaOutput() ?: getMediaStoreOutput(isPhoto = false)
+            } else {
+                getFileMediaOutput() ?: getMediaStoreOutput(isPhoto = false)
+            }
         }
     }
 
     private fun getMediaStoreOutput(isPhoto: Boolean): MediaOutput.MediaStoreOutput {
         val contentValues = getContentValues(isPhoto)
         val contentUri = if (isPhoto) {
-            MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
+            MediaStore.Images.Media.getContentUri(EXTERNAL_VOLUME)
         } else {
-            MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
+            MediaStore.Video.Media.getContentUri(EXTERNAL_VOLUME)
         }
         return MediaOutput.MediaStoreOutput(contentValues, contentUri)
     }
 
+    @Suppress("DEPRECATION")
     private fun getContentValues(isPhoto: Boolean): ContentValues {
         val mimeType = if (isPhoto) IMAGE_MIME_TYPE else VIDEO_MIME_TYPE
         return ContentValues().apply {
             put(MediaStore.MediaColumns.DISPLAY_NAME, getRandomMediaName(isPhoto))
             put(MediaStore.MediaColumns.MIME_TYPE, mimeType)
-            put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM)
+            if (isQPlus()) {
+                put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM)
+            } else {
+                put(MediaStore.MediaColumns.DATA, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString())
+            }
         }
     }
 
@@ -131,6 +153,21 @@ class MediaOutputHelper(
         return mediaOutput
     }
 
+    private fun getFileMediaOutput(): MediaOutput.FileMediaOutput? {
+        var mediaOutput: MediaOutput.FileMediaOutput? = null
+        val canWrite = canWriteToFilePath(mediaStorageDir)
+        Log.i(TAG, "getMediaOutput: canWrite=${canWrite}")
+        if (canWrite) {
+            val path = activity.getOutputMediaFile(false)
+            val uri = getUriForFilePath(path)
+            if (uri != null) {
+                mediaOutput = MediaOutput.FileMediaOutput(File(path), uri)
+            }
+        }
+        Log.i(TAG, "FileDescriptorMediaOutput: $mediaOutput")
+        return mediaOutput
+    }
+
     private fun openFileDescriptor(uri: Uri): ParcelFileDescriptor? {
         return try {
             Log.i(TAG, "uri: $uri")
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt
index a2a6948e..d667f1d1 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt
@@ -51,7 +51,7 @@ class VideoQualityManager(
     fun getUserSelectedQuality(cameraSelector: CameraSelector): Quality {
         var selectionIndex = if (cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA) config.frontVideoResIndex else config.backVideoResIndex
         selectionIndex = selectionIndex.coerceAtLeast(0)
-        return getSupportedQualities(cameraSelector)[selectionIndex].toCameraXQuality()
+        return getSupportedQualities(cameraSelector).getOrElse(selectionIndex) { VideoQuality.HD }.toCameraXQuality()
     }
 
     fun getSupportedQualities(cameraSelector: CameraSelector): List<VideoQuality> {
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 8a12169b..6ebde5ae 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt
@@ -431,7 +431,7 @@ class CameraXPreview(
         }
     }
 
-    @SuppressLint("MissingPermission")
+    @SuppressLint("MissingPermission", "NewApi")
     private fun startRecording() {
         val videoCapture = videoCapture ?: throw IllegalStateException("Camera initialization failed.")
 
@@ -441,6 +441,10 @@ class CameraXPreview(
                 FileDescriptorOutputOptions.Builder(mediaOutput.fileDescriptor).build()
                     .let { videoCapture.output.prepareRecording(activity, it) }
             }
+            is MediaOutput.FileMediaOutput -> {
+                FileOutputOptions.Builder(mediaOutput.file).build()
+                    .let { videoCapture.output.prepareRecording(activity, it) }
+            }
             is MediaOutput.MediaStoreOutput -> {
                 MediaStoreOutputOptions.Builder(contentResolver, mediaOutput.contentUri).setContentValues(mediaOutput.contentValues).build()
                     .let { videoCapture.output.prepareRecording(activity, it) }
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/models/MediaOutput.kt b/app/src/main/kotlin/com/simplemobiletools/camera/models/MediaOutput.kt
index c4e1e8d0..2bb2edd5 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/models/MediaOutput.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/models/MediaOutput.kt
@@ -3,6 +3,7 @@ package com.simplemobiletools.camera.models
 import android.content.ContentValues
 import android.net.Uri
 import android.os.ParcelFileDescriptor
+import java.io.File
 import java.io.OutputStream
 
 sealed class MediaOutput(
@@ -23,5 +24,10 @@ sealed class MediaOutput(
         override val uri: Uri,
     ) : MediaOutput(uri)
 
+    data class FileMediaOutput(
+        val file: File,
+        override val uri: Uri,
+    ) : MediaOutput(uri)
+
     object BitmapOutput : MediaOutput(null)
 }

From 1929260f8c2960ee6c1af74d4162d0fdc582b913 Mon Sep 17 00:00:00 2001
From: darthpaul <paulakhamiogu@gmail.com>
Date: Wed, 13 Jul 2022 16:55:01 +0100
Subject: [PATCH 3/5] add strings in other locales

---
 app/src/main/res/values-ar/strings.xml     |  8 ++++++++
 app/src/main/res/values-az/strings.xml     |  7 +++++++
 app/src/main/res/values-be/strings.xml     |  7 +++++++
 app/src/main/res/values-bg/strings.xml     |  9 ++++++++-
 app/src/main/res/values-ca/strings.xml     | 20 ++++++++++++++------
 app/src/main/res/values-cs/strings.xml     |  7 +++++++
 app/src/main/res/values-cy/strings.xml     |  7 +++++++
 app/src/main/res/values-da/strings.xml     |  8 ++++++++
 app/src/main/res/values-de/strings.xml     | 10 +++++++++-
 app/src/main/res/values-el/strings.xml     |  7 +++++++
 app/src/main/res/values-eo/strings.xml     |  7 +++++++
 app/src/main/res/values-es/strings.xml     |  8 ++++++++
 app/src/main/res/values-et/strings.xml     |  8 ++++++++
 app/src/main/res/values-fi/strings.xml     | 10 +++++++++-
 app/src/main/res/values-fr/strings.xml     | 10 +++++++++-
 app/src/main/res/values-gl/strings.xml     |  7 +++++++
 app/src/main/res/values-hr/strings.xml     |  8 ++++++++
 app/src/main/res/values-hu/strings.xml     |  7 +++++++
 app/src/main/res/values-in/strings.xml     | 10 +++++++++-
 app/src/main/res/values-it/strings.xml     |  8 ++++++++
 app/src/main/res/values-iw/strings.xml     |  8 ++++++++
 app/src/main/res/values-ja/strings.xml     |  7 +++++++
 app/src/main/res/values-ko/strings.xml     |  7 +++++++
 app/src/main/res/values-lt/strings.xml     |  7 +++++++
 app/src/main/res/values-ml/strings.xml     |  7 +++++++
 app/src/main/res/values-nb-rNO/strings.xml |  8 ++++++++
 app/src/main/res/values-ne/strings.xml     |  7 +++++++
 app/src/main/res/values-nl/strings.xml     |  8 ++++++++
 app/src/main/res/values-pl/strings.xml     |  8 ++++++++
 app/src/main/res/values-pt-rBR/strings.xml |  8 ++++++++
 app/src/main/res/values-pt-rPT/strings.xml |  7 +++++++
 app/src/main/res/values-pt/strings.xml     |  8 ++++++++
 app/src/main/res/values-ro/strings.xml     |  7 +++++++
 app/src/main/res/values-ru/strings.xml     |  8 ++++++++
 app/src/main/res/values-sk/strings.xml     |  7 +++++++
 app/src/main/res/values-sv/strings.xml     |  8 ++++++++
 app/src/main/res/values-th/strings.xml     |  7 +++++++
 app/src/main/res/values-tr/strings.xml     |  7 +++++++
 app/src/main/res/values-uk/strings.xml     |  8 ++++++++
 app/src/main/res/values-zh-rCN/strings.xml |  8 ++++++++
 app/src/main/res/values-zh-rTW/strings.xml | 10 +++++++++-
 41 files changed, 321 insertions(+), 12 deletions(-)

diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 063294a2..fd405290 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">ما هي جودة ضغط الصور التي يجب تعيينها؟</string>
     <string name="faq_1_text">ذلك يعتمد على هدفك. لأغراض عامة ينصح معظم الناس باستخدام 75٪ -80٪، عندما تكون الصورة لا تزال ذات نوعية جيدة حقا، ولكن يتم تقليل حجم الملف بشكل كبير مقارنة مع 100٪.</string>
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
index 5c96469c..de07d070 100644
--- a/app/src/main/res/values-az/strings.xml
+++ b/app/src/main/res/values-az/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Şəkli hansı keyfiyyətdə yaddaşa salmalıyam?</string>
     <string name="faq_1_text">Ümumiyyətlə, özünüzdən asılıdır. Gündəlik istifadə üçün çoxları 75%-80%\'i tövsiyyə edir, hansı ki, bu parametrdə şəkil hələ də yaxşı görünür, amma fayl ölçüsü 100%\'ə nəzərən kiçilmişdir.</string>
diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml
index 681cd5dd..4b5fc0ae 100644
--- a/app/src/main/res/values-be/strings.xml
+++ b/app/src/main/res/values-be/strings.xml
@@ -21,6 +21,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">What photo compression quality should I set?</string>
     <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index 1367ee6e..19ef6958 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -18,6 +18,13 @@
     <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
     <!-- FAQ -->
     <string name="faq_1_title">Колко трябва да компресирам качеството на снимките\?</string>
     <string name="faq_1_text">Зависи. За общо ползване повечето хора съветват да 75%-80%, като изображението все още е с наистина добро качество, но размерът на файла е драстично намален в сравнение със 100%.</string>
@@ -42,4 +49,4 @@
         Haven't found some strings? There's more at
         https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
     -->
-</resources>
\ No newline at end of file
+</resources>
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index d0d1e055..7eff1536 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -12,12 +12,20 @@
     <string name="photo_not_saved">No s\'ha pogut desar la foto</string>
     <string name="setting_resolution_failed">No s\'ha pogut establir la resolució adequada</string>
     <string name="video_recording_failed">Ha fallat la gravació de vídeo, proveu d\'utilitzar una resolució diferent</string>
-    <string name="camera_in_use_error">Una altra aplicació està utilitzant la càmera; tanqueu l\'aplicació i torneu-ho a provar</string>
-    <string name="camera_configure_error">S\'ha produït un error en configurar la càmera</string>
-    <string name="camera_disabled_by_admin_error">L\'administrador ha desactivat la càmera</string>
-    <string name="camera_dnd_error">El mode «No molestis» està activat. Desactiveu-lo i torneu-ho a provar</string>
-    <string name="photo_capture_failed">Ha fallat la captura de la foto</string>
-    <string name="video_capture_insufficient_storage_error">Ha fallat la gravació del vídeo a causa d\'un emmagatzematge insuficient</string>
+    <string name="camera_in_use_error">Camera is in use by another app, please close the app and try again</string>
+    <string name="camera_configure_error">An error occurred while configuring the camera</string>
+    <string name="camera_disabled_by_admin_error">Camera is disabled by the admin</string>
+    <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
+    <string name="photo_capture_failed">Photo capture failed</string>
+    <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Quina qualitat de compressió fotogràfica he d\'establir\?</string>
     <string name="faq_1_text">Depèn del vostre objectiu. Amb finalitats genèriques, la majoria de la gent aconsella utilitzar un 75%-80%, quan la imatge encara és de molt bona qualitat, però la mida del fitxer es redueix dràsticament en comparació amb el 100%.</string>
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index b929544e..a6b789dd 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Jakou kvalitu fotek bych měl použít?</string>
     <string name="faq_1_text">Záleží to na vášem cíli. Pro obecné účely doporučuje většina lidí 75%-80%, kdy je kvalita fotek stále vysoká, ale výsledný soubor má o mnoho menší velikost v porovnání se 100% kvalitou.</string>
diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml
index 50872202..a93955b1 100644
--- a/app/src/main/res/values-cy/strings.xml
+++ b/app/src/main/res/values-cy/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Pa ansawdd cywasgu llun dylwn ei osod?</string>
     <string name="faq_1_text">Mae\'n dibynnu ar dy bwrpas. Ar gyfer defnydd cyffredin, argymhellir defnyddio 75%-80% fel bod safon y llun yn dal i fod yn dda iawn ond bydd maint y ffeil yn dipyn llai na 100%.</string>
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index fd0c3973..0f965164 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Hvilken fotokomprimeringskvalitet skal jeg anvende\?</string>
     <string name="faq_1_text">Det afhænger af dit mål. Til almindelige formål anbefaler de fleste at bruge 75-80 %, hvor billedet stadig har en rigtig god kvalitet, men hvor filstørrelsen er reduceret drastisk i forhold til 100 %.</string>
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 6d9d2ef2..b4880aba 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">Der „Bitte nicht stören“-Modus ist aktiviert. Bitte deaktivieren Sie ihn und versuchen Sie es erneut</string>
     <string name="photo_capture_failed">Fotoaufnahme fehlgeschlagen</string>
     <string name="video_capture_insufficient_storage_error">Videoaufzeichnung aufgrund unzureichender Speicherkapazität fehlgeschlagen</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Was für eine Fotokomprimierungsqualität soll ich einstellen?</string>
     <string name="faq_1_text">Das hängt von deinem Ziel ab. Für allgemeine Zwecke empfehlen die meisten 75 - 80 %, wodurch die Qualität immer noch sehr gut bleibt, aber die Dateigrösse drastisch reduziert ist im Vergleich zu 100 %.</string>
@@ -42,4 +50,4 @@
         Haven't found some strings? There's more at
         https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
     -->
-</resources>
\ No newline at end of file
+</resources>
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index 821b885b..9a066e25 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Αποτυχία λήψης φωτογραφιών</string>
     <string name="video_capture_insufficient_storage_error">Η εγγραφή βίντεο απέτυχε λόγω ανεπαρκούς αποθηκευτικού χώρου</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Ποια ποιότητα συμπίεσης φωτογραφιών πρέπει να ορίσω;</string>
     <string name="faq_1_text">Εξαρτάται από το στόχο σας. Για γενικούς σκοπούς, οι περισσότεροι συμβουλεύουν τη χρήση του 75%-80%, όταν η εικόνα εξακολουθεί να είναι πραγματικά καλής ποιότητας, αλλά το μέγεθος του αρχείου μειώνεται δραστικά σε σύγκριση με το 100%.</string>
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 52072b06..321a812d 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">What photo compression quality should I set?</string>
     <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 098de07f..5f54543f 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">¿Qué calidad de compresión de foto debería establecer?</string>
     <string name="faq_1_text">Depende de tu objetivo. Para propósitos generales, la mayoría de las personas aconsejan usar 75%-80%, y la imagen seguirá siendo de calidad realmente buena, pero el tamaño del archivo es reducido drásticamente comparado con el 100%.</string>
diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml
index 1ee7b94d..5b144044 100644
--- a/app/src/main/res/values-et/strings.xml
+++ b/app/src/main/res/values-et/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">Ära häiri režiim on sisse lülitatud. Palun lülita see välja ja proovi uuesti</string>
     <string name="photo_capture_failed">Foto jäädvustamine ei õnnestunud</string>
     <string name="video_capture_insufficient_storage_error">Video salvestamine ei õnnestunud ebapiisava salvestusruumi tõttu</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Missugust piltide pakkimise kvaliteeti peaksin kasutama\?</string>
     <string name="faq_1_text">See sõltub sinu eesmärkidest. Üldiselt soovitame 75-80-protsendilist pakkimist, mispuhul piltide kvaliteet on jätkuvalt mõistlik, kuid piltide suurus on 100-protsendilise kvaliteediga võrreldes väiksem.</string>
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index d9d2cb3b..b6b6ba22 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Mitä valokuvan pakkauslaatua minun pitäisi käyttää?</string>
     <string name="faq_1_text">Se riippuu tarkoituksestasi. Yleisissä tarkoituksissa useimmat ihmiset suosittelevat käyttämään 75-80%, kun kuva on edelleen todella hyvälaatuinen, mutta tiedoston koko pienenee huomattavasti verrattuna 100%:iin.</string>
@@ -42,4 +50,4 @@
         Haven't found some strings? There's more at
         https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
     -->
-</resources>
\ No newline at end of file
+</resources>
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 8f341125..be1eee61 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">Le mode Ne pas déranger est activé. Veuillez le désactiver et réessayer</string>
     <string name="photo_capture_failed">Échec de la prise de photo</string>
     <string name="video_capture_insufficient_storage_error">L\'enregistrement vidéo a échoué en raison d\'un stockage insuffisant</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Quelle valeur devrais-je mettre pour la qualité des photos \?</string>
     <string name="faq_1_text">Tout dépend de ce que vous voulez en faire. Pour la plupart des usages, il est recommandé entre 75 et 80 %, ce qui est reste de qualité acceptable, tout en générant un fichier de taille bien inférieure à une photo avec une qualité de 100 %.</string>
@@ -42,4 +50,4 @@
         Haven't found some strings? There's more at
         https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
     -->
-</resources>
\ No newline at end of file
+</resources>
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index de9738fe..4ee14ca3 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Que calidade de compresión debo escoller para a foto?</string>
     <string name="faq_1_text">Depende do obxectivo. Para uso xeral a maioría das persoas usuarias recomendan entre un 75%-80%, que é un valor bastante bo, pero o tamaño do ficheiro redúcese drasticamente comparado co 100%.</string>
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index 06e95361..7a7bd954 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">Modus „Ne smetaj” je aktiviran. Deaktiviraj ga i pokušaj ponovo</string>
     <string name="photo_capture_failed">Snimanje fotografije nije uspjelo</string>
     <string name="video_capture_insufficient_storage_error">Snimanje videa nije uspjelo zbog nedovoljne memorije</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Koju kvalitetu kompresije fotografija trebam postaviti\?</string>
     <string name="faq_1_text">Ovisi o tvom cilju. Za opće namjene, većina ljudi savjetuje korištenje 75 do 80 % kad je slika dobre kvalitete, ali se veličina datoteke drastično smanjuje u usporedbi sa 100 %.</string>
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 52072b06..321a812d 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">What photo compression quality should I set?</string>
     <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 4c27313f..b8aca346 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">Mode Jangan Ganggu diaktifkan. Silakan nonaktifkan dan coba lagi</string>
     <string name="photo_capture_failed">Gagal mengambil foto</string>
     <string name="video_capture_insufficient_storage_error">Gagal merekam video karena penyimpanan tidak cukup</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Kualitas kompresi foto mana yang harus saya gunakan?</string>
     <string name="faq_1_text">Tergantung tujuan anda. Untuk hal-hal yang umum direkomendasikan menggunakan 75%-80%, kualitas gambar masih sangat bagus, tetapi ukuran berkas berkurang signifikan dibandingkan dengan 100%.</string>
@@ -42,4 +50,4 @@
         Haven't found some strings? There's more at
         https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
     -->
-</resources>
\ No newline at end of file
+</resources>
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 89e6745f..56d5e814 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">La modalità non disturbare è abilitata. Disabilitare e riprovare</string>
     <string name="photo_capture_failed">Acquisizione di foto non riuscita</string>
     <string name="video_capture_insufficient_storage_error">Registrazione video non riuscita a causa dello spazio d\'archiviazione insufficiente</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Che qualità di compressione dovrei impostare?</string>
     <string name="faq_1_text">Dipende dal proprio obiettivo. In genere si consiglia di utilizzare una qualità del 75%-80%, in modo che l\'immagine sia ancora di ottima qualità, ma la dimensione del file viene ridotta drasticamente rispetto al 100%.</string>
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index fb892035..b361873a 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">איזו איכות דחיסת תמונה עלי להגדיר\?</string>
     <string name="faq_1_text">זה תלוי במטרה שלך. למטרות כלליות רוב האנשים ממליצים להשתמש ב-75%-80%, כאשר התמונה עדיין באיכות טובה, אך גודל הקובץ מצטמצם באופן דרסטי בהשוואה ל-100%.</string>
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index f4f45ce0..ae7e0878 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">写真の圧縮品質はどのように設定すればよいですか?</string>
     <string name="faq_1_text">これはあなたの求める目標によります。一般的な用途には、75%~80%の使用をおすすめします。この設定でも画像は十分に良い品質ですが、ファイルサイズは100%と比べて大幅に削減することができます。</string>
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 953bed90..8a58789d 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">사진 압축품질을 무엇으로 설정해야 하나요?</string>
     <string name="faq_1_text">압축품질은 촬영용도에 따라 달라질 수 있지만, 일반적으로 75% -80%를 사용하도록 권고합니다. 75% -80%로 압축 품질을 설정하면 파일 크기는 100%에 비해 크게 줄어듭니다.</string>
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index bb277454..4cccff06 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Kokią nuotraukos suspaudimo kokybę turėčiau nustatyti?</string>
     <string name="faq_1_text">Tai priklauso nuo Jūsų tikslų. Įprastiems tikslams dauguma žmonių pataria naudoti 75%-80%, kai nuotrauka vistiek yra geros kokybės, bet bylos dydis sumažėja kardinaliai palyginus su 100%.</string>
diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml
index fd770d0f..2f1387fa 100644
--- a/app/src/main/res/values-ml/strings.xml
+++ b/app/src/main/res/values-ml/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">ഏത് ഫോട്ടോ കംപ്രഷനാണ് ഞാൻ ഉപയോഗിക്കേണ്ടത്?</string>
     <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 5cd346f4..657a2f84 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Hvilket bildekomprimeringsnivå bør jeg bruke\?</string>
     <string name="faq_1_text">Det avhenger av hva du vil. Til alminnelige formål anbefales 75%-80%. Fremdeles god kvalitet, men vesentlig redusert filstørrelse sammenlignet med 100%.</string>
diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml
index 620a4e62..519a8103 100644
--- a/app/src/main/res/values-ne/strings.xml
+++ b/app/src/main/res/values-ne/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">मैले कस्तो फोटो खदाईको गुणस्तर स्थापित गर्नुपर्छ ?</string>
     <string name="faq_1_text">यो तपाईको चाहानामा भर पर्छ । सामान्यतया सबैले 75%-80% मा प्रयोग गर्छन, जब तस्बिर राम्रो गुणस्तरको छ, तर 100% को तुलनामा फाईल साईज अस्वभाविक रुपले घट्छ </string>
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index dddbc6ab..7a23b17f 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">De modus \"Niet storen\" is ingeschakeld. Schakel deze uit en probeer het nog eens.</string>
     <string name="photo_capture_failed">Foto-opname mislukt</string>
     <string name="video_capture_insufficient_storage_error">Video-opname mislukt door onvoldoende opslag</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Welke kwaliteit voor foto\'s moet ik instellen?</string>
     <string name="faq_1_text">Voor normaal gebruik adviseren de meeste mensen een compressie van 75%-80%. De afbeelding zal dan nog steeds van goede kwaliteit zijn en de bestandsgrootte zal enorm veel kleiner zijn dan met 100%.</string>
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 415434e3..118b7dc0 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">Tryb Nie przeszkadzać jest włączony. Wyłącz go i spróbuj ponownie.</string>
     <string name="photo_capture_failed">Nie udało się zrobić zdjęcia</string>
     <string name="video_capture_insufficient_storage_error">Nagrywanie wideo nie powiodło się z powodu niewystarczającej ilości miejsca</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Jaką jakość kompresji zdjęć powinienem ustawić\?</string>
     <string name="faq_1_text">Zależy to od Twojego celu. Do celów ogólnych większość ludzi zaleca poziom 75-80% — wtedy obraz jest nadal w dobrej jakości, ale rozmiar pliku znacznie zmniejsza się w porównaniu do 100%.</string>
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 9e4417c9..431b14a9 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">O modo Não perturbe está ativado. Desative e tente novamente</string>
     <string name="photo_capture_failed">Erro ao tirar foto</string>
     <string name="video_capture_insufficient_storage_error">Erro ao gravar vídeo devido a armazenamento insuficiente</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Que qualidade de compressão de imagem devo definir\?</string>
     <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index eef4a5ad..b3283daa 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">What photo compression quality should I set?</string>
     <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 38006b42..93559b8f 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Que qualidade de compressão de imagem devo definir?</string>
     <string name="faq_1_text">Depende de seu objetivo. Para fins genéricos, aconselha-se o uso de 75%-80%, no qual a imagem ainda apresenta boa qualidade, porém tamanho drasticamente reduzido em comparação a 100%.</string>
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 95e5cef8..e09af2aa 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Ce calitate de compresie a fotografiilor ar trebui să setez?</string>
     <string name="faq_1_text">Depinde de obiectivul dumneavoastră. În general, majoritatea oamenilor recomandă utilizarea a 75%-80%, atunci când calitatea imaginii este foarte bună, dar dimensiunea fișierului este redusă drastic în comparație cu 100%.</string>
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 8a98819b..b22bb5fa 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">Включён режим \"Не беспокоить\", отключите и повторите попытку</string>
     <string name="photo_capture_failed">Не удалось сделать снимок</string>
     <string name="video_capture_insufficient_storage_error">Запись видео не удалась из-за нехватки памяти</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Какое качество сжатия фото нужно установить?</string>
     <string name="faq_1_text">Это зависит от вашей цели. В общем случае большинство людей советуют использовать 75%-80%, тогда изображение всё ещё действительно хорошего качества, но размер файла резко уменьшается по сравнению со 100%.</string>
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 7fc80092..1a461f40 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -19,6 +19,13 @@
     <string name="photo_capture_failed">Snímanie fotografie zlyhalo</string>
     <string name="video_capture_insufficient_storage_error">Nahrávanie videa zlyhalo pre nedostatok miesta</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Akú kvalitu fotiek by som mal použiť?</string>
     <string name="faq_1_text">Záleží to od vášho cieľa. Pre všeobecné použitie odporúča väčšina ľudí 75%-80% kedy je kvalita fotiek stále vysoká, ale výsledný súbor má oveľa menšiu veľkosť v porovnaní so 100% kvalitou.</string>
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 494f0b7b..ec180796 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">"Do Not Disturb" mode is enabled. Please disable and try again</string>
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Vilken kvalitet för fotokomprimering ska jag ställa in\?</string>
     <string name="faq_1_text">Det beror på ditt mål. För generiska ändamål rekommenderar de flesta att man använder 75-80 %, då bilden fortfarande har riktigt bra kvalitet, men filstorleken minskar drastiskt jämfört med 100 %.</string>
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index 6c27e8a3..0a8c5a06 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -21,6 +21,13 @@
     <string name="photo_capture_failed">Photo capture failed</string>
     <string name="video_capture_insufficient_storage_error">Video recording failed due to insufficient storage</string>
 
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">What photo compression quality should I set?</string>
     <string name="faq_1_text">It depends on your goal. For generic purposes most people advise using 75%-80%, when the image is still really good quality, but the file size is reduced drastically compared to 100%.</string>
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 50b89c47..4feb35ea 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -18,6 +18,13 @@
     <string name="camera_dnd_error">Rahatsız Etmeyin modu etkinleştirildi. Lütfen devre dışı bırakın ve tekrar deneyin</string>
     <string name="photo_capture_failed">Fotoğraf çekimi başarısız oldu</string>
     <string name="video_capture_insufficient_storage_error">Yetersiz depolama alanı nedeniyle video kaydı başarısız oldu</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
     <!-- FAQ -->
     <string name="faq_1_title">Hangi fotoğraf sıkıştırma kalitesini ayarlamalıyım?</string>
     <string name="faq_1_text">Hedefinize bağlı. Genel amaçlar için çoğu kişi %75-%80\'i kullanmanızı önerir, görüntü hala gerçekten kaliteliyken, dosya boyutu %100\'e göre büyük ölçüde azalır.</string>
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 9167ae0a..faf60717 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">Увімкнено режим «Не турбувати». Будь ласка, вимкніть і спробуйте знову</string>
     <string name="photo_capture_failed">Не вдалося зняти світлину</string>
     <string name="video_capture_insufficient_storage_error">Через нестачу пам’яті не вдалося записати відео</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">Який ступінь стиснення фото слід встановити?</string>
     <string name="faq_1_text">Це залежить від вашої мети. Загалом більшість людей радять використовувати 75%-80%, тоді зображення ще дійсно гарної якості, але розмір файлу істотно зменшується порівняно зі 100%.</string>
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 7bf9df70..d072885c 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">勿扰模式处于开启状态。 请禁用并重试</string>
     <string name="photo_capture_failed">照片拍摄失败</string>
     <string name="video_capture_insufficient_storage_error">由于存储空间不足,视频录制失败</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">我应该选用怎样的照片压缩率呢?</string>
     <string name="faq_1_text">这取决于您的目的。对大多数人的一般用途来说,建议使用 75%-80%,此时图片仍有不错的品质,而文件大小相比 100% 时大幅减小。</string>
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 96aa7330..b882d629 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -18,6 +18,14 @@
     <string name="camera_dnd_error">零打擾模式已啟用,請將其停用後再試一次</string>
     <string name="photo_capture_failed">拍照失敗</string>
     <string name="video_capture_insufficient_storage_error">儲存空間不足,錄影失敗</string>
+
+    <!--Camera Screen Icons Content Description-->
+    <string name="toggle_photo_video">Toggle photo/video mode</string>
+    <string name="change_resolution">Change Resolution</string>
+    <string name="view_last_media">View last captured media</string>
+    <string name="toggle_camera">Toggle front/back camera</string>
+    <string name="toggle_flash">Toggle the flashlight mode</string>
+
     <!-- FAQ -->
     <string name="faq_1_title">我應該設定什麼相片壓縮品質?</string>
     <string name="faq_1_text">視你目標而定。對大多數一般人而言,建議使用75%-80%,圖片依然是相當高品質,但檔案大小比100%大幅減少很多。</string>
@@ -42,4 +50,4 @@
         Haven't found some strings? There's more at
         https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
     -->
-</resources>
\ No newline at end of file
+</resources>

From d020e4263584a2739bac28171bde2bec548ae1c0 Mon Sep 17 00:00:00 2001
From: darthpaul <paulakhamiogu@gmail.com>
Date: Wed, 13 Jul 2022 16:57:24 +0100
Subject: [PATCH 4/5] revert debug applicationIdSuffix and app_name

---
 app/build.gradle                     | 2 +-
 app/src/debug/res/values/strings.xml | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index b965795a..2287a624 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -34,7 +34,7 @@ android {
 
     buildTypes {
         debug {
-            applicationIdSuffix ".debugcamerax"
+            applicationIdSuffix ".debug"
         }
         release {
             minifyEnabled true
diff --git a/app/src/debug/res/values/strings.xml b/app/src/debug/res/values/strings.xml
index e7e9ee39..37ff84c6 100644
--- a/app/src/debug/res/values/strings.xml
+++ b/app/src/debug/res/values/strings.xml
@@ -1,5 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <!--TODO Revert to Camera_debug -->
-    <string name="app_launcher_name">CameraX_debug</string>
+    <string name="app_launcher_name">Camera_debug</string>
 </resources>

From 776e842af5e114101a09bf5cb080cca96ef6ba4a Mon Sep 17 00:00:00 2001
From: darthpaul <paulakhamiogu@gmail.com>
Date: Wed, 13 Jul 2022 17:08:20 +0100
Subject: [PATCH 5/5] remove logs

---
 .../camera/activities/MainActivity.kt         | 12 ----------
 .../camera/dialogs/ChangeResolutionDialogX.kt |  6 -----
 .../camera/helpers/BitmapUtils.kt             |  3 ---
 .../camera/helpers/ImageQualityManager.kt     | 15 ++++---------
 .../camera/helpers/MediaOutputHelper.kt       | 16 ++------------
 .../camera/helpers/VideoQualityManager.kt     |  7 ++----
 .../camera/implementations/CameraXPreview.kt  | 22 +------------------
 7 files changed, 9 insertions(+), 72 deletions(-)

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 cd06b2da..a3224934 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt
@@ -9,7 +9,6 @@ import android.os.Bundle
 import android.os.Handler
 import android.os.Looper
 import android.provider.MediaStore
-import android.util.Log
 import android.view.*
 import android.widget.RelativeLayout
 import com.bumptech.glide.Glide
@@ -33,7 +32,6 @@ import kotlinx.android.synthetic.main.activity_main.*
 
 class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, CameraXPreviewListener {
     companion object {
-        private const val TAG = "MainActivity"
         private const val FADE_DELAY = 5000L
         private const val CAPTURE_ANIMATION_DURATION = 100L
     }
@@ -122,15 +120,12 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
 
     private fun initVariables() {
         mIsInPhotoMode = if (isVideoCaptureIntent()) {
-            Log.w(TAG, "initializeCamera: video capture")
             false
         } else if (isImageCaptureIntent()) {
-            Log.w(TAG, "initializeCamera: image capture mode")
             true
         } else {
             config.initPhotoMode
         }
-        Log.w(TAG, "initInPhotoMode = $mIsInPhotoMode")
         mIsCameraAvailable = false
         mIsHardwareShutterHandled = false
         mCurrVideoRecTimer = 0
@@ -202,7 +197,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
 
     private fun checkImageCaptureIntent() {
         if (isImageCaptureIntent()) {
-            Log.i(TAG, "isImageCaptureIntent: ")
             hideIntentButtons()
             val output = intent.extras?.get(MediaStore.EXTRA_OUTPUT)
             if (output != null && output is Uri) {
@@ -213,7 +207,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
 
     private fun checkVideoCaptureIntent() {
         if (intent?.action == MediaStore.ACTION_VIDEO_CAPTURE) {
-            Log.i(TAG, "checkVideoCaptureIntent: ")
             mIsInPhotoMode = false
             hideIntentButtons()
             shutter.setImageResource(R.drawable.ic_video_rec)
@@ -402,7 +395,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
 
         mPreviewUri = Uri.withAppendedPath(uri, lastMediaId.toString())
 
-        Log.e(TAG, "mPreviewUri= $mPreviewUri")
 
         loadLastTakenMedia(mPreviewUri)
     }
@@ -585,7 +577,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
                 flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
                 setResult(Activity.RESULT_OK, this)
             }
-            Log.w(TAG, "onMediaCaptured: exiting uri=$uri")
             finish()
         } else if (isVideoCaptureIntent()) {
             Intent().apply {
@@ -593,7 +584,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
                 flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
                 setResult(Activity.RESULT_OK, this)
             }
-            Log.w(TAG, "onMediaCaptured: video exiting uri=$uri")
             finish()
         }
     }
@@ -604,7 +594,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
                 putExtra("data", bitmap)
                 setResult(Activity.RESULT_OK, this)
             }
-            Log.w(TAG, "onImageCaptured: exiting bitmap size=${bitmap.byteCount}")
             finish()
         }
     }
@@ -663,7 +652,6 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener, Camera
     fun drawFocusCircle(x: Float, y: Float) = mFocusCircleView.drawFocusCircle(x, y)
 
     override fun mediaSaved(path: String) {
-        Log.e(TAG, "mediaSaved: $path")
         rescanPaths(arrayListOf(path)) {
             setupPreviewImage(true)
             Intent(BROADCAST_REFRESH_MEDIA).apply {
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/dialogs/ChangeResolutionDialogX.kt b/app/src/main/kotlin/com/simplemobiletools/camera/dialogs/ChangeResolutionDialogX.kt
index 8a7aa72b..92e83085 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/dialogs/ChangeResolutionDialogX.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/dialogs/ChangeResolutionDialogX.kt
@@ -1,7 +1,6 @@
 package com.simplemobiletools.camera.dialogs
 
 import android.app.Activity
-import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import androidx.appcompat.app.AlertDialog
@@ -28,7 +27,6 @@ class ChangeResolutionDialogX(
     private var dialog: AlertDialog? = null
     private val config = activity.config
 
-    private val TAG = "ChangeResolutionDialogX"
     init {
         val view = LayoutInflater.from(activity).inflate(R.layout.dialog_change_resolution, null).apply {
             setupPhotoResolutionPicker(this)
@@ -57,7 +55,6 @@ class ChangeResolutionDialogX(
         view.change_resolution_photo_holder.setOnClickListener {
             RadioGroupDialog(activity, ArrayList(items), selectionIndex) {
                 selectionIndex = it as Int
-                Log.w(TAG, "setupPhotoResolutionPicker: selectionIndex=$it")
                 view.change_resolution_photo.text = items[selectionIndex].title
                 if (isFrontCamera) {
                     config.frontPhotoResIndex = it
@@ -80,8 +77,6 @@ class ChangeResolutionDialogX(
 
         var selectionIndex = if (isFrontCamera) config.frontVideoResIndex else config.backVideoResIndex
         selectionIndex = selectionIndex.coerceAtLeast(0)
-        Log.i(TAG, "videoResolutions=$videoResolutions")
-        Log.i(TAG, "setupVideoResolutionPicker: selectionIndex=$selectionIndex")
 
         view.change_resolution_video_holder.setOnClickListener {
             RadioGroupDialog(activity, ArrayList(items), selectionIndex) {
@@ -99,6 +94,5 @@ class ChangeResolutionDialogX(
         }
         val selectedItem = items.getOrNull(selectionIndex)
         view.change_resolution_video.text = selectedItem?.title
-        Log.i(TAG, "setupVideoResolutionPicker: selectedItem=$selectedItem")
     }
 }
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/BitmapUtils.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/BitmapUtils.kt
index 6636df95..b7b481eb 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/BitmapUtils.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/BitmapUtils.kt
@@ -2,14 +2,12 @@ package com.simplemobiletools.camera.helpers
 
 import android.graphics.Bitmap
 import android.graphics.BitmapFactory
-import android.util.Log
 import kotlin.math.ceil
 import kotlin.math.floor
 import kotlin.math.sqrt
 
 //inspired by https://android.googlesource.com/platform/packages/apps/Camera2/+/refs/heads/master/src/com/android/camera/util/CameraUtil.java#244
 object BitmapUtils {
-    private const val TAG = "BitmapUtils"
     private const val INLINE_BITMAP_MAX_PIXEL_NUM = 50 * 1024
 
     fun makeBitmap(jpegData: ByteArray, maxNumOfPixels: Int = INLINE_BITMAP_MAX_PIXEL_NUM): Bitmap? {
@@ -31,7 +29,6 @@ object BitmapUtils {
                 options
             )
         } catch (ex: OutOfMemoryError) {
-            Log.e(TAG, "Got oom exception ", ex)
             null
         }
     }
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageQualityManager.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageQualityManager.kt
index dda22ed7..8c406f45 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageQualityManager.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/ImageQualityManager.kt
@@ -6,20 +6,19 @@ import android.hardware.camera2.CameraCharacteristics
 import android.hardware.camera2.CameraManager
 import android.hardware.camera2.params.StreamConfigurationMap
 import android.media.MediaRecorder
-import android.util.Log
 import android.util.Size
 import androidx.appcompat.app.AppCompatActivity
 import androidx.camera.core.CameraSelector
 import com.simplemobiletools.camera.extensions.config
 import com.simplemobiletools.camera.models.CameraSelectorImageQualities
 import com.simplemobiletools.camera.models.MySize
+import com.simplemobiletools.commons.extensions.showErrorToast
 
 class ImageQualityManager(
-    activity: AppCompatActivity,
+    private val activity: AppCompatActivity,
 ) {
 
     companion object {
-        private const val TAG = "ImageQualityManager"
         private const val MAX_VIDEO_WIDTH = 4096
         private const val MAX_VIDEO_HEIGHT = 2160
         private val CAMERA_LENS = arrayOf(CameraCharacteristics.LENS_FACING_FRONT, CameraCharacteristics.LENS_FACING_BACK)
@@ -39,11 +38,10 @@ class ImageQualityManager(
                         val imageSizes = configMap.getOutputSizes(ImageFormat.JPEG).map { MySize(it.width, it.height) }
                         val cameraSelector = lens.toCameraSelector()
                         imageQualities.add(CameraSelectorImageQualities(cameraSelector, imageSizes))
-                        Log.i(TAG, "initQualities: imageSizes=$imageSizes")
                     }
                 }
             } catch (e: Exception) {
-                Log.e(TAG, "Camera ID=$cameraId is not supported", e)
+                activity.showErrorToast(e)
             }
         }
     }
@@ -69,12 +67,7 @@ class ImageQualityManager(
             .sortedByDescending { it.pixels }
             .distinctBy { it.pixels }
             .map { Size(it.width, it.height) }
-            .also {
-                Log.i(TAG, "Resolutions: $it, index=$index")
-            }
-            .getOrNull(index).also {
-                Log.i(TAG, "getUserSelectedResolution: $it, index=$index")
-            }
+            .getOrNull(index)
     }
 
     fun getSupportedResolutions(cameraSelector: CameraSelector): List<MySize> {
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt
index 2e790450..cf269521 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/MediaOutputHelper.kt
@@ -5,7 +5,6 @@ import android.net.Uri
 import android.os.Environment
 import android.os.ParcelFileDescriptor
 import android.provider.MediaStore
-import android.util.Log
 import com.simplemobiletools.camera.extensions.config
 import com.simplemobiletools.camera.extensions.getOutputMediaFile
 import com.simplemobiletools.camera.extensions.getRandomMediaName
@@ -25,7 +24,6 @@ class MediaOutputHelper(
 ) {
 
     companion object {
-        private const val TAG = "MediaOutputHelper"
         private const val MODE = "rw"
         private const val EXTERNAL_VOLUME = "external"
         private const val IMAGE_MIME_TYPE = "image/jpeg"
@@ -112,7 +110,6 @@ class MediaOutputHelper(
     private fun getOutputStreamMediaOutput(): MediaOutput.OutputStreamMediaOutput? {
         var mediaOutput: MediaOutput.OutputStreamMediaOutput? = null
         val canWrite = canWriteToFilePath(mediaStorageDir)
-        Log.i(TAG, "getMediaOutput: canWrite=${canWrite}")
         if (canWrite) {
             val path = activity.getOutputMediaFile(true)
             val uri = getUriForFilePath(path)
@@ -121,16 +118,14 @@ class MediaOutputHelper(
                 mediaOutput = MediaOutput.OutputStreamMediaOutput(outputStream, uri)
             }
         }
-        Log.i(TAG, "OutputStreamMediaOutput: $mediaOutput")
         return mediaOutput
     }
 
     private fun openOutputStream(uri: Uri): OutputStream? {
         return try {
-            Log.i(TAG, "uri: $uri")
             contentResolver.openOutputStream(uri)
         } catch (e: Exception) {
-            e.printStackTrace()
+            activity.showErrorToast(e)
             null
         }
     }
@@ -138,7 +133,6 @@ class MediaOutputHelper(
     private fun getFileDescriptorMediaOutput(): MediaOutput.FileDescriptorMediaOutput? {
         var mediaOutput: MediaOutput.FileDescriptorMediaOutput? = null
         val canWrite = canWriteToFilePath(mediaStorageDir)
-        Log.i(TAG, "getMediaOutput: canWrite=${canWrite}")
         if (canWrite) {
             val path = activity.getOutputMediaFile(false)
             val uri = getUriForFilePath(path)
@@ -149,14 +143,12 @@ class MediaOutputHelper(
                 }
             }
         }
-        Log.i(TAG, "FileDescriptorMediaOutput: $mediaOutput")
         return mediaOutput
     }
 
     private fun getFileMediaOutput(): MediaOutput.FileMediaOutput? {
         var mediaOutput: MediaOutput.FileMediaOutput? = null
         val canWrite = canWriteToFilePath(mediaStorageDir)
-        Log.i(TAG, "getMediaOutput: canWrite=${canWrite}")
         if (canWrite) {
             val path = activity.getOutputMediaFile(false)
             val uri = getUriForFilePath(path)
@@ -164,16 +156,14 @@ class MediaOutputHelper(
                 mediaOutput = MediaOutput.FileMediaOutput(File(path), uri)
             }
         }
-        Log.i(TAG, "FileDescriptorMediaOutput: $mediaOutput")
         return mediaOutput
     }
 
     private fun openFileDescriptor(uri: Uri): ParcelFileDescriptor? {
         return try {
-            Log.i(TAG, "uri: $uri")
             contentResolver.openFileDescriptor(uri, MODE)
         } catch (e: Exception) {
-            e.printStackTrace()
+            activity.showErrorToast(e)
             null
         }
     }
@@ -215,7 +205,6 @@ class MediaOutputHelper(
                             documentFile.createFile(path.getMimeType(), path.getFilenameFromPath())?.uri
                         }
                     } catch (e: Exception) {
-                        e.printStackTrace()
                         null
                     }
                 }
@@ -224,7 +213,6 @@ class MediaOutputHelper(
                 try {
                     activity.createDocumentUriUsingFirstParentTreeUri(path)
                 } catch (e: Exception) {
-                    e.printStackTrace()
                     null
                 } ?: Uri.fromFile(targetFile)
             }
diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt
index d667f1d1..7243fc7d 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt
@@ -1,6 +1,5 @@
 package com.simplemobiletools.camera.helpers
 
-import android.util.Log
 import androidx.appcompat.app.AppCompatActivity
 import androidx.camera.core.CameraSelector
 import androidx.camera.lifecycle.ProcessCameraProvider
@@ -11,13 +10,13 @@ import com.simplemobiletools.camera.extensions.toCameraXQuality
 import com.simplemobiletools.camera.extensions.toVideoQuality
 import com.simplemobiletools.camera.models.CameraSelectorVideoQualities
 import com.simplemobiletools.camera.models.VideoQuality
+import com.simplemobiletools.commons.extensions.showErrorToast
 
 class VideoQualityManager(
     private val activity: AppCompatActivity,
 ) {
 
     companion object {
-        private const val TAG = "VideoQualityHelper"
         private val QUALITIES = listOf(Quality.UHD, Quality.FHD, Quality.HD, Quality.SD)
         private val CAMERA_SELECTORS = arrayOf(CameraSelector.DEFAULT_BACK_CAMERA, CameraSelector.DEFAULT_FRONT_CAMERA)
     }
@@ -37,12 +36,10 @@ class VideoQualityManager(
                             .also { allQualities ->
                                 val qualities = allQualities.map { it.toVideoQuality() }
                                 videoQualities.add(CameraSelectorVideoQualities(camSelector, qualities))
-
                             }
-                        Log.i(TAG, "bindCameraUseCases: videoQualities=$videoQualities")
                     }
                 } catch (e: Exception) {
-                    Log.e(TAG, "Camera Face $camSelector is not supported", e)
+                    activity.showErrorToast(e)
                 }
             }
         }
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 6ebde5ae..b14d4af3 100644
--- a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt
@@ -4,7 +4,6 @@ import android.annotation.SuppressLint
 import android.content.Context
 import android.hardware.SensorManager
 import android.hardware.display.DisplayManager
-import android.util.Log
 import android.util.Size
 import android.view.*
 import android.view.GestureDetector.SimpleOnGestureListener
@@ -43,7 +42,6 @@ class CameraXPreview(
 ) : MyPreview, DefaultLifecycleObserver {
 
     companion object {
-        private const val TAG = "CameraXPreview"
         private const val RATIO_4_3_VALUE = 4.0 / 3.0
         private const val RATIO_16_9_VALUE = 16.0 / 9.0
 
@@ -75,7 +73,6 @@ class CameraXPreview(
                 in 225 until 315 -> Surface.ROTATION_90
                 else -> Surface.ROTATION_0
             }
-            Log.i(TAG, "onOrientationChanged: rotation=$rotation")
             preview?.targetRotation = rotation
             imageCapture?.targetRotation = rotation
             videoCapture?.targetRotation = rotation
@@ -91,9 +88,7 @@ class CameraXPreview(
     private var recordingState: VideoRecordEvent? = null
     private var cameraSelector = config.lastUsedCameraLens.toCameraSelector()
     private var flashMode = FLASH_MODE_OFF
-    private var isPhotoCapture = initInPhotoMode.also {
-        Log.i(TAG, "initInPhotoMode= $it")
-    }
+    private var isPhotoCapture = initInPhotoMode
 
     init {
         bindToLifeCycle()
@@ -108,7 +103,6 @@ class CameraXPreview(
     }
 
     private fun startCamera(switching: Boolean = false) {
-        Log.i(TAG, "startCamera: ")
         imageQualityManager.initSupportedQualities()
 
         val cameraProviderFuture = ProcessCameraProvider.getInstance(activity)
@@ -120,7 +114,6 @@ class CameraXPreview(
                 bindCameraUseCases()
                 setupCameraObservers()
             } catch (e: Exception) {
-                Log.e(TAG, "startCamera: ", e)
                 val errorMessage = if (switching) R.string.camera_switch_error else R.string.camera_open_error
                 activity.toast(errorMessage)
             }
@@ -197,9 +190,6 @@ class CameraXPreview(
             .apply {
                 imageQualityManager.getUserSelectedResolution(cameraSelector)?.let { resolution ->
                     val rotatedResolution = getRotatedResolution(rotation, resolution)
-                    Log.i(TAG, "buildImageCapture: rotation=$rotation")
-                    Log.i(TAG, "buildImageCapture: resolution=$resolution")
-                    Log.i(TAG, "buildImageCapture: rotatedResolution=$rotatedResolution")
                     setTargetResolution(rotatedResolution)
                 } ?: setTargetAspectRatio(aspectRatio)
             }
@@ -255,7 +245,6 @@ class CameraXPreview(
     @SuppressLint("ClickableViewAccessibility")
     // source: https://stackoverflow.com/a/60095886/10552591
     private fun setupZoomAndFocus() {
-        Log.i(TAG, "camera controller: ${previewView.controller}")
         val scaleGesture = camera?.let { ScaleGestureDetector(activity, PinchToZoomOnScaleGestureListener(it.cameraInfo, it.cameraControl)) }
         val gestureDetector = GestureDetector(activity, object : SimpleOnGestureListener() {
             override fun onSingleTapConfirmed(event: MotionEvent): Boolean {
@@ -263,7 +252,6 @@ class CameraXPreview(
                     val display = displayManager.getDisplay(Display.DEFAULT_DISPLAY)
                     val width = previewView.width.toFloat()
                     val height = previewView.height.toFloat()
-                    Log.i(TAG, "onSingleTapConfirmed: width=$width,height=$height")
                     val factory = DisplayOrientedMeteringPointFactory(display, it, width, height)
                     val xPos = event.x
                     val yPos = event.y
@@ -275,13 +263,11 @@ class CameraXPreview(
                         .build()
                     camera?.cameraControl?.startFocusAndMetering(focusMeteringAction)
                     listener.onFocusCamera(xPos, yPos)
-                    Log.i(TAG, "start focus")
                     true
                 } ?: false
             }
         })
         previewView.setOnTouchListener { _, event ->
-            Log.i(TAG, "setOnTouchListener: x=${event.x}, y=${event.y}")
             gestureDetector.onTouchEvent(event)
             scaleGesture?.onTouchEvent(event)
             true
@@ -405,7 +391,6 @@ class CameraXPreview(
     }
 
     private fun handleImageCaptureError(exception: ImageCaptureException) {
-        Log.e(TAG, "Error", exception)
         listener.toggleBottomButtons(false)
         cameraErrorHandler.handleImageCaptureError(exception.imageCaptureError)
     }
@@ -421,13 +406,11 @@ class CameraXPreview(
     }
 
     override fun toggleRecording() {
-        Log.d(TAG, "toggleRecording: currentRecording=$currentRecording, recordingState=$recordingState")
         if (currentRecording == null || recordingState is VideoRecordEvent.Finalize) {
             startRecording()
         } else {
             currentRecording?.stop()
             currentRecording = null
-            Log.d(TAG, "Recording stopped")
         }
     }
 
@@ -454,7 +437,6 @@ class CameraXPreview(
 
         currentRecording = recording.withAudioEnabled()
             .start(mainExecutor) { recordEvent ->
-                Log.d(TAG, "recordEvent=$recordEvent ")
                 recordingState = recordEvent
                 when (recordEvent) {
                     is VideoRecordEvent.Start -> {
@@ -470,7 +452,6 @@ class CameraXPreview(
                         playStopVideoRecordingSoundIfEnabled()
                         listener.onVideoRecordingStopped()
                         if (recordEvent.hasError()) {
-                            Log.e(TAG, "recording failed:", recordEvent.cause)
                             cameraErrorHandler.handleVideoRecordingError(recordEvent.error)
                         } else {
                             listener.onMediaSaved(mediaOutput.uri ?: recordEvent.outputResults.outputUri)
@@ -478,7 +459,6 @@ class CameraXPreview(
                     }
                 }
             }
-        Log.d(TAG, "Recording started")
     }
 
     private fun playShutterSoundIfEnabled() {