diff --git a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java index 5bd271b7e..b20e7ff5f 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java @@ -2,7 +2,6 @@ package com.fongmi.android.tv.utils; import android.content.Intent; import android.net.Uri; -import android.os.Build; import android.os.StatFs; import android.text.TextUtils; @@ -117,7 +116,7 @@ public class FileUtil { } public static Uri getShareUri(File file) { - return Build.VERSION.SDK_INT < Build.VERSION_CODES.N ? Uri.fromFile(file) : FileProvider.getUriForFile(App.get(), App.get().getPackageName() + ".provider", file); + return FileProvider.getUriForFile(App.get(), App.get().getPackageName() + ".provider", file); } private static String getMimeType(String fileName) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 44616f230..1ec04b717 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -479,7 +479,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener } private void showControl() { - if (mPiP.isInMode(this)) return; + if (isInPictureInPictureMode()) return; mBinding.control.info.setVisibility(mPlayers.isEmpty() ? View.GONE : View.VISIBLE); mBinding.control.cast.setVisibility(mPlayers.isEmpty() ? View.GONE : View.VISIBLE); mBinding.control.right.rotate.setVisibility(isLock() ? View.GONE : View.VISIBLE); @@ -498,8 +498,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener } private void showInfo() { - mBinding.widget.infoPip.setVisibility(mPiP.isInMode(this) ? View.VISIBLE : View.GONE); - mBinding.widget.info.setVisibility(mPiP.isInMode(this) ? View.GONE : View.VISIBLE); + mBinding.widget.infoPip.setVisibility(isInPictureInPictureMode() ? View.VISIBLE : View.GONE); + mBinding.widget.info.setVisibility(isInPictureInPictureMode() ? View.GONE : View.VISIBLE); setR3Callback(); hideControl(); setInfo(); 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 87a739ea1..65d140a03 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 @@ -276,6 +276,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Override protected void initView(Bundle savedInstanceState) { + ViewCompat.setOnApplyWindowInsetsListener(mBinding.getRoot(), (v, insets) -> setStatusBar(insets)); mKeyDown = CustomKeyDown.create(this, mBinding.exo); mFrameParams = mBinding.video.getLayoutParams(); mBinding.progressLayout.showProgress(); @@ -347,6 +348,15 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mBinding.control.seek.setListener(mPlayers); } + private WindowInsetsCompat setStatusBar(WindowInsetsCompat insets) { + if (getActivity().isInPictureInPictureMode()) return insets; + int top = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top; + ViewGroup.LayoutParams lp = mBinding.statusBar.getLayoutParams(); + lp.height = top; + mBinding.statusBar.setLayoutParams(lp); + return insets; + } + private void setRecyclerView() { mBinding.flag.setHasFixedSize(true); mBinding.flag.setItemAnimator(null); @@ -378,13 +388,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mBinding.control.action.danmaku.setVisibility(Setting.isDanmakuLoad() ? View.VISIBLE : View.GONE); mBinding.control.action.reset.setText(ResUtil.getStringArray(R.array.select_reset)[Setting.getReset()]); mBinding.video.addOnLayoutChangeListener((view, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> mPiP.update(this, view)); - ViewCompat.setOnApplyWindowInsetsListener(mBinding.getRoot(), (v, windowInsets) -> { - int top = windowInsets.getInsets(WindowInsetsCompat.Type.statusBars()).top; - ViewGroup.LayoutParams lp = mBinding.statusBar.getLayoutParams(); - lp.height = top; - mBinding.statusBar.setLayoutParams(lp); - return windowInsets; - }); } private void setVideoView(boolean isInPictureInPictureMode) { @@ -874,7 +877,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo private void enterFullscreen() { if (isFullscreen()) return; if (isLand()) setTransition(); - mBinding.video.postDelayed(() -> mBinding.video.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT)), 100); + mBinding.video.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT)); setRequestedOrientation(mPlayers.isPortrait() ? ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); mBinding.control.title.setVisibility(View.VISIBLE); setRotate(mPlayers.isPortrait(), true); @@ -949,7 +952,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void showControl() { - if (mPiP.isInMode(this)) return; + if (isInPictureInPictureMode()) return; mBinding.control.danmaku.setVisibility(isLock() || !mPlayers.haveDanmaku() ? View.GONE : View.VISIBLE); mBinding.control.setting.setVisibility(mHistory == null || isFullscreen() ? View.GONE : View.VISIBLE); mBinding.control.right.rotate.setVisibility(isFullscreen() && !isLock() ? View.VISIBLE : View.GONE); @@ -1214,9 +1217,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo ValueAnimator animator = ValueAnimator.ofInt(mBinding.video.getHeight(), finalHeight).setDuration(300); animator.setInterpolator(new DecelerateInterpolator()); animator.addUpdateListener(animation -> { - ViewGroup.LayoutParams params = mBinding.video.getLayoutParams(); - params.height = (int) animation.getAnimatedValue(); - mBinding.video.setLayoutParams(params); + mFrameParams = mBinding.video.getLayoutParams(); + mFrameParams.height = (int) animation.getAnimatedValue(); + mBinding.video.setLayoutParams(mFrameParams); }); animator.start(); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java b/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java index 0e0a766d8..d1617fa21 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java +++ b/app/src/mobile/java/com/fongmi/android/tv/utils/PiP.java @@ -31,6 +31,11 @@ public class PiP { return Build.VERSION.SDK_INT < Build.VERSION_CODES.O || !App.get().getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE); } + public PiP() { + if (noPiP()) return; + this.builder = new PictureInPictureParams.Builder(); + } + @TargetApi(Build.VERSION_CODES.O) private RemoteAction buildRemoteAction(Activity activity, @DrawableRes int icon, @StringRes int title, String action) { return new RemoteAction(Icon.createWithResource(activity, icon), activity.getString(title), "", ActionReceiver.getPendingIntent(activity, action)); @@ -41,21 +46,12 @@ public class PiP { return buildRemoteAction(activity, R.drawable.exo_icon_play, R.string.exo_controls_play_description, ActionEvent.PLAY); } - public PiP() { - if (noPiP()) return; - this.builder = new PictureInPictureParams.Builder(); - } - - public boolean isInMode(Activity activity) { - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && activity.isInPictureInPictureMode(); - } - public void update(Activity activity, View view) { - if (noPiP()) return; - Rect sourceRectHint = new Rect(); - view.getGlobalVisibleRect(sourceRectHint); - builder.setSourceRectHint(sourceRectHint); try { + if (noPiP()) return; + Rect rect = new Rect(); + view.getGlobalVisibleRect(rect); + builder.setSourceRectHint(rect); activity.setPictureInPictureParams(builder.build()); } catch (Exception e) { e.printStackTrace(); @@ -63,12 +59,12 @@ public class PiP { } public void update(Activity activity, boolean play) { - if (noPiP()) return; - List actions = new ArrayList<>(); - actions.add(buildRemoteAction(activity, com.fongmi.android.tv.R.drawable.ic_action_audio, R.string.exo_controls_hide, ActionEvent.AUDIO)); - actions.add(getPlayPauseAction(activity, play)); - actions.add(buildRemoteAction(activity, R.drawable.exo_icon_next, R.string.exo_controls_next_description, ActionEvent.NEXT)); try { + if (noPiP()) return; + List actions = new ArrayList<>(); + actions.add(buildRemoteAction(activity, com.fongmi.android.tv.R.drawable.ic_action_audio, R.string.exo_controls_hide, ActionEvent.AUDIO)); + actions.add(getPlayPauseAction(activity, play)); + actions.add(buildRemoteAction(activity, R.drawable.exo_icon_next, R.string.exo_controls_next_description, ActionEvent.NEXT)); activity.setPictureInPictureParams(builder.setActions(actions).build()); } catch (Exception e) { e.printStackTrace(); @@ -89,6 +85,7 @@ public class PiP { } private Rational getRational(int width, int height) { + if (width <= 0 || height <= 0) return new Rational(16, 9); Rational limitWide = new Rational(239, 100); Rational limitTall = new Rational(100, 239); Rational rational = new Rational(width, height);