summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-03-17 13:45:34 +0100
committerByteHamster <info@bytehamster.com>2020-03-17 14:35:10 +0100
commit8d2a188eda47b88351c1208190356a7f6a49b599 (patch)
tree5d4d5de5a94f208542b7d5a78b30c77315202a95 /app/src/main/java/de/danoeh
parent4f0de071ec4654c8d0a829d2edb60d9891ce74da (diff)
downloadAntennaPod-8d2a188eda47b88351c1208190356a7f6a49b599.zip
Showing feed results in search
Diffstat (limited to 'app/src/main/java/de/danoeh')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/FeedSearchResultAdapter.java76
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java31
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/SquareImageView.java30
6 files changed, 123 insertions, 17 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java
index e5b9288ef..f8fd99867 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/EpisodeItemListAdapter.java
@@ -34,6 +34,7 @@ public class EpisodeItemListAdapter extends RecyclerView.Adapter<EpisodeItemView
public EpisodeItemListAdapter(MainActivity mainActivity) {
super();
this.mainActivityRef = new WeakReference<>(mainActivity);
+ setHasStableIds(true);
}
public void updateItems(List<FeedItem> items) {
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedSearchResultAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedSearchResultAdapter.java
new file mode 100644
index 000000000..2e5ba31c9
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedSearchResultAdapter.java
@@ -0,0 +1,76 @@
+package de.danoeh.antennapod.adapter;
+
+import android.view.View;
+import android.view.ViewGroup;
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.activity.MainActivity;
+import de.danoeh.antennapod.core.feed.Feed;
+import de.danoeh.antennapod.fragment.FeedItemlistFragment;
+import de.danoeh.antennapod.view.SquareImageView;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.List;
+
+public class FeedSearchResultAdapter extends RecyclerView.Adapter<FeedSearchResultAdapter.Holder> {
+
+ private final WeakReference<MainActivity> mainActivityRef;
+ private final List<Feed> data = new ArrayList<>();
+
+ public FeedSearchResultAdapter(MainActivity mainActivity) {
+ this.mainActivityRef = new WeakReference<>(mainActivity);
+ }
+
+ public void updateData(List<Feed> newData) {
+ data.clear();
+ data.addAll(newData);
+ notifyDataSetChanged();
+ }
+
+ @NonNull
+ @Override
+ public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View convertView = View.inflate(mainActivityRef.get(), R.layout.searchlist_item_feed, null);
+ return new Holder(convertView);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull Holder holder, int position) {
+ final Feed podcast = data.get(position);
+ holder.imageView.setContentDescription(podcast.getTitle());
+ holder.imageView.setOnClickListener(v ->
+ mainActivityRef.get().loadChildFragment(FeedItemlistFragment.newInstance(podcast.getId())));
+
+ Glide.with(mainActivityRef.get())
+ .load(podcast.getImageUrl())
+ .apply(new RequestOptions()
+ .placeholder(R.color.light_gray)
+ .fitCenter()
+ .dontAnimate())
+ .into(holder.imageView);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return data.get(position).getId();
+ }
+
+ @Override
+ public int getItemCount() {
+ return data.size();
+ }
+
+ static class Holder extends RecyclerView.ViewHolder {
+ SquareImageView imageView;
+
+ public Holder(@NonNull View itemView) {
+ super(itemView);
+ imageView = itemView.findViewById(R.id.discovery_cover);
+ imageView.setDirection(SquareImageView.DIRECTION_HEIGHT);
+ }
+ }
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
index c92cba694..cb72153c2 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java
@@ -344,7 +344,6 @@ public abstract class EpisodesListFragment extends Fragment {
private void createRecycleAdapter(RecyclerView recyclerView, EmptyViewHandler emptyViewHandler) {
MainActivity mainActivity = (MainActivity) getActivity();
listAdapter = new EpisodeItemListAdapter(mainActivity);
- listAdapter.setHasStableIds(true);
listAdapter.updateItems(episodes);
recyclerView.setAdapter(listAdapter);
emptyViewHandler.updateAdapter(listAdapter);
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
index a7c1c5c25..404ea1d8d 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -586,7 +586,6 @@ public class QueueFragment extends Fragment {
if (recyclerAdapter == null) {
MainActivity activity = (MainActivity) getActivity();
recyclerAdapter = new QueueRecyclerAdapter(activity, itemTouchHelper);
- recyclerAdapter.setHasStableIds(true);
recyclerView.setAdapter(recyclerAdapter);
emptyView.updateAdapter(recyclerAdapter);
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
index 7eeb26412..4bb7ec28a 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
@@ -3,6 +3,7 @@ package de.danoeh.antennapod.fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
+import android.util.Pair;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -21,12 +22,14 @@ import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.adapter.EpisodeItemListAdapter;
+import de.danoeh.antennapod.adapter.FeedSearchResultAdapter;
import de.danoeh.antennapod.core.event.DownloadEvent;
import de.danoeh.antennapod.core.event.DownloaderUpdate;
import de.danoeh.antennapod.core.event.FeedItemEvent;
import de.danoeh.antennapod.core.event.PlaybackPositionEvent;
import de.danoeh.antennapod.core.event.PlayerStatusEvent;
import de.danoeh.antennapod.core.event.UnreadItemsUpdateEvent;
+import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.storage.FeedSearcher;
import de.danoeh.antennapod.core.util.FeedItemUtil;
@@ -52,10 +55,12 @@ public class SearchFragment extends Fragment {
private static final String ARG_FEED = "feed";
private EpisodeItemListAdapter adapter;
+ private FeedSearchResultAdapter adapterFeeds;
private Disposable disposable;
private ProgressBar progressBar;
private EmptyViewHandler emptyViewHandler;
private RecyclerView recyclerView;
+ private RecyclerView recyclerViewFeeds;
private List<FeedItem> results;
/**
@@ -110,6 +115,7 @@ public class SearchFragment extends Fragment {
View layout = inflater.inflate(R.layout.search_fragment, container, false);
((AppCompatActivity) getActivity()).setSupportActionBar(layout.findViewById(R.id.toolbar));
progressBar = layout.findViewById(R.id.progressBar);
+
recyclerView = layout.findViewById(R.id.recyclerView);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
@@ -119,6 +125,14 @@ public class SearchFragment extends Fragment {
adapter = new EpisodeItemListAdapter((MainActivity) getActivity());
recyclerView.setAdapter(adapter);
+ recyclerViewFeeds = layout.findViewById(R.id.recyclerViewFeeds);
+ LinearLayoutManager layoutManagerFeeds = new LinearLayoutManager(getActivity());
+ layoutManagerFeeds.setOrientation(RecyclerView.HORIZONTAL);
+ recyclerViewFeeds.setLayoutManager(layoutManagerFeeds);
+ recyclerViewFeeds.setHasFixedSize(true);
+ adapterFeeds = new FeedSearchResultAdapter((MainActivity) getActivity());
+ recyclerViewFeeds.setAdapter(adapterFeeds);
+
emptyViewHandler = new EmptyViewHandler(getContext());
emptyViewHandler.attachToRecyclerView(recyclerView);
emptyViewHandler.setIcon(R.attr.action_search);
@@ -249,19 +263,20 @@ public class SearchFragment extends Fragment {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(results -> {
progressBar.setVisibility(View.GONE);
- this.results = results;
- adapter.updateItems(results);
+ this.results = results.first;
+ adapter.updateItems(results.first);
+ adapterFeeds.updateData(results.second);
String query = getArguments().getString(ARG_QUERY);
emptyViewHandler.setMessage(getString(R.string.no_results_for_query, query));
}, error -> Log.e(TAG, Log.getStackTraceString(error)));
}
@NonNull
- private List<FeedItem> performSearch() {
- Bundle args = getArguments();
- String query = args.getString(ARG_QUERY);
- long feed = args.getLong(ARG_FEED);
- Context context = getActivity();
- return FeedSearcher.searchFeedItems(context, query, feed);
+ private Pair<List<FeedItem>, List<Feed>> performSearch() {
+ String query = getArguments().getString(ARG_QUERY);
+ long feed = getArguments().getLong(ARG_FEED);
+ List<FeedItem> items = FeedSearcher.searchFeedItems(getContext(), query, feed);
+ List<Feed> feeds = FeedSearcher.searchFeeds(getContext(), query);
+ return new Pair<>(items, feeds);
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/view/SquareImageView.java b/app/src/main/java/de/danoeh/antennapod/view/SquareImageView.java
index dcf1edbe7..c256ede9e 100644
--- a/app/src/main/java/de/danoeh/antennapod/view/SquareImageView.java
+++ b/app/src/main/java/de/danoeh/antennapod/view/SquareImageView.java
@@ -10,7 +10,11 @@ import de.danoeh.antennapod.core.R;
* From http://stackoverflow.com/a/19449488/6839
*/
public class SquareImageView extends AppCompatImageView {
- private boolean useMinimum = false;
+ public static final int DIRECTION_WIDTH = 0;
+ public static final int DIRECTION_HEIGHT = 1;
+ public static final int DIRECTION_MINIMUM = 2;
+
+ private int direction = DIRECTION_WIDTH;
public SquareImageView(Context context) {
super(context);
@@ -27,20 +31,32 @@ public class SquareImageView extends AppCompatImageView {
}
private void loadAttrs(Context context, AttributeSet attrs) {
- TypedArray a = context.obtainStyledAttributes(attrs, new int[]{R.styleable.SquareImageView_useMinimum});
- useMinimum = a.getBoolean(0, false);
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SquareImageView);
+ direction = a.getInt(R.styleable.SquareImageView_direction, DIRECTION_WIDTH);
a.recycle();
}
+ public void setDirection(int direction) {
+ this.direction = direction;
+ requestLayout();
+ }
+
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- int size = getMeasuredWidth();
- if (useMinimum) {
- size = Math.min(getMeasuredWidth(), getMeasuredHeight());
+ switch (direction) {
+ case DIRECTION_MINIMUM:
+ int size = Math.min(getMeasuredWidth(), getMeasuredHeight());
+ setMeasuredDimension(size, size);
+ break;
+ case DIRECTION_HEIGHT:
+ setMeasuredDimension(getMeasuredHeight(), getMeasuredHeight());
+ break;
+ default:
+ setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
+ break;
}
- setMeasuredDimension(size, size);
}
} \ No newline at end of file