From 5172ce9754b19a8f431250a6c777882d116e8f49 Mon Sep 17 00:00:00 2001 From: okjack Date: Wed, 3 Jul 2024 14:15:06 +0800 Subject: [PATCH] [mobile] site search --- .../android/tv/ui/adapter/SiteAdapter.java | 20 +++++- .../android/tv/ui/dialog/SiteDialog.java | 25 +++++++ .../mobile/res/drawable/search_item_round.xml | 24 +++++++ app/src/mobile/res/drawable/site_cursor.xml | 9 +++ app/src/mobile/res/layout/dialog_site.xml | 67 +++++++++++++++++-- .../java/com/github/catvod/utils/Util.java | 2 +- 6 files changed, 141 insertions(+), 6 deletions(-) create mode 100644 app/src/mobile/res/drawable/search_item_round.xml create mode 100644 app/src/mobile/res/drawable/site_cursor.xml diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/SiteAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/SiteAdapter.java index 3e02272ef..8e7991aa0 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/SiteAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/SiteAdapter.java @@ -1,5 +1,6 @@ package com.fongmi.android.tv.ui.adapter; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -12,18 +13,21 @@ import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.bean.Site; import com.fongmi.android.tv.databinding.AdapterSiteBinding; +import java.util.ArrayList; import java.util.List; public class SiteAdapter extends RecyclerView.Adapter { private final OnClickListener mListener; - private final List mItems; + private List mItems; + private final List allItems; private boolean search; private boolean change; public SiteAdapter(OnClickListener listener) { this.mListener = listener; this.mItems = VodConfig.get().getSites(); + this.allItems = this.mItems; } public SiteAdapter search(boolean search) { @@ -36,6 +40,20 @@ public class SiteAdapter extends RecyclerView.Adapter { return this; } + public void keyword(String keyword) { + if (TextUtils.isEmpty(keyword)) { + this.mItems = allItems; + notifyDataSetChanged(); + return; + } + List newItems = new ArrayList<>(); + for(Site site : allItems) { + if (site.getName().toLowerCase().contains(keyword.toLowerCase())) newItems.add(site); + } + this.mItems = newItems; + notifyDataSetChanged(); + } + public interface OnClickListener { void onTextClick(Site item); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SiteDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SiteDialog.java index 6e26ce570..526a49aa3 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SiteDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SiteDialog.java @@ -1,7 +1,10 @@ package com.fongmi.android.tv.ui.dialog; import android.app.Activity; +import android.text.Editable; import android.view.LayoutInflater; +import android.view.View; +import android.view.inputmethod.EditorInfo; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; @@ -11,6 +14,7 @@ import com.fongmi.android.tv.bean.Site; import com.fongmi.android.tv.databinding.DialogSiteBinding; import com.fongmi.android.tv.impl.SiteCallback; import com.fongmi.android.tv.ui.adapter.SiteAdapter; +import com.fongmi.android.tv.ui.custom.CustomTextListener; import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -63,6 +67,7 @@ public class SiteDialog implements SiteAdapter.OnClickListener { public void show() { setRecyclerView(); + setSearchView(); setDialog(); } @@ -80,6 +85,26 @@ public class SiteDialog implements SiteAdapter.OnClickListener { dialog.show(); } + private void setSearchView() { + binding.keyword.setOnEditorActionListener((textView, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) searchSite(); + return true; + }); + binding.keyword.addTextChangedListener(new CustomTextListener() { + @Override + public void afterTextChanged(Editable s) { + searchSite(); + } + }); + binding.search.setOnClickListener(v -> searchSite()); + if (adapter.getItemCount() < 10) binding.searchInput.setVisibility(View.GONE); + } + + private void searchSite() { + String keyword = binding.keyword.getText().toString().trim(); + adapter.keyword(keyword); + } + @Override public void onTextClick(Site item) { if (callback == null) return; diff --git a/app/src/mobile/res/drawable/search_item_round.xml b/app/src/mobile/res/drawable/search_item_round.xml new file mode 100644 index 000000000..f88271c7e --- /dev/null +++ b/app/src/mobile/res/drawable/search_item_round.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/mobile/res/drawable/site_cursor.xml b/app/src/mobile/res/drawable/site_cursor.xml new file mode 100644 index 000000000..fdce2018a --- /dev/null +++ b/app/src/mobile/res/drawable/site_cursor.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/mobile/res/layout/dialog_site.xml b/app/src/mobile/res/layout/dialog_site.xml index fb114fe81..8a8c02013 100644 --- a/app/src/mobile/res/layout/dialog_site.xml +++ b/app/src/mobile/res/layout/dialog_site.xml @@ -1,9 +1,68 @@ - \ No newline at end of file + android:orientation="vertical"> + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/catvod/src/main/java/com/github/catvod/utils/Util.java b/catvod/src/main/java/com/github/catvod/utils/Util.java index a72c301fc..073f8812c 100644 --- a/catvod/src/main/java/com/github/catvod/utils/Util.java +++ b/catvod/src/main/java/com/github/catvod/utils/Util.java @@ -24,7 +24,7 @@ import java.util.Enumeration; public class Util { - public static final String CHROME = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"; + public static final String CHROME = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"; public static final int URL_SAFE = Base64.DEFAULT | Base64.URL_SAFE | Base64.NO_WRAP; public static String base64(String s) {