From af33fc7df58e9c29825fd95d630729e01e64390d Mon Sep 17 00:00:00 2001 From: jhengazuki Date: Mon, 27 Oct 2025 18:28:30 +0800 Subject: [PATCH] Optimize search site width --- .../tv/ui/adapter/BaseDiffAdapter.java | 4 ++ .../tv/ui/fragment/CollectFragment.java | 51 +++++++------------ .../mobile/res/layout/fragment_collect.xml | 3 +- 3 files changed, 23 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java b/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java index 84a2f1d18..90459dddc 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java @@ -55,6 +55,10 @@ public abstract class BaseDiffAdapter, VH extends Recycler else differ.submitList(newItems, () -> callback.onUpdateFinished(true)); } + public void add(T item) { + add(item, null); + } + public void add(T item, Runnable runnable) { List current = new ArrayList<>(getItems()); current.add(item); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java index a705bd81c..350522d2e 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java @@ -1,6 +1,5 @@ package com.fongmi.android.tv.ui.fragment; -import android.animation.ValueAnimator; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; @@ -44,8 +43,7 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle private CustomScroller mScroller; private SiteViewModel mViewModel; private PauseExecutor mExecutor; - private ValueAnimator mAnimator; - private int maxWidth; + private List sites; public static CollectFragment newInstance(String keyword) { Bundle args = new Bundle(); @@ -76,11 +74,11 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle @Override protected void initView() { - maxWidth = ResUtil.getScreenWidth() / (getCount() + 1) - ResUtil.dp2px(32); mScroller = new CustomScroller(this); setRecyclerView(); setViewModel(); - setAnimator(); + setSites(); + setWidth(); search(); } @@ -100,23 +98,25 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle mViewModel.result.observe(this, this::setSearch); } - private void setAnimator() { - mAnimator = new ValueAnimator(); - mAnimator.addUpdateListener(animation -> { - ViewGroup.LayoutParams params = mBinding.collect.getLayoutParams(); - params.width = (Integer) animation.getAnimatedValue(); - mBinding.collect.setLayoutParams(params); - }); + private void setSites() { + sites = new ArrayList<>(); + for (Site site : VodConfig.get().getSites()) if (site.isSearchable()) sites.add(site); } - private List getSites() { - List items = new ArrayList<>(); - for (Site site : VodConfig.get().getSites()) if (site.isSearchable()) items.add(site); - return items; + private void setWidth() { + int width = 0; + int space = ResUtil.dp2px(48); + int maxWidth = ResUtil.getScreenWidth() / (getCount() + 1) - ResUtil.dp2px(32); + for (Site site : sites) width = Math.max(width, ResUtil.getTextWidth(site.getName(), 14)); + int contentWidth = width + space; + int minWidth = ResUtil.dp2px(120); + int finalWidth = Math.max(minWidth, Math.min(contentWidth, maxWidth)); + ViewGroup.LayoutParams params = mBinding.collect.getLayoutParams(); + params.width = finalWidth; + mBinding.collect.setLayoutParams(params); } private void search() { - List sites = getSites(); if (sites.isEmpty()) return; if (mExecutor != null) mExecutor.shutdownNow(); mExecutor = new PauseExecutor(20, sites.size()); @@ -141,25 +141,10 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle private void setCollect(Result result) { if (result == null) return; if (mCollectAdapter.getPosition() == 0) mSearchAdapter.addAll(result.getList()); - mCollectAdapter.add(Collect.create(result.getList()), this::setWidth); + mCollectAdapter.add(Collect.create(result.getList())); mCollectAdapter.add(result.getList()); } - private void setWidth() { - int maxTextWidth = 0; - int space = ResUtil.dp2px(48); - for (Collect item : mCollectAdapter.getItems()) maxTextWidth = Math.max(maxTextWidth, ResUtil.getTextWidth(item.getSite().getName(), 14)); - int contentWidth = maxTextWidth + space; - int minWidth = ResUtil.dp2px(120); - int finalWidth = Math.max(minWidth, Math.min(contentWidth, maxWidth)); - int startWidth = mBinding.collect.getWidth(); - if (finalWidth == startWidth) return; - if (mAnimator.isRunning()) mAnimator.cancel(); - mAnimator.setIntValues(startWidth, finalWidth); - mAnimator.setDuration(300); - mAnimator.start(); - } - private void setSearch(Result result) { if (result == null) return; boolean same = !result.getList().isEmpty() && mCollectAdapter.getActivated().getSite().equals(result.getList().get(0).getSite()); diff --git a/app/src/mobile/res/layout/fragment_collect.xml b/app/src/mobile/res/layout/fragment_collect.xml index 47fd39244..e88c20249 100644 --- a/app/src/mobile/res/layout/fragment_collect.xml +++ b/app/src/mobile/res/layout/fragment_collect.xml @@ -20,12 +20,11 @@