Show backup progress as a percentage.

This commit is contained in:
Cody Henthorne
2021-12-14 14:31:44 -05:00
committed by Greyson Parrelli
parent 4f73e36d72
commit 8014a70134
15 changed files with 310 additions and 46 deletions

View File

@@ -59,7 +59,7 @@ final class OldDeviceClientTask implements ClientTask {
public void onEvent(FullBackupBase.BackupEvent event) {
if (event.getType() == FullBackupBase.BackupEvent.Type.PROGRESS) {
if (System.currentTimeMillis() > lastProgressUpdate + PROGRESS_UPDATE_THROTTLE) {
EventBus.getDefault().post(new Status(event.getCount(), false));
EventBus.getDefault().post(new Status(event.getCount(), event.getEstimatedTotalCount(), event.getCompletionPercentage(), false));
lastProgressUpdate = System.currentTimeMillis();
}
}
@@ -68,22 +68,34 @@ final class OldDeviceClientTask implements ClientTask {
@Override
public void success() {
SignalStore.misc().markOldDeviceTransferLocked();
EventBus.getDefault().post(new Status(0, true));
EventBus.getDefault().post(new Status(0, 0, 0,true));
}
public static final class Status {
private final long messages;
private final long estimatedMessages;
private final double completionPercentage;
private final boolean done;
public Status(long messages, boolean done) {
this.messages = messages;
this.done = done;
public Status(long messages, long estimatedMessages, double completionPercentage, boolean done) {
this.messages = messages;
this.estimatedMessages = estimatedMessages;
this.completionPercentage = completionPercentage;
this.done = done;
}
public long getMessageCount() {
return messages;
}
public long getEstimatedMessageCount() {
return estimatedMessages;
}
public double getCompletionPercentage() {
return completionPercentage;
}
public boolean isDone() {
return done;
}

View File

@@ -15,6 +15,9 @@ import org.signal.devicetransfer.TransferStatus;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.devicetransfer.DeviceTransferFragment;
import java.text.NumberFormat;
import java.util.Locale;
/**
* Shows transfer progress on the old device. Most logic is in {@link DeviceTransferFragment}
* and it delegates to this class for strings, navigation, and updating progress.
@@ -52,6 +55,14 @@ public final class OldDeviceTransferFragment extends DeviceTransferFragment {
}
private class ClientTaskListener {
private final NumberFormat formatter;
public ClientTaskListener() {
formatter = NumberFormat.getInstance();
formatter.setMinimumFractionDigits(1);
formatter.setMaximumFractionDigits(1);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(@NonNull OldDeviceClientTask.Status event) {
if (event.isDone()) {
@@ -61,7 +72,11 @@ public final class OldDeviceTransferFragment extends DeviceTransferFragment {
DeviceToDeviceTransferService.stop(requireContext());
NavHostFragment.findNavController(OldDeviceTransferFragment.this).navigate(R.id.action_oldDeviceTransfer_to_oldDeviceTransferComplete);
} else {
status.setText(getString(R.string.DeviceTransfer__d_messages_so_far, event.getMessageCount()));
if (event.getEstimatedMessageCount() == 0) {
status.setText(getString(R.string.DeviceTransfer__d_messages_so_far, event.getMessageCount()));
} else {
status.setText(getString(R.string.DeviceTransfer__s_of_messages_so_far, formatter.format(event.getCompletionPercentage())));
}
}
}
}