summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
diff options
context:
space:
mode:
authororionlee <orionlee@yahoo.com>2019-04-03 14:15:05 -0700
committerorionlee <orionlee@yahoo.com>2019-04-03 14:15:05 -0700
commitbcaba928512fe4fd4abf19af56b28b0bb3888b22 (patch)
treeda45d4f40523c7d893b81c5ee09cf6825e49515d /app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
parent1052b393d2129eff8aafa9e8cb68f3fb785c2eb2 (diff)
downloadAntennaPod-bcaba928512fe4fd4abf19af56b28b0bb3888b22.zip
bulk edit - refactor - factorize common codes in binding action to its UI and actual logic.
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java92
1 files changed, 55 insertions, 37 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
index df02e2d37..be0518bf3 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java
@@ -5,6 +5,7 @@ import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
+import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
@@ -26,6 +27,7 @@ import android.widget.Toast;
import com.leinardi.android.speeddial.SpeedDialView;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -51,6 +53,27 @@ public class EpisodesApplyActionFragment extends Fragment {
private static final int ACTION_ALL = ACTION_ADD_TO_QUEUE | ACTION_REMOVE_FROM_QUEUE
| ACTION_MARK_PLAYED | ACTION_MARK_UNPLAYED | ACTION_DOWNLOAD | ACTION_DELETE;
+ /**
+ * Specify an action (defined by #flag) 's UI bindings.
+ *
+ * Includes: the menu / action item and the actual logic
+ */
+ private class ActionBinding {
+ int flag;
+ @IdRes
+ final int actionItemId;
+ @NonNull
+ final Runnable action;
+
+ ActionBinding(int flag, @IdRes int actionItemId, @NonNull Runnable action) {
+ this.flag = flag;
+ this.actionItemId = actionItemId;
+ this.action = action;
+ }
+ }
+
+ private final List<? extends ActionBinding> actionBindings;
+
private ListView mListView;
private ArrayAdapter<String> mAdapter;
@@ -66,6 +89,23 @@ public class EpisodesApplyActionFragment extends Fragment {
private MenuItem mSelectToggle;
+ public EpisodesApplyActionFragment() {
+ actionBindings = Arrays.asList(
+ new ActionBinding(ACTION_ADD_TO_QUEUE,
+ R.id.add_to_queue_batch, this::queueChecked),
+ new ActionBinding(ACTION_REMOVE_FROM_QUEUE,
+ R.id.remove_from_queue_batch, this::removeFromQueueChecked),
+ new ActionBinding(ACTION_MARK_PLAYED,
+ R.id.mark_read_batch, this::markedCheckedPlayed),
+ new ActionBinding(ACTION_MARK_UNPLAYED,
+ R.id.mark_unread_batch, this::markedCheckedUnplayed),
+ new ActionBinding(ACTION_DOWNLOAD,
+ R.id.download_batch, this::downloadChecked),
+ new ActionBinding(ACTION_DELETE,
+ R.id.delete_batch, this::deleteChecked)
+ );
+ }
+
public static EpisodesApplyActionFragment newInstance(List<FeedItem> items) {
return newInstance(items, ACTION_ALL);
}
@@ -153,46 +193,24 @@ public class EpisodesApplyActionFragment extends Fragment {
mSpeedDialView.inflate(R.menu.episodes_apply_action_speeddial);
// show only specified actions, and bind speed dial UIs to the actual logic
- if((actions & ACTION_ADD_TO_QUEUE) == 0) {
- mSpeedDialView.removeActionItemById(R.id.add_to_queue_batch);
- }
- if((actions & ACTION_REMOVE_FROM_QUEUE) == 0) {
- mSpeedDialView.removeActionItemById(R.id.remove_from_queue_batch);
- }
- if((actions & ACTION_MARK_PLAYED) == 0) {
- mSpeedDialView.removeActionItemById(R.id.mark_read_batch);
- }
- if((actions & ACTION_MARK_UNPLAYED) == 0) {
- mSpeedDialView.removeActionItemById(R.id.mark_unread_batch);
- }
- if((actions & ACTION_DOWNLOAD) == 0) {
- mSpeedDialView.removeActionItemById(R.id.download_batch);
- }
- if((actions & ACTION_DELETE) == 0) {
- mSpeedDialView.removeActionItemById(R.id.delete_batch);
+ for (ActionBinding binding : actionBindings) {
+ if ((actions & binding.flag) == 0) {
+ mSpeedDialView.removeActionItemById(binding.actionItemId);
+ }
}
+
mSpeedDialView.setOnActionSelectedListener(actionItem -> {
- switch(actionItem.getId()) {
- case R.id.add_to_queue_batch:
- queueChecked();
- break;
- case R.id.remove_from_queue_batch:
- removeFromQueueChecked();
- break;
- case R.id.mark_read_batch:
- markedCheckedPlayed();
- break;
- case R.id.mark_unread_batch:
- markedCheckedUnplayed();
+ ActionBinding selectedBinding = null;
+ for (ActionBinding binding : actionBindings) {
+ if (actionItem.getId() == binding.actionItemId) {
+ selectedBinding = binding;
break;
- case R.id.download_batch:
- downloadChecked();
- break;
- case R.id.delete_batch:
- deleteChecked();
- break;
- default:
- Log.e(TAG, "Unrecognized speed dial action item. Do nothing. id=" + actionItem.getId());
+ }
+ }
+ if (selectedBinding != null) {
+ selectedBinding.action.run();
+ } else {
+ Log.e(TAG, "Unrecognized speed dial action item. Do nothing. id=" + actionItem.getId());
}
return true;
});