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