package what.whatandroid.torrentgroup.torrent; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.format.DateUtils; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.TextView; import java.util.Date; import api.cli.Utils; import api.soup.MySoup; import api.torrents.torrents.Torrents; import what.whatandroid.R; import what.whatandroid.callbacks.LoadingListener; import what.whatandroid.callbacks.ViewUserCallbacks; import what.whatandroid.comments.WhatBBParser; /** * A fragment showing a detailed view of a torrent */ public class TorrentDetailFragment extends Fragment implements LoadingListener<Torrents>, View.OnClickListener { /** * The torrent being displayed */ private Torrents torrent; /** * Callbacks to view the user who uploaded the torrent */ private ViewUserCallbacks viewUser; /** * Views displaying the torrent information */ private TextView editionTitle, format, size, snatches, leechers, seeders, uploadDate, uploader, description, folderTitle; private View freeleech, reported; private TorrentFilesAdapter adapter; public static TorrentDetailFragment newInstance(Torrents torrent){ TorrentDetailFragment f = new TorrentDetailFragment(); f.torrent = torrent; return f; } public TorrentDetailFragment(){ //Required empty ctor } @Override public void onAttach(Activity activity){ super.onAttach(activity); try { viewUser = (ViewUserCallbacks)activity; } catch (ClassCastException e){ throw new ClassCastException(activity.toString() + " must implement ViewUserCallbacks"); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View view = inflater.inflate(R.layout.fragment_list_view, container, false); ListView fileList = (ListView)view.findViewById(R.id.list); View header = inflater.inflate(R.layout.header_torrent_detail, null); fileList.addHeaderView(header); adapter = new TorrentFilesAdapter(getActivity()); fileList.setAdapter(adapter); editionTitle = (TextView)header.findViewById(R.id.edition_title); format = (TextView)header.findViewById(R.id.format); size = (TextView)header.findViewById(R.id.size); snatches = (TextView)header.findViewById(R.id.snatches); leechers = (TextView)header.findViewById(R.id.leechers); seeders = (TextView)header.findViewById(R.id.seeders); uploadDate = (TextView)header.findViewById(R.id.uploaded_date); uploader = (TextView)header.findViewById(R.id.uploaded_by); uploader.setOnClickListener(this); description = (TextView)header.findViewById(R.id.description); folderTitle = (TextView)header.findViewById(R.id.folder_title); freeleech = header.findViewById(R.id.freeleech_icon); reported = header.findViewById(R.id.reported_icon); description.setMovementMethod(LinkMovementMethod.getInstance()); if (torrent != null){ populateView(); } return view; } @Override public void onClick(View v){ viewUser.viewUser(torrent.getUserId().intValue()); } @Override public void onLoadingComplete(Torrents t){ torrent = t; if (isAdded()){ populateView(); } } void populateView(){ editionTitle.setText(torrent.getEditionTitle()); format.setText(torrent.getMediaFormatEncoding()); size.setText(Utils.toHumanReadableSize(torrent.getSize().longValue())); snatches.setText(torrent.getSnatched().toString()); leechers.setText(torrent.getLeechers().toString()); seeders.setText(torrent.getSeeders().toString()); uploader.setText(torrent.getUsername()); folderTitle.setText("/" + torrent.getFilePath() + "/"); Date uploaded = MySoup.parseDate(torrent.getTime()); uploadDate.setText("Uploaded " + DateUtils.getRelativeTimeSpanString(uploaded.getTime(), new Date().getTime(), DateUtils.WEEK_IN_MILLIS)); if (!torrent.isFreeTorrent()){ freeleech.setVisibility(View.GONE); } if (!torrent.isReported()){ reported.setVisibility(View.GONE); } if (!torrent.getDescription().isEmpty()){ description.setText(new WhatBBParser().parsebb(torrent.getDescription())); } else { description.setVisibility(View.GONE); } adapter.addAll(torrent.getTorrentFiles()); adapter.notifyDataSetChanged(); } }