[mobile] site search

pull/529/head
okjack 1 year ago
parent e684258b23
commit 5172ce9754
  1. 20
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/SiteAdapter.java
  2. 25
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/SiteDialog.java
  3. 24
      app/src/mobile/res/drawable/search_item_round.xml
  4. 9
      app/src/mobile/res/drawable/site_cursor.xml
  5. 67
      app/src/mobile/res/layout/dialog_site.xml
  6. 2
      catvod/src/main/java/com/github/catvod/utils/Util.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<SiteAdapter.ViewHolder> {
private final OnClickListener mListener;
private final List<Site> mItems;
private List<Site> mItems;
private final List<Site> 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<SiteAdapter.ViewHolder> {
return this;
}
public void keyword(String keyword) {
if (TextUtils.isEmpty(keyword)) {
this.mItems = allItems;
notifyDataSetChanged();
return;
}
List<Site> 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);

@ -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;

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<corners android:radius="28dp" />
<solid android:color="@color/white_10" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="28dp" />
<stroke
android:width="1dp"
android:color="?attr/colorOutline" />
<padding
android:bottom="8dp"
android:left="12dp"
android:right="12dp"
android:top="8dp" />
</shape>
</item>
</ripple>

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size android:width="2dp" />
<solid android:color="@color/control" />
</shape>

@ -1,9 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<com.fongmi.android.tv.ui.custom.CustomRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/recycler"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="24dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:maxHeight="376dp" />
android:orientation="vertical">
<LinearLayout
android:id="@+id/searchInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:layout_marginBottom="13dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="10dp"
android:background="@drawable/search_item_round"
android:orientation="horizontal"
android:visibility="visible">
<EditText
android:id="@+id/keyword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@null"
android:hint="@string/search_keyword"
android:imeOptions="actionDone"
android:inputType="textCapWords|textAutoCorrect|textAutoComplete"
android:letterSpacing="0.02"
android:maxLength="255"
android:singleLine="true"
android:gravity="center_horizontal"
android:layout_marginEnd="4dp"
android:textColor="@color/control"
android:textCursorDrawable="@drawable/site_cursor"
android:textSize="14sp"
tools:ignore="NestedWeights"
tools:text="狂飆" />
</LinearLayout>
<ImageView
android:id="@+id/search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:scaleType="fitCenter"
android:src="@drawable/ic_site_search" />
</LinearLayout>
<com.fongmi.android.tv.ui.custom.CustomRecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:maxHeight="380dp" />
</LinearLayout>

@ -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) {

Loading…
Cancel
Save