Add simple backup/restore tools in backup playground.

This commit is contained in:
Greyson Parrelli
2024-10-02 17:06:24 -04:00
parent a02c2e393f
commit 754dc63f70
2 changed files with 35 additions and 14 deletions

View File

@@ -55,12 +55,14 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.signal.core.ui.Buttons
import org.signal.core.ui.Dividers
import org.signal.core.ui.Snackbars
@@ -121,6 +123,7 @@ class InternalBackupPlaygroundFragment : ComposeFragment() {
@Composable
override fun FragmentContent() {
val context = LocalContext.current
val state by viewModel.state
val mediaState by viewModel.mediaState
@@ -172,7 +175,13 @@ class InternalBackupPlaygroundFragment : ComposeFragment() {
validateFileLauncher.launch(intent)
},
onTriggerBackupJobClicked = { viewModel.triggerBackupJob() },
onRestoreFromRemoteClicked = { viewModel.restoreFromRemote() }
onWipeDataAndRestoreClicked = {
MaterialAlertDialogBuilder(context)
.setTitle("Are you sure?")
.setMessage("This will delete all of your chats! Make sure you've finished a backup first, we don't check for you. Only do this on a test device!")
.setPositiveButton("Wipe and restore") { _, _ -> viewModel.wipeAllDataAndRestoreFromRemote() }
.show()
}
)
},
mediaContent = { snackbarHostState ->
@@ -265,7 +274,7 @@ fun Screen(
onUploadToRemoteClicked: () -> Unit = {},
onCheckRemoteBackupStateClicked: () -> Unit = {},
onTriggerBackupJobClicked: () -> Unit = {},
onRestoreFromRemoteClicked: () -> Unit = {}
onWipeDataAndRestoreClicked: () -> Unit = {}
) {
val scrollState = rememberScrollState()
@@ -278,6 +287,20 @@ fun Screen(
.verticalScroll(scrollState)
.padding(16.dp)
) {
Buttons.LargePrimary(
onClick = onTriggerBackupJobClicked
) {
Text("Enqueue remote backup")
}
Buttons.LargeTonal(
onClick = onWipeDataAndRestoreClicked
) {
Text("Wipe data and restore")
}
Dividers.Default()
Row(
verticalAlignment = Alignment.CenterVertically
) {
@@ -305,13 +328,6 @@ fun Screen(
Text("Export to backup directory")
}
Buttons.LargePrimary(
onClick = onTriggerBackupJobClicked,
enabled = !state.backupState.inProgress
) {
Text("Trigger Backup Job")
}
Dividers.Default()
Buttons.LargeTonal(
@@ -407,10 +423,6 @@ fun Screen(
Spacer(modifier = Modifier.height(8.dp))
Buttons.LargePrimary(onClick = onRestoreFromRemoteClicked) {
Text("Restore from remote")
}
when (state.uploadState) {
BackupUploadState.NONE -> {
StateLabel("")

View File

@@ -18,6 +18,7 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.kotlin.plusAssign
import io.reactivex.rxjava3.kotlin.subscribeBy
import io.reactivex.rxjava3.schedulers.Schedulers
import org.signal.core.util.concurrent.SignalExecutors
import org.signal.libsignal.zkgroup.profiles.ProfileKey
import org.thoughtcrime.securesms.attachments.AttachmentId
import org.thoughtcrime.securesms.attachments.DatabaseAttachment
@@ -208,7 +209,15 @@ class InternalBackupPlaygroundViewModel : ViewModel() {
}
}
fun restoreFromRemote() {
fun wipeAllDataAndRestoreFromRemote() {
SignalExecutors.BOUNDED_IO.execute {
SignalDatabase.threads.deleteAllConversations()
AppDependencies.messageNotifier.updateNotification(AppDependencies.application)
restoreFromRemote()
}
}
private fun restoreFromRemote() {
_state.value = _state.value.copy(backupState = BackupState.IMPORT_IN_PROGRESS)
disposables += Single.fromCallable {