Fix device transfer stall if screen is locked during transfer.
This commit is contained in:
parent
751ba8d1c2
commit
5a84fa5a80
5 changed files with 45 additions and 6 deletions
|
@ -27,6 +27,8 @@ import org.thoughtcrime.securesms.R;
|
|||
*/
|
||||
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();
|
||||
|
||||
|
@ -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);
|
||||
|
@ -93,6 +118,8 @@ public abstract class DeviceTransferFragment extends LoggingFragment {
|
|||
|
||||
protected abstract void navigateAwayFromTransfer();
|
||||
|
||||
protected abstract void navigateToTransferComplete();
|
||||
|
||||
private class TransferModeListener {
|
||||
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
|
||||
public void onEventMainThread(@NonNull TransferStatus event) {
|
||||
|
|
|
@ -46,6 +46,11 @@ public final class NewDeviceTransferFragment extends DeviceTransferFragment {
|
|||
.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) {
|
||||
|
@ -54,8 +59,9 @@ public final class NewDeviceTransferFragment extends DeviceTransferFragment {
|
|||
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);
|
||||
|
|
|
@ -13,6 +13,7 @@ import org.thoughtcrime.securesms.backup.FullBackupBase;
|
|||
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;
|
||||
|
@ -66,6 +67,7 @@ final class OldDeviceClientTask implements ClientTask {
|
|||
|
||||
@Override
|
||||
public void success() {
|
||||
SignalStore.misc().markOldDeviceTransferLocked();
|
||||
EventBus.getDefault().post(new Status(0, true));
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ import android.view.View;
|
|||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.navigation.fragment.NavHostFragment;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
@ -15,7 +14,6 @@ import org.signal.devicetransfer.DeviceToDeviceTransferService;
|
|||
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}
|
||||
|
@ -48,14 +46,19 @@ public final class OldDeviceTransferFragment extends DeviceTransferFragment {
|
|||
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()));
|
||||
|
|
|
@ -88,7 +88,7 @@ public class DeviceToDeviceTransferService extends Service implements ShutdownCa
|
|||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
Log.e(TAG, "onCreate");
|
||||
Log.v(TAG, "onCreate");
|
||||
|
||||
EventBus.getDefault().register(this);
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ public class DeviceToDeviceTransferService extends Service implements ShutdownCa
|
|||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
Log.e(TAG, "onDestroy");
|
||||
Log.v(TAG, "onDestroy");
|
||||
|
||||
EventBus.getDefault().unregister(this);
|
||||
|
||||
|
@ -219,6 +219,7 @@ public class DeviceToDeviceTransferService extends Service implements ShutdownCa
|
|||
case UNAVAILABLE:
|
||||
case FAILED:
|
||||
case SERVICE_DISCONNECTED:
|
||||
case SHUTDOWN:
|
||||
Log.d(TAG, "Intentionally no notification text for: " + transferStatus.getTransferMode());
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Add table
Reference in a new issue