diff options
author | orionlee <orionlee@yahoo.com> | 2019-04-03 14:15:05 -0700 |
---|---|---|
committer | orionlee <orionlee@yahoo.com> | 2019-04-03 14:15:05 -0700 |
commit | bcaba928512fe4fd4abf19af56b28b0bb3888b22 (patch) | |
tree | da45d4f40523c7d893b81c5ee09cf6825e49515d /app/src/main/java/de/danoeh/antennapod/dialog/EpisodesApplyActionFragment.java | |
parent | 1052b393d2129eff8aafa9e8cb68f3fb785c2eb2 (diff) | |
download | AntennaPod-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.java | 92 |
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; }); |