summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-02-05 18:18:10 +0100
committerByteHamster <info@bytehamster.com>2020-02-05 18:18:10 +0100
commit2e6fc7a0a5b185e3d0c077daa80404aa99e8a432 (patch)
treefb0d40d9fa68e9248096a6f1124e73cd831ea84e
parenta80bf2265a8c120a6865effd75bd2ddb6d513968 (diff)
downloadAntennaPod-2e6fc7a0a5b185e3d0c077daa80404aa99e8a432.zip
Using unified item view in search fragment
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java44
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/SearchlistAdapter.java123
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java6
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java12
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/viewholder/FeedViewHolder.java37
-rw-r--r--app/src/main/res/layout/search_fragment.xml5
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java9
7 files changed, 53 insertions, 183 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java
index 9e7778c12..a5cfcb3e7 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java
@@ -6,8 +6,12 @@ import android.widget.BaseAdapter;
import android.widget.ListView;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.core.event.PlaybackPositionEvent;
+import de.danoeh.antennapod.core.feed.Feed;
+import de.danoeh.antennapod.core.feed.FeedComponent;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.view.viewholder.EpisodeItemViewHolder;
+import de.danoeh.antennapod.view.viewholder.FeedComponentViewHolder;
+import de.danoeh.antennapod.view.viewholder.FeedViewHolder;
/**
* List adapter for items of feeds that the user has already subscribed to.
@@ -21,10 +25,8 @@ public class FeedItemlistAdapter extends BaseAdapter {
private int currentlyPlayingItem = -1;
- public FeedItemlistAdapter(MainActivity activity,
- ItemAccess itemAccess,
- boolean showIcons,
- boolean makePlayedItemsTransparent) {
+ public FeedItemlistAdapter(MainActivity activity, ItemAccess itemAccess,
+ boolean showIcons, boolean makePlayedItemsTransparent) {
super();
this.activity = activity;
this.itemAccess = itemAccess;
@@ -44,14 +46,38 @@ public class FeedItemlistAdapter extends BaseAdapter {
}
@Override
- public FeedItem getItem(int position) {
+ public FeedComponent getItem(int position) {
return itemAccess.getItem(position);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
+ final FeedComponent item = getItem(position);
+ if (item instanceof Feed) {
+ return getView((Feed) item, convertView, parent);
+ } else {
+ final FeedItem feeditem = (FeedItem) item;
+ if (feeditem.getMedia() != null && feeditem.getMedia().isCurrentlyPlaying()) {
+ currentlyPlayingItem = position;
+ }
+ return getView(feeditem, convertView, parent);
+ }
+ }
+
+ private View getView(Feed item, View convertView, ViewGroup parent) {
+ FeedViewHolder holder;
+ if (convertView == null || !(convertView.getTag() instanceof FeedViewHolder)) {
+ holder = new FeedViewHolder(activity, parent);
+ } else {
+ holder = (FeedViewHolder) convertView.getTag();
+ }
+ holder.bind(item);
+ return holder.itemView;
+ }
+
+ private View getView(final FeedItem item, View convertView, ViewGroup parent) {
EpisodeItemViewHolder holder;
- if (convertView == null) {
+ if (convertView == null || !(convertView.getTag() instanceof EpisodeItemViewHolder)) {
holder = new EpisodeItemViewHolder(activity, parent);
} else {
holder = (EpisodeItemViewHolder) convertView.getTag();
@@ -61,7 +87,6 @@ public class FeedItemlistAdapter extends BaseAdapter {
holder.coverHolder.setVisibility(View.GONE);
}
- final FeedItem item = getItem(position);
holder.bind(item);
holder.dragHandle.setVisibility(View.GONE);
@@ -69,9 +94,6 @@ public class FeedItemlistAdapter extends BaseAdapter {
holder.itemView.setAlpha(1.0f);
}
- if (item.getMedia() != null && item.getMedia().isCurrentlyPlaying()) {
- currentlyPlayingItem = position;
- }
holder.hideSeparatorIfNecessary();
return holder.itemView;
}
@@ -91,7 +113,7 @@ public class FeedItemlistAdapter extends BaseAdapter {
public interface ItemAccess {
int getCount();
- FeedItem getItem(int position);
+ FeedComponent getItem(int position);
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/SearchlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/SearchlistAdapter.java
deleted file mode 100644
index d1615b410..000000000
--- a/app/src/main/java/de/danoeh/antennapod/adapter/SearchlistAdapter.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package de.danoeh.antennapod.adapter;
-
-import android.content.Context;
-import android.os.Build;
-import android.text.Layout;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.ImageView;
-import android.widget.TextView;
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.request.RequestOptions;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.core.feed.Feed;
-import de.danoeh.antennapod.core.feed.FeedComponent;
-import de.danoeh.antennapod.core.feed.FeedItem;
-import de.danoeh.antennapod.core.glide.ApGlideSettings;
-
-/**
- * List adapter for search activity.
- */
-public class SearchlistAdapter extends BaseAdapter {
-
- private final Context context;
- private final ItemAccess itemAccess;
-
-
- public SearchlistAdapter(Context context, ItemAccess itemAccess) {
- this.context = context;
- this.itemAccess = itemAccess;
- }
-
- @Override
- public int getCount() {
- return itemAccess.getCount();
- }
-
- @Override
- public FeedComponent getItem(int position) {
- return itemAccess.getItem(position);
- }
-
- @Override
- public long getItemId(int position) {
- return 0;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- final Holder holder;
- FeedComponent component = getItem(position);
-
- // Inflate Layout
- if (convertView == null) {
- holder = new Holder();
- LayoutInflater inflater = (LayoutInflater) context
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
- convertView = inflater.inflate(R.layout.searchlist_item, parent, false);
- holder.title = convertView.findViewById(R.id.txtvTitle);
- if(Build.VERSION.SDK_INT >= 23) {
- holder.title.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL);
- }
- holder.cover = convertView
- .findViewById(R.id.imgvFeedimage);
- holder.subtitle = convertView
- .findViewById(R.id.txtvSubtitle);
-
- convertView.setTag(holder);
- } else {
- holder = (Holder) convertView.getTag();
- }
- if (component.getClass() == Feed.class) {
- final Feed feed = (Feed) component;
- holder.title.setText(feed.getTitle());
- holder.subtitle.setVisibility(View.GONE);
-
- Glide.with(context)
- .load(feed.getImageLocation())
- .apply(new RequestOptions()
- .placeholder(R.color.light_gray)
- .error(R.color.light_gray)
- .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY)
- .fitCenter()
- .dontAnimate())
- .into(holder.cover);
-
- } else if (component.getClass() == FeedItem.class) {
- final FeedItem item = (FeedItem) component;
- holder.title.setText(item.getTitle());
- holder.subtitle.setVisibility(View.VISIBLE);
-
- convertView.setAlpha(item.isPlayed() ? 0.5f : 1.0f);
-
- Glide.with(context)
- .load(item.getFeed().getImageLocation())
- .apply(new RequestOptions()
- .placeholder(R.color.light_gray)
- .error(R.color.light_gray)
- .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY)
- .fitCenter()
- .dontAnimate())
- .into(holder.cover);
-
- }
-
- return convertView;
- }
-
- static class Holder {
- ImageView cover;
- TextView title;
- TextView subtitle;
- }
-
- public interface ItemAccess {
- int getCount();
-
- FeedComponent getItem(int position);
- }
-
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
index 16787a1c5..b9afa6d57 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java
@@ -289,7 +289,7 @@ public class FeedItemlistFragment extends ListFragment {
AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;
// because of addHeaderView(), positions are increased by 1!
- FeedItem item = itemAccess.getItem(adapterInfo.position-1);
+ FeedItem item = (FeedItem) itemAccess.getItem(adapterInfo.position - 1);
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.feeditemlist_context, menu);
@@ -305,11 +305,11 @@ public class FeedItemlistFragment extends ListFragment {
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
- if(menuInfo == null) {
+ if (menuInfo == null) {
menuInfo = lastMenuInfo;
}
// because of addHeaderView(), positions are increased by 1!
- FeedItem selectedItem = itemAccess.getItem(menuInfo.position-1);
+ FeedItem selectedItem = feed.getItemAtIndex(menuInfo.position - 1);
if (selectedItem == null) {
Log.i(TAG, "Selected item at position " + menuInfo.position + " was null, ignoring selection");
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 c640554ff..6a698ecce 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java
@@ -20,11 +20,12 @@ import androidx.core.view.MenuItemCompat;
import androidx.fragment.app.Fragment;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
-import de.danoeh.antennapod.adapter.SearchlistAdapter;
+import de.danoeh.antennapod.adapter.FeedItemlistAdapter;
import de.danoeh.antennapod.core.event.UnreadItemsUpdateEvent;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedComponent;
import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.storage.DBTasks;
import de.danoeh.antennapod.core.storage.FeedSearcher;
import de.danoeh.antennapod.view.EmptyViewHandler;
import io.reactivex.Observable;
@@ -33,6 +34,9 @@ import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.FutureTask;
+
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -45,7 +49,7 @@ public class SearchFragment extends Fragment implements AdapterView.OnItemClickL
private static final String ARG_QUERY = "query";
private static final String ARG_FEED = "feed";
- private SearchlistAdapter searchAdapter;
+ private FeedItemlistAdapter searchAdapter;
private List<FeedComponent> searchResults = new ArrayList<>();
private Disposable disposable;
private ProgressBar progressBar;
@@ -105,7 +109,7 @@ public class SearchFragment extends Fragment implements AdapterView.OnItemClickL
View layout = inflater.inflate(R.layout.search_fragment, container, false);
ListView listView = layout.findViewById(R.id.listview);
progressBar = layout.findViewById(R.id.progressBar);
- searchAdapter = new SearchlistAdapter(getActivity(), itemAccess);
+ searchAdapter = new FeedItemlistAdapter((MainActivity) getActivity(), itemAccess, true, true);
listView.setAdapter(searchAdapter);
listView.setOnItemClickListener(this);
@@ -172,7 +176,7 @@ public class SearchFragment extends Fragment implements AdapterView.OnItemClickL
emptyViewHandler.setMessage(getString(R.string.no_results_for_query, query));
}
- private final SearchlistAdapter.ItemAccess itemAccess = new SearchlistAdapter.ItemAccess() {
+ private final FeedItemlistAdapter.ItemAccess itemAccess = new FeedItemlistAdapter.ItemAccess() {
@Override
public int getCount() {
return searchResults.size();
diff --git a/app/src/main/java/de/danoeh/antennapod/view/viewholder/FeedViewHolder.java b/app/src/main/java/de/danoeh/antennapod/view/viewholder/FeedViewHolder.java
index 39d428a6e..83250bbfa 100644
--- a/app/src/main/java/de/danoeh/antennapod/view/viewholder/FeedViewHolder.java
+++ b/app/src/main/java/de/danoeh/antennapod/view/viewholder/FeedViewHolder.java
@@ -2,34 +2,16 @@ package de.danoeh.antennapod.view.viewholder;
import android.os.Build;
import android.text.Layout;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
-import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.cardview.widget.CardView;
-import androidx.recyclerview.widget.RecyclerView;
-import com.joanzapata.iconify.Iconify;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.adapter.CoverLoader;
-import de.danoeh.antennapod.adapter.QueueRecyclerAdapter;
-import de.danoeh.antennapod.adapter.actionbutton.ItemActionButton;
-import de.danoeh.antennapod.core.event.PlaybackPositionEvent;
import de.danoeh.antennapod.core.feed.Feed;
-import de.danoeh.antennapod.core.feed.FeedItem;
-import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.feed.MediaType;
-import de.danoeh.antennapod.core.feed.util.ImageResourceUtils;
-import de.danoeh.antennapod.core.service.download.DownloadRequest;
-import de.danoeh.antennapod.core.storage.DownloadRequester;
-import de.danoeh.antennapod.core.util.Converter;
-import de.danoeh.antennapod.core.util.DateUtils;
-import de.danoeh.antennapod.core.util.NetworkUtils;
-import de.danoeh.antennapod.core.util.ThemeUtils;
-import de.danoeh.antennapod.view.CircularProgressBar;
/**
* Holds the view which shows feeds.
@@ -37,14 +19,9 @@ import de.danoeh.antennapod.view.CircularProgressBar;
public class FeedViewHolder extends FeedComponentViewHolder {
private static final String TAG = "FeedViewHolder";
- private final View container;
- public final ImageView dragHandle;
private final TextView placeholder;
private final ImageView cover;
private final TextView title;
- public final View secondaryActionButton;
- public final ImageView secondaryActionIcon;
- private final CircularProgressBar secondaryActionProgress;
public final CardView coverHolder;
private final MainActivity activity;
@@ -53,21 +30,18 @@ public class FeedViewHolder extends FeedComponentViewHolder {
public FeedViewHolder(MainActivity activity, ViewGroup parent) {
super(LayoutInflater.from(activity).inflate(R.layout.feeditemlist_item, parent, false));
this.activity = activity;
- container = itemView.findViewById(R.id.container);
- dragHandle = itemView.findViewById(R.id.drag_handle);
placeholder = itemView.findViewById(R.id.txtvPlaceholder);
cover = itemView.findViewById(R.id.imgvCover);
+ coverHolder = itemView.findViewById(R.id.coverHolder);
title = itemView.findViewById(R.id.txtvTitle);
if (Build.VERSION.SDK_INT >= 23) {
title.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL);
}
+ itemView.findViewById(R.id.secondaryActionButton).setVisibility(View.GONE);
itemView.findViewById(R.id.status).setVisibility(View.GONE);
itemView.findViewById(R.id.progress).setVisibility(View.GONE);
- secondaryActionProgress = itemView.findViewById(R.id.secondaryActionProgress);
- secondaryActionButton = itemView.findViewById(R.id.secondaryActionButton);
- secondaryActionIcon = itemView.findViewById(R.id.secondaryActionIcon);
- coverHolder = itemView.findViewById(R.id.coverHolder);
+ itemView.findViewById(R.id.drag_handle).setVisibility(View.GONE);
itemView.setTag(this);
}
@@ -76,11 +50,6 @@ public class FeedViewHolder extends FeedComponentViewHolder {
placeholder.setText(feed.getTitle());
title.setText(feed.getTitle());
- /*ItemActionButton actionButton = ItemActionButton.forItem(item, true, true);
- actionButton.configure(secondaryActionButton, secondaryActionIcon, activity);
- secondaryActionButton.setFocusable(false);
- secondaryActionProgress.setPercentage(0, null);*/
-
if (coverHolder.getVisibility() == View.VISIBLE) {
new CoverLoader(activity)
.withUri(feed.getImageLocation())
diff --git a/app/src/main/res/layout/search_fragment.xml b/app/src/main/res/layout/search_fragment.xml
index 6f455a056..489c2d392 100644
--- a/app/src/main/res/layout/search_fragment.xml
+++ b/app/src/main/res/layout/search_fragment.xml
@@ -13,8 +13,5 @@
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipToPadding="false"
- android:paddingLeft="@dimen/list_vertical_padding"
- android:paddingRight="@dimen/list_vertical_padding" />
+ android:layout_height="match_parent" />
</FrameLayout> \ No newline at end of file
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java b/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java
index bbe8b26f1..77c8d3b7f 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/FeedSearcher.java
@@ -35,11 +35,12 @@ public class FeedSearcher {
final List<FeedComponent> result = new ArrayList<>();
try {
FutureTask<List<FeedItem>> itemSearchTask = DBTasks.searchFeedItems(context, selectedFeed, query);
- FutureTask<List<Feed>> feedSearchTask = DBTasks.searchFeeds(context, query);
itemSearchTask.run();
- feedSearchTask.run();
-
- result.addAll(feedSearchTask.get());
+ if (selectedFeed == 0) {
+ FutureTask<List<Feed>> feedSearchTask = DBTasks.searchFeeds(context, query);
+ feedSearchTask.run();
+ result.addAll(feedSearchTask.get());
+ }
result.addAll(itemSearchTask.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();