Add 'Search online' button if local search has no results (#6681)
This commit is contained in:
parent
2ee2cb6702
commit
58484d5790
|
@ -2,7 +2,10 @@ package de.danoeh.antennapod.adapter;
|
|||
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.cardview.widget.CardView;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
|
@ -26,7 +29,8 @@ public class HorizontalFeedListAdapter extends RecyclerView.Adapter<HorizontalFe
|
|||
private final List<Feed> data = new ArrayList<>();
|
||||
private int dummyViews = 0;
|
||||
private Feed longPressedItem;
|
||||
|
||||
private @StringRes int endButtonText = 0;
|
||||
private Runnable endButtonAction = null;
|
||||
|
||||
public HorizontalFeedListAdapter(MainActivity mainActivity) {
|
||||
this.mainActivityRef = new WeakReference<>(mainActivity);
|
||||
|
@ -51,6 +55,15 @@ public class HorizontalFeedListAdapter extends RecyclerView.Adapter<HorizontalFe
|
|||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull Holder holder, int position) {
|
||||
if (position == getItemCount() - 1 && endButtonAction != null) {
|
||||
holder.cardView.setVisibility(View.GONE);
|
||||
holder.actionButton.setVisibility(View.VISIBLE);
|
||||
holder.actionButton.setText(endButtonText);
|
||||
holder.actionButton.setOnClickListener(v -> endButtonAction.run());
|
||||
return;
|
||||
}
|
||||
holder.cardView.setVisibility(View.VISIBLE);
|
||||
holder.actionButton.setVisibility(View.GONE);
|
||||
if (position >= data.size()) {
|
||||
holder.itemView.setAlpha(0.1f);
|
||||
Glide.with(mainActivityRef.get()).clear(holder.imageView);
|
||||
|
@ -95,7 +108,7 @@ public class HorizontalFeedListAdapter extends RecyclerView.Adapter<HorizontalFe
|
|||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return dummyViews + data.size();
|
||||
return dummyViews + data.size() + ((endButtonAction == null) ? 0 : 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -108,13 +121,23 @@ public class HorizontalFeedListAdapter extends RecyclerView.Adapter<HorizontalFe
|
|||
contextMenu.setHeaderTitle(longPressedItem.getTitle());
|
||||
}
|
||||
|
||||
public void setEndButton(@StringRes int text, Runnable action) {
|
||||
endButtonAction = action;
|
||||
endButtonText = text;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
static class Holder extends RecyclerView.ViewHolder {
|
||||
SquareImageView imageView;
|
||||
CardView cardView;
|
||||
Button actionButton;
|
||||
|
||||
public Holder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
imageView = itemView.findViewById(R.id.discovery_cover);
|
||||
imageView.setDirection(SquareImageView.DIRECTION_HEIGHT);
|
||||
actionButton = itemView.findViewById(R.id.actionButton);
|
||||
cardView = itemView.findViewById(R.id.cardView);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package de.danoeh.antennapod.fragment;
|
|||
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
|
@ -26,6 +27,7 @@ import com.google.android.material.chip.Chip;
|
|||
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.MainActivity;
|
||||
import de.danoeh.antennapod.activity.OnlineFeedViewActivity;
|
||||
import de.danoeh.antennapod.adapter.EpisodeItemListAdapter;
|
||||
import de.danoeh.antennapod.adapter.HorizontalFeedListAdapter;
|
||||
import de.danoeh.antennapod.core.menuhandler.MenuItemUtils;
|
||||
|
@ -39,6 +41,7 @@ import de.danoeh.antennapod.model.feed.FeedItem;
|
|||
import de.danoeh.antennapod.core.storage.FeedSearcher;
|
||||
import de.danoeh.antennapod.core.util.FeedItemUtil;
|
||||
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
|
||||
import de.danoeh.antennapod.net.discovery.CombinedSearcher;
|
||||
import de.danoeh.antennapod.view.EmptyViewHandler;
|
||||
import de.danoeh.antennapod.view.EpisodeItemListRecyclerView;
|
||||
import de.danoeh.antennapod.view.LiftOnScrollListener;
|
||||
|
@ -334,6 +337,7 @@ public class SearchFragment extends Fragment {
|
|||
if (disposable != null) {
|
||||
disposable.dispose();
|
||||
}
|
||||
adapterFeeds.setEndButton(R.string.search_online, this::searchOnline);
|
||||
chip.setVisibility((getArguments().getLong(ARG_FEED, 0) == 0) ? View.GONE : View.VISIBLE);
|
||||
disposable = Observable.fromCallable(this::performSearch)
|
||||
.subscribeOn(Schedulers.io())
|
||||
|
@ -374,4 +378,19 @@ public class SearchFragment extends Fragment {
|
|||
imm.showSoftInput(view, 0);
|
||||
}
|
||||
}
|
||||
|
||||
private void searchOnline() {
|
||||
searchView.clearFocus();
|
||||
InputMethodManager in = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
in.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
|
||||
String query = searchView.getQuery().toString();
|
||||
if (query.matches("http[s]?://.*")) {
|
||||
Intent intent = new Intent(getActivity(), OnlineFeedViewActivity.class);
|
||||
intent.putExtra(OnlineFeedViewActivity.ARG_FEEDURL, query);
|
||||
startActivity(intent);
|
||||
return;
|
||||
}
|
||||
((MainActivity) getActivity()).loadChildFragment(
|
||||
OnlineSearchFragment.newInstance(CombinedSearcher.class, query));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
android:clipChildren="false">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/cardView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:cardBackgroundColor="@color/non_square_icon_background"
|
||||
|
@ -30,4 +31,11 @@
|
|||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<Button
|
||||
android:id="@+id/actionButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton" />
|
||||
|
||||
</LinearLayout>
|
||||
|
|
|
@ -545,6 +545,7 @@
|
|||
<string name="type_to_search">Type a query to search</string>
|
||||
<string name="search_label">Search</string>
|
||||
<string name="no_results_for_query">No results were found for \"%1$s\"</string>
|
||||
<string name="search_online">Search online</string>
|
||||
|
||||
<!-- Synchronization -->
|
||||
<string name="sync_status_started">Sync started</string>
|
||||
|
|
Loading…
Reference in New Issue