M build.gradle => build.gradle +1 -1
@@ 87,7 87,7 @@ ext {
}
android {
- compileSdkVersion 30
+ compileSdkVersion 31
defaultConfig {
minSdkVersion 21
M src/main/java/eu/siacs/conversations/persistance/FileBackend.java => src/main/java/eu/siacs/conversations/persistance/FileBackend.java +4 -0
@@ 64,6 64,7 @@ import eu.siacs.conversations.entities.DownloadableFile;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.services.AttachFileToConversationRunnable;
import eu.siacs.conversations.services.XmppConnectionService;
+import eu.siacs.conversations.ui.adapter.MediaAdapter;
import eu.siacs.conversations.ui.util.Attachment;
import eu.siacs.conversations.utils.Compatibility;
import eu.siacs.conversations.utils.CryptoHelper;
@@ 888,6 889,9 @@ public class FileBackend {
} else if (mime.startsWith("video/")) {
parentDirectory =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
+ } else if (MediaAdapter.DOCUMENT_MIMES.contains(mime)) {
+ parentDirectory =
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
} else {
parentDirectory =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
M src/main/java/eu/siacs/conversations/ui/RecordingActivity.java => src/main/java/eu/siacs/conversations/ui/RecordingActivity.java +55 -37
@@ 1,10 1,10 @@
package eu.siacs.conversations.ui;
import android.app.Activity;
-import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.FileObserver;
@@ 18,25 18,22 @@ import android.widget.Toast;
import androidx.databinding.DataBindingUtil;
import java.io.File;
-import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
+import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import eu.siacs.conversations.Config;
import eu.siacs.conversations.R;
import eu.siacs.conversations.databinding.ActivityRecordingBinding;
-import eu.siacs.conversations.persistance.FileBackend;
import eu.siacs.conversations.ui.util.SettingsUtils;
import eu.siacs.conversations.utils.ThemeHelper;
import eu.siacs.conversations.utils.TimeFrameUtils;
public class RecordingActivity extends Activity implements View.OnClickListener {
- public static String STORAGE_DIRECTORY_TYPE_NAME = "Recordings";
-
private ActivityRecordingBinding binding;
private MediaRecorder mRecorder;
@@ 45,13 42,14 @@ public class RecordingActivity extends Activity implements View.OnClickListener
private final CountDownLatch outputFileWrittenLatch = new CountDownLatch(1);
private final Handler mHandler = new Handler();
- private final Runnable mTickExecutor = new Runnable() {
- @Override
- public void run() {
- tick();
- mHandler.postDelayed(mTickExecutor, 100);
- }
- };
+ private final Runnable mTickExecutor =
+ new Runnable() {
+ @Override
+ public void run() {
+ tick();
+ mHandler.postDelayed(mTickExecutor, 100);
+ }
+ };
private File mOutputFile;
@@ 69,7 67,7 @@ public class RecordingActivity extends Activity implements View.OnClickListener
}
@Override
- protected void onResume(){
+ protected void onResume() {
super.onResume();
SettingsUtils.applyScreenshotPreventionSetting(this);
}
@@ 138,27 136,44 @@ public class RecordingActivity extends Activity implements View.OnClickListener
}
}
if (saveFile) {
- new Thread(() -> {
- try {
- if (!outputFileWrittenLatch.await(2, TimeUnit.SECONDS)) {
- Log.d(Config.LOGTAG, "time out waiting for output file to be written");
- }
- } catch (InterruptedException e) {
- Log.d(Config.LOGTAG, "interrupted while waiting for output file to be written", e);
- }
- runOnUiThread(() -> {
- setResult(Activity.RESULT_OK, new Intent().setData(Uri.fromFile(mOutputFile)));
- finish();
- });
- }).start();
+ new Thread(
+ () -> {
+ try {
+ if (!outputFileWrittenLatch.await(2, TimeUnit.SECONDS)) {
+ Log.d(
+ Config.LOGTAG,
+ "time out waiting for output file to be written");
+ }
+ } catch (InterruptedException e) {
+ Log.d(
+ Config.LOGTAG,
+ "interrupted while waiting for output file to be written",
+ e);
+ }
+ runOnUiThread(
+ () -> {
+ setResult(
+ Activity.RESULT_OK,
+ new Intent()
+ .setData(Uri.fromFile(mOutputFile)));
+ finish();
+ });
+ })
+ .start();
}
}
private File generateOutputFilename() {
final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmssSSS", Locale.US);
final String filename = "RECORDING_" + dateFormat.format(new Date()) + ".m4a";
- //TODO once we target 31 use DIRECTORY_RECORDINGS
- final File parentDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
+ final File parentDirectory;
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ parentDirectory =
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RECORDINGS);
+ } else {
+ parentDirectory =
+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
+ }
final File conversationsDirectory = new File(parentDirectory, getString(R.string.app_name));
return new File(conversationsDirectory, filename);
}
@@ 166,21 181,24 @@ public class RecordingActivity extends Activity implements View.OnClickListener
private void setupOutputFile() {
mOutputFile = generateOutputFilename();
final File parentDirectory = mOutputFile.getParentFile();
- if (parentDirectory.mkdirs()) {
+ if (Objects.requireNonNull(parentDirectory).mkdirs()) {
Log.d(Config.LOGTAG, "created " + parentDirectory.getAbsolutePath());
}
setupFileObserver(parentDirectory);
}
private void setupFileObserver(File directory) {
- mFileObserver = new FileObserver(directory.getAbsolutePath()) {
- @Override
- public void onEvent(int event, String s) {
- if (s != null && s.equals(mOutputFile.getName()) && event == FileObserver.CLOSE_WRITE) {
- outputFileWrittenLatch.countDown();
- }
- }
- };
+ mFileObserver =
+ new FileObserver(directory.getAbsolutePath()) {
+ @Override
+ public void onEvent(int event, String s) {
+ if (s != null
+ && s.equals(mOutputFile.getName())
+ && event == FileObserver.CLOSE_WRITE) {
+ outputFileWrittenLatch.countDown();
+ }
+ }
+ };
mFileObserver.startWatching();
}
M src/main/java/eu/siacs/conversations/ui/adapter/MediaAdapter.java => src/main/java/eu/siacs/conversations/ui/adapter/MediaAdapter.java +1 -1
@@ 34,7 34,7 @@ import eu.siacs.conversations.ui.util.ViewUtil;
public class MediaAdapter extends RecyclerView.Adapter<MediaAdapter.MediaViewHolder> {
- private static final List<String> DOCUMENT_MIMES = Arrays.asList(
+ public static final List<String> DOCUMENT_MIMES = Arrays.asList(
"application/pdf",
"application/vnd.oasis.opendocument.text",
"application/msword",