From 79b0955affa393f6d9b25c6a0c2ccae9877d335f Mon Sep 17 00:00:00 2001 From: FongMi Date: Thu, 23 Feb 2023 01:45:42 +0800 Subject: [PATCH] Support rotate lock --- .../com/fongmi/android/tv/utils/Prefers.java | 8 ++++ .../tv/ui/activity/DetailActivity.java | 15 +++++++- .../android/tv/ui/fragment/VodFragment.java | 38 ++++++++++--------- .../mobile/res/drawable/ic_lock_rotate.xml | 10 +++++ .../mobile/res/layout/view_control_vod.xml | 8 ++++ 5 files changed, 60 insertions(+), 19 deletions(-) create mode 100644 app/src/mobile/res/drawable/ic_lock_rotate.xml 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 0496b20dd..76b40887a 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 @@ -163,6 +163,14 @@ public class Prefers { put("across", across); } + public static boolean isRotate() { + return getBoolean("rotate", true); + } + + public static void putRotate(boolean rotate) { + put("rotate", rotate); + } + public static boolean getUpdate() { return getBoolean("update", true); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 8daea86b1..b2ec1ff4f 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -51,6 +51,7 @@ import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.Traffic; import com.fongmi.android.tv.utils.Utils; +import com.github.bassaer.library.MDColor; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.ui.StyledPlayerView; @@ -191,6 +192,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis setVideoView(); setViewModel(); showProgress(); + getRotate(); getDetail(); } @@ -208,6 +210,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.control.scale.setOnClickListener(view -> onScale()); mBinding.control.speed.setOnClickListener(view -> onSpeed()); mBinding.control.reset.setOnClickListener(view -> onReset()); + mBinding.control.rotate.setOnClickListener(view -> onRotate()); mBinding.control.player.setOnClickListener(view -> onPlayer()); mBinding.control.decode.setOnClickListener(view -> onDecode()); mBinding.control.ending.setOnClickListener(view -> onEnding()); @@ -276,6 +279,11 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis }); } + private void getRotate() { + mBinding.control.rotate.getDrawable().setTint(Prefers.isRotate() ? MDColor.YELLOW_500 : MDColor.WHITE); + setRotate(); + } + private void getDetail() { mBinding.progressLayout.showProgress(); mViewModel.detailContent(getKey(), getId()); @@ -474,6 +482,11 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis return true; } + private void onRotate() { + Prefers.putRotate(!Prefers.isRotate()); + getRotate(); + } + private void onPlayer() { mPlayers.togglePlayer(); Prefers.putPlayer(mPlayers.getPlayer()); @@ -610,7 +623,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void setRotate() { - setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER); + setRequestedOrientation(Prefers.isRotate() ? ActivityInfo.SCREEN_ORIENTATION_FULL_USER : ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); } private void setR1Callback() { 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 e6676606d..1288d8bbd 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 @@ -12,7 +12,6 @@ import androidx.fragment.app.FragmentStatePagerAdapter; 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; @@ -42,19 +41,18 @@ import java.util.List; public class VodFragment extends BaseFragment implements SiteCallback, FilterCallback, TypeAdapter.OnClickListener { private FragmentVodBinding mBinding; - private TypeAdapter mTypeAdapter; - private PageAdapter mPageAdapter; + private TypeAdapter mAdapter; public static VodFragment newInstance() { return new VodFragment(); } private HomeFragment getHomeFragment() { - return (HomeFragment) mPageAdapter.instantiateItem(mBinding.pager, 0); + return (HomeFragment) mBinding.pager.getAdapter().instantiateItem(mBinding.pager, 0); } private TypeFragment getTypeFragment() { - return (TypeFragment) mPageAdapter.instantiateItem(mBinding.pager, mBinding.pager.getCurrentItem()); + return (TypeFragment) mBinding.pager.getAdapter().instantiateItem(mBinding.pager, mBinding.pager.getCurrentItem()); } private Site getSite() { @@ -81,9 +79,9 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal mBinding.pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { - setFabVisible(mTypeAdapter.get(mBinding.pager.getCurrentItem()).getFilters().size() > 0); + setFabVisible(mAdapter.get(mBinding.pager.getCurrentItem()).getFilters().size() > 0); mBinding.type.smoothScrollToPosition(position); - mTypeAdapter.setActivated(position); + mAdapter.setActivated(position); } }); } @@ -91,7 +89,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal private void setRecyclerView() { mBinding.type.setHasFixedSize(true); mBinding.type.setItemAnimator(null); - mBinding.type.setAdapter(mTypeAdapter = new TypeAdapter(this)); + mBinding.type.setAdapter(mAdapter = new TypeAdapter(this)); } private void setFabVisible(boolean filter) { @@ -115,7 +113,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal 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); + FilterDialog.create(this).filter(mAdapter.get(mBinding.pager.getCurrentItem()).getFilters()).show(getChildFragmentManager(), null); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -124,8 +122,8 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal } private void homeContent() { - mTypeAdapter.clear(); - mBinding.pager.setAdapter(mPageAdapter = new PageAdapter(getChildFragmentManager())); + mAdapter.clear(); + mBinding.pager.setAdapter(new PageAdapter(getChildFragmentManager())); mBinding.title.setText(getSite().getName().isEmpty() ? getString(R.string.app_name) : getSite().getName()); } @@ -143,8 +141,8 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal @Override public void onItemClick(int position, Class item) { - mTypeAdapter.setActivated(position); mBinding.pager.setCurrentItem(position); + mAdapter.setActivated(position); } @Override @@ -161,10 +159,14 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal } public void setAdapter(Result result) { - result.setTypes(getTypes(result)); - mTypeAdapter.addAll(result.getTypes()); - for (Class item : mTypeAdapter.getTypes()) if (result.getFilters().containsKey(item.getTypeId())) item.setFilters(result.getFilters().get(item.getTypeId())); - App.post(() -> mPageAdapter.notifyDataSetChanged()); + try { + result.setTypes(getTypes(result)); + mAdapter.addAll(result.getTypes()); + for (Class item : mAdapter.getTypes()) if (result.getFilters().containsKey(item.getTypeId())) item.setFilters(result.getFilters().get(item.getTypeId())); + mBinding.pager.getAdapter().notifyDataSetChanged(); + } catch (Exception e) { + e.printStackTrace(); + } } public boolean canBack() { @@ -191,14 +193,14 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal @NonNull @Override public Fragment getItem(int position) { - Class type = mTypeAdapter.get(position); + Class type = mAdapter.get(position); if (position == 0) return HomeFragment.newInstance(); return TypeFragment.newInstance(type.getTypeId(), type.getTypeFlag().equals("1")); } @Override public int getCount() { - return mTypeAdapter.getItemCount(); + return mAdapter.getItemCount(); } @Override diff --git a/app/src/mobile/res/drawable/ic_lock_rotate.xml b/app/src/mobile/res/drawable/ic_lock_rotate.xml new file mode 100644 index 000000000..74b4dbf27 --- /dev/null +++ b/app/src/mobile/res/drawable/ic_lock_rotate.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/mobile/res/layout/view_control_vod.xml b/app/src/mobile/res/layout/view_control_vod.xml index 7a156dcc5..e643f0996 100644 --- a/app/src/mobile/res/layout/view_control_vod.xml +++ b/app/src/mobile/res/layout/view_control_vod.xml @@ -181,6 +181,14 @@ android:layout_marginEnd="6dp" android:layout_weight="1" /> + +