diff options
Diffstat (limited to 'src/de/danoeh/antennapod/fragment/MiroGuideChannellistFragment.java')
-rw-r--r-- | src/de/danoeh/antennapod/fragment/MiroGuideChannellistFragment.java | 266 |
1 files changed, 0 insertions, 266 deletions
diff --git a/src/de/danoeh/antennapod/fragment/MiroGuideChannellistFragment.java b/src/de/danoeh/antennapod/fragment/MiroGuideChannellistFragment.java deleted file mode 100644 index 53910b673..000000000 --- a/src/de/danoeh/antennapod/fragment/MiroGuideChannellistFragment.java +++ /dev/null @@ -1,266 +0,0 @@ -package de.danoeh.antennapod.fragment; - -import android.annotation.SuppressLint; -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.os.AsyncTask; -import android.os.Bundle; -import android.support.v4.app.ListFragment; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.AbsListView; -import android.widget.AbsListView.OnScrollListener; -import android.widget.ListView; -import de.danoeh.antennapod.BuildConfig; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.MiroGuideChannelViewActivity; -import de.danoeh.antennapod.adapter.MiroGuideChannelListAdapter; -import de.danoeh.antennapod.miroguide.conn.MiroGuideException; -import de.danoeh.antennapod.miroguide.conn.MiroGuideService; -import de.danoeh.antennapod.miroguide.model.MiroGuideChannel; - -import java.util.ArrayList; -import java.util.List; - -/** - * Displays a list of MiroGuideChannel objects that were results of a certain - * MiroGuideService query. If the user reaches the bottom of the list, more - * entries will be loaded until all entries have been loaded or the maximum - * number of channels has been reached. - * */ -public class MiroGuideChannellistFragment extends ListFragment { - private static final String TAG = "MiroGuideChannellistFragment"; - - private static final String ARG_FILTER = "filter"; - private static final String ARG_FILTER_VALUE = "filter_value"; - private static final String ARG_SORT = "sort"; - - private static final int MAX_CHANNELS = 200; - private static final int CHANNELS_PER_QUERY = MiroGuideService.DEFAULT_CHANNEL_LIMIT; - - private ArrayList<MiroGuideChannel> channels; - private MiroGuideChannelListAdapter listAdapter; - private int offset; - - private boolean isLoadingChannels; - /** - * True if there are no more entries to load or if the maximum number of - * channels in the channellist has been reached - */ - private boolean stopLoading; - - private View footer; - - private String filter; - private String filterValue; - private String sort; - - private AsyncTask<Void, Void, List<MiroGuideChannel>> channelLoader; - - /** - * Creates a new instance of Channellist fragment. - * - * @throws IllegalArgumentException - * if filter, filterValue or sort is null - * */ - public static MiroGuideChannellistFragment newInstance(String filter, - String filterValue, String sort) { - if (filter == null) { - throw new IllegalArgumentException("filter cannot be null"); - } - if (filterValue == null) { - throw new IllegalArgumentException("filter value cannot be null"); - } - if (sort == null) { - throw new IllegalArgumentException("sort cannot be null"); - } - MiroGuideChannellistFragment cf = new MiroGuideChannellistFragment(); - Bundle args = new Bundle(); - args.putString(ARG_FILTER, filter); - args.putString(ARG_FILTER_VALUE, filterValue); - args.putString(ARG_SORT, sort); - cf.setArguments(args); - return cf; - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - offset = 0; - channels = new ArrayList<MiroGuideChannel>(); - - Bundle args = getArguments(); - filter = args.getString(ARG_FILTER); - filterValue = args.getString(ARG_FILTER_VALUE); - sort = args.getString(ARG_SORT); - - LayoutInflater inflater = (LayoutInflater) getActivity() - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - footer = inflater.inflate(R.layout.loading_footer, null); - listAdapter = new MiroGuideChannelListAdapter(getActivity(), 0, - channels); - } - - @Override - public void onResume() { - super.onResume(); - if (channels.isEmpty()) { - setListShown(false); - loadChannels(); - } - } - - @Override - public void onPause() { - super.onPause(); - if (channelLoader != null) { - channelLoader.cancel(true); - } - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - getListView().addFooterView(footer); // footer has to be added before - // the adapter has been set - getListView().setAdapter(listAdapter); - getListView().removeFooterView(footer); - - getListView().setOnScrollListener(new OnScrollListener() { - - @Override - public void onScroll(AbsListView view, int firstVisibleItem, - int visibleItemCount, int totalItemCount) { - int lastVisibleItem = firstVisibleItem + visibleItemCount; - if (lastVisibleItem == totalItemCount) { - if (BuildConfig.DEBUG) - loadChannels(); - } - } - - @Override - public void onScrollStateChanged(AbsListView view, int scrollState) { - } - }); - } - - @Override - public void onListItemClick(ListView l, View v, int position, long id) { - super.onListItemClick(l, v, position, id); - if (listAdapter != null) { - MiroGuideChannel selection = listAdapter.getItem(position); - Intent launchIntent = new Intent(getActivity(), - MiroGuideChannelViewActivity.class); - launchIntent.putExtra( - MiroGuideChannelViewActivity.EXTRA_CHANNEL_ID, - selection.getId()); - launchIntent.putExtra( - MiroGuideChannelViewActivity.EXTRA_CHANNEL_URL, - selection.getDownloadUrl()); - startActivity(launchIntent); - } - } - - @SuppressLint("NewApi") - private void loadChannels() { - if (!isLoadingChannels) { - if (!stopLoading) { - isLoadingChannels = true; - channelLoader = new AsyncTask<Void, Void, List<MiroGuideChannel>>() { - private MiroGuideException exception; - - @Override - protected void onCancelled() { - if (BuildConfig.DEBUG) - Log.d(TAG, "Channel loader was cancelled"); - } - - @Override - protected void onPostExecute(List<MiroGuideChannel> result) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Channel loading finished"); - if (exception == null) { - getListView().removeFooterView(footer); - for (MiroGuideChannel channel : result) { - channels.add(channel); - } - listAdapter.notifyDataSetChanged(); - offset += CHANNELS_PER_QUERY; - // check if fragment should not send any more - // queries - if (result.size() < CHANNELS_PER_QUERY) { - if (BuildConfig.DEBUG) - Log.d(TAG, - "Query result was less than requested number of channels. Stopping to send any more queries"); - stopLoading = true; - } - if (offset >= MAX_CHANNELS) { - if (BuildConfig.DEBUG) - Log.d(TAG, - "Maximum number of feeds has been reached. Stopping to send any more queries"); - stopLoading = true; - } - - setListShown(true); - } else { - AlertDialog.Builder dialog = new AlertDialog.Builder( - getActivity()); - dialog.setTitle(R.string.error_label); - dialog.setMessage(exception.getMessage()); - dialog.setNeutralButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - - @Override - public void onClick( - DialogInterface dialog, - int which) { - dialog.dismiss(); - } - }); - dialog.create().show(); - } - isLoadingChannels = false; - } - - @Override - protected void onPreExecute() { - getListView().addFooterView(footer); - } - - @Override - protected List<MiroGuideChannel> doInBackground( - Void... params) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Background channel loader started"); - MiroGuideService service = new MiroGuideService(); - try { - return service.getChannelList(filter, filterValue, - sort, CHANNELS_PER_QUERY, offset); - } catch (MiroGuideException e) { - exception = e; - e.printStackTrace(); - } finally { - // service.close(); - } - return null; - } - }; - - if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) { - channelLoader - .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } else { - channelLoader.execute(); - } - } - } else { - if (BuildConfig.DEBUG) - Log.d(TAG, "Channels are already being loaded"); - } - } -} |