kopia lustrzana https://github.com/ryukoposting/Signal-Android
Fix device transfer stall if screen is locked during transfer.
rodzic
751ba8d1c2
commit
5a84fa5a80
|
@ -27,6 +27,8 @@ import org.thoughtcrime.securesms.R;
|
||||||
*/
|
*/
|
||||||
public abstract class DeviceTransferFragment extends LoggingFragment {
|
public abstract class DeviceTransferFragment extends LoggingFragment {
|
||||||
|
|
||||||
|
private static final String TRANSFER_FINISHED_KEY = "transfer_finished";
|
||||||
|
|
||||||
private final OnBackPressed onBackPressed = new OnBackPressed();
|
private final OnBackPressed onBackPressed = new OnBackPressed();
|
||||||
private final TransferModeListener transferModeListener = new TransferModeListener();
|
private final TransferModeListener transferModeListener = new TransferModeListener();
|
||||||
|
|
||||||
|
@ -36,11 +38,34 @@ public abstract class DeviceTransferFragment extends LoggingFragment {
|
||||||
protected View progress;
|
protected View progress;
|
||||||
protected View alert;
|
protected View alert;
|
||||||
protected TextView status;
|
protected TextView status;
|
||||||
|
protected boolean transferFinished;
|
||||||
|
|
||||||
public DeviceTransferFragment() {
|
public DeviceTransferFragment() {
|
||||||
super(R.layout.device_transfer_fragment);
|
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
|
@Override
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||||
title = view.findViewById(R.id.device_transfer_fragment_title);
|
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 navigateAwayFromTransfer();
|
||||||
|
|
||||||
|
protected abstract void navigateToTransferComplete();
|
||||||
|
|
||||||
private class TransferModeListener {
|
private class TransferModeListener {
|
||||||
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
|
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
|
||||||
public void onEventMainThread(@NonNull TransferStatus event) {
|
public void onEventMainThread(@NonNull TransferStatus event) {
|
||||||
|
|
|
@ -46,6 +46,11 @@ public final class NewDeviceTransferFragment extends DeviceTransferFragment {
|
||||||
.navigate(R.id.action_restart_to_welcomeFragment);
|
.navigate(R.id.action_restart_to_welcomeFragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void navigateToTransferComplete() {
|
||||||
|
NavHostFragment.findNavController(this).navigate(R.id.action_newDeviceTransfer_to_newDeviceTransferComplete);
|
||||||
|
}
|
||||||
|
|
||||||
private class ServerTaskListener {
|
private class ServerTaskListener {
|
||||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||||
public void onEventMainThread(@NonNull NewDeviceServerTask.Status event) {
|
public void onEventMainThread(@NonNull NewDeviceServerTask.Status event) {
|
||||||
|
@ -54,8 +59,9 @@ public final class NewDeviceTransferFragment extends DeviceTransferFragment {
|
||||||
case IN_PROGRESS:
|
case IN_PROGRESS:
|
||||||
break;
|
break;
|
||||||
case SUCCESS:
|
case SUCCESS:
|
||||||
|
transferFinished = true;
|
||||||
DeviceToDeviceTransferService.stop(requireContext());
|
DeviceToDeviceTransferService.stop(requireContext());
|
||||||
NavHostFragment.findNavController(NewDeviceTransferFragment.this).navigate(R.id.action_newDeviceTransfer_to_newDeviceTransferComplete);
|
navigateToTransferComplete();
|
||||||
break;
|
break;
|
||||||
case FAILURE_VERSION_DOWNGRADE:
|
case FAILURE_VERSION_DOWNGRADE:
|
||||||
abort(R.string.NewDeviceTransfer__cannot_transfer_from_a_newer_version_of_signal);
|
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.backup.FullBackupExporter;
|
||||||
import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider;
|
import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
|
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||||
import org.thoughtcrime.securesms.net.DeviceTransferBlockingInterceptor;
|
import org.thoughtcrime.securesms.net.DeviceTransferBlockingInterceptor;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -66,6 +67,7 @@ final class OldDeviceClientTask implements ClientTask {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
|
SignalStore.misc().markOldDeviceTransferLocked();
|
||||||
EventBus.getDefault().post(new Status(0, true));
|
EventBus.getDefault().post(new Status(0, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import android.view.View;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
import androidx.navigation.fragment.NavHostFragment;
|
import androidx.navigation.fragment.NavHostFragment;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
|
@ -15,7 +14,6 @@ import org.signal.devicetransfer.DeviceToDeviceTransferService;
|
||||||
import org.signal.devicetransfer.TransferStatus;
|
import org.signal.devicetransfer.TransferStatus;
|
||||||
import org.thoughtcrime.securesms.R;
|
import org.thoughtcrime.securesms.R;
|
||||||
import org.thoughtcrime.securesms.devicetransfer.DeviceTransferFragment;
|
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}
|
* 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();
|
requireActivity().finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void navigateToTransferComplete() {
|
||||||
|
NavHostFragment.findNavController(this).navigate(R.id.action_oldDeviceTransfer_to_oldDeviceTransferComplete);
|
||||||
|
}
|
||||||
|
|
||||||
private class ClientTaskListener {
|
private class ClientTaskListener {
|
||||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||||
public void onEventMainThread(@NonNull OldDeviceClientTask.Status event) {
|
public void onEventMainThread(@NonNull OldDeviceClientTask.Status event) {
|
||||||
if (event.isDone()) {
|
if (event.isDone()) {
|
||||||
|
transferFinished = true;
|
||||||
ignoreTransferStatusEvents();
|
ignoreTransferStatusEvents();
|
||||||
EventBus.getDefault().removeStickyEvent(TransferStatus.class);
|
EventBus.getDefault().removeStickyEvent(TransferStatus.class);
|
||||||
DeviceToDeviceTransferService.stop(requireContext());
|
DeviceToDeviceTransferService.stop(requireContext());
|
||||||
SignalStore.misc().markOldDeviceTransferLocked();
|
|
||||||
NavHostFragment.findNavController(OldDeviceTransferFragment.this).navigate(R.id.action_oldDeviceTransfer_to_oldDeviceTransferComplete);
|
NavHostFragment.findNavController(OldDeviceTransferFragment.this).navigate(R.id.action_oldDeviceTransfer_to_oldDeviceTransferComplete);
|
||||||
} else {
|
} else {
|
||||||
status.setText(getString(R.string.DeviceTransfer__d_messages_so_far, event.getMessageCount()));
|
status.setText(getString(R.string.DeviceTransfer__d_messages_so_far, event.getMessageCount()));
|
||||||
|
|
|
@ -88,7 +88,7 @@ public class DeviceToDeviceTransferService extends Service implements ShutdownCa
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
Log.e(TAG, "onCreate");
|
Log.v(TAG, "onCreate");
|
||||||
|
|
||||||
EventBus.getDefault().register(this);
|
EventBus.getDefault().register(this);
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ public class DeviceToDeviceTransferService extends Service implements ShutdownCa
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
Log.e(TAG, "onDestroy");
|
Log.v(TAG, "onDestroy");
|
||||||
|
|
||||||
EventBus.getDefault().unregister(this);
|
EventBus.getDefault().unregister(this);
|
||||||
|
|
||||||
|
@ -219,6 +219,7 @@ public class DeviceToDeviceTransferService extends Service implements ShutdownCa
|
||||||
case UNAVAILABLE:
|
case UNAVAILABLE:
|
||||||
case FAILED:
|
case FAILED:
|
||||||
case SERVICE_DISCONNECTED:
|
case SERVICE_DISCONNECTED:
|
||||||
|
case SHUTDOWN:
|
||||||
Log.d(TAG, "Intentionally no notification text for: " + transferStatus.getTransferMode());
|
Log.d(TAG, "Intentionally no notification text for: " + transferStatus.getTransferMode());
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
Ładowanie…
Reference in New Issue