diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java index 894b052a47..12b364655d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java @@ -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()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/RegistrationViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/RegistrationViewModel.java index f59da4bd3b..3b7c991ce5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/RegistrationViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/RegistrationViewModel.java @@ -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 requestVerificationCode(@NonNull VerifyAccountRepository.Mode mode) { return super.requestVerificationCode(mode)