Fix device transfer stall if screen is locked during transfer.

fork-5.53.8
Cody Henthorne 2021-03-17 16:46:25 -04:00 zatwierdzone przez GitHub
rodzic 751ba8d1c2
commit 5a84fa5a80
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
5 zmienionych plików z 45 dodań i 6 usunięć

Wyświetl plik

@ -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) {

Wyświetl plik

@ -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);

Wyświetl plik

@ -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));
}

Wyświetl plik

@ -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()));

Wyświetl plik

@ -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: