Android Open Source - EnklawaPlayer Episodes Adapter






From Project

Back to project page EnklawaPlayer.

License

The source code is released under:

GNU General Public License

If you think the Android project EnklawaPlayer listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package macbury.pod.adapters;
/*w  ww  . j av  a2s. c  o m*/
import android.content.Context;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.koushikdutta.ion.Ion;

import java.util.ArrayList;
import java.util.List;

import macbury.pod.R;
import macbury.pod.db.models.Episode;
import macbury.pod.db.models.EpisodeFile;
import macbury.pod.extensions.Converter;
import macbury.pod.managers.download.DownloadManager;

/**
 * Created by macbury on 12.09.14.
 */
public class EpisodesAdapter extends BaseAdapter implements View.OnClickListener {
  public enum SecondaryAction {
    Download, CancelDownload, Pause, Play, Remove, None
  }

  public enum ActionMode {
    PlayDownload, Trash
  }

  private final Context context;
  private ArrayList<Episode> episodesArray;
  private EpisodesAdapterListener listener;
  private ActionMode mode;

  public void setListener(EpisodesAdapterListener listener) {
    this.listener = listener;
  }

  public EpisodesAdapter(Context context) {
    super();
    this.context       = context;
    this.episodesArray = new ArrayList<Episode>();
    this.mode          = ActionMode.PlayDownload;
  }

  public void setMode(ActionMode mode) {
    this.mode = mode;
    notifyDataSetChanged();
  }

  @Override
  public int getCount() {
    return episodesArray.size();
  }

  @Override
  public Episode getItem(int position) {
    if (position < episodesArray.size() && position != -1){
      return episodesArray.get(position);
    } else {
      return null;
    }
  }

  @Override
  public long getItemId(int position) {
    Episode episode = getItem(position);
    return episode == null ? -1 : episode.id;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    EpisodeHolder holder = null;
    Episode episode      = getItem(position);

    if (convertView == null) {
      holder                      = new EpisodeHolder();
      LayoutInflater inflater     = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      convertView                 = inflater.inflate(R.layout.list_view_episode, parent, false);
      holder.pubDateTextView      = (TextView)convertView.findViewById(R.id.item_episode_published_at);
      holder.titleTextView        = (TextView)convertView.findViewById(R.id.item_episode_title);
      holder.previewImageView     = (ImageView)convertView.findViewById(R.id.item_episode_preview);
      holder.durationTextView     = (TextView)convertView.findViewById(R.id.item_episode_duration);
      holder.secondaryAction      = (ImageButton)convertView.findViewById(R.id.item_episode_button_secondary_action);
      holder.statusTextView       = (TextView)convertView.findViewById(R.id.item_episode_status);
      holder.progressBar          = (ProgressBar) convertView.findViewById(R.id.item_episode_progress);
      holder.container            = convertView;

      holder.secondaryAction.setTag(holder);
      holder.secondaryAction.setOnClickListener(this);

      convertView.setTag(holder);
    } else {
      holder  = (EpisodeHolder)convertView.getTag();
    }

    holder.episode              = episode;
    holder.position             = position;

    holder.titleTextView.setText(episode.name);
    holder.durationTextView.setText(Converter.getDurationStringLong(episode.getDuration()));
    holder.pubDateTextView.setText(DateUtils.formatDateTime(context, episode.pubDate.getTime(), DateUtils.FORMAT_SHOW_DATE));

    EpisodeFile episodeFile = episode.getFile();
    holder.progressBar.setVisibility(View.INVISIBLE);

    if (mode == ActionMode.PlayDownload) {
      setupPLayDownloadActionButton(holder, episodeFile);
    } else {
      setupTrashActionButton(holder, episodeFile);
    }

    if (episode.isUnread()) {
      holder.statusTextView.setVisibility(View.VISIBLE);
      holder.statusTextView.setText(context.getString(R.string.new_label));
    } else {
      holder.statusTextView.setVisibility(View.INVISIBLE);
      holder.statusTextView.setText("");
    }

    Ion.with(context).load(episode.image).withBitmap().placeholder(R.drawable.placeholder).intoImageView(holder.previewImageView);
    return convertView;
  }

  private void setupTrashActionButton(EpisodeHolder holder, EpisodeFile episodeFile) {
    holder.actionType = SecondaryAction.Remove;
    holder.secondaryAction.setImageResource(R.drawable.ic_action_content_discard);
  }

  private void setupPLayDownloadActionButton(EpisodeHolder holder, EpisodeFile episodeFile) {
    if (episodeFile == null || episodeFile.haveFailed()) {
      holder.actionType = SecondaryAction.Download;
      holder.secondaryAction.setImageResource(R.drawable.av_download);
    } else if (episodeFile.isDownloading() || episodeFile.isPending()) {
      holder.actionType = SecondaryAction.CancelDownload;
      holder.secondaryAction.setImageResource(R.drawable.navigation_cancel);
      if (episodeFile.isDownloading()) {
        holder.progressBar.setVisibility(View.VISIBLE);
        if (DownloadManager.current.getProgress() == 0) {
          holder.progressBar.setIndeterminate(true);
        } else {
          holder.progressBar.setIndeterminate(false);
          holder.progressBar.setProgress(DownloadManager.current.getProgress());
        }
      }
    } else {
      holder.actionType = SecondaryAction.Play;
      holder.secondaryAction.setImageResource(R.drawable.av_play);
    }
  }

  public void set(List<Episode> newEpisodeArray) {
    episodesArray.clear();
    episodesArray.addAll(newEpisodeArray);
    notifyDataSetChanged();
  }

  @Override
  public void onClick(View view) {
    EpisodeHolder holder = (EpisodeHolder) view.getTag();
    if (holder.secondaryAction == view){
      switch (holder.actionType) {
        case Download:
          listener.onDownloadEpisodeButtonClick(holder.episode);
        break;

        case CancelDownload:
          listener.onCancelEpisodeDownloadButtonClick(holder.episode);
        break;

        case Play:
          listener.onPlayEpisodeDownloadButtonClick(holder.episode);
        break;

        case Pause:
          listener.onPauseEpisodeDownloadButtonClick(holder.episode);
        break;

        case Remove:
          listener.onRemoveEpisodeButtonClick(holder.episode);
        break;
      }

    }
    notifyDataSetChanged();
  }

  public class EpisodeHolder {
    public TextView titleTextView;
    public ImageView previewImageView;
    public View container;
    public TextView pubDateTextView;
    public TextView durationTextView;
    public ImageButton secondaryAction;
    public TextView statusTextView;
    public ProgressBar progressBar;
    public int position;
    public SecondaryAction actionType;
    public Episode episode;
  }
}




Java Source Code List

macbury.pod.ApplicationTest.java
macbury.pod.activities.DonateActivity.java
macbury.pod.activities.ProgramEpisodesActivity.java
macbury.pod.activities.SettingsActivity.java
macbury.pod.activities.ext.AccentFragmentActivity.java
macbury.pod.activities.main.MainActivityActionBarToggle.java
macbury.pod.activities.main.MainActivity.java
macbury.pod.activities.main.NavigationController.java
macbury.pod.activities.main.NavigationListener.java
macbury.pod.activities.player.PlayerActivity.java
macbury.pod.activities.player.RadioActivity.java
macbury.pod.adapters.EpisodesAdapterListener.java
macbury.pod.adapters.EpisodesAdapter.java
macbury.pod.adapters.ProgramsAdapter.java
macbury.pod.api.APICategory.java
macbury.pod.api.APIEpisode.java
macbury.pod.api.APIProgram.java
macbury.pod.api.APIResponse.java
macbury.pod.api.APIThread.java
macbury.pod.db.DatabaseCRUDListener.java
macbury.pod.db.models.EnqueueEpisode.java
macbury.pod.db.models.EpisodeFile.java
macbury.pod.db.models.Episode.java
macbury.pod.db.models.ForumThread.java
macbury.pod.db.models.Program.java
macbury.pod.db.scopes.AbstractScope.java
macbury.pod.db.scopes.EnqueueEpisodeScope.java
macbury.pod.db.scopes.EpisodeFilesScope.java
macbury.pod.db.scopes.EpisodesScope.java
macbury.pod.db.scopes.ProgramsScope.java
macbury.pod.db.scopes.ThreadScope.java
macbury.pod.dialogs.EpisodeAboutDialog.java
macbury.pod.dialogs.ProgramAboutDialog.java
macbury.pod.extensions.Converter.java
macbury.pod.extensions.DateDeserializer.java
macbury.pod.extensions.SleepTimer.java
macbury.pod.fragments.SettingsFragment.java
macbury.pod.fragments.main.AbstractEpisodesFragment.java
macbury.pod.fragments.main.AllProgramsFragment.java
macbury.pod.fragments.main.EnklawaBaseAbstractListFragment.java
macbury.pod.fragments.main.episodes.DownloadedEpisodesFragment.java
macbury.pod.fragments.main.episodes.NewestEpisodesFragment.java
macbury.pod.fragments.main.episodes.PlaylistFragment.java
macbury.pod.fragments.main.episodes.ProgramEpisodesFragment.java
macbury.pod.fragments.player.ExternalPlayerFragment.java
macbury.pod.fragments.player.PlayerArtworkAndInfoFragment.java
macbury.pod.fragments.player.PlayerControllerFragment.java
macbury.pod.managers.AlarmsManager.java
macbury.pod.managers.App.java
macbury.pod.managers.BroadcastsManager.java
macbury.pod.managers.DatabaseManager.java
macbury.pod.managers.IntentManager.java
macbury.pod.managers.NotificationsManager.java
macbury.pod.managers.ServiceManager.java
macbury.pod.managers.SettingsManager.java
macbury.pod.managers.StorageManager.java
macbury.pod.managers.download.DownloadEpisode.java
macbury.pod.managers.download.DownloadManagerListener.java
macbury.pod.managers.download.DownloadManager.java
macbury.pod.managers.player.PlaybackStatus.java
macbury.pod.managers.player.PlayerManagerListener.java
macbury.pod.managers.player.PlayerManager.java
macbury.pod.managers.player.sources.AbstractMediaSource.java
macbury.pod.managers.player.sources.EpisodeMediaSource.java
macbury.pod.managers.player.sources.RadioMediaSource.java
macbury.pod.navigation_drawer.NavAdapter.java
macbury.pod.navigation_drawer.NavBaseItem.java
macbury.pod.navigation_drawer.NavDivider.java
macbury.pod.navigation_drawer.items.AllProgramsNavItem.java
macbury.pod.navigation_drawer.items.DownloadedEpisodesNavItem.java
macbury.pod.navigation_drawer.items.FavoriteProgramNavItem.java
macbury.pod.navigation_drawer.items.ForumNavItem.java
macbury.pod.navigation_drawer.items.NavItemFragment.java
macbury.pod.navigation_drawer.items.NewestEpisodesNavItem.java
macbury.pod.navigation_drawer.items.PlayQueueNavItem.java
macbury.pod.receivers.BootReceiver.java
macbury.pod.receivers.MediaButtonReceiver.java
macbury.pod.services.DownloadService.java
macbury.pod.services.PlayerService.java
macbury.pod.services.SyncPodService.java
macbury.pod.tutorial.MainActivityTutorial.java
macbury.pod.views.TappableFrameLayout.java