Skip to content

Commit 6c55916

Browse files
committed
Fix backup restore moving forward when backgrounded.
1 parent fbabab0 commit 6c55916

File tree

2 files changed

+43
-13
lines changed

2 files changed

+43
-13
lines changed

app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RestoreBackupFragment.java

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package org.thoughtcrime.securesms.registration.fragments;
22

3-
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView;
4-
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning;
5-
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.setSpinning;
6-
73
import android.annotation.SuppressLint;
84
import android.app.Activity;
95
import android.content.Context;
@@ -31,7 +27,7 @@
3127
import androidx.annotation.Nullable;
3228
import androidx.annotation.RequiresApi;
3329
import androidx.appcompat.app.AlertDialog;
34-
import androidx.lifecycle.ViewModelProviders;
30+
import androidx.lifecycle.ViewModelProvider;
3531
import androidx.navigation.Navigation;
3632

3733
import com.dd.CircularProgressButton;
@@ -57,13 +53,16 @@
5753
import org.thoughtcrime.securesms.service.LocalBackupListener;
5854
import org.thoughtcrime.securesms.util.BackupUtil;
5955
import org.thoughtcrime.securesms.util.DateUtils;
60-
import org.thoughtcrime.securesms.util.TextSecurePreferences;
6156
import org.thoughtcrime.securesms.util.Util;
6257
import org.thoughtcrime.securesms.util.concurrent.SimpleTask;
6358

6459
import java.io.IOException;
6560
import java.util.Locale;
6661

62+
import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView;
63+
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning;
64+
import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.setSpinning;
65+
6766
public final class RestoreBackupFragment extends LoggingFragment {
6867

6968
private static final String TAG = Log.tag(RestoreBackupFragment.class);
@@ -74,6 +73,7 @@ public final class RestoreBackupFragment extends LoggingFragment {
7473
private TextView restoreBackupProgress;
7574
private CircularProgressButton restoreButton;
7675
private View skipRestoreButton;
76+
private RegistrationViewModel viewModel;
7777

7878
@Override
7979
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -101,14 +101,20 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
101101
.navigate(RestoreBackupFragmentDirections.actionSkip());
102102
});
103103

104-
RegistrationViewModel viewModel = ViewModelProviders.of(requireActivity()).get(RegistrationViewModel.class);
104+
viewModel = new ViewModelProvider(requireActivity()).get(RegistrationViewModel.class);
105+
105106
if (viewModel.isReregister()) {
106107
Log.i(TAG, "Skipping backup restore during re-register.");
107108
Navigation.findNavController(view)
108109
.navigate(RestoreBackupFragmentDirections.actionSkipNoReturn());
109110
return;
110111
}
111112

113+
if (viewModel.hasBackupCompleted()) {
114+
onBackupComplete();
115+
return;
116+
}
117+
112118
if (SignalStore.settings().isBackupEnabled()) {
113119
Log.i(TAG, "Backups enabled, so a backup must have been previously restored.");
114120
Navigation.findNavController(view)
@@ -279,6 +285,7 @@ protected BackupImportResult doInBackground(Void... voids) {
279285

280286
@Override
281287
protected void onPostExecute(@NonNull BackupImportResult result) {
288+
viewModel.markBackupCompleted();
282289
cancelSpinning(restoreButton);
283290
skipRestoreButton.setVisibility(View.VISIBLE);
284291

@@ -305,6 +312,14 @@ public void onStart() {
305312
EventBus.getDefault().register(this);
306313
}
307314

315+
@Override
316+
public void onResume() {
317+
super.onResume();
318+
if (viewModel != null && viewModel.hasBackupCompleted()) {
319+
onBackupComplete();
320+
}
321+
}
322+
308323
@Override
309324
public void onStop() {
310325
super.onStop();
@@ -325,12 +340,16 @@ public void onEvent(@NonNull FullBackupBase.BackupEvent event) {
325340
skipRestoreButton.setVisibility(View.INVISIBLE);
326341

327342
if (event.getType() == FullBackupBase.BackupEvent.Type.FINISHED) {
328-
if (BackupUtil.isUserSelectionRequired(requireContext()) && !BackupUtil.canUserAccessBackupDirectory(requireContext())) {
329-
displayConfirmationDialog(requireContext());
330-
} else {
331-
Navigation.findNavController(requireView())
332-
.navigate(RestoreBackupFragmentDirections.actionBackupRestored());
333-
}
343+
onBackupComplete();
344+
}
345+
}
346+
347+
private void onBackupComplete() {
348+
if (BackupUtil.isUserSelectionRequired(requireContext()) && !BackupUtil.canUserAccessBackupDirectory(requireContext())) {
349+
displayConfirmationDialog(requireContext());
350+
} else {
351+
Navigation.findNavController(requireView())
352+
.navigate(RestoreBackupFragmentDirections.actionBackupRestored());
334353
}
335354
}
336355

app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/RegistrationViewModel.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public final class RegistrationViewModel extends BaseRegistrationViewModel {
2929
private static final String STATE_FCM_TOKEN = "FCM_TOKEN";
3030
private static final String STATE_RESTORE_FLOW_SHOWN = "RESTORE_FLOW_SHOWN";
3131
private static final String STATE_IS_REREGISTER = "IS_REREGISTER";
32+
private static final String STATE_BACKUP_COMPLETED = "BACKUP_COMPLETED";
3233

3334
private final RegistrationRepository registrationRepository;
3435

@@ -43,6 +44,7 @@ public RegistrationViewModel(@NonNull SavedStateHandle savedStateHandle,
4344
this.registrationRepository = registrationRepository;
4445

4546
setInitialDefaultValue(STATE_RESTORE_FLOW_SHOWN, false);
47+
setInitialDefaultValue(STATE_BACKUP_COMPLETED, false);
4648

4749
this.savedState.set(STATE_IS_REREGISTER, isReregister);
4850
}
@@ -81,6 +83,15 @@ public void setIsReregister(boolean isReregister) {
8183
savedState.set(STATE_IS_REREGISTER, isReregister);
8284
}
8385

86+
public void markBackupCompleted() {
87+
savedState.set(STATE_BACKUP_COMPLETED, true);
88+
}
89+
90+
public boolean hasBackupCompleted() {
91+
Boolean completed = savedState.get(STATE_BACKUP_COMPLETED);
92+
return completed != null ? completed : false;
93+
}
94+
8495
@Override
8596
public Single<RequestVerificationCodeResponseProcessor> requestVerificationCode(@NonNull VerifyAccountRepository.Mode mode) {
8697
return super.requestVerificationCode(mode)

0 commit comments

Comments
 (0)