From 43b3584a56308e2fae8047115b89b2a237000948 Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 21 Feb 2023 14:11:18 +0800 Subject: [PATCH] [mobile] fix alist back and optimize fragment --- .../java/com/fongmi/android/tv/Product.java | 4 ++ .../android/tv/ui/fragment/VodFragment.java | 8 ++-- .../fongmi/android/tv/event/RefreshEvent.java | 6 +-- .../android/tv/ui/activity/BaseFragment.java | 22 ---------- .../com/fongmi/android/tv/utils/Prefers.java | 4 -- .../java/com/fongmi/android/tv/Product.java | 6 +++ .../android/tv/ui/activity/MainActivity.java | 4 +- .../android/tv/ui/adapter/TypeAdapter.java | 2 +- .../android/tv/ui/fragment/VodFragment.java | 32 ++++++++------ .../tv/ui/fragment/child/SiteFragment.java | 44 +++++-------------- .../tv/ui/fragment/child/TypeFragment.java | 20 ++++----- 11 files changed, 57 insertions(+), 95 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/Product.java b/app/src/leanback/java/com/fongmi/android/tv/Product.java index 3d75d9815..c4ea02588 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/Product.java +++ b/app/src/leanback/java/com/fongmi/android/tv/Product.java @@ -14,4 +14,8 @@ public class Product { return resources; } } + + public static int getColumn() { + return Math.abs(getSize() - 7); + } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index ad541bc8a..5e05f01e9 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -192,12 +192,10 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback getVideo(typeId, "1"); } - public boolean canGoBack() { - return mTypeIds.size() > 1; - } - - public void goBack() { + public boolean canBack() { + if (mTypeIds.size() == 0) return true; refresh(2); + return false; } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java b/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java index f17dec71c..ef2cd8d0f 100644 --- a/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java +++ b/app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java @@ -30,10 +30,6 @@ public class RefreshEvent { EventBus.getDefault().post(new RefreshEvent(Type.WALL)); } - public static void empty() { - EventBus.getDefault().post(new RefreshEvent(Type.EMPTY)); - } - private RefreshEvent(Type type) { this.type = type; } @@ -43,6 +39,6 @@ public class RefreshEvent { } public enum Type { - IMAGE, VIDEO, HISTORY, KEEP, SIZE, WALL, EMPTY + IMAGE, VIDEO, HISTORY, KEEP, SIZE, WALL } } diff --git a/app/src/main/java/com/fongmi/android/tv/ui/activity/BaseFragment.java b/app/src/main/java/com/fongmi/android/tv/ui/activity/BaseFragment.java index 18b4afb13..91b81bbe6 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/activity/BaseFragment.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/activity/BaseFragment.java @@ -10,21 +10,10 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.viewbinding.ViewBinding; -import com.fongmi.android.tv.event.RefreshEvent; -import com.fongmi.android.tv.utils.ResUtil; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - public abstract class BaseFragment extends Fragment { protected abstract ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container); - protected int getSpanCount() { - return ResUtil.isPort() ? 3 : 6; - } - @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -33,7 +22,6 @@ public abstract class BaseFragment extends Fragment { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - EventBus.getDefault().register(this); initView(); initEvent(); } @@ -43,14 +31,4 @@ public abstract class BaseFragment extends Fragment { protected void initEvent() { } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onRefreshEvent(RefreshEvent event) { - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - EventBus.getDefault().unregister(this); - } } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java b/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java index 14c1f5ba4..0496b20dd 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java @@ -174,8 +174,4 @@ public class Prefers { public static float getThumbnail() { return 0.3f * getQuality() + 0.4f; } - - public static int getColumn() { - return Math.abs(getSize() - 7); - } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/Product.java b/app/src/mobile/java/com/fongmi/android/tv/Product.java index 316acd3c8..ed7a8b868 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/Product.java +++ b/app/src/mobile/java/com/fongmi/android/tv/Product.java @@ -2,9 +2,15 @@ package com.fongmi.android.tv; import android.content.res.Resources; +import com.fongmi.android.tv.utils.ResUtil; + public class Product { public static Resources hackResources(Resources resources) { return resources; } + + public static int getColumn() { + return ResUtil.isPort() ? 3 : 6; + } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java index e3621f7f5..5a9b348b9 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java @@ -37,6 +37,7 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt @Override protected void initView() { + Notify.progress(this); Updater.get().start(); Server.get().start(); initFragment(); @@ -67,12 +68,13 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt @Override public void success() { RefreshEvent.video(); + Notify.dismiss(); } @Override public void error(int resId) { - RefreshEvent.empty(); Notify.show(resId); + Notify.dismiss(); } }; } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java index dc8b711d3..71f402bcd 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java @@ -19,7 +19,7 @@ public class TypeAdapter extends RecyclerView.Adapter { public TypeAdapter(OnClickListener listener) { this.mListener = listener; - this.mItems = new ArrayList<>(List.of(home())); + this.mItems = new ArrayList<>(); } public interface OnClickListener { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index 10754a0b1..3b26a46f7 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -13,7 +13,6 @@ import androidx.lifecycle.ViewModelProvider; import androidx.viewbinding.ViewBinding; import androidx.viewpager.widget.ViewPager; -import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.bean.Class; @@ -30,7 +29,6 @@ import com.fongmi.android.tv.ui.custom.dialog.FilterDialog; import com.fongmi.android.tv.ui.custom.dialog.SiteDialog; import com.fongmi.android.tv.ui.fragment.child.SiteFragment; import com.fongmi.android.tv.ui.fragment.child.TypeFragment; -import com.fongmi.android.tv.utils.ResUtil; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -61,6 +59,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal @Override protected void initView() { + EventBus.getDefault().register(this); setRecyclerView(); setViewModel(); } @@ -82,8 +81,8 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal private void setRecyclerView() { mBinding.type.setHasFixedSize(true); mBinding.type.setItemAnimator(null); - mBinding.pager.setOffscreenPageLimit(-1); mBinding.type.setAdapter(mTypeAdapter = new TypeAdapter(this)); + mBinding.pager.setOffscreenPageLimit(-1); } private void setViewModel() { @@ -103,9 +102,8 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal Boolean filter = getSite().isFilterable() ? false : null; for (Class item : mTypeAdapter.getTypes()) if (result.getFilters().containsKey(item.getTypeId())) item.setFilter(filter); for (Class item : mTypeAdapter.getTypes()) if (result.getFilters().containsKey(item.getTypeId())) item.setFilters(result.getFilters().get(item.getTypeId())); - mBinding.pager.setAdapter(mPageAdapter = new PageAdapter(getChildFragmentManager())); - EventBus.getDefault().post(result); - mBinding.pager.setCurrentItem(0); + getSiteFragment().showContent(result); + mPageAdapter.notifyDataSetChanged(); } private void setFilter() { @@ -127,7 +125,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal @Override public void setSite(Site item) { ApiConfig.get().setHome(item); - RefreshEvent.video(); + homeContent(); } @Override @@ -144,20 +142,20 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal @Subscribe(threadMode = ThreadMode.MAIN) public void onRefreshEvent(RefreshEvent event) { switch (event.getType()) { + case HISTORY: + getSiteFragment().getHistory(); + break; case VIDEO: homeContent(); break; - case EMPTY: - App.post(() -> EventBus.getDefault().post(Result.empty()), 250); - break; } } private void homeContent() { mTypeAdapter.clear(); String home = getSite().getName(); - if (mPageAdapter != null) mPageAdapter.notifyDataSetChanged(); - mBinding.title.setText(home.isEmpty() ? ResUtil.getString(R.string.app_name) : home); + mBinding.title.setText(home.isEmpty() ? getString(R.string.app_name) : home); + mBinding.pager.setAdapter(mPageAdapter = new PageAdapter(getChildFragmentManager())); if (!getSite().getKey().isEmpty()) mViewModel.homeContent(); } @@ -171,13 +169,19 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal public boolean canBack() { try { - if (mBinding.pager.getCurrentItem() > 0) return true; - return getSiteFragment().canBack(); + if (mBinding.pager.getCurrentItem() == 0) return getSiteFragment().canBack(); + else return getTypeFragment().canBack(); } catch (Exception e) { return true; } } + @Override + public void onDestroyView() { + super.onDestroyView(); + EventBus.getDefault().unregister(this); + } + class PageAdapter extends FragmentStatePagerAdapter { public PageAdapter(@NonNull FragmentManager fm) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/SiteFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/SiteFragment.java index bebfc3b08..72fbe1185 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/SiteFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/SiteFragment.java @@ -9,19 +9,16 @@ import androidx.annotation.Nullable; import androidx.recyclerview.widget.GridLayoutManager; import androidx.viewbinding.ViewBinding; +import com.fongmi.android.tv.Product; import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.bean.Vod; import com.fongmi.android.tv.databinding.FragmentSiteBinding; -import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.ui.activity.BaseFragment; import com.fongmi.android.tv.ui.activity.DetailActivity; import com.fongmi.android.tv.ui.adapter.HistoryAdapter; import com.fongmi.android.tv.ui.adapter.VodAdapter; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - public class SiteFragment extends BaseFragment implements VodAdapter.OnClickListener, HistoryAdapter.OnClickListener { private GridLayoutManager mRecommendManager; @@ -43,22 +40,28 @@ public class SiteFragment extends BaseFragment implements VodAdapter.OnClickList protected void initView() { mBinding.progressLayout.showProgress(); setRecyclerView(); + getHistory(); } private void setRecyclerView() { mBinding.history.setHasFixedSize(true); mBinding.history.getItemAnimator().setChangeDuration(0); - mBinding.history.setLayoutManager(mHistoryManager = new GridLayoutManager(getContext(), getSpanCount())); + mBinding.history.setLayoutManager(mHistoryManager = new GridLayoutManager(getContext(), Product.getColumn())); mBinding.history.setAdapter(mHistoryAdapter = new HistoryAdapter(this)); mBinding.recommend.setHasFixedSize(true); - mBinding.recommend.setLayoutManager(mRecommendManager = new GridLayoutManager(getContext(), getSpanCount())); + mBinding.recommend.setLayoutManager(mRecommendManager = new GridLayoutManager(getContext(), Product.getColumn())); mBinding.recommend.setAdapter(mVodAdapter = new VodAdapter(this)); } - private void getHistory() { + public void getHistory() { mHistoryAdapter.addAll(History.get()); } + public void showContent(Result result) { + mBinding.progressLayout.showContent(); + mVodAdapter.addAll(result.getList()); + } + @Override public void onItemClick(Vod item) { if (item.shouldSearch()) onLongClick(item); @@ -101,33 +104,10 @@ public class SiteFragment extends BaseFragment implements VodAdapter.OnClickList return false; } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onResult(Result result) { - mBinding.progressLayout.showContent(); - mVodAdapter.addAll(result.getList()); - getHistory(); - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onRefreshEvent(RefreshEvent event) { - switch (event.getType()) { - case VIDEO: - mVodAdapter.clear(); - mBinding.progressLayout.showProgress(); - break; - case IMAGE: - mVodAdapter.notifyDataSetChanged(); - break; - case HISTORY: - getHistory(); - break; - } - } - @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); - mHistoryManager.setSpanCount(getSpanCount()); - mRecommendManager.setSpanCount(getSpanCount()); + mHistoryManager.setSpanCount(Product.getColumn()); + mRecommendManager.setSpanCount(Product.getColumn()); } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java index 760670c79..8ff6cf5f6 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java @@ -11,19 +11,16 @@ import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.GridLayoutManager; import androidx.viewbinding.ViewBinding; +import com.fongmi.android.tv.Product; import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.bean.Vod; import com.fongmi.android.tv.databinding.FragmentTypeBinding; -import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.model.SiteViewModel; import com.fongmi.android.tv.ui.activity.BaseFragment; import com.fongmi.android.tv.ui.activity.DetailActivity; import com.fongmi.android.tv.ui.adapter.VodAdapter; import com.fongmi.android.tv.ui.custom.CustomScroller; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -79,7 +76,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac private void setRecyclerView() { mBinding.recycler.setHasFixedSize(true); mBinding.recycler.setAdapter(mVodAdapter = new VodAdapter(this)); - mBinding.recycler.setLayoutManager(mGridLayoutManager = new GridLayoutManager(getContext(), getSpanCount())); + mBinding.recycler.setLayoutManager(mGridLayoutManager = new GridLayoutManager(getContext(), Product.getColumn())); } private void setViewModel() { @@ -116,6 +113,12 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac getVideo(typeId, "1"); } + public boolean canBack() { + if (mTypeIds.size() == 0) return true; + refresh(2); + return false; + } + @Override public void onLoadMore(String page) { if (isFolder()) return; @@ -142,14 +145,9 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac return true; } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onRefreshEvent(RefreshEvent event) { - if (event.getType() == RefreshEvent.Type.IMAGE) mVodAdapter.notifyDataSetChanged(); - } - @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); - mGridLayoutManager.setSpanCount(getSpanCount()); + mGridLayoutManager.setSpanCount(Product.getColumn()); } }