pull/587/head
FongMi 1 year ago
parent 0a9407ba68
commit f283a18eac
  1. 19
      app/src/main/AndroidManifest.xml
  2. 0
      app/src/main/java/com/fongmi/android/tv/service/PlaybackService.java
  3. 0
      app/src/main/res/drawable/ic_notify_next.xml
  4. 0
      app/src/main/res/drawable/ic_notify_pause.xml
  5. 0
      app/src/main/res/drawable/ic_notify_play.xml
  6. 0
      app/src/main/res/drawable/ic_notify_prev.xml
  7. 19
      app/src/mobile/AndroidManifest.xml
  8. 38
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  9. 44
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java

@ -9,6 +9,8 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<queries>
<intent>
@ -77,5 +79,22 @@
</intent-filter>
</receiver>
<receiver
android:name="androidx.media.session.MediaButtonReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
<service
android:name=".service.PlaybackService"
android:exported="true"
android:foregroundServiceType="mediaPlayback">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</service>
</application>
</manifest>

@ -8,8 +8,6 @@
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<application>
@ -117,26 +115,9 @@
android:name=".receiver.ShortcutReceiver"
android:exported="false" />
<receiver
android:name="androidx.media.session.MediaButtonReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
<service
android:name="com.android.cast.dlna.dmc.DLNACastService"
android:exported="false" />
<service
android:name=".service.PlaybackService"
android:exported="true"
android:foregroundServiceType="mediaPlayback">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</service>
</application>
</manifest>

@ -88,12 +88,10 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
private Players mPlayers;
private Channel mChannel;
private Group mGroup;
private Runnable mR0;
private Runnable mR1;
private Runnable mR2;
private Runnable mR3;
private Clock mClock;
private boolean foreground;
private boolean initTrack;
private boolean redirect;
private boolean rotate;
@ -149,13 +147,11 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
mObserveEpg = this::setEpg;
mObserveUrl = this::start;
mHides = new ArrayList<>();
mR0 = this::stopService;
mR1 = this::hideControl;
mR2 = this::setTraffic;
mR3 = this::hideInfo;
mPiP = new PiP();
Server.get().start();
setForeground(true);
setRecyclerView();
setVideoView();
setViewModel();
@ -200,6 +196,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
private void setVideoView() {
mPlayers.init(mBinding.exo);
PlaybackService.start(mPlayers);
setScale(Setting.getLiveScale());
ExoUtil.setSubtitleView(mBinding.exo);
mBinding.control.action.invert.setActivated(Setting.isInvert());
@ -658,8 +655,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
mPlayers.start(result, getTimeout());
}
private void checkPlayImg(boolean playing) {
mPiP.update(this, playing);
private void checkPlayImg() {
mPiP.update(this, mPlayers.isPlaying());
ActionEvent.update();
}
@ -763,8 +760,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
break;
case Player.STATE_READY:
hideProgress();
checkPlayImg();
mPlayers.reset();
checkPlayImg(mPlayers.isPlaying());
break;
case Player.STATE_ENDED:
checkNext();
@ -886,21 +883,13 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
}
private void onPaused() {
checkPlayImg(false);
mPlayers.pause();
checkPlayImg();
}
private void onPlay() {
checkPlayImg(true);
mPlayers.play();
}
public boolean isForeground() {
return foreground;
}
public void setForeground(boolean foreground) {
this.foreground = foreground;
checkPlayImg();
}
private boolean isInitTrack() {
@ -952,10 +941,6 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
this.lock = lock;
}
private void stopService() {
PlaybackService.stop();
}
@Override
public void onCasted() {
}
@ -1072,14 +1057,11 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, @NonNull Configuration newConfig) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
if (isInPictureInPictureMode) {
PlaybackService.start(mPlayers);
hideControl();
hideInfo();
hideUI();
} else {
hideInfo();
App.post(mR0, 1000);
setForeground(true);
if (isStop()) finish();
}
}
@ -1107,20 +1089,14 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
@Override
protected void onResume() {
super.onResume();
if (isForeground()) return;
if (isRedirect()) onPlay();
App.post(mR0, 1000);
setForeground(true);
setRedirect(false);
}
@Override
protected void onPause() {
super.onPause();
setForeground(false);
App.removeCallbacks(mR0);
if (isRedirect()) onPaused();
if (Setting.isBackgroundOn() && !isFinishing()) PlaybackService.start(mPlayers);
}
@Override
@ -1151,7 +1127,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
super.onDestroy();
mClock.release();
mPlayers.release();
App.post(mR0, 1000);
PlaybackService.stop();
App.removeCallbacks(mR1, mR2, mR3);
mViewModel.url.removeObserver(mObserveUrl);
mViewModel.epg.removeObserver(mObserveEpg);

@ -131,7 +131,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private List<String> mBroken;
private History mHistory;
private Players mPlayers;
private boolean foreground;
private boolean fullscreen;
private boolean initTrack;
private boolean initAuto;
@ -141,7 +140,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private boolean rotate;
private boolean stop;
private boolean lock;
private Runnable mR0;
private Runnable mR1;
private Runnable mR2;
private Runnable mR3;
@ -286,13 +284,11 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mDialogs = new ArrayList<>();
mBroken = new ArrayList<>();
mClock = Clock.create();
mR0 = this::stopService;
mR1 = this::hideControl;
mR2 = this::setTraffic;
mR3 = this::setOrient;
mR4 = this::showEmpty;
mPiP = new PiP();
setForeground(true);
setRecyclerView();
setVideoView();
setViewModel();
@ -367,6 +363,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void setVideoView() {
mPlayers.init(mBinding.exo);
PlaybackService.start(mPlayers);
ExoUtil.setSubtitleView(mBinding.exo);
if (isPort() && ResUtil.isLand(this)) enterFullscreen();
mBinding.control.action.decode.setText(mPlayers.getDecodeText());
@ -911,8 +908,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mBinding.control.bottom.setVisibility(isLock() ? View.GONE : View.VISIBLE);
mBinding.control.top.setVisibility(isLock() ? View.GONE : View.VISIBLE);
mBinding.control.getRoot().setVisibility(View.VISIBLE);
checkPlayImg(mPlayers.isPlaying());
setR1Callback();
checkPlayImg();
}
private void hideControl() {
@ -999,9 +996,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mHistory.setPosition(replay ? C.TIME_UNSET : mHistory.getPosition());
}
private void checkPlayImg(boolean playing) {
mBinding.control.play.setImageResource(playing ? androidx.media3.ui.R.drawable.exo_icon_pause : androidx.media3.ui.R.drawable.exo_icon_play);
mPiP.update(this, playing);
private void checkPlayImg() {
mBinding.control.play.setImageResource(mPlayers.isPlaying() ? androidx.media3.ui.R.drawable.exo_icon_pause : androidx.media3.ui.R.drawable.exo_icon_play);
mPiP.update(this, mPlayers.isPlaying());
ActionEvent.update();
}
@ -1089,8 +1086,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
break;
case Player.STATE_READY:
hideProgress();
checkPlayImg();
mPlayers.reset();
checkPlayImg(mPlayers.isPlaying());
break;
case Player.STATE_ENDED:
checkEnded(true);
@ -1124,8 +1121,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
onReset(true);
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
checkPlayImg(false);
checkNext(notify);
checkPlayImg();
}
}
@ -1275,24 +1272,16 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private void onPaused() {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
checkPlayImg(false);
mPlayers.pause();
checkPlayImg();
}
private void onPlay() {
if (mHistory != null && mPlayers.isEnded()) mPlayers.seekTo(mHistory.getOpening());
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
if (!mPlayers.isEmpty() && mPlayers.isIdle()) mPlayers.prepare();
checkPlayImg(true);
mPlayers.play();
}
public boolean isForeground() {
return foreground;
}
public void setForeground(boolean foreground) {
this.foreground = foreground;
checkPlayImg();
}
private boolean isFullscreen() {
@ -1380,10 +1369,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
adapter.notifyItemRangeChanged(0, adapter.getItemCount());
}
private void stopService() {
PlaybackService.stop();
}
@Override
public void onCasted() {
onPaused();
@ -1503,12 +1488,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
if (!isFullscreen()) setVideoView(isInPictureInPictureMode);
if (isInPictureInPictureMode) {
PlaybackService.start(mPlayers);
hideControl();
hideSheet();
} else {
App.post(mR0, 1000);
setForeground(true);
if (isStop()) finish();
}
}
@ -1538,20 +1520,14 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
@Override
protected void onResume() {
super.onResume();
if (isForeground()) return;
if (isRedirect()) onPlay();
App.post(mR0, 1000);
setForeground(true);
setRedirect(false);
}
@Override
protected void onPause() {
super.onPause();
setForeground(false);
App.removeCallbacks(mR0);
if (isRedirect()) onPaused();
else if (Setting.isBackgroundOn() && !isFinishing()) PlaybackService.start(mPlayers);
}
@Override
@ -1581,8 +1557,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mClock.release();
mPlayers.release();
Timer.get().reset();
App.post(mR0, 1000);
RefreshEvent.history();
PlaybackService.stop();
App.removeCallbacks(mR1, mR2, mR3, mR4);
mViewModel.result.removeObserver(mObserveDetail);
mViewModel.player.removeObserver(mObservePlayer);

Loading…
Cancel
Save