mirror of
https://github.com/oxen-io/session-android.git
synced 2025-10-23 19:49:30 +00:00
Make an attempt to store/retrieve backups from removable storage
Fixes #7521
This commit is contained in:
@@ -22,7 +22,7 @@ public class BackupUtil {
|
||||
|
||||
public static @NonNull String getLastBackupTime(@NonNull Context context, @NonNull Locale locale) {
|
||||
try {
|
||||
BackupInfo backup = getLatestBackup();
|
||||
BackupInfo backup = getLatestBackup(context);
|
||||
|
||||
if (backup == null) return context.getString(R.string.BackupUtil_never);
|
||||
else return DateUtils.getExtendedRelativeTimeSpanString(context, locale, backup.getTimestamp());
|
||||
@@ -32,8 +32,8 @@ public class BackupUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static @Nullable BackupInfo getLatestBackup() throws NoExternalStorageException {
|
||||
File backupDirectory = StorageUtil.getBackupDirectory();
|
||||
public static @Nullable BackupInfo getLatestBackup(@NonNull Context context) throws NoExternalStorageException {
|
||||
File backupDirectory = StorageUtil.getBackupDirectory(context);
|
||||
File[] backups = backupDirectory.listFiles();
|
||||
BackupInfo latestBackup = null;
|
||||
|
||||
@@ -49,9 +49,9 @@ public class BackupUtil {
|
||||
}
|
||||
|
||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||
public static void deleteAllBackups() {
|
||||
public static void deleteAllBackups(@NonNull Context context) {
|
||||
try {
|
||||
File backupDirectory = StorageUtil.getBackupDirectory();
|
||||
File backupDirectory = StorageUtil.getBackupDirectory(context);
|
||||
File[] backups = backupDirectory.listFiles();
|
||||
|
||||
for (File backup : backups) {
|
||||
@@ -62,9 +62,9 @@ public class BackupUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static void deleteOldBackups() {
|
||||
public static void deleteOldBackups(@NonNull Context context) {
|
||||
try {
|
||||
File backupDirectory = StorageUtil.getBackupDirectory();
|
||||
File backupDirectory = StorageUtil.getBackupDirectory(context);
|
||||
File[] backups = backupDirectory.listFiles();
|
||||
|
||||
if (backups != null && backups.length > 5) {
|
||||
|
@@ -1,8 +1,13 @@
|
||||
package org.thoughtcrime.securesms.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Objects;
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.thoughtcrime.securesms.database.NoExternalStorageException;
|
||||
|
||||
import java.io.File;
|
||||
@@ -10,8 +15,25 @@ import java.io.File;
|
||||
public class StorageUtil
|
||||
{
|
||||
|
||||
public static File getBackupDirectory() throws NoExternalStorageException {
|
||||
File storage = Environment.getExternalStorageDirectory();
|
||||
public static File getBackupDirectory(Context context) throws NoExternalStorageException {
|
||||
File storage = null;
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 19) {
|
||||
File[] directories = context.getExternalFilesDirs(null);
|
||||
|
||||
if (directories != null) {
|
||||
storage = Stream.of(directories)
|
||||
.withoutNulls()
|
||||
.filterNot(f -> f.getAbsolutePath().contains("emulated"))
|
||||
.limit(1)
|
||||
.findSingle()
|
||||
.orElse(null);
|
||||
}
|
||||
}
|
||||
|
||||
if (storage == null) {
|
||||
storage = Environment.getExternalStorageDirectory();
|
||||
}
|
||||
|
||||
if (!storage.canWrite()) {
|
||||
throw new NoExternalStorageException();
|
||||
|
Reference in New Issue
Block a user