summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
Diffstat (limited to 'app/src')
-rw-r--r--app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java110
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java83
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/TagListAdapter.java54
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java112
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java110
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java16
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java45
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java73
-rw-r--r--app/src/main/res/layout/addfeed.xml230
-rw-r--r--app/src/main/res/layout/fragment_itunes_search.xml27
-rw-r--r--app/src/main/res/layout/gpodnet_podcast_list.xml55
-rw-r--r--app/src/main/res/layout/gpodnet_podcast_listitem.xml80
-rw-r--r--app/src/main/res/layout/gpodnet_tag_listitem.xml37
14 files changed, 135 insertions, 901 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java b/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java
deleted file mode 100644
index b13af78f7..000000000
--- a/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package de.test.antennapod.gpodnet;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import de.danoeh.antennapod.core.service.download.AntennapodHttpClient;
-import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
-import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetServiceException;
-import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetDevice;
-import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetTag;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static java.util.Collections.singletonList;
-
-/**
- * Test class for GpodnetService
- */
-@Ignore("Needs valid credentials to run")
-@RunWith(AndroidJUnit4.class)
-public class GPodnetServiceTest {
-
- private GpodnetService service;
-
- private static final String USER = "";
- private static final String PW = "";
- private static final String DEVICE_ID = "radio";
-
- @Before
- public void setUp() {
- service = new GpodnetService(AntennapodHttpClient.getHttpClient(),
- GpodnetService.DEFAULT_BASE_HOST, DEVICE_ID, USER, PW);
- }
-
- private void authenticate() throws GpodnetServiceException {
- service.login();
- }
-
- @Test
- public void testUploadSubscription() throws GpodnetServiceException {
- authenticate();
- ArrayList<String> l = new ArrayList<>();
- l.add("http://bitsundso.de/feed");
- service.uploadSubscriptions(DEVICE_ID, l);
- }
-
- @Test
- public void testUploadSubscription2() throws GpodnetServiceException {
- authenticate();
- ArrayList<String> l = new ArrayList<>();
- l.add("http://bitsundso.de/feed");
- l.add("http://gamesundso.de/feed");
- service.uploadSubscriptions(DEVICE_ID, l);
- }
-
- @Test
- public void testUploadChanges() throws GpodnetServiceException {
- authenticate();
- String[] URLS = {"http://bitsundso.de/feed", "http://gamesundso.de/feed", "http://cre.fm/feed/mp3/", "http://freakshow.fm/feed/m4a/"};
- List<String> subscriptions = Arrays.asList(URLS[0], URLS[1]);
- List<String> removed = singletonList(URLS[0]);
- List<String> added = Arrays.asList(URLS[2], URLS[3]);
- service.uploadSubscriptions(DEVICE_ID, subscriptions);
- service.uploadSubscriptionChanges(added, removed);
- }
-
- @Test
- public void testGetSubscriptionChanges() throws GpodnetServiceException {
- authenticate();
- service.getSubscriptionChanges(1362322610L);
- }
-
- @Test
- public void testConfigureDevices() throws GpodnetServiceException {
- authenticate();
- service.configureDevice("foo", "This is an updated caption", GpodnetDevice.DeviceType.LAPTOP);
- }
-
- @Test
- public void testGetDevices() throws GpodnetServiceException {
- authenticate();
- service.getDevices();
- }
-
- @Test
- public void testTags() throws GpodnetServiceException {
- service.getTopTags(20);
- }
-
- @Test
- public void testPodcastForTags() throws GpodnetServiceException {
- List<GpodnetTag> tags = service.getTopTags(20);
- service.getPodcastsForTag(tags.get(1),
- 10);
- }
-
- @Test
- public void testSearch() throws GpodnetServiceException {
- service.searchPodcasts("linux", 64);
- }
-
- @Test
- public void testToplist() throws GpodnetServiceException {
- service.getPodcastToplist(10);
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java
deleted file mode 100644
index a125515cc..000000000
--- a/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/PodcastListAdapter.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package de.danoeh.antennapod.adapter.gpodnet;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.bumptech.glide.Glide;
-
-import com.bumptech.glide.load.resource.bitmap.FitCenter;
-import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
-import com.bumptech.glide.request.RequestOptions;
-import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetPodcast;
-import org.apache.commons.lang3.StringUtils;
-
-
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.core.glide.ApGlideSettings;
-
-import java.util.List;
-
-/**
- * Adapter for displaying a list of GPodnetPodcast-Objects.
- */
-public class PodcastListAdapter extends ArrayAdapter<GpodnetPodcast> {
-
- public PodcastListAdapter(Context context, int resource, List<GpodnetPodcast> objects) {
- super(context, resource, objects);
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- Holder holder;
-
- GpodnetPodcast podcast = getItem(position);
-
- // Inflate Layout
- if (convertView == null) {
- holder = new Holder();
- LayoutInflater inflater = (LayoutInflater) getContext()
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
- convertView = inflater.inflate(R.layout.gpodnet_podcast_listitem, parent, false);
- holder.image = convertView.findViewById(R.id.imgvCover);
- holder.title = convertView.findViewById(R.id.txtvTitle);
- holder.subscribers = convertView.findViewById(R.id.txtvSubscribers);
- holder.author = convertView.findViewById(R.id.txtvAuthor);
- convertView.setTag(holder);
- } else {
- holder = (Holder) convertView.getTag();
- }
-
- if (StringUtils.isNotBlank(podcast.getLogoUrl())) {
- Glide.with(convertView.getContext())
- .load(podcast.getLogoUrl())
- .apply(new RequestOptions()
- .placeholder(R.color.light_gray)
- .error(R.color.light_gray)
- .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY)
- .transforms(new FitCenter(),
- new RoundedCorners((int) (4 * convertView.getContext()
- .getResources().getDisplayMetrics().density)))
- .dontAnimate())
- .into(holder.image);
- }
-
- holder.title.setText(podcast.getTitle());
- holder.subscribers.setText(String.valueOf(podcast.getSubscribers()));
- holder.author.setText(podcast.getAuthor());
-
- return convertView;
- }
-
- static class Holder {
- ImageView image;
- TextView title;
- TextView subscribers;
- TextView author;
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/TagListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/TagListAdapter.java
deleted file mode 100644
index b0441688d..000000000
--- a/app/src/main/java/de/danoeh/antennapod/adapter/gpodnet/TagListAdapter.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package de.danoeh.antennapod.adapter.gpodnet;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.TextView;
-
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetTag;
-
-import java.util.List;
-
-/**
- * Adapter for displaying a list of GPodnetPodcast-Objects.
- */
-public class TagListAdapter extends ArrayAdapter<GpodnetTag> {
-
- public TagListAdapter(Context context, int resource, List<GpodnetTag> objects) {
- super(context, resource, objects);
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- Holder holder;
-
- GpodnetTag tag = getItem(position);
-
- // Inflate Layout
- if (convertView == null) {
- holder = new Holder();
- LayoutInflater inflater = (LayoutInflater) getContext()
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
- convertView = inflater.inflate(R.layout.gpodnet_tag_listitem, parent, false);
- holder.title = convertView.findViewById(R.id.txtvTitle);
- holder.usage = convertView.findViewById(R.id.txtvUsage);
- convertView.setTag(holder);
- } else {
- holder = (Holder) convertView.getTag();
- }
-
- holder.title.setText(tag.getTitle());
- holder.usage.setText(String.valueOf(tag.getUsage()));
-
- return convertView;
- }
-
- static class Holder {
- TextView title;
- TextView usage;
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
index d2a2e6de8..fce5b0ddc 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java
@@ -35,9 +35,9 @@ import de.danoeh.antennapod.core.storage.DBTasks;
import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.databinding.AddfeedBinding;
import de.danoeh.antennapod.databinding.EditTextDialogBinding;
-import de.danoeh.antennapod.fragment.gpodnet.GpodnetMainFragment;
import de.danoeh.antennapod.net.discovery.CombinedSearcher;
import de.danoeh.antennapod.net.discovery.FyydPodcastSearcher;
+import de.danoeh.antennapod.net.discovery.GpodnetPodcastSearcher;
import de.danoeh.antennapod.net.discovery.ItunesPodcastSearcher;
import de.danoeh.antennapod.net.discovery.PodcastIndexPodcastSearcher;
import io.reactivex.Observable;
@@ -84,7 +84,7 @@ public class AddFeedFragment extends Fragment {
viewBinding.searchFyydButton.setOnClickListener(v
-> activity.loadChildFragment(OnlineSearchFragment.newInstance(FyydPodcastSearcher.class)));
viewBinding.searchGPodderButton.setOnClickListener(v
- -> activity.loadChildFragment(new GpodnetMainFragment()));
+ -> activity.loadChildFragment(OnlineSearchFragment.newInstance(GpodnetPodcastSearcher.class)));
viewBinding.searchPodcastIndexButton.setOnClickListener(v
-> activity.loadChildFragment(OnlineSearchFragment.newInstance(PodcastIndexPodcastSearcher.class)));
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java
deleted file mode 100644
index fc2f1fa47..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package de.danoeh.antennapod.fragment.gpodnet;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-import androidx.appcompat.widget.SearchView;
-import androidx.appcompat.widget.Toolbar;
-import androidx.fragment.app.Fragment;
-import androidx.viewpager2.adapter.FragmentStateAdapter;
-import androidx.viewpager2.widget.ViewPager2;
-
-import com.google.android.material.tabs.TabLayout;
-import com.google.android.material.tabs.TabLayoutMediator;
-
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.MainActivity;
-import de.danoeh.antennapod.fragment.OnlineSearchFragment;
-import de.danoeh.antennapod.net.discovery.GpodnetPodcastSearcher;
-
-/**
- * Main navigation hub for gpodder.net podcast directory
- */
-public class GpodnetMainFragment extends Fragment {
-
- private static final int NUM_PAGES = 2;
- private static final int POS_TOPLIST = 0;
- private static final int POS_TAGS = 1;
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- super.onCreateView(inflater, container, savedInstanceState);
- View root = inflater.inflate(R.layout.pager_fragment, container, false);
- setupToolbar(root.findViewById(R.id.toolbar));
-
- ViewPager2 viewPager = root.findViewById(R.id.viewpager);
- GpodnetPagerAdapter pagerAdapter = new GpodnetPagerAdapter(this);
- viewPager.setAdapter(pagerAdapter);
-
- // Give the TabLayout the ViewPager
- TabLayout tabLayout = root.findViewById(R.id.sliding_tabs);
-
- new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> {
- switch (position) {
- case POS_TAGS:
- tab.setText(R.string.gpodnet_taglist_header);
- break;
- case POS_TOPLIST: // Fall-through
- default:
- tab.setText(R.string.gpodnet_toplist_header);
- break;
- }
- }).attach();
-
- return root;
- }
-
- private void setupToolbar(Toolbar toolbar) {
- toolbar.setTitle(R.string.gpodnet_main_label);
- toolbar.setNavigationOnClickListener(v -> getParentFragmentManager().popBackStack());
-
- toolbar.inflateMenu(R.menu.search);
- MenuItem searchItem = toolbar.getMenu().findItem(R.id.action_search);
- final SearchView sv = (SearchView) searchItem.getActionView();
- sv.setQueryHint(getString(R.string.gpodnet_search_hint));
- sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
- @Override
- public boolean onQueryTextSubmit(String query) {
- Activity activity = getActivity();
- if (activity != null) {
- searchItem.collapseActionView();
- ((MainActivity) activity).loadChildFragment(
- OnlineSearchFragment.newInstance(GpodnetPodcastSearcher.class, query));
- }
- return true;
- }
-
- @Override
- public boolean onQueryTextChange(String s) {
- return false;
- }
- });
- }
-
- public static class GpodnetPagerAdapter extends FragmentStateAdapter {
-
- GpodnetPagerAdapter(@NonNull Fragment fragment) {
- super(fragment);
- }
-
- @NonNull
- @Override
- public Fragment createFragment(int position) {
- switch (position) {
- case POS_TAGS:
- return new TagListFragment();
- case POS_TOPLIST: // Fall-through
- default:
- return new PodcastTopListFragment();
- }
- }
-
- @Override
- public int getItemCount() {
- return NUM_PAGES;
- }
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java
deleted file mode 100644
index c2c5adc9a..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package de.danoeh.antennapod.fragment.gpodnet;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.GridView;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-import androidx.fragment.app.Fragment;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.MainActivity;
-import de.danoeh.antennapod.activity.OnlineFeedViewActivity;
-import de.danoeh.antennapod.adapter.gpodnet.PodcastListAdapter;
-import de.danoeh.antennapod.core.sync.SynchronizationCredentials;
-import de.danoeh.antennapod.core.service.download.AntennapodHttpClient;
-import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
-import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetServiceException;
-import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetPodcast;
-import io.reactivex.Observable;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-
-import java.util.List;
-
-/**
- * Displays a list of GPodnetPodcast-Objects in a GridView
- */
-public abstract class PodcastListFragment extends Fragment {
- private static final String TAG = "PodcastListFragment";
-
- private GridView gridView;
- private ProgressBar progressBar;
- private TextView txtvError;
- private Button butRetry;
- private Disposable disposable;
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View root = inflater.inflate(R.layout.gpodnet_podcast_list, container, false);
- gridView = root.findViewById(R.id.gridView);
- progressBar = root.findViewById(R.id.progressBar);
- txtvError = root.findViewById(R.id.txtvError);
- butRetry = root.findViewById(R.id.butRetry);
-
- gridView.setOnItemClickListener((parent, view, position, id) ->
- onPodcastSelected((GpodnetPodcast) gridView.getAdapter().getItem(position)));
- butRetry.setOnClickListener(v -> loadData());
-
- loadData();
- return root;
- }
-
- private void onPodcastSelected(GpodnetPodcast selection) {
- Log.d(TAG, "Selected podcast: " + selection.toString());
- Intent intent = new Intent(getActivity(), OnlineFeedViewActivity.class);
- intent.putExtra(OnlineFeedViewActivity.ARG_FEEDURL, selection.getUrl());
- intent.putExtra(MainActivity.EXTRA_STARTED_FROM_SEARCH, true);
- startActivity(intent);
- }
-
- protected abstract List<GpodnetPodcast> loadPodcastData(GpodnetService service) throws GpodnetServiceException;
-
- final void loadData() {
- if (disposable != null) {
- disposable.dispose();
- }
- gridView.setVisibility(View.GONE);
- progressBar.setVisibility(View.VISIBLE);
- txtvError.setVisibility(View.GONE);
- butRetry.setVisibility(View.GONE);
- disposable = Observable.fromCallable(
- () -> {
- GpodnetService service = new GpodnetService(AntennapodHttpClient.getHttpClient(),
- SynchronizationCredentials.getHosturl(), SynchronizationCredentials.getDeviceID(),
- SynchronizationCredentials.getUsername(), SynchronizationCredentials.getPassword());
- return loadPodcastData(service);
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(
- podcasts -> {
- progressBar.setVisibility(View.GONE);
- butRetry.setVisibility(View.GONE);
-
- if (podcasts.size() > 0) {
- PodcastListAdapter listAdapter = new PodcastListAdapter(getContext(), 0, podcasts);
- gridView.setAdapter(listAdapter);
- listAdapter.notifyDataSetChanged();
- gridView.setVisibility(View.VISIBLE);
- txtvError.setVisibility(View.GONE);
- } else {
- gridView.setVisibility(View.GONE);
- txtvError.setText(getString(R.string.search_status_no_results));
- txtvError.setVisibility(View.VISIBLE);
- }
- }, error -> {
- gridView.setVisibility(View.GONE);
- progressBar.setVisibility(View.GONE);
- txtvError.setText(error.getMessage());
- txtvError.setVisibility(View.VISIBLE);
- butRetry.setVisibility(View.VISIBLE);
- Log.e(TAG, Log.getStackTraceString(error));
- });
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java
deleted file mode 100644
index f51ab032f..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastTopListFragment.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package de.danoeh.antennapod.fragment.gpodnet;
-
-import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
-import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetServiceException;
-import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetPodcast;
-
-import java.util.List;
-
-public class PodcastTopListFragment extends PodcastListFragment {
- private static final int PODCAST_COUNT = 50;
-
- @Override
- protected List<GpodnetPodcast> loadPodcastData(GpodnetService service) throws GpodnetServiceException {
- return service.getPodcastToplist(PODCAST_COUNT);
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java
deleted file mode 100644
index 655cd6ed4..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagFragment.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package de.danoeh.antennapod.fragment.gpodnet;
-
-import android.os.Bundle;
-import androidx.annotation.NonNull;
-
-import java.util.List;
-
-import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
-import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetServiceException;
-import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetPodcast;
-import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetTag;
-
-/**
- * Shows all podcasts from gpodder.net that belong to a specific tag.
- * Use the newInstance method of this class to create a new TagFragment.
- */
-public class TagFragment extends PodcastListFragment {
- private static final int PODCAST_COUNT = 50;
-
- private GpodnetTag tag;
-
- public static TagFragment newInstance(@NonNull GpodnetTag tag) {
- TagFragment fragment = new TagFragment();
- Bundle args = new Bundle();
- args.putParcelable("tag", tag);
- fragment.setArguments(args);
- return fragment;
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- Bundle args = getArguments();
- if (args == null || args.getParcelable("tag") == null) {
- throw new IllegalArgumentException("Arguments not given");
- }
- tag = args.getParcelable("tag");
- }
-
- @Override
- protected List<GpodnetPodcast> loadPodcastData(GpodnetService service) throws GpodnetServiceException {
- return service.getPodcastsForTag(tag, PODCAST_COUNT);
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java
deleted file mode 100644
index abdfab941..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package de.danoeh.antennapod.fragment.gpodnet;
-
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.fragment.app.ListFragment;
-import de.danoeh.antennapod.activity.MainActivity;
-import de.danoeh.antennapod.adapter.gpodnet.TagListAdapter;
-import de.danoeh.antennapod.core.sync.SynchronizationCredentials;
-import de.danoeh.antennapod.core.service.download.AntennapodHttpClient;
-import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
-import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetTag;
-import io.reactivex.Observable;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-
-public class TagListFragment extends ListFragment {
- private static final int COUNT = 50;
- private static final String TAG = "TagListFragment";
- private Disposable disposable;
-
- @Override
- public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
-
- getListView().setOnItemClickListener((parent, view1, position, id) -> {
- GpodnetTag tag = (GpodnetTag) getListAdapter().getItem(position);
- ((MainActivity) getActivity()).loadChildFragment(TagFragment.newInstance(tag));
- });
-
- startLoadTask();
- }
-
- @Override
- public void onDestroyView() {
- super.onDestroyView();
-
- if (disposable != null) {
- disposable.dispose();
- }
- }
-
- private void startLoadTask() {
- if (disposable != null) {
- disposable.dispose();
- }
- setListShown(false);
- disposable = Observable.fromCallable(
- () -> {
- GpodnetService service = new GpodnetService(AntennapodHttpClient.getHttpClient(),
- SynchronizationCredentials.getHosturl(), SynchronizationCredentials.getDeviceID(),
- SynchronizationCredentials.getUsername(), SynchronizationCredentials.getPassword());
- return service.getTopTags(COUNT);
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(
- tags -> {
- setListAdapter(new TagListAdapter(getContext(), android.R.layout.simple_list_item_1, tags));
- setListShown(true);
- }, error -> {
- TextView txtvError = new TextView(getActivity());
- txtvError.setText(error.getMessage());
- getListView().setEmptyView(txtvError);
- setListShown(true);
- Log.e(TAG, Log.getStackTraceString(error));
- });
- }
-}
-
diff --git a/app/src/main/res/layout/addfeed.xml b/app/src/main/res/layout/addfeed.xml
index a6e0fc9ea..8e2fb99fa 100644
--- a/app/src/main/res/layout/addfeed.xml
+++ b/app/src/main/res/layout/addfeed.xml
@@ -1,153 +1,157 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="?attr/actionBarSize"
- android:theme="?attr/actionBarTheme"
- app:title="@string/add_feed_label"
- app:navigationIcon="?homeAsUpIndicator"
- android:id="@+id/toolbar"/>
+ android:id="@+id/toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?attr/actionBarSize"
+ android:theme="?attr/actionBarTheme"
+ app:title="@string/add_feed_label"
+ app:navigationIcon="?homeAsUpIndicator" />
<androidx.cardview.widget.CardView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:cardCornerRadius="4dp"
- app:cardElevation="4dp"
- android:layout_marginLeft="16dp"
- android:layout_marginRight="16dp">
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="16dp"
+ android:layout_marginRight="16dp"
+ app:cardCornerRadius="4dp"
+ app:cardElevation="4dp">
<LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
<ImageView
- android:layout_width="40dp"
- android:layout_height="match_parent"
- android:layout_marginLeft="8dp"
- android:layout_marginRight="8dp"
- android:contentDescription="@string/search_podcast_hint"
- app:srcCompat="@drawable/ic_search"
- android:id="@+id/searchButton"
- android:scaleType="center"/>
+ android:id="@+id/searchButton"
+ android:layout_width="40dp"
+ android:layout_height="match_parent"
+ android:layout_marginLeft="8dp"
+ android:layout_marginRight="8dp"
+ android:contentDescription="@string/search_podcast_hint"
+ android:scaleType="center"
+ app:srcCompat="@drawable/ic_search" />
<EditText
- android:id="@+id/combinedFeedSearchEditText"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:inputType="text"
- android:imeOptions="actionSearch"
- android:importantForAutofill="no"
- android:layout_marginStart="0dp"
- android:layout_marginLeft="0dp"
- android:layout_marginRight="8dp"
- android:layout_marginEnd="8dp"
- android:paddingTop="16dp"
- android:paddingBottom="16dp"
- android:hint="@string/search_podcast_hint"
- android:background="@null"/>
+ android:id="@+id/combinedFeedSearchEditText"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:inputType="text"
+ android:imeOptions="actionSearch"
+ android:importantForAutofill="no"
+ android:layout_marginStart="0dp"
+ android:layout_marginLeft="0dp"
+ android:layout_marginRight="8dp"
+ android:layout_marginEnd="8dp"
+ android:paddingTop="16dp"
+ android:paddingBottom="16dp"
+ android:hint="@string/search_podcast_hint"
+ android:background="@null" />
</LinearLayout>
+
</androidx.cardview.widget.CardView>
<ScrollView
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:scrollbars="vertical">
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:scrollbars="vertical">
<LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:focusableInTouchMode="true"
- android:padding="16dp">
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:focusableInTouchMode="true"
+ android:padding="16dp">
<androidx.fragment.app.FragmentContainerView
- android:id="@+id/quickFeedDiscovery"
- android:name="de.danoeh.antennapod.fragment.QuickFeedDiscoveryFragment"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
+ android:id="@+id/quickFeedDiscovery"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:name="de.danoeh.antennapod.fragment.QuickFeedDiscoveryFragment" />
<TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/advanced"
- android:textSize="18sp"
- android:layout_marginTop="16dp"
- android:layout_marginBottom="8dp"
- android:textColor="?android:attr/textColorPrimary"/>
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/advanced"
+ android:textSize="18sp"
+ android:layout_marginTop="16dp"
+ android:layout_marginBottom="8dp"
+ android:textColor="?android:attr/textColorPrimary" />
<TextView
- android:id="@+id/addViaUrlButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:drawableStartCompat="@drawable/ic_feed"
- app:drawableLeftCompat="@drawable/ic_feed"
- style="@style/AddPodcastTextView"
- android:text="@string/add_podcast_by_url"/>
+ android:id="@+id/addViaUrlButton"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/add_podcast_by_url"
+ app:drawableStartCompat="@drawable/ic_feed"
+ app:drawableLeftCompat="@drawable/ic_feed"
+ style="@style/AddPodcastTextView" />
<TextView
- android:id="@+id/addLocalFolderButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:drawableStartCompat="@drawable/ic_folder"
- app:drawableLeftCompat="@drawable/ic_folder"
- style="@style/AddPodcastTextView"
- android:text="@string/add_local_folder"/>
+ android:id="@+id/addLocalFolderButton"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/add_local_folder"
+ app:drawableStartCompat="@drawable/ic_folder"
+ app:drawableLeftCompat="@drawable/ic_folder"
+ style="@style/AddPodcastTextView" />
<TextView
- android:id="@+id/searchItunesButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:drawableStartCompat="@drawable/ic_search"
- app:drawableLeftCompat="@drawable/ic_search"
- style="@style/AddPodcastTextView"
- android:text="@string/search_itunes_label"/>
+ android:id="@+id/searchItunesButton"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/search_itunes_label"
+ app:drawableStartCompat="@drawable/ic_search"
+ app:drawableLeftCompat="@drawable/ic_search"
+ style="@style/AddPodcastTextView" />
<TextView
- android:id="@+id/searchFyydButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:drawableStartCompat="@drawable/ic_search"
- app:drawableLeftCompat="@drawable/ic_search"
- style="@style/AddPodcastTextView"
- android:text="@string/search_fyyd_label"/>
+ android:id="@+id/searchFyydButton"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/search_fyyd_label"
+ app:drawableStartCompat="@drawable/ic_search"
+ app:drawableLeftCompat="@drawable/ic_search"
+ style="@style/AddPodcastTextView" />
<TextView
- android:id="@+id/searchGPodderButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:drawableStartCompat="@drawable/ic_search"
- app:drawableLeftCompat="@drawable/ic_search"
- style="@style/AddPodcastTextView"
- android:text="@string/browse_gpoddernet_label"/>
+ android:id="@+id/searchGPodderButton"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/gpodnet_search_hint"
+ app:drawableStartCompat="@drawable/ic_search"
+ app:drawableLeftCompat="@drawable/ic_search"
+ style="@style/AddPodcastTextView" />
<TextView
- android:id="@+id/searchPodcastIndexButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:drawableStartCompat="@drawable/ic_search"
- app:drawableLeftCompat="@drawable/ic_search"
- style="@style/AddPodcastTextView"
- android:text="@string/search_podcastindex_label"/>
+ android:id="@+id/searchPodcastIndexButton"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/search_podcastindex_label"
+ app:drawableStartCompat="@drawable/ic_search"
+ app:drawableLeftCompat="@drawable/ic_search"
+ style="@style/AddPodcastTextView" />
<TextView
- android:id="@+id/opmlImportButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:drawableStartCompat="@drawable/ic_download"
- app:drawableLeftCompat="@drawable/ic_download"
- style="@style/AddPodcastTextView"
- android:text="@string/opml_add_podcast_label"/>
+ android:id="@+id/opmlImportButton"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/opml_add_podcast_label"
+ app:drawableStartCompat="@drawable/ic_download"
+ app:drawableLeftCompat="@drawable/ic_download"
+ style="@style/AddPodcastTextView" />
+
</LinearLayout>
+
</ScrollView>
+
</LinearLayout>
diff --git a/app/src/main/res/layout/fragment_itunes_search.xml b/app/src/main/res/layout/fragment_itunes_search.xml
index 6e00bdf0d..b20016f68 100644
--- a/app/src/main/res/layout/fragment_itunes_search.xml
+++ b/app/src/main/res/layout/fragment_itunes_search.xml
@@ -1,23 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto">
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<LinearLayout
+ android:id="@+id/browsing"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
- android:id="@+id/browsing"
android:layout_alignParentTop="true">
+
<androidx.appcompat.widget.Toolbar
+ android:id="@+id/toolbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme"
app:navigationIcon="?homeAsUpIndicator"
- app:title="@string/discover"
- android:id="@+id/toolbar"/>
+ app:title="@string/discover" />
<android.widget.Spinner
android:id="@+id/spinner_country"
@@ -29,13 +32,14 @@
android:minHeight="?attr/actionBarSize"
android:spinnerMode="dropdown"
android:textAlignment="textEnd" />
+
</LinearLayout>
<GridView
- android:layout_below="@id/browsing"
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:layout_below="@id/browsing"
android:clipToPadding="false"
android:columnWidth="400dp"
android:gravity="center"
@@ -45,7 +49,7 @@
android:paddingTop="@dimen/list_vertical_padding"
android:stretchMode="columnWidth"
android:verticalSpacing="8dp"
- tools:listitem="@layout/gpodnet_podcast_listitem" />
+ tools:listitem="@layout/itunes_podcast_listitem" />
<TextView
android:id="@android:id/empty"
@@ -62,7 +66,7 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:indeterminateOnly="true"
- android:visibility="gone"/>
+ android:visibility="gone" />
<TextView
android:id="@+id/txtvError"
@@ -101,5 +105,6 @@
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
- android:textAlignment="textEnd"/>
+ android:textAlignment="textEnd" />
+
</RelativeLayout>
diff --git a/app/src/main/res/layout/gpodnet_podcast_list.xml b/app/src/main/res/layout/gpodnet_podcast_list.xml
deleted file mode 100644
index a6918f8d4..000000000
--- a/app/src/main/res/layout/gpodnet_podcast_list.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <GridView
- android:id="@+id/gridView"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipToPadding="false"
- android:columnWidth="400dp"
- android:gravity="center"
- android:horizontalSpacing="8dp"
- android:numColumns="auto_fit"
- android:paddingBottom="@dimen/list_vertical_padding"
- android:paddingTop="@dimen/list_vertical_padding"
- android:stretchMode="columnWidth"
- android:verticalSpacing="8dp"
- android:layout_alignParentTop="true"
- tools:listitem="@layout/gpodnet_podcast_listitem" />
-
- <ProgressBar
- android:id="@+id/progressBar"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:indeterminateOnly="true" />
-
- <TextView
- android:id="@+id/txtvError"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:layout_margin="16dp"
- android:textAlignment="center"
- android:textSize="@dimen/text_size_small"
- android:visibility="gone"
- tools:visibility="visible"
- tools:text="Error message"
- tools:background="@android:color/holo_red_light" />
-
- <Button
- android:id="@+id/butRetry"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@id/txtvError"
- android:layout_centerHorizontal="true"
- android:layout_margin="16dp"
- android:text="@string/retry_label"
- android:visibility="gone"
- tools:visibility="visible"
- tools:background="@android:color/holo_red_light" />
-</RelativeLayout>
diff --git a/app/src/main/res/layout/gpodnet_podcast_listitem.xml b/app/src/main/res/layout/gpodnet_podcast_listitem.xml
deleted file mode 100644
index 56d351d62..000000000
--- a/app/src/main/res/layout/gpodnet_podcast_listitem.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent" android:layout_height="wrap_content"
- android:paddingTop="8dp"
- android:paddingLeft="16dp"
- android:paddingRight="16dp"
- android:paddingBottom="8dp"
- tools:background="@android:color/darker_gray">
-
- <ImageView
- android:id="@+id/imgvCover"
- android:layout_width="@dimen/thumbnail_length_itemlist"
- android:layout_height="@dimen/thumbnail_length_itemlist"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true"
- android:layout_marginRight="16dp"
- android:layout_marginEnd="16dp"
- android:adjustViewBounds="true"
- android:importantForAccessibility="no"
- android:cropToPadding="true"
- android:scaleType="fitXY"
- tools:src="@tools:sample/avatars"
- tools:background="@android:color/holo_green_dark"/>
-
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_toRightOf="@id/imgvCover"
- android:layout_toEndOf="@id/imgvCover"
- android:orientation="vertical">
-
- <TextView
- android:id="@+id/txtvTitle"
- style="@style/AntennaPod.TextView.ListItemPrimaryTitle2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:maxLines="2"
- android:includeFontPadding="false"
- tools:text="Title"
- tools:background="@android:color/holo_green_dark"/>
-
- <TextView
- android:id="@+id/txtvAuthor"
- style="android:style/TextAppearance.Small"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="14sp"
- android:textColor="?android:attr/textColorSecondary"
- android:ellipsize="middle"
- android:maxLines="2"
- tools:text="author"
- tools:background="@android:color/holo_green_dark"/>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:gravity="center_vertical">
- <ImageView
- android:layout_width="14sp"
- android:layout_height="14sp"
- app:srcCompat="@drawable/ic_feed"/>
- <TextView
- android:id="@+id/txtvSubscribers"
- style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:lines="1"
- tools:text="150"
- tools:background="@android:color/holo_green_dark"/>
- </LinearLayout>
-
- </LinearLayout>
-</RelativeLayout>
diff --git a/app/src/main/res/layout/gpodnet_tag_listitem.xml b/app/src/main/res/layout/gpodnet_tag_listitem.xml
deleted file mode 100644
index a377f9ba1..000000000
--- a/app/src/main/res/layout/gpodnet_tag_listitem.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- tools:background="@android:color/darker_gray">
-
- <TextView
- android:id="@+id/txtvTitle"
- style="@style/AntennaPod.TextView.ListItemPrimaryTitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/listitem_threeline_horizontalpadding"
- android:layout_marginStart="@dimen/listitem_threeline_horizontalpadding"
- android:layout_marginTop="@dimen/listitem_threeline_verticalpadding"
- android:layout_marginBottom="@dimen/listitem_threeline_verticalpadding"
- android:lines="1"
- tools:text="Tag Title"
- tools:background="@android:color/holo_green_dark" />
-
- <TextView
- android:id="@+id/txtvUsage"
- style="@style/AntennaPod.TextView.ListItemSecondaryTitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:layout_alignParentEnd="true"
- android:layout_marginRight="@dimen/listitem_threeline_horizontalpadding"
- android:layout_marginEnd="@dimen/listitem_threeline_horizontalpadding"
- android:layout_marginTop="@dimen/listitem_threeline_verticalpadding"
- android:layout_marginBottom="@dimen/listitem_threeline_verticalpadding"
- tools:text="301"
- tools:background="@android:color/holo_green_dark"/>
-
-</RelativeLayout>