Fix signal backup daily schedule bug.

This commit is contained in:
Cody Henthorne
2025-09-15 15:49:10 -04:00
committed by Greyson Parrelli
parent 901a81fb74
commit 6a456a288d
4 changed files with 68 additions and 8 deletions

View File

@@ -47,6 +47,8 @@ public final class SettingsValues extends SignalStoreValues {
public static final String BACKUPS_ENABLED = "settings.backups.enabled";
public static final String BACKUPS_SCHEDULE_HOUR = "settings.backups.schedule.hour";
public static final String BACKUPS_SCHEDULE_MINUTE = "settings.backups.schedule.minute";
public static final String SIGNAL_BACKUPS_SCHEDULE_HOUR = "settings.signal.backups.schedule.hour";
public static final String SIGNAL_BACKUPS_SCHEDULE_MINUTE = "settings.signal.backups.schedule.minute";
public static final String SMS_DELIVERY_REPORTS_ENABLED = "settings.sms.delivery.reports.enabled";
public static final String WIFI_CALLING_COMPATIBILITY_MODE_ENABLED = "settings.wifi.calling.compatibility.mode.enabled";
public static final String MESSAGE_NOTIFICATIONS_ENABLED = "settings.message.notifications.enabled";
@@ -108,6 +110,9 @@ public final class SettingsValues extends SignalStoreValues {
// Initialize backup time to a 5min interval between 1-5am
setBackupSchedule(new Random().nextInt(5) + 1, new Random().nextInt(12) * 5);
}
if (!store.containsKey(SIGNAL_BACKUPS_SCHEDULE_HOUR)) {
initSignalBackupsSchedule();
}
}
@Override
@@ -315,11 +320,40 @@ public final class SettingsValues extends SignalStoreValues {
return getInteger(BACKUPS_SCHEDULE_MINUTE, BACKUP_DEFAULT_MINUTE);
}
public int getSignalBackupHour() {
int hour = getInteger(SIGNAL_BACKUPS_SCHEDULE_HOUR, -1);
if (hour < 0) {
initSignalBackupsSchedule();
return getInteger(SIGNAL_BACKUPS_SCHEDULE_HOUR, BACKUP_DEFAULT_HOUR);
} else {
return hour;
}
}
public int getSignalBackupMinute() {
int minute = getInteger(SIGNAL_BACKUPS_SCHEDULE_MINUTE, -1);
if (minute < 0) {
initSignalBackupsSchedule();
return getInteger(SIGNAL_BACKUPS_SCHEDULE_MINUTE, BACKUP_DEFAULT_MINUTE);
} else {
return minute;
}
}
public void setBackupSchedule(int hour, int minute) {
putInteger(BACKUPS_SCHEDULE_HOUR, hour);
putInteger(BACKUPS_SCHEDULE_MINUTE, minute);
}
private void initSignalBackupsSchedule() {
setSignalBackupSchedule(new Random().nextInt(5) + 1, new Random().nextInt(12) * 5);
}
public void setSignalBackupSchedule(int hour, int minute) {
putInteger(SIGNAL_BACKUPS_SCHEDULE_HOUR, hour);
putInteger(SIGNAL_BACKUPS_SCHEDULE_MINUTE, minute);
}
public boolean isSmsDeliveryReportsEnabled() {
return getBoolean(SMS_DELIVERY_REPORTS_ENABLED, TextSecurePreferences.isSmsDeliveryReportsEnabled(AppDependencies.getApplication()));
}

View File

@@ -24,7 +24,7 @@ class MessageBackupListener : PersistentAlarmManagerListener() {
@VisibleForTesting
public override fun getNextScheduledExecutionTime(context: Context): Long {
val nextTime = SignalStore.backup.nextBackupTime
return if (nextTime > (System.currentTimeMillis() + 2.days.inWholeMilliseconds)) {
return if (nextTime < 0 || nextTime > (System.currentTimeMillis() + 2.days.inWholeMilliseconds)) {
setNextBackupTimeToIntervalFromNow()
} else {
nextTime
@@ -62,11 +62,11 @@ class MessageBackupListener : PersistentAlarmManagerListener() {
return next.plusSeconds(jitter.toLong())
}
fun setNextBackupTimeToIntervalFromNow(maxJitterSeconds: Int = BACKUP_JITTER_WINDOW_SECONDS): Long {
val now = LocalDateTime.now()
val hour = SignalStore.settings.backupHour
val minute = SignalStore.settings.backupMinute
val next = getNextDailyBackupTimeFromNowWithJitter(now, hour, minute, maxJitterSeconds).plusDays(1)
@VisibleForTesting
fun setNextBackupTimeToIntervalFromNow(now: LocalDateTime = LocalDateTime.now(), maxJitterSeconds: Int = BACKUP_JITTER_WINDOW_SECONDS, randomSource: Random = Random()): Long {
val hour = SignalStore.settings.signalBackupHour
val minute = SignalStore.settings.signalBackupMinute
val next = getNextDailyBackupTimeFromNowWithJitter(now, hour, minute, maxJitterSeconds, randomSource)
val nextTime = next.toMillis()
SignalStore.backup.nextBackupTime = nextTime
return nextTime