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

@@ -39,31 +39,32 @@ public class ApplicationMigrations {
private static final int LEGACY_CANONICAL_VERSION = 455;
public static final int CURRENT_VERSION = 22;
public static final int CURRENT_VERSION = 23;
private static final class Version {
static final int LEGACY = 1;
static final int RECIPIENT_ID = 2;
static final int RECIPIENT_SEARCH = 3;
static final int RECIPIENT_CLEANUP = 4;
static final int AVATAR_MIGRATION = 5;
static final int UUIDS = 6;
static final int CACHED_ATTACHMENTS = 7;
static final int STICKERS_LAUNCH = 8;
static final int LEGACY = 1;
static final int RECIPIENT_ID = 2;
static final int RECIPIENT_SEARCH = 3;
static final int RECIPIENT_CLEANUP = 4;
static final int AVATAR_MIGRATION = 5;
static final int UUIDS = 6;
static final int CACHED_ATTACHMENTS = 7;
static final int STICKERS_LAUNCH = 8;
//static final int TEST_ARGON2 = 9;
static final int SWOON_STICKERS = 10;
static final int STORAGE_SERVICE = 11;
static final int SWOON_STICKERS = 10;
static final int STORAGE_SERVICE = 11;
//static final int STORAGE_KEY_ROTATE = 12;
static final int REMOVE_AVATAR_ID = 13;
static final int STORAGE_CAPABILITY = 14;
static final int PIN_REMINDER = 15;
static final int VERSIONED_PROFILE = 16;
static final int PIN_OPT_OUT = 17;
static final int TRIM_SETTINGS = 18;
static final int THUMBNAIL_CLEANUP = 19;
static final int GV2 = 20;
static final int GV2_2 = 21;
static final int CDS = 22;
static final int REMOVE_AVATAR_ID = 13;
static final int STORAGE_CAPABILITY = 14;
static final int PIN_REMINDER = 15;
static final int VERSIONED_PROFILE = 16;
static final int PIN_OPT_OUT = 17;
static final int TRIM_SETTINGS = 18;
static final int THUMBNAIL_CLEANUP = 19;
static final int GV2 = 20;
static final int GV2_2 = 21;
static final int CDS = 22;
static final int BACKUP_NOTIFICATION = 23;
}
/**
@@ -267,6 +268,10 @@ public class ApplicationMigrations {
jobs.put(Version.CDS, new DirectoryRefreshMigrationJob());
}
if (lastSeenVersion < Version.BACKUP_NOTIFICATION) {
jobs.put(Version.BACKUP_NOTIFICATION, new BackupNotificationMigrationJob());
}
return jobs;
}

View File

@@ -0,0 +1,68 @@
package org.thoughtcrime.securesms.migrations;
import android.os.Build;
import androidx.annotation.NonNull;
import org.thoughtcrime.securesms.backup.BackupFileIOError;
import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.util.BackupUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import java.io.IOException;
import java.util.Locale;
/**
* Handles showing a notification if we think backups were unintentionally disabled.
*/
public final class BackupNotificationMigrationJob extends MigrationJob {
private static final String TAG = Log.tag(BackupNotificationMigrationJob.class);
public static final String KEY = "BackupNotificationMigrationJob";
BackupNotificationMigrationJob() {
this(new Parameters.Builder().build());
}
private BackupNotificationMigrationJob(@NonNull Parameters parameters) {
super(parameters);
}
@Override
public boolean isUiBlocking() {
return false;
}
@Override
public @NonNull String getFactoryKey() {
return KEY;
}
@Override
public void performMigration() {
if (Build.VERSION.SDK_INT >= 29 && !TextSecurePreferences.isBackupEnabled(context) && BackupUtil.hasBackupFiles(context)) {
Log.w(TAG, "Stranded backup! Notifying.");
BackupFileIOError.UNKNOWN.postNotification(context);
} else {
Log.w(TAG, String.format(Locale.US, "Does not meet criteria. API: %d, BackupsEnabled: %s, HasFiles: %s",
Build.VERSION.SDK_INT,
TextSecurePreferences.isBackupEnabled(context),
BackupUtil.hasBackupFiles(context)));
}
}
@Override
boolean shouldRetry(@NonNull Exception e) {
return e instanceof IOException;
}
public static class Factory implements Job.Factory<BackupNotificationMigrationJob> {
@Override
public @NonNull BackupNotificationMigrationJob create(@NonNull Parameters parameters, @NonNull Data data) {
return new BackupNotificationMigrationJob(parameters);
}
}
}