Use cache directory on removable storage for backups if present

Fixes #7692
pull/1/head
Moxie Marlinspike 6 years ago committed by Greyson Parrelli
parent 35d158cfee
commit 6c1a1fb9ad

@ -52,7 +52,7 @@ public class LocalBackupJob extends ContextJob {
try {
String backupPassword = TextSecurePreferences.getBackupPassphrase(context);
File backupDirectory = StorageUtil.getBackupDirectory(context);
File backupDirectory = StorageUtil.getBackupCacheDirectory(context);
String timestamp = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.US).format(new Date());
String fileName = String.format("signal-%s.backup", timestamp);
File backupFile = new File(backupDirectory, fileName);

@ -22,12 +22,7 @@ public class StorageUtil
File[] directories = context.getExternalFilesDirs(null);
if (directories != null) {
storage = Stream.of(directories)
.withoutNulls()
.filterNot(f -> f.getAbsolutePath().contains("emulated"))
.limit(1)
.findSingle()
.orElse(null);
storage = getNonEmulated(directories);
}
}
@ -52,6 +47,28 @@ public class StorageUtil
return backups;
}
public static File getBackupCacheDirectory(Context context) {
if (Build.VERSION.SDK_INT >= 19) {
File[] directories = context.getExternalCacheDirs();
if (directories != null) {
File result = getNonEmulated(directories);
if (result != null) return result;
}
}
return context.getExternalCacheDir();
}
private static @Nullable File getNonEmulated(File[] directories) {
return Stream.of(directories)
.withoutNulls()
.filterNot(f -> f.getAbsolutePath().contains("emulated"))
.limit(1)
.findSingle()
.orElse(null);
}
private static File getSignalStorageDir() throws NoExternalStorageException {
final File storage = Environment.getExternalStorageDirectory();

Loading…
Cancel
Save