diff --git a/app/src/main/java/app/grapheneos/camera/capturer/VideoCapturer.kt b/app/src/main/java/app/grapheneos/camera/capturer/VideoCapturer.kt
index 6c5ca1af..9a7443fb 100644
--- a/app/src/main/java/app/grapheneos/camera/capturer/VideoCapturer.kt
+++ b/app/src/main/java/app/grapheneos/camera/capturer/VideoCapturer.kt
@@ -48,6 +48,9 @@ class VideoCapturer(private val mActivity: MainActivity) {
private var recording: Recording? = null
+ var isMuted = false
+ private set
+
var includeAudio: Boolean = false
var isPaused = false
@@ -298,6 +301,16 @@ class VideoCapturer(private val mActivity: MainActivity) {
mActivity.tabLayout.visibility = View.INVISIBLE
mActivity.timerView.setText(R.string.start_value_timer)
mActivity.timerView.visibility = View.VISIBLE
+
+ mActivity.settingsDialog.includeAudioToggle.isEnabled = false
+
+ if (camConfig.includeAudio) {
+ isMuted = false
+ mActivity.muteToggle.setImageResource(R.drawable.mic_on)
+ mActivity.muteToggle.setBackgroundColor(mActivity.getColor(R.color.red))
+ mActivity.muteToggle.tooltipText = mActivity.getString(R.string.tap_to_mute_audio)
+ mActivity.muteToggle.visibility = View.VISIBLE
+ }
}
private fun afterRecordingStops() {
@@ -341,16 +354,23 @@ class VideoCapturer(private val mActivity: MainActivity) {
// if (!mActivity.config.includeAudio)
// mActivity.micOffIcon.visibility = View.VISIBLE
+ mActivity.settingsDialog.includeAudioToggle.isEnabled = true
+ mActivity.muteToggle.visibility = View.GONE
+
isRecording = false
mActivity.forceUpdateOrientationSensor()
}
fun muteRecording() {
+ check(isRecording && camConfig.includeAudio)
+ isMuted = true
recording?.mute(true)
}
fun unmuteRecording() {
+ check(isRecording && camConfig.includeAudio)
+ isMuted = false
recording?.mute(false)
}
diff --git a/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt b/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt
index 6a310ee7..d96796ca 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt
@@ -361,7 +361,9 @@ class SettingsDialog(val mActivity: MainActivity, themedContext: Context) :
mActivity.videoCapturer.muteRecording()
}
}
+ }
+ includeAudioToggle.setOnClickListener {
mActivity.micOffIcon.visibility = if (includeAudioToggle.isChecked) {
View.GONE
} else {
diff --git a/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt b/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt
index a0eecfcf..30ef3eb2 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt
@@ -204,6 +204,8 @@ open class MainActivity : AppCompatActivity(),
private lateinit var gLeftDash: View
private lateinit var gRightDash: View
+ lateinit var muteToggle: ShapeableImageView
+
private var bottomNavigationBarPadding: Int = 0
val thumbnailLoaderExecutor = Executors.newSingleThreadExecutor()
@@ -1009,6 +1011,23 @@ open class MainActivity : AppCompatActivity(),
gRightDash = binding.gCircleRightDash
gCircleFrame = binding.gCircleFrame
+
+ muteToggle = binding.muteToggle
+ muteToggle.setOnClickListener {
+ if (videoCapturer.isMuted) {
+ videoCapturer.unmuteRecording()
+ muteToggle.setImageResource(R.drawable.mic_on)
+ muteToggle.setBackgroundColor(getColor(R.color.red))
+ muteToggle.tooltipText = getString(R.string.tap_to_mute_audio)
+ showMessage(R.string.video_audio_recording_unmuted)
+ } else {
+ videoCapturer.muteRecording()
+ muteToggle.setImageResource(R.drawable.mic_off)
+ muteToggle.setBackgroundColor(getColor(android.R.color.darker_gray))
+ muteToggle.tooltipText = getString(R.string.tap_to_unmute_audio)
+ showMessage(R.string.video_audio_recording_muted)
+ }
+ }
}
private fun repositionTabLayout() {
diff --git a/app/src/main/res/drawable/mic_off.xml b/app/src/main/res/drawable/mic_off.xml
index 79764438..000e8862 100644
--- a/app/src/main/res/drawable/mic_off.xml
+++ b/app/src/main/res/drawable/mic_off.xml
@@ -1,5 +1,9 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/mic_on.xml b/app/src/main/res/drawable/mic_on.xml
new file mode 100644
index 00000000..6db73c9b
--- /dev/null
+++ b/app/src/main/res/drawable/mic_on.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 79eb338c..2417a253 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -162,6 +162,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#ffe8cf
#ffdf00
+
+ #E1E3E5
+
+ #ff0000
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5c99ffcc..d1e33d78 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -189,4 +189,10 @@
Use ZSL in Latency mode
Uses Zero Shutter Lag (ZSL) in Latency mode for faster capture. Certain devices may have a buggy implementation for this.
Unable to request for audio permission in between a recording
+
+ Tap to mute audio
+ Tap to unmute audio
+
+ The video\'s audio recording has been muted
+ The video\'s audio recording has been unmuted