Notify about accidentally disabled backups.

This commit is contained in:
Greyson Parrelli
2020-10-29 13:32:55 -04:00
committed by GitHub
parent d1478c5ce0
commit b5d6cb2a8d
10 changed files with 135 additions and 43 deletions

View File

@@ -15,7 +15,6 @@ import androidx.documentfile.provider.DocumentFile;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.backup.BackupPassphrase;
import org.thoughtcrime.securesms.database.NoExternalStorageException;
import org.thoughtcrime.securesms.database.documents.Document;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.logging.Log;
@@ -181,7 +180,7 @@ public class BackupUtil {
}
private static List<BackupInfo> getAllBackupsNewestFirstLegacy() throws NoExternalStorageException {
File backupDirectory = StorageUtil.getBackupDirectory();
File backupDirectory = StorageUtil.getOrCreateBackupDirectory();
File[] files = backupDirectory.listFiles();
List<BackupInfo> backups = new ArrayList<>(files.length);
@@ -213,6 +212,20 @@ public class BackupUtil {
return result;
}
public static boolean hasBackupFiles(@NonNull Context context) {
if (Permissions.hasAll(context, Manifest.permission.READ_EXTERNAL_STORAGE)) {
try {
File directory = StorageUtil.getBackupDirectory();
return directory.exists() && directory.isDirectory() && directory.listFiles().length > 0;
} catch (NoExternalStorageException e) {
Log.w(TAG, "Failed to read storage!", e);
return false;
}
} else {
return false;
}
}
private static long getBackupTimestamp(@NonNull String backupName) {
String[] prefixSuffix = backupName.split("[.]");

View File

@@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.database.NoExternalStorageException;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.whispersystems.libsignal.util.guava.Optional;
import java.io.File;
import java.util.List;
@@ -28,20 +29,14 @@ public class StorageUtil {
private static final String PRODUCTION_PACKAGE_ID = "org.thoughtcrime.securesms";
public static File getBackupDirectory() throws NoExternalStorageException {
public static File getOrCreateBackupDirectory() throws NoExternalStorageException {
File storage = Environment.getExternalStorageDirectory();
if (!storage.canWrite()) {
throw new NoExternalStorageException();
}
File signal = new File(storage, "Signal");
File backups = new File(signal, "Backups");
//noinspection ConstantConditions
if (BuildConfig.APPLICATION_ID.startsWith(PRODUCTION_PACKAGE_ID + ".")) {
backups = new File(backups, BuildConfig.APPLICATION_ID.substring(PRODUCTION_PACKAGE_ID.length() + 1));
}
File backups = getBackupDirectory();
if (!backups.exists()) {
if (!backups.mkdirs()) {
@@ -52,6 +47,19 @@ public class StorageUtil {
return backups;
}
public static File getBackupDirectory() throws NoExternalStorageException {
File storage = Environment.getExternalStorageDirectory();
File signal = new File(storage, "Signal");
File backups = new File(signal, "Backups");
//noinspection ConstantConditions
if (BuildConfig.APPLICATION_ID.startsWith(PRODUCTION_PACKAGE_ID + ".")) {
backups = new File(backups, BuildConfig.APPLICATION_ID.substring(PRODUCTION_PACKAGE_ID.length() + 1));
}
return backups;
}
@RequiresApi(24)
public static @NonNull String getDisplayPath(@NonNull Context context, @NonNull Uri uri) {
String lastPathSegment = Objects.requireNonNull(uri.getLastPathSegment());