diff options
Diffstat (limited to 'app/src/main/java')
4 files changed, 128 insertions, 2 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java index 1d04baf7a..b35ff0aa9 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesRecycleAdapter.java @@ -5,6 +5,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; import android.text.format.DateUtils; import android.util.Log; import android.view.ContextMenu; @@ -24,6 +25,7 @@ import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.GlideDrawableImageViewTarget; import com.joanzapata.iconify.Iconify; +import com.nineoldandroids.view.ViewHelper; import java.lang.ref.WeakReference; @@ -250,7 +252,9 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR }; public class Holder extends RecyclerView.ViewHolder - implements View.OnClickListener, View.OnCreateContextMenuListener { + implements View.OnClickListener, + View.OnCreateContextMenuListener, + ItemTouchHelperViewHolder { TextView placeholder; TextView title; TextView pubDate; @@ -278,6 +282,16 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR } } + @Override + public void onItemSelected() { + ViewHelper.setAlpha(itemView, 0.5f); + } + + @Override + public void onItemClear() { + ViewHelper.setAlpha(itemView, 1.0f); + } + public FeedItem getFeedItem() { return item; } @Override @@ -317,4 +331,26 @@ public class AllEpisodesRecycleAdapter extends RecyclerView.Adapter<AllEpisodesR boolean isInQueue(FeedItem item); } + + /** + * Notifies a View Holder of relevant callbacks from + * {@link ItemTouchHelper.Callback}. + */ + public interface ItemTouchHelperViewHolder { + + /** + * Called when the {@link ItemTouchHelper} first registers an + * item as being moved or swiped. + * Implementations should update the item view to indicate + * it's active state. + */ + void onItemSelected(); + + + /** + * Called when the {@link ItemTouchHelper} has completed the + * move or swipe, and the active item state should be cleared. + */ + void onItemClear(); + } } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java index 3402d39f1..062f883bc 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java @@ -26,6 +26,7 @@ import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.GlideDrawableImageViewTarget; import com.joanzapata.iconify.Iconify; +import com.nineoldandroids.view.ViewHelper; import java.lang.ref.WeakReference; @@ -101,7 +102,9 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap } public class ViewHolder extends RecyclerView.ViewHolder - implements View.OnClickListener, View.OnCreateContextMenuListener { + implements View.OnClickListener, + View.OnCreateContextMenuListener, + ItemTouchHelperViewHolder { private final ImageView dragHandle; private final TextView placeholder; @@ -170,6 +173,16 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap itemAccess.getQueueIds()); } + @Override + public void onItemSelected() { + ViewHelper.setAlpha(itemView, 0.5f); + } + + @Override + public void onItemClear() { + ViewHelper.setAlpha(itemView, 1.0f); + } + public void bind(FeedItem item) { this.item = item; if(locked) { @@ -248,6 +261,8 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap .dontAnimate() .into(new CoverTarget(item.getFeed().getImageUri(), placeholder, cover)); } + + } @@ -306,4 +321,26 @@ public class QueueRecyclerAdapter extends RecyclerView.Adapter<QueueRecyclerAdap int getItemDownloadProgressPercent(FeedItem item); LongList getQueueIds(); } + + /** + * Notifies a View Holder of relevant callbacks from + * {@link ItemTouchHelper.Callback}. + */ + public interface ItemTouchHelperViewHolder { + + /** + * Called when the {@link ItemTouchHelper} first registers an + * item as being moved or swiped. + * Implementations should update the item view to indicate + * it's active state. + */ + void onItemSelected(); + + + /** + * Called when the {@link ItemTouchHelper} has completed the + * move or swipe, and the active item state should be cleared. + */ + void onItemClear(); + } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java index 00ed99444..d684c064c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java @@ -14,6 +14,7 @@ import java.util.List; import de.danoeh.antennapod.R; import de.danoeh.antennapod.adapter.AllEpisodesRecycleAdapter; +import de.danoeh.antennapod.adapter.QueueRecyclerAdapter; import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; @@ -104,6 +105,32 @@ public class NewEpisodesFragment extends AllEpisodesFragment { snackbar.show(); h.postDelayed(r, (int)Math.ceil(snackbar.getDuration() * 1.05f)); } + + @Override + public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, + int actionState) { + // We only want the active item + if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) { + if (viewHolder instanceof AllEpisodesRecycleAdapter.ItemTouchHelperViewHolder) { + AllEpisodesRecycleAdapter.ItemTouchHelperViewHolder itemViewHolder = + (AllEpisodesRecycleAdapter.ItemTouchHelperViewHolder) viewHolder; + itemViewHolder.onItemSelected(); + } + } + + super.onSelectedChanged(viewHolder, actionState); + } + @Override + public void clearView(RecyclerView recyclerView, + RecyclerView.ViewHolder viewHolder) { + super.clearView(recyclerView, viewHolder); + + if (viewHolder instanceof AllEpisodesRecycleAdapter.ItemTouchHelperViewHolder) { + AllEpisodesRecycleAdapter.ItemTouchHelperViewHolder itemViewHolder = + (AllEpisodesRecycleAdapter.ItemTouchHelperViewHolder) viewHolder; + itemViewHolder.onItemClear(); + } + } }; ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index ecd2c77a2..709d7038a 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -402,6 +402,32 @@ public class QueueFragment extends Fragment { public boolean isItemViewSwipeEnabled() { return false == UserPreferences.isQueueLocked(); } + + @Override + public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, + int actionState) { + // We only want the active item + if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) { + if (viewHolder instanceof QueueRecyclerAdapter.ItemTouchHelperViewHolder) { + QueueRecyclerAdapter.ItemTouchHelperViewHolder itemViewHolder = + (QueueRecyclerAdapter.ItemTouchHelperViewHolder) viewHolder; + itemViewHolder.onItemSelected(); + } + } + + super.onSelectedChanged(viewHolder, actionState); + } + @Override + public void clearView(RecyclerView recyclerView, + RecyclerView.ViewHolder viewHolder) { + super.clearView(recyclerView, viewHolder); + + if (viewHolder instanceof QueueRecyclerAdapter.ItemTouchHelperViewHolder) { + QueueRecyclerAdapter.ItemTouchHelperViewHolder itemViewHolder = + (QueueRecyclerAdapter.ItemTouchHelperViewHolder) viewHolder; + itemViewHolder.onItemClear(); + } + } } ); itemTouchHelper.attachToRecyclerView(recyclerView); |