Remove manual initial state and oldTask state argument

The latter is now handled via a LiveEvent
This commit is contained in:
Torsten Grote
2021-06-21 11:41:16 -03:00
parent f457a5e831
commit d174757ef0
4 changed files with 39 additions and 34 deletions

View File

@@ -72,6 +72,8 @@ public class ReceiveFragment extends Fragment {
button.setOnClickListener(view ->
launcher.launch("*/*")
);
viewModel.getOldTaskResumedEvent()
.observeEvent(getViewLifecycleOwner(), this::onOldTaskResumed);
viewModel.getState()
.observe(getViewLifecycleOwner(), this::onStateChanged);
return v;
@@ -83,6 +85,13 @@ public class ReceiveFragment extends Fragment {
requireActivity().setTitle(R.string.removable_drive_title_receive);
}
private void onOldTaskResumed(boolean resumed) {
if (resumed) {
Toast.makeText(requireContext(),
R.string.removable_drive_ongoing, LENGTH_LONG).show();
}
}
private void onStateChanged(TransferDataState state) {
if (state instanceof TransferDataState.NoDataToSend) {
throw new IllegalStateException();
@@ -90,10 +99,6 @@ public class ReceiveFragment extends Fragment {
button.setEnabled(true);
} else if (state instanceof TransferDataState.TaskAvailable) {
button.setEnabled(false);
if (((TransferDataState.TaskAvailable) state).isOldTask) {
Toast.makeText(requireContext(),
R.string.removable_drive_ongoing, LENGTH_LONG).show();
}
progressBar.setVisibility(VISIBLE);
}
}

View File

@@ -43,9 +43,10 @@ class RemovableDriveViewModel extends DbViewModel {
private final RemovableDriveManager manager;
private final MutableLiveEvent<Action> action = new MutableLiveEvent<>();
private final MutableLiveEvent<Boolean> oldTaskResumed =
new MutableLiveEvent<>();
private final MutableLiveData<TransferDataState> state =
new MutableLiveData<>();
private final State initialState = new State(0, 0, false, false);
@Nullable
private ContactId contactId = null;
@Nullable
@@ -102,10 +103,11 @@ class RemovableDriveViewModel extends DbViewModel {
}
});
} else {
// observe old task and start with initial state
taskObserver = s -> observeTask(s, true);
taskObserver.accept(initialState);
// observe old task
taskObserver =
s -> state.setValue(new TransferDataState.TaskAvailable(s));
task.addObserver(taskObserver);
oldTaskResumed.setEvent(true);
}
}
@@ -118,18 +120,14 @@ class RemovableDriveViewModel extends DbViewModel {
if (task == null) {
state.setValue(new TransferDataState.Ready());
} else {
// observe old task and start with initial state
taskObserver = s -> observeTask(s, true);
taskObserver.accept(initialState);
// observe old task
taskObserver =
s -> state.setValue(new TransferDataState.TaskAvailable(s));
task.addObserver(taskObserver);
oldTaskResumed.setEvent(true);
}
}
@UiThread
private void observeTask(RemovableDriveTask.State s, boolean isOldTask) {
state.setValue(new TransferDataState.TaskAvailable(s, isOldTask));
}
String getFileName() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", US);
return sdf.format(new Date()) + ".zip";
@@ -144,8 +142,9 @@ class RemovableDriveViewModel extends DbViewModel {
if (task != null) throw new IllegalStateException();
// from now on, we are not re-usable
taskObserver = s -> observeTask(s, false);
taskObserver.accept(initialState);
// (because gets a state update right away on the UiThread)
taskObserver =
s -> state.setValue(new TransferDataState.TaskAvailable(s));
// start the writer task for this contact and observe it
TransportProperties p = new TransportProperties();
@@ -164,8 +163,9 @@ class RemovableDriveViewModel extends DbViewModel {
if (task != null) throw new IllegalStateException();
// from now on, we are not re-usable
taskObserver = s -> observeTask(s, false);
taskObserver.accept(initialState);
// (because gets a state update right away on the UiThread)
taskObserver =
s -> state.setValue(new TransferDataState.TaskAvailable(s));
TransportProperties p = new TransportProperties();
p.put(PROP_URI, uri.toString());
@@ -177,6 +177,10 @@ class RemovableDriveViewModel extends DbViewModel {
return action;
}
LiveEvent<Boolean> getOldTaskResumedEvent() {
return oldTaskResumed;
}
LiveData<TransferDataState> getState() {
return state;
}

View File

@@ -47,7 +47,6 @@ public class SendFragment extends Fragment {
TextView introTextView;
Button button;
ProgressBar progressBar;
boolean hasShownOldTaskToast = false;
@Override
public void onAttach(Context context) {
@@ -72,6 +71,8 @@ public class SendFragment extends Fragment {
launcher.launch(viewModel.getFileName())
);
viewModel.getOldTaskResumedEvent()
.observeEvent(getViewLifecycleOwner(), this::onOldTaskResumed);
viewModel.getState()
.observe(getViewLifecycleOwner(), this::onStateChanged);
@@ -84,6 +85,13 @@ public class SendFragment extends Fragment {
requireActivity().setTitle(R.string.removable_drive_title_send);
}
private void onOldTaskResumed(boolean resumed) {
if (resumed) {
Toast.makeText(requireContext(),
R.string.removable_drive_ongoing, LENGTH_LONG).show();
}
}
private void onStateChanged(TransferDataState state) {
if (state instanceof TransferDataState.NoDataToSend) {
introTextView.setText(R.string.removable_drive_send_no_data);
@@ -92,12 +100,6 @@ public class SendFragment extends Fragment {
button.setEnabled(true);
} else if (state instanceof TransferDataState.TaskAvailable) {
button.setEnabled(false);
if (!hasShownOldTaskToast &&
((TransferDataState.TaskAvailable) state).isOldTask) {
Toast.makeText(requireContext(),
R.string.removable_drive_ongoing, LENGTH_LONG).show();
hasShownOldTaskToast = true;
}
RemovableDriveTask.State s =
((TransferDataState.TaskAvailable) state).state;
if (s.getTotal() > 0L && progressBar.getVisibility() != VISIBLE) {

View File

@@ -24,15 +24,9 @@ abstract class TransferDataState {
*/
static class TaskAvailable extends TransferDataState {
final RemovableDriveTask.State state;
/**
* This is an old task that is still ongoing. The user needs to wait for
* it to complete before starting a new task.
*/
final boolean isOldTask;
TaskAvailable(RemovableDriveTask.State state, boolean isOldTask) {
TaskAvailable(RemovableDriveTask.State state) {
this.state = state;
this.isOldTask = isOldTask;
}
}