[mobile] fix alist back and optimize fragment

pull/123/head
FongMi 3 years ago
parent 3dbd068221
commit 43b3584a56
  1. 4
      app/src/leanback/java/com/fongmi/android/tv/Product.java
  2. 8
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  3. 6
      app/src/main/java/com/fongmi/android/tv/event/RefreshEvent.java
  4. 22
      app/src/main/java/com/fongmi/android/tv/ui/activity/BaseFragment.java
  5. 4
      app/src/main/java/com/fongmi/android/tv/utils/Prefers.java
  6. 6
      app/src/mobile/java/com/fongmi/android/tv/Product.java
  7. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java
  8. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java
  9. 32
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  10. 44
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/SiteFragment.java
  11. 20
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java

@ -14,4 +14,8 @@ public class Product {
return resources;
}
}
public static int getColumn() {
return Math.abs(getSize() - 7);
}
}

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

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

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

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

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

@ -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();
}
};
}

@ -19,7 +19,7 @@ public class TypeAdapter extends RecyclerView.Adapter<TypeAdapter.ViewHolder> {
public TypeAdapter(OnClickListener listener) {
this.mListener = listener;
this.mItems = new ArrayList<>(List.of(home()));
this.mItems = new ArrayList<>();
}
public interface OnClickListener {

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

@ -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());
}
}

@ -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());
}
}

Loading…
Cancel
Save