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;
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.app.Activity;
import android.content.Context;
@ -31,7 +27,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog;
import androidx.lifecycle.ViewModelProviders;
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.Navigation;
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.util.BackupUtil;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
import java.io.IOException;
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 {
private static final String TAG = Log.tag(RestoreBackupFragment.class);
@ -74,6 +73,7 @@ public final class RestoreBackupFragment extends LoggingFragment {
private TextView restoreBackupProgress;
private CircularProgressButton restoreButton;
private View skipRestoreButton;
private RegistrationViewModel viewModel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@ -101,7 +101,8 @@ public final class RestoreBackupFragment extends LoggingFragment {
.navigate(RestoreBackupFragmentDirections.actionSkip());
});
RegistrationViewModel viewModel = ViewModelProviders.of(requireActivity()).get(RegistrationViewModel.class);
viewModel = new ViewModelProvider(requireActivity()).get(RegistrationViewModel.class);
if (viewModel.isReregister()) {
Log.i(TAG, "Skipping backup restore during re-register.");
Navigation.findNavController(view)
@ -109,6 +110,11 @@ public final class RestoreBackupFragment extends LoggingFragment {
return;
}
if (viewModel.hasBackupCompleted()) {
onBackupComplete();
return;
}
if (SignalStore.settings().isBackupEnabled()) {
Log.i(TAG, "Backups enabled, so a backup must have been previously restored.");
Navigation.findNavController(view)
@ -279,6 +285,7 @@ public final class RestoreBackupFragment extends LoggingFragment {
@Override
protected void onPostExecute(@NonNull BackupImportResult result) {
viewModel.markBackupCompleted();
cancelSpinning(restoreButton);
skipRestoreButton.setVisibility(View.VISIBLE);
@ -305,6 +312,14 @@ public final class RestoreBackupFragment extends LoggingFragment {
EventBus.getDefault().register(this);
}
@Override
public void onResume() {
super.onResume();
if (viewModel != null && viewModel.hasBackupCompleted()) {
onBackupComplete();
}
}
@Override
public void onStop() {
super.onStop();
@ -325,12 +340,16 @@ public final class RestoreBackupFragment extends LoggingFragment {
skipRestoreButton.setVisibility(View.INVISIBLE);
if (event.getType() == FullBackupBase.BackupEvent.Type.FINISHED) {
if (BackupUtil.isUserSelectionRequired(requireContext()) && !BackupUtil.canUserAccessBackupDirectory(requireContext())) {
displayConfirmationDialog(requireContext());
} else {
Navigation.findNavController(requireView())
.navigate(RestoreBackupFragmentDirections.actionBackupRestored());
}
onBackupComplete();
}
}
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_RESTORE_FLOW_SHOWN = "RESTORE_FLOW_SHOWN";
private static final String STATE_IS_REREGISTER = "IS_REREGISTER";
private static final String STATE_BACKUP_COMPLETED = "BACKUP_COMPLETED";
private final RegistrationRepository registrationRepository;
@ -43,6 +44,7 @@ public final class RegistrationViewModel extends BaseRegistrationViewModel {
this.registrationRepository = registrationRepository;
setInitialDefaultValue(STATE_RESTORE_FLOW_SHOWN, false);
setInitialDefaultValue(STATE_BACKUP_COMPLETED, false);
this.savedState.set(STATE_IS_REREGISTER, isReregister);
}
@ -81,6 +83,15 @@ public final class RegistrationViewModel extends BaseRegistrationViewModel {
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
public Single<RequestVerificationCodeResponseProcessor> requestVerificationCode(@NonNull VerifyAccountRepository.Mode mode) {
return super.requestVerificationCode(mode)