package what.whatandroid.bookmarks; import android.content.Context; import android.os.AsyncTask; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.*; import api.bookmarks.TorrentGroup; import what.whatandroid.R; import what.whatandroid.callbacks.ViewTorrentCallbacks; /** * Displays a list of the user's torrent bookmarks */ public class TorrentBookmarkAdapter extends ArrayAdapter<TorrentGroup> implements AdapterView.OnItemClickListener { private final LayoutInflater inflater; private ViewTorrentCallbacks viewTorrent; private BookmarksChangedListener listener; private TextView noBookmarks; public TorrentBookmarkAdapter(Context context, BookmarksChangedListener listener, TextView noBookmarks){ super(context, R.layout.list_torrent_bookmark); inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.listener = listener; this.noBookmarks = noBookmarks; try { viewTorrent = (ViewTorrentCallbacks)context; } catch (ClassCastException e){ throw new ClassCastException(context.toString() + " must implement ViewTorrentCallbacks"); } } @Override public View getView(int position, View convertView, ViewGroup parent){ ViewHolder holder; if (convertView != null){ holder = (ViewHolder)convertView.getTag(); } else { convertView = inflater.inflate(R.layout.list_torrent_bookmark, parent, false); holder = new ViewHolder(); holder.title = (TextView)convertView.findViewById(R.id.title); holder.year = (TextView)convertView.findViewById(R.id.year); holder.tags = (TextView)convertView.findViewById(R.id.tags); holder.removeBookmark = (ImageButton)convertView.findViewById(R.id.remove_bookmark); convertView.setTag(holder); } final TorrentGroup group = getItem(position); holder.title.setText(group.getName()); holder.year.setText(group.getYear().toString()); holder.tags.setText(group.getTagList().replace('_', '.').replace(" ", ", ")); holder.removeBookmark.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v){ new RemoveBookmarkTask().execute(group); remove(group); if (getCount() == 0){ noBookmarks.setVisibility(View.VISIBLE); } listener.bookmarksChanged(); } }); return convertView; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id){ viewTorrent.viewTorrentGroup(getItem(position).getId().intValue()); } /** * View holder for the torrent group information */ private static class ViewHolder { public TextView title, year, tags; public ImageButton removeBookmark; } /** * Async task to unbookmark torrents */ private class RemoveBookmarkTask extends AsyncTask<TorrentGroup, Void, Boolean> { @Override protected Boolean doInBackground(TorrentGroup... params){ TorrentGroup group = params[0]; return api.torrents.torrents.TorrentGroup.removeBookmark(group.getId().intValue()); } @Override protected void onPostExecute(Boolean status){ if (!status){ Toast.makeText(getContext(), "Could not remove bookmark", Toast.LENGTH_SHORT).show(); } } } }