/* * Copyright (C) 2016 Simon Vig Therkildsen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.simonvt.cathode.ui.show; import android.content.res.Resources; import android.database.Cursor; import android.support.v4.app.FragmentActivity; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.TextView; import butterknife.BindView; import butterknife.ButterKnife; import javax.inject.Inject; import net.simonvt.cathode.CathodeApp; import net.simonvt.cathode.R; import net.simonvt.cathode.images.ImageType; import net.simonvt.cathode.images.ImageUri; import net.simonvt.cathode.provider.DatabaseContract.EpisodeColumns; import net.simonvt.cathode.scheduler.EpisodeTaskScheduler; import net.simonvt.cathode.scheduler.ShowTaskScheduler; import net.simonvt.cathode.ui.LibraryType; import net.simonvt.cathode.ui.adapter.RecyclerCursorAdapter; import net.simonvt.cathode.ui.listener.EpisodeClickListener; import net.simonvt.cathode.util.DataHelper; import net.simonvt.cathode.widget.RemoteImageView; import net.simonvt.cathode.widget.TimeStamp; import net.simonvt.schematic.Cursors; public class SeasonAdapter extends RecyclerCursorAdapter<SeasonAdapter.ViewHolder> { @Inject ShowTaskScheduler showScheduler; @Inject EpisodeTaskScheduler episodeScheduler; private FragmentActivity activity; private Resources resources; private LibraryType type; private EpisodeClickListener clickListener; public SeasonAdapter(FragmentActivity activity, EpisodeClickListener clickListener, Cursor cursor, LibraryType type) { super(activity, cursor); CathodeApp.inject(activity, this); this.activity = activity; this.clickListener = clickListener; this.type = type; resources = activity.getResources(); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(getContext()).inflate(R.layout.list_row_episode, parent, false); final ViewHolder holder = new ViewHolder(v); v.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { final int position = holder.getAdapterPosition(); if (position != RecyclerView.NO_POSITION) { clickListener.onEpisodeClick(holder.getItemId()); } } }); holder.number.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { final boolean activated = holder.number.isActivated(); holder.number.setActivated(!activated); if (type == LibraryType.COLLECTION) { episodeScheduler.setIsInCollection(holder.getItemId(), !activated); } else { episodeScheduler.setWatched(holder.getItemId(), !activated); } } }); return holder; } @Override protected void onBindViewHolder(ViewHolder holder, Cursor cursor, int position) { final long id = Cursors.getLong(cursor, EpisodeColumns.ID); final int season = Cursors.getInt(cursor, EpisodeColumns.SEASON); final int episode = Cursors.getInt(cursor, EpisodeColumns.EPISODE); final boolean watched = Cursors.getBoolean(cursor, EpisodeColumns.WATCHED); final boolean inCollection = Cursors.getBoolean(cursor, EpisodeColumns.IN_COLLECTION); final boolean inWatchlist = Cursors.getBoolean(cursor, EpisodeColumns.IN_WATCHLIST); final boolean watching = Cursors.getBoolean(cursor, EpisodeColumns.WATCHING); final boolean checkedIn = Cursors.getBoolean(cursor, EpisodeColumns.CHECKED_IN); final long firstAired = DataHelper.getFirstAired(cursor); final String title = DataHelper.getEpisodeTitle(getContext(), cursor, season, episode); final String screenshotUri = ImageUri.create(ImageUri.ITEM_EPISODE, ImageType.STILL, id); holder.screen.setImage(screenshotUri); holder.title.setText(title); holder.firstAired.setTimeInMillis(firstAired); holder.firstAired.setExtended(true); holder.number.setText(String.valueOf(episode)); if (type == LibraryType.COLLECTION) { holder.number.setTextColor(resources.getColorStateList(R.color.episode_number_collected)); holder.number.setActivated(inCollection); } else { holder.number.setTextColor(resources.getColorStateList(R.color.episode_number_watched)); holder.number.setActivated(watched); } } public static class ViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.screen) RemoteImageView screen; @BindView(R.id.title) TextView title; @BindView(R.id.firstAired) TimeStamp firstAired; @BindView(R.id.number) TextView number; ViewHolder(View v) { super(v); ButterKnife.bind(this, v); } } }