Skip to content

Commit

Permalink
Fix device transfer stall if screen is locked during transfer.
Browse files Browse the repository at this point in the history
  • Loading branch information
cody-signal committed Mar 17, 2021
1 parent 751ba8d commit 5a84fa5
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
*/
public abstract class DeviceTransferFragment extends LoggingFragment {

private static final String TRANSFER_FINISHED_KEY = "transfer_finished";

private final OnBackPressed onBackPressed = new OnBackPressed();
private final TransferModeListener transferModeListener = new TransferModeListener();

Expand All @@ -36,11 +38,34 @@ public abstract class DeviceTransferFragment extends LoggingFragment {
protected View progress;
protected View alert;
protected TextView status;
protected boolean transferFinished;

public DeviceTransferFragment() {
super(R.layout.device_transfer_fragment);
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
transferFinished = savedInstanceState.getBoolean(TRANSFER_FINISHED_KEY);
}
}

@Override
public void onStart() {
super.onStart();
if (transferFinished) {
navigateToTransferComplete();
}
}

@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(TRANSFER_FINISHED_KEY, transferFinished);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
title = view.findViewById(R.id.device_transfer_fragment_title);
Expand Down Expand Up @@ -93,6 +118,8 @@ protected void ignoreTransferStatusEvents() {

protected abstract void navigateAwayFromTransfer();

protected abstract void navigateToTransferComplete();

private class TransferModeListener {
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEventMainThread(@NonNull TransferStatus event) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ protected void navigateAwayFromTransfer() {
.navigate(R.id.action_restart_to_welcomeFragment);
}

@Override
protected void navigateToTransferComplete() {
NavHostFragment.findNavController(this).navigate(R.id.action_newDeviceTransfer_to_newDeviceTransferComplete);
}

private class ServerTaskListener {
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(@NonNull NewDeviceServerTask.Status event) {
Expand All @@ -54,8 +59,9 @@ public void onEventMainThread(@NonNull NewDeviceServerTask.Status event) {
case IN_PROGRESS:
break;
case SUCCESS:
transferFinished = true;
DeviceToDeviceTransferService.stop(requireContext());
NavHostFragment.findNavController(NewDeviceTransferFragment.this).navigate(R.id.action_newDeviceTransfer_to_newDeviceTransferComplete);
navigateToTransferComplete();
break;
case FAILURE_VERSION_DOWNGRADE:
abort(R.string.NewDeviceTransfer__cannot_transfer_from_a_newer_version_of_signal);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.thoughtcrime.securesms.backup.FullBackupExporter;
import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.net.DeviceTransferBlockingInterceptor;

import java.io.IOException;
Expand Down Expand Up @@ -66,6 +67,7 @@ public void onEvent(FullBackupBase.BackupEvent event) {

@Override
public void success() {
SignalStore.misc().markOldDeviceTransferLocked();
EventBus.getDefault().post(new Status(0, true));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.navigation.fragment.NavHostFragment;

import org.greenrobot.eventbus.EventBus;
Expand All @@ -15,7 +14,6 @@
import org.signal.devicetransfer.TransferStatus;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.devicetransfer.DeviceTransferFragment;
import org.thoughtcrime.securesms.keyvalue.SignalStore;

/**
* Shows transfer progress on the old device. Most logic is in {@link DeviceTransferFragment}
Expand Down Expand Up @@ -48,14 +46,19 @@ protected void navigateAwayFromTransfer() {
requireActivity().finish();
}

@Override
protected void navigateToTransferComplete() {
NavHostFragment.findNavController(this).navigate(R.id.action_oldDeviceTransfer_to_oldDeviceTransferComplete);
}

private class ClientTaskListener {
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(@NonNull OldDeviceClientTask.Status event) {
if (event.isDone()) {
transferFinished = true;
ignoreTransferStatusEvents();
EventBus.getDefault().removeStickyEvent(TransferStatus.class);
DeviceToDeviceTransferService.stop(requireContext());
SignalStore.misc().markOldDeviceTransferLocked();
NavHostFragment.findNavController(OldDeviceTransferFragment.this).navigate(R.id.action_oldDeviceTransfer_to_oldDeviceTransferComplete);
} else {
status.setText(getString(R.string.DeviceTransfer__d_messages_so_far, event.getMessageCount()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public static void stop(@NonNull Context context) {
@Override
public void onCreate() {
super.onCreate();
Log.e(TAG, "onCreate");
Log.v(TAG, "onCreate");

EventBus.getDefault().register(this);
}
Expand All @@ -100,7 +100,7 @@ public void onEventMainThread(@NonNull TransferStatus event) {

@Override
public void onDestroy() {
Log.e(TAG, "onDestroy");
Log.v(TAG, "onDestroy");

EventBus.getDefault().unregister(this);

Expand Down Expand Up @@ -219,6 +219,7 @@ private void updateNotification(@NonNull TransferStatus transferStatus) {
case UNAVAILABLE:
case FAILED:
case SERVICE_DISCONNECTED:
case SHUTDOWN:
Log.d(TAG, "Intentionally no notification text for: " + transferStatus.getTransferMode());
break;
default:
Expand Down

0 comments on commit 5a84fa5

Please sign in to comment.