From 9b22bab3ee00fbd9c8eca46d887f9f0f74688f71 Mon Sep 17 00:00:00 2001 From: jhengazuki Date: Tue, 16 Sep 2025 12:27:14 +0800 Subject: [PATCH] Fix bug --- .../com/fongmi/android/tv/utils/Util.java | 29 +++++++++++++++---- .../android/tv/ui/activity/VideoActivity.java | 7 +---- .../tv/ui/dialog/EpisodeListDialog.java | 23 +++++++++++++-- 3 files changed, 45 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Util.java b/app/src/main/java/com/fongmi/android/tv/utils/Util.java index 3e8b02a76..1e623f839 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Util.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Util.java @@ -16,6 +16,8 @@ import android.text.Html; import android.text.TextUtils; import android.view.View; import android.view.Window; +import android.view.WindowInsets; +import android.view.WindowInsetsController; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; @@ -38,17 +40,32 @@ public class Util { else showSystemUI(activity); } - public static void showSystemUI(Activity activity) { - activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); - } - public static void hideSystemUI(Activity activity) { hideSystemUI(activity.getWindow()); } public static void hideSystemUI(Window window) { - int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; - window.getDecorView().setSystemUiVisibility(flags); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + window.setDecorFitsSystemWindows(false); + window.getInsetsController().hide(WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars()); + window.getInsetsController().setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); + } else { + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + } + } + + public static void showSystemUI(Activity activity) { + showSystemUI(activity.getWindow()); + } + + public static void showSystemUI(Window window) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + window.setDecorFitsSystemWindows(true); + window.getInsetsController().show(WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars()); + window.getInsetsController().setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_DEFAULT); + } else { + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); + } } public static void showKeyboard(View view) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 4f921a999..29fb458ef 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -3,7 +3,6 @@ package com.fongmi.android.tv.ui.activity; import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; -import android.app.Dialog; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; @@ -127,7 +126,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo private SiteViewModel mViewModel; private FlagAdapter mFlagAdapter; private CustomKeyDown mKeyDown; - private List mDialogs; private List mBroken; private History mHistory; private Players mPlayers; @@ -286,7 +284,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mObservePlayer = this::setPlayer; mObserveSearch = this::setSearch; mPlayers = Players.create(this); - mDialogs = new ArrayList<>(); mBroken = new ArrayList<>(); mClock = Clock.create(); mR1 = this::hideControl; @@ -835,7 +832,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void onEpisodes() { - mDialogs.add(EpisodeListDialog.create(this).episodes(mEpisodeAdapter.getItems()).show()); + EpisodeListDialog.create(this).episodes(mEpisodeAdapter.getItems()).show(); } private void onChoose() { @@ -963,9 +960,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void hideSheet() { - for (Dialog dialog : mDialogs) dialog.dismiss(); for (Fragment fragment : getSupportFragmentManager().getFragments()) if (fragment instanceof BottomSheetDialogFragment) ((BottomSheetDialogFragment) fragment).dismiss(); - mDialogs.clear(); } private void setTraffic() { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/EpisodeListDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/EpisodeListDialog.java index 72863021b..5f6de5bf8 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/EpisodeListDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/EpisodeListDialog.java @@ -1,6 +1,9 @@ package com.fongmi.android.tv.ui.dialog; import android.view.LayoutInflater; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.FrameLayout; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.ViewModelProvider; @@ -10,6 +13,8 @@ import com.fongmi.android.tv.databinding.DialogEpisodeListBinding; import com.fongmi.android.tv.model.SiteViewModel; import com.fongmi.android.tv.ui.adapter.EpisodeAdapter; import com.fongmi.android.tv.ui.base.ViewType; +import com.fongmi.android.tv.utils.ResUtil; +import com.fongmi.android.tv.utils.Util; import com.google.android.material.sidesheet.SideSheetDialog; import java.util.List; @@ -36,10 +41,9 @@ public class EpisodeListDialog implements EpisodeAdapter.OnClickListener { return this; } - public SideSheetDialog show() { + public void show() { initDialog(); initView(); - return dialog; } private void initDialog() { @@ -47,7 +51,22 @@ public class EpisodeListDialog implements EpisodeAdapter.OnClickListener { dialog = new SideSheetDialog(activity); dialog.setContentView(binding.getRoot()); dialog.getBehavior().setDraggable(false); + dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + Util.hideSystemUI(dialog.getWindow()); + dialog.getWindow().setDimAmount(0); dialog.show(); + setWidth(); + } + + private void setWidth() { + int width = 0; + int padding = ResUtil.dp2px(56); + int maxWidth = ResUtil.getScreenWidth() / 3; + for (Episode item : episodes) width = Math.max(width, ResUtil.getTextWidth(item.getName(), 14)); + FrameLayout sheet = dialog.findViewById(com.google.android.material.R.id.m3_side_sheet); + ViewGroup.LayoutParams params = sheet.getLayoutParams(); + params.width = Math.min(width + padding, maxWidth); + sheet.setLayoutParams(params); } private void initView() {