mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-27 21:24:42 +00:00
Add simple backup/restore tools in backup playground.
This commit is contained in:
@@ -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("")
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user