Change summary
src/main/java/eu/siacs/conversations/ui/RecordingActivity.java | 19 +++
src/main/res/values/arrays.xml | 12 ++
src/main/res/xml/preferences.xml | 6 +
3 files changed, 35 insertions(+), 2 deletions(-)
Detailed changes
@@ -2,6 +2,7 @@ package eu.siacs.conversations.ui;
import android.app.Activity;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Build;
@@ -10,6 +11,7 @@ import android.os.Environment;
import android.os.FileObserver;
import android.os.Handler;
import android.os.SystemClock;
+import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
@@ -95,21 +97,32 @@ public class RecordingActivity extends Activity implements View.OnClickListener
}
}
+ protected SharedPreferences getPreferences() {
+ return PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+ }
+
private boolean startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
+ final String userChosenCodec = getPreferences().getString("voice_message_codec", "");
final int outputFormat;
- if (Config.USE_OPUS_VOICE_MESSAGES && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ if (("opus".equals(userChosenCodec) || ("".equals(userChosenCodec) && Config.USE_OPUS_VOICE_MESSAGES)) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
outputFormat = MediaRecorder.OutputFormat.OGG;
mRecorder.setOutputFormat(outputFormat);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.OPUS);
mRecorder.setAudioEncodingBitRate(32000);
- } else {
+ } else if ("mpeg4".equals(userChosenCodec) || !Config.USE_OPUS_VOICE_MESSAGES) {
outputFormat = MediaRecorder.OutputFormat.MPEG_4;
mRecorder.setOutputFormat(outputFormat);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setAudioEncodingBitRate(96000);
mRecorder.setAudioSamplingRate(22050);
+ } else {
+ outputFormat = MediaRecorder.OutputFormat.THREE_GPP;
+ mRecorder.setOutputFormat(outputFormat);
+ mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
+ mRecorder.setAudioEncodingBitRate(23850);
+ mRecorder.setAudioSamplingRate(16000);
}
setupOutputFile(outputFormat);
mRecorder.setOutputFile(mOutputFile.getAbsolutePath());
@@ -191,6 +204,8 @@ public class RecordingActivity extends Activity implements View.OnClickListener
extension = "m4a";
} else if (outputFormat == MediaRecorder.OutputFormat.OGG) {
extension = "oga";
+ } else if (outputFormat == MediaRecorder.OutputFormat.THREE_GPP) {
+ extension = "awb";
} else {
throw new IllegalStateException("Unrecognized output format");
}
@@ -128,4 +128,16 @@
<item>JABBER_NETWORK</item>
<item>LOCAL_SERVER</item>
</string-array>
+
+ <string-array name="voice_codec_entries">
+ <item>Opus (best)</item>
+ <item>MPEG4</item>
+ <item>3GPP</item>
+ </string-array>
+
+ <string-array name="voice_codec_values">
+ <item>opus</item>
+ <item>mpeg4</item>
+ <item>3gpp</item>
+ </string-array>
</resources>
@@ -391,6 +391,12 @@
<Preference
android:title="Clear Blocked Media"
android:key="clear_blocked_media" />
+ <ListPreference
+ android:title="Voice Message Codec"
+ android:defaultValue="opus"
+ android:entries="@array/voice_codec_entries"
+ android:entryValues="@array/voice_codec_values"
+ android:key="voice_message_codec" />
</PreferenceCategory>
<PreferenceCategory android:title="@string/pref_presence_settings">
<CheckBoxPreference