Fix backup restore moving forward when backgrounded.

fork-5.53.8
Cody Henthorne 2021-09-27 10:11:44 -04:00
rodzic fbabab0b70
commit 6c55916cda
2 zmienionych plików z 43 dodań i 13 usunięć

Wyświetl plik

@ -1,9 +1,5 @@
package org.thoughtcrime.securesms.registration.fragments; package org.thoughtcrime.securesms.registration.fragments;
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.setSpinning;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
@ -31,7 +27,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.Navigation; import androidx.navigation.Navigation;
import com.dd.CircularProgressButton; import com.dd.CircularProgressButton;
@ -57,13 +53,16 @@ import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel;
import org.thoughtcrime.securesms.service.LocalBackupListener; import org.thoughtcrime.securesms.service.LocalBackupListener;
import org.thoughtcrime.securesms.util.BackupUtil; import org.thoughtcrime.securesms.util.BackupUtil;
import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
import java.io.IOException; import java.io.IOException;
import java.util.Locale; import java.util.Locale;
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning;
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.setSpinning;
public final class RestoreBackupFragment extends LoggingFragment { public final class RestoreBackupFragment extends LoggingFragment {
private static final String TAG = Log.tag(RestoreBackupFragment.class); private static final String TAG = Log.tag(RestoreBackupFragment.class);
@ -74,6 +73,7 @@ public final class RestoreBackupFragment extends LoggingFragment {
private TextView restoreBackupProgress; private TextView restoreBackupProgress;
private CircularProgressButton restoreButton; private CircularProgressButton restoreButton;
private View skipRestoreButton; private View skipRestoreButton;
private RegistrationViewModel viewModel;
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
@ -101,7 +101,8 @@ public final class RestoreBackupFragment extends LoggingFragment {
.navigate(RestoreBackupFragmentDirections.actionSkip()); .navigate(RestoreBackupFragmentDirections.actionSkip());
}); });
RegistrationViewModel viewModel = ViewModelProviders.of(requireActivity()).get(RegistrationViewModel.class); viewModel = new ViewModelProvider(requireActivity()).get(RegistrationViewModel.class);
if (viewModel.isReregister()) { if (viewModel.isReregister()) {
Log.i(TAG, "Skipping backup restore during re-register."); Log.i(TAG, "Skipping backup restore during re-register.");
Navigation.findNavController(view) Navigation.findNavController(view)
@ -109,6 +110,11 @@ public final class RestoreBackupFragment extends LoggingFragment {
return; return;
} }
if (viewModel.hasBackupCompleted()) {
onBackupComplete();
return;
}
if (SignalStore.settings().isBackupEnabled()) { if (SignalStore.settings().isBackupEnabled()) {
Log.i(TAG, "Backups enabled, so a backup must have been previously restored."); Log.i(TAG, "Backups enabled, so a backup must have been previously restored.");
Navigation.findNavController(view) Navigation.findNavController(view)
@ -279,6 +285,7 @@ public final class RestoreBackupFragment extends LoggingFragment {
@Override @Override
protected void onPostExecute(@NonNull BackupImportResult result) { protected void onPostExecute(@NonNull BackupImportResult result) {
viewModel.markBackupCompleted();
cancelSpinning(restoreButton); cancelSpinning(restoreButton);
skipRestoreButton.setVisibility(View.VISIBLE); skipRestoreButton.setVisibility(View.VISIBLE);
@ -305,6 +312,14 @@ public final class RestoreBackupFragment extends LoggingFragment {
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
} }
@Override
public void onResume() {
super.onResume();
if (viewModel != null && viewModel.hasBackupCompleted()) {
onBackupComplete();
}
}
@Override @Override
public void onStop() { public void onStop() {
super.onStop(); super.onStop();
@ -325,12 +340,16 @@ public final class RestoreBackupFragment extends LoggingFragment {
skipRestoreButton.setVisibility(View.INVISIBLE); skipRestoreButton.setVisibility(View.INVISIBLE);
if (event.getType() == FullBackupBase.BackupEvent.Type.FINISHED) { if (event.getType() == FullBackupBase.BackupEvent.Type.FINISHED) {
if (BackupUtil.isUserSelectionRequired(requireContext()) && !BackupUtil.canUserAccessBackupDirectory(requireContext())) { onBackupComplete();
displayConfirmationDialog(requireContext()); }
} else { }
Navigation.findNavController(requireView())
.navigate(RestoreBackupFragmentDirections.actionBackupRestored()); private void onBackupComplete() {
} if (BackupUtil.isUserSelectionRequired(requireContext()) && !BackupUtil.canUserAccessBackupDirectory(requireContext())) {
displayConfirmationDialog(requireContext());
} else {
Navigation.findNavController(requireView())
.navigate(RestoreBackupFragmentDirections.actionBackupRestored());
} }
} }

Wyświetl plik

@ -29,6 +29,7 @@ public final class RegistrationViewModel extends BaseRegistrationViewModel {
private static final String STATE_FCM_TOKEN = "FCM_TOKEN"; private static final String STATE_FCM_TOKEN = "FCM_TOKEN";
private static final String STATE_RESTORE_FLOW_SHOWN = "RESTORE_FLOW_SHOWN"; private static final String STATE_RESTORE_FLOW_SHOWN = "RESTORE_FLOW_SHOWN";
private static final String STATE_IS_REREGISTER = "IS_REREGISTER"; private static final String STATE_IS_REREGISTER = "IS_REREGISTER";
private static final String STATE_BACKUP_COMPLETED = "BACKUP_COMPLETED";
private final RegistrationRepository registrationRepository; private final RegistrationRepository registrationRepository;
@ -43,6 +44,7 @@ public final class RegistrationViewModel extends BaseRegistrationViewModel {
this.registrationRepository = registrationRepository; this.registrationRepository = registrationRepository;
setInitialDefaultValue(STATE_RESTORE_FLOW_SHOWN, false); setInitialDefaultValue(STATE_RESTORE_FLOW_SHOWN, false);
setInitialDefaultValue(STATE_BACKUP_COMPLETED, false);
this.savedState.set(STATE_IS_REREGISTER, isReregister); this.savedState.set(STATE_IS_REREGISTER, isReregister);
} }
@ -81,6 +83,15 @@ public final class RegistrationViewModel extends BaseRegistrationViewModel {
savedState.set(STATE_IS_REREGISTER, isReregister); savedState.set(STATE_IS_REREGISTER, isReregister);
} }
public void markBackupCompleted() {
savedState.set(STATE_BACKUP_COMPLETED, true);
}
public boolean hasBackupCompleted() {
Boolean completed = savedState.get(STATE_BACKUP_COMPLETED);
return completed != null ? completed : false;
}
@Override @Override
public Single<RequestVerificationCodeResponseProcessor> requestVerificationCode(@NonNull VerifyAccountRepository.Mode mode) { public Single<RequestVerificationCodeResponseProcessor> requestVerificationCode(@NonNull VerifyAccountRepository.Mode mode) {
return super.requestVerificationCode(mode) return super.requestVerificationCode(mode)