diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/QuickFeedDiscoveryFragment.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/QuickFeedDiscoveryFragment.java | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QuickFeedDiscoveryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QuickFeedDiscoveryFragment.java new file mode 100644 index 000000000..e4213cc6b --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QuickFeedDiscoveryFragment.java @@ -0,0 +1,119 @@ +package de.danoeh.antennapod.fragment; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.GridView; +import android.widget.ProgressBar; +import android.widget.TextView; +import com.afollestad.materialdialogs.MaterialDialog; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.activity.MainActivity; +import de.danoeh.antennapod.activity.OnlineFeedViewActivity; +import de.danoeh.antennapod.adapter.FeedDiscoverAdapter; +import de.danoeh.antennapod.discovery.ItunesTopListLoader; +import de.danoeh.antennapod.discovery.PodcastSearchResult; +import io.reactivex.disposables.Disposable; + +import java.util.ArrayList; +import java.util.List; + + +public class QuickFeedDiscoveryFragment extends Fragment implements AdapterView.OnItemClickListener { + private static final String TAG = "FeedDiscoveryFragment"; + + private ProgressBar progressBar; + private Disposable disposable; + private FeedDiscoverAdapter adapter; + private GridView subscriptionGridLayout; + private TextView errorTextView; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + View root = inflater.inflate(R.layout.quick_feed_discovery, container, false); + View discoverMore = root.findViewById(R.id.discover_more); + discoverMore.setOnClickListener(v -> + ((MainActivity) getActivity()).loadChildFragment(new ItunesSearchFragment())); + + subscriptionGridLayout = root.findViewById(R.id.discover_grid); + progressBar = root.findViewById(R.id.discover_progress_bar); + errorTextView = root.findViewById(R.id.discover_error); + + adapter = new FeedDiscoverAdapter((MainActivity) getActivity()); + subscriptionGridLayout.setAdapter(adapter); + subscriptionGridLayout.setOnItemClickListener(this); + + // Fill with dummy elements to have a fixed height and + // prevent the UI elements below from jumping on slow connections + List<PodcastSearchResult> dummies = new ArrayList<>(); + for (int i = 0; i < 8; i++) { + dummies.add(PodcastSearchResult.dummy()); + } + adapter.updateData(dummies); + + loadToplist(); + + return root; + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (disposable != null) { + disposable.dispose(); + } + } + + private void loadToplist() { + progressBar.setVisibility(View.VISIBLE); + subscriptionGridLayout.setVisibility(View.INVISIBLE); + errorTextView.setVisibility(View.GONE); + + ItunesTopListLoader loader = new ItunesTopListLoader(getContext()); + disposable = loader.loadToplist(8) + .subscribe(podcasts -> { + errorTextView.setVisibility(View.GONE); + progressBar.setVisibility(View.GONE); + subscriptionGridLayout.setVisibility(View.VISIBLE); + adapter.updateData(podcasts); + }, error -> { + Log.e(TAG, Log.getStackTraceString(error)); + errorTextView.setText(error.getLocalizedMessage()); + errorTextView.setVisibility(View.VISIBLE); + progressBar.setVisibility(View.GONE); + subscriptionGridLayout.setVisibility(View.INVISIBLE); + }); + } + + @Override + public void onItemClick(AdapterView<?> parent, final View view, int position, long id) { + PodcastSearchResult podcast = adapter.getItem(position); + if (podcast.feedUrl == null) { + return; + } + view.setAlpha(0.5f); + ItunesTopListLoader loader = new ItunesTopListLoader(getContext()); + disposable = loader.getFeedUrl(podcast) + .subscribe(feedUrl -> { + view.setAlpha(1f); + Intent intent = new Intent(getActivity(), OnlineFeedViewActivity.class); + intent.putExtra(OnlineFeedViewActivity.ARG_FEEDURL, feedUrl); + intent.putExtra(OnlineFeedViewActivity.ARG_TITLE, getString(R.string.add_feed_label)); + startActivity(intent); + }, error -> { + Log.e(TAG, Log.getStackTraceString(error)); + view.setAlpha(1f); + String prefix = getString(R.string.error_msg_prefix); + new MaterialDialog.Builder(getActivity()) + .content(prefix + " " + error.getMessage()) + .neutralText(android.R.string.ok) + .show(); + }); + } +} |