[mobile] fix fab show hide

pull/123/head
FongMi 3 years ago
parent 77c04f34c8
commit dcd7174532
  1. 20
      app/src/main/java/com/fongmi/android/tv/utils/Utils.java
  2. 46
      app/src/mobile/java/com/fongmi/android/tv/ui/custom/CustomFabBehavior.java
  3. 35
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  4. 11
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/HomeFragment.java
  5. 12
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java

@ -22,6 +22,7 @@ import androidx.fragment.app.FragmentActivity;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.server.Server;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.permissionx.guolindev.PermissionX;
import java.math.BigInteger;
@ -79,6 +80,25 @@ public class Utils {
activity.getWindow().getDecorView().setSystemUiVisibility(flags);
}
public static void toggleFab(int dy, FloatingActionButton fab) {
if (dy > 0) Utils.hideFab(fab);
else Utils.showFab(fab);
}
public static void showFab(FloatingActionButton fab) {
if (fab.getVisibility() == View.INVISIBLE) fab.show();
}
public static void hideFab(FloatingActionButton fab) {
if (fab.getVisibility() != View.VISIBLE) return;
fab.hide(new FloatingActionButton.OnVisibilityChangedListener() {
@Override
public void onHidden(FloatingActionButton fab) {
fab.setVisibility(View.INVISIBLE);
}
});
}
public static boolean hasPIP() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && App.get().getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE);
}

@ -1,46 +0,0 @@
package com.fongmi.android.tv.ui.custom;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.view.ViewCompat;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
public class CustomFabBehavior extends FloatingActionButton.Behavior {
public CustomFabBehavior() {
super();
}
public CustomFabBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull FloatingActionButton child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) {
return axes == ViewCompat.SCROLL_AXIS_VERTICAL || super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, axes, type);
}
@Override
public void onNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull FloatingActionButton child, @NonNull View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type, @NonNull int[] consumed) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type, consumed);
if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
onHide(child);
} else if (dyConsumed < 0 && child.getVisibility() == View.INVISIBLE) {
child.show();
}
}
private void onHide(FloatingActionButton child) {
child.hide(new FloatingActionButton.OnVisibilityChangedListener() {
@Override
public void onHidden(FloatingActionButton fab) {
child.setVisibility(View.INVISIBLE);
}
});
}
}

@ -30,6 +30,7 @@ import com.fongmi.android.tv.ui.custom.dialog.LinkDialog;
import com.fongmi.android.tv.ui.custom.dialog.SiteDialog;
import com.fongmi.android.tv.ui.fragment.child.HomeFragment;
import com.fongmi.android.tv.ui.fragment.child.TypeFragment;
import com.fongmi.android.tv.utils.Utils;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import org.greenrobot.eventbus.EventBus;
@ -50,6 +51,14 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
return new VodFragment();
}
private HomeFragment getHomeFragment() {
return (HomeFragment) mPageAdapter.instantiateItem(mBinding.pager, 0);
}
private TypeFragment getTypeFragment() {
return (TypeFragment) mPageAdapter.instantiateItem(mBinding.pager, mBinding.pager.getCurrentItem());
}
private Site getSite() {
return ApiConfig.get().getHome();
}
@ -105,7 +114,7 @@ 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()));
getSiteFragment().showContent(result);
getHomeFragment().showContent(result);
mPageAdapter.notifyDataSetChanged();
}
@ -117,8 +126,8 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
private void setFabVisible(boolean filter) {
if (filter) {
mBinding.link.hide();
mBinding.filter.show();
mBinding.link.hide();
} else {
mBinding.filter.hide();
mBinding.link.show();
@ -129,16 +138,16 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
SiteDialog.create(this).filter(true).show();
}
private void onFilter(View view) {
for (Fragment fragment : getChildFragmentManager().getFragments()) if (fragment instanceof BottomSheetDialogFragment) return;
FilterDialog.create(this).filter(mTypeAdapter.get(mBinding.pager.getCurrentItem()).getFilters()).show(getChildFragmentManager(), null);
}
private void onLink(View view) {
if (ApiConfig.hasPush()) LinkDialog.create(this).show();
else mBinding.link.hide();
}
private void onFilter(View view) {
for (Fragment fragment : getChildFragmentManager().getFragments()) if (fragment instanceof BottomSheetDialogFragment) return;
FilterDialog.create(this).filter(mTypeAdapter.get(mBinding.pager.getCurrentItem()).getFilters()).show(getChildFragmentManager(), null);
}
@Override
public void setSite(Site item) {
ApiConfig.get().setHome(item);
@ -160,7 +169,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
public void onRefreshEvent(RefreshEvent event) {
switch (event.getType()) {
case HISTORY:
getSiteFragment().getHistory();
getHomeFragment().getHistory();
break;
case VIDEO:
homeContent();
@ -176,17 +185,17 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
if (!getSite().getKey().isEmpty()) mViewModel.homeContent();
}
private HomeFragment getSiteFragment() {
return (HomeFragment) mPageAdapter.instantiateItem(mBinding.pager, 0);
public void toggleLink(int dy) {
Utils.toggleFab(dy, mBinding.link);
}
private TypeFragment getTypeFragment() {
return (TypeFragment) mPageAdapter.instantiateItem(mBinding.pager, mBinding.pager.getCurrentItem());
public void toggleFilter(int dy) {
Utils.toggleFab(dy, mBinding.filter);
}
public boolean canBack() {
try {
if (mBinding.pager.getCurrentItem() == 0) return getSiteFragment().canBack();
if (mBinding.pager.getCurrentItem() == 0) return getHomeFragment().canBack();
else return getTypeFragment().canBack();
} catch (Exception e) {
return true;

@ -6,6 +6,7 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.widget.NestedScrollView;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.viewbinding.ViewBinding;
@ -19,6 +20,7 @@ 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 com.fongmi.android.tv.ui.fragment.VodFragment;
public class HomeFragment extends BaseFragment implements VodAdapter.OnClickListener, HistoryAdapter.OnClickListener {
@ -32,6 +34,10 @@ public class HomeFragment extends BaseFragment implements VodAdapter.OnClickList
return new HomeFragment();
}
private VodFragment getParent() {
return (VodFragment) getParentFragment();
}
@Override
protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
return mBinding = FragmentHomeBinding.inflate(inflater, container, false);
@ -44,6 +50,11 @@ public class HomeFragment extends BaseFragment implements VodAdapter.OnClickList
getHistory();
}
@Override
protected void initEvent() {
mBinding.getRoot().setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> getParent().toggleLink(scrollY - oldScrollY));
}
private void setRecyclerView() {
mBinding.history.setHasFixedSize(true);
mBinding.history.getItemAnimator().setChangeDuration(0);

@ -9,6 +9,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.Product;
@ -20,6 +21,7 @@ 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 com.fongmi.android.tv.ui.fragment.VodFragment;
import java.util.ArrayList;
import java.util.HashMap;
@ -44,6 +46,10 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
return fragment;
}
private VodFragment getParent() {
return (VodFragment) getParentFragment();
}
private String getTypeId() {
return getArguments().getString("typeId");
}
@ -71,6 +77,12 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
@Override
protected void initEvent() {
mBinding.recycler.addOnScrollListener(mScroller = new CustomScroller(this));
mBinding.recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
getParent().toggleFilter(dy);
}
});
}
private void setRecyclerView() {

Loading…
Cancel
Save