From d174757ef0c1313fab37afd39b7239c8781cbd28 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 21 Jun 2021 11:41:16 -0300 Subject: [PATCH] Remove manual initial state and oldTask state argument The latter is now handled via a LiveEvent --- .../removabledrive/ReceiveFragment.java | 13 ++++--- .../RemovableDriveViewModel.java | 36 ++++++++++--------- .../android/removabledrive/SendFragment.java | 16 +++++---- .../removabledrive/TransferDataState.java | 8 +---- 4 files changed, 39 insertions(+), 34 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/ReceiveFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/ReceiveFragment.java index 6a71725a3..8f058571c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/ReceiveFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/ReceiveFragment.java @@ -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); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/RemovableDriveViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/RemovableDriveViewModel.java index a9878b4fd..87e98c275 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/RemovableDriveViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/RemovableDriveViewModel.java @@ -43,9 +43,10 @@ class RemovableDriveViewModel extends DbViewModel { private final RemovableDriveManager manager; private final MutableLiveEvent action = new MutableLiveEvent<>(); + private final MutableLiveEvent oldTaskResumed = + new MutableLiveEvent<>(); private final MutableLiveData 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 getOldTaskResumedEvent() { + return oldTaskResumed; + } + LiveData getState() { return state; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/SendFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/SendFragment.java index 1cac6674f..64cfd7edb 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/SendFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/SendFragment.java @@ -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) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/TransferDataState.java b/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/TransferDataState.java index e59eb07ed..dc1ae7233 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/TransferDataState.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/removabledrive/TransferDataState.java @@ -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; } }