mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2025-09-10 19:46:10 +00:00
Merge branch 'shorts-improv' into 'master'
Fix background play, disable artwork on background till improved, renamed... See merge request videostreaming/grayjay!140
This commit is contained in:
commit
d32d817e0a
4 changed files with 27 additions and 23 deletions
|
@ -437,7 +437,7 @@ class VideoDetailFragment() : MainFragment() {
|
||||||
|
|
||||||
fun onUserLeaveHint() {
|
fun onUserLeaveHint() {
|
||||||
val viewDetail = _viewDetail;
|
val viewDetail = _viewDetail;
|
||||||
Logger.i(TAG, "onUserLeaveHint preventPictureInPicture=${viewDetail?.preventPictureInPicture} isCasting=${StateCasting.instance.isCasting} isBackgroundPictureInPicture=${Settings.instance.playback.isBackgroundPictureInPicture()} allowBackground=${viewDetail?.allowBackground}");
|
Logger.i(TAG, "onUserLeaveHint preventPictureInPicture=${viewDetail?.preventPictureInPicture} isCasting=${StateCasting.instance.isCasting} isBackgroundPictureInPicture=${Settings.instance.playback.isBackgroundPictureInPicture()} allowBackground=${viewDetail?.isAudioOnlyUserAction}");
|
||||||
|
|
||||||
if (viewDetail === null) {
|
if (viewDetail === null) {
|
||||||
return
|
return
|
||||||
|
@ -446,7 +446,7 @@ class VideoDetailFragment() : MainFragment() {
|
||||||
if (viewDetail.shouldEnterPictureInPicture) {
|
if (viewDetail.shouldEnterPictureInPicture) {
|
||||||
_leavingPiP = false
|
_leavingPiP = false
|
||||||
}
|
}
|
||||||
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.S && viewDetail.preventPictureInPicture == false && !StateCasting.instance.isCasting && Settings.instance.playback.isBackgroundPictureInPicture() && !viewDetail.allowBackground) {
|
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.S && viewDetail.preventPictureInPicture == false && !StateCasting.instance.isCasting && Settings.instance.playback.isBackgroundPictureInPicture() && !viewDetail.isAudioOnlyUserAction) {
|
||||||
val params = _viewDetail?.getPictureInPictureParams();
|
val params = _viewDetail?.getPictureInPictureParams();
|
||||||
if(params != null) {
|
if(params != null) {
|
||||||
Logger.i(TAG, "enterPictureInPictureMode")
|
Logger.i(TAG, "enterPictureInPictureMode")
|
||||||
|
@ -526,7 +526,7 @@ class VideoDetailFragment() : MainFragment() {
|
||||||
|
|
||||||
private fun stopIfRequired() {
|
private fun stopIfRequired() {
|
||||||
var shouldStop = true;
|
var shouldStop = true;
|
||||||
if (_viewDetail?.allowBackground == true) {
|
if (_viewDetail?.isAudioOnlyUserAction == true) {
|
||||||
shouldStop = false;
|
shouldStop = false;
|
||||||
} else if (Settings.instance.playback.isBackgroundPictureInPicture() && !_leavingPiP) {
|
} else if (Settings.instance.playback.isBackgroundPictureInPicture() && !_leavingPiP) {
|
||||||
shouldStop = false;
|
shouldStop = false;
|
||||||
|
|
|
@ -10,7 +10,6 @@ import android.content.Intent
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.Rect
|
|
||||||
import android.graphics.drawable.Animatable
|
import android.graphics.drawable.Animatable
|
||||||
import android.graphics.drawable.BitmapDrawable
|
import android.graphics.drawable.BitmapDrawable
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
|
@ -51,7 +50,6 @@ import com.futo.platformplayer.Settings
|
||||||
import com.futo.platformplayer.UIDialogs
|
import com.futo.platformplayer.UIDialogs
|
||||||
import com.futo.platformplayer.UISlideOverlays
|
import com.futo.platformplayer.UISlideOverlays
|
||||||
import com.futo.platformplayer.activities.MainActivity
|
import com.futo.platformplayer.activities.MainActivity
|
||||||
import com.futo.platformplayer.activities.SyncShowPairingCodeActivity.Companion.activity
|
|
||||||
import com.futo.platformplayer.api.media.IPluginSourced
|
import com.futo.platformplayer.api.media.IPluginSourced
|
||||||
import com.futo.platformplayer.api.media.LiveChatManager
|
import com.futo.platformplayer.api.media.LiveChatManager
|
||||||
import com.futo.platformplayer.api.media.PlatformID
|
import com.futo.platformplayer.api.media.PlatformID
|
||||||
|
@ -82,7 +80,6 @@ import com.futo.platformplayer.api.media.models.video.IPlatformVideoDetails
|
||||||
import com.futo.platformplayer.api.media.models.video.SerializedPlatformVideo
|
import com.futo.platformplayer.api.media.models.video.SerializedPlatformVideo
|
||||||
import com.futo.platformplayer.api.media.platforms.js.JSClient
|
import com.futo.platformplayer.api.media.platforms.js.JSClient
|
||||||
import com.futo.platformplayer.api.media.platforms.js.SourcePluginConfig
|
import com.futo.platformplayer.api.media.platforms.js.SourcePluginConfig
|
||||||
import com.futo.platformplayer.api.media.platforms.js.models.JSVideo
|
|
||||||
import com.futo.platformplayer.api.media.platforms.js.models.JSVideoDetails
|
import com.futo.platformplayer.api.media.platforms.js.models.JSVideoDetails
|
||||||
import com.futo.platformplayer.api.media.platforms.js.models.sources.JSSource
|
import com.futo.platformplayer.api.media.platforms.js.models.sources.JSSource
|
||||||
import com.futo.platformplayer.api.media.structures.IPager
|
import com.futo.platformplayer.api.media.structures.IPager
|
||||||
|
@ -326,7 +323,7 @@ class VideoDetailView : ConstraintLayout {
|
||||||
val onEnterPictureInPicture = Event0();
|
val onEnterPictureInPicture = Event0();
|
||||||
val onVideoChanged = Event2<Int, Int>()
|
val onVideoChanged = Event2<Int, Int>()
|
||||||
|
|
||||||
var allowBackground: Boolean = false
|
var isAudioOnlyUserAction: Boolean = false
|
||||||
private set(value) {
|
private set(value) {
|
||||||
if (field != value) {
|
if (field != value) {
|
||||||
field = value
|
field = value
|
||||||
|
@ -338,7 +335,7 @@ class VideoDetailView : ConstraintLayout {
|
||||||
get() = !preventPictureInPicture &&
|
get() = !preventPictureInPicture &&
|
||||||
!StateCasting.instance.isCasting &&
|
!StateCasting.instance.isCasting &&
|
||||||
Settings.instance.playback.isBackgroundPictureInPicture() &&
|
Settings.instance.playback.isBackgroundPictureInPicture() &&
|
||||||
!allowBackground &&
|
!isAudioOnlyUserAction &&
|
||||||
isPlaying
|
isPlaying
|
||||||
|
|
||||||
val onShouldEnterPictureInPictureChanged = Event0();
|
val onShouldEnterPictureInPictureChanged = Event0();
|
||||||
|
@ -764,7 +761,7 @@ class VideoDetailView : ConstraintLayout {
|
||||||
MediaControlReceiver.onBackgroundReceived.subscribe(this) {
|
MediaControlReceiver.onBackgroundReceived.subscribe(this) {
|
||||||
Logger.i(TAG, "MediaControlReceiver.onBackgroundReceived")
|
Logger.i(TAG, "MediaControlReceiver.onBackgroundReceived")
|
||||||
_player.switchToAudioMode(video);
|
_player.switchToAudioMode(video);
|
||||||
allowBackground = true;
|
isAudioOnlyUserAction = true;
|
||||||
StateApp.instance.contextOrNull?.let {
|
StateApp.instance.contextOrNull?.let {
|
||||||
try {
|
try {
|
||||||
if (it is MainActivity) {
|
if (it is MainActivity) {
|
||||||
|
@ -1009,14 +1006,14 @@ class VideoDetailView : ConstraintLayout {
|
||||||
}
|
}
|
||||||
_slideUpOverlay?.hide();
|
_slideUpOverlay?.hide();
|
||||||
} else null,
|
} else null,
|
||||||
if (!isLimitedVersion) RoundButton(context, R.drawable.ic_screen_share, if (allowBackground) context.getString(R.string.background_revert) else context.getString(R.string.background), TAG_BACKGROUND) {
|
if (!isLimitedVersion) RoundButton(context, R.drawable.ic_screen_share, if (isAudioOnlyUserAction) context.getString(R.string.background_revert) else context.getString(R.string.background), TAG_BACKGROUND) {
|
||||||
if (!allowBackground) {
|
if (!isAudioOnlyUserAction) {
|
||||||
_player.switchToAudioMode(video);
|
_player.switchToAudioMode(video);
|
||||||
allowBackground = true;
|
isAudioOnlyUserAction = true;
|
||||||
it.text.text = resources.getString(R.string.background_revert);
|
it.text.text = resources.getString(R.string.background_revert);
|
||||||
} else {
|
} else {
|
||||||
_player.switchToVideoMode();
|
_player.switchToVideoMode();
|
||||||
allowBackground = false;
|
isAudioOnlyUserAction = false;
|
||||||
it.text.text = resources.getString(R.string.background);
|
it.text.text = resources.getString(R.string.background);
|
||||||
}
|
}
|
||||||
_slideUpOverlay?.hide();
|
_slideUpOverlay?.hide();
|
||||||
|
@ -1156,11 +1153,14 @@ class VideoDetailView : ConstraintLayout {
|
||||||
|
|
||||||
if(_player.isAudioMode) {
|
if(_player.isAudioMode) {
|
||||||
//Requested behavior to leave it in audio mode. leaving it commented if it causes issues, revert?
|
//Requested behavior to leave it in audio mode. leaving it commented if it causes issues, revert?
|
||||||
if(!allowBackground) {
|
if(!isAudioOnlyUserAction) {
|
||||||
_player.switchToVideoMode();
|
_player.switchToVideoMode();
|
||||||
allowBackground = false;
|
isAudioOnlyUserAction = false;
|
||||||
_buttonPins.getButtonByTag(TAG_BACKGROUND)?.text?.text = resources.getString(R.string.background);
|
_buttonPins.getButtonByTag(TAG_BACKGROUND)?.text?.text = resources.getString(R.string.background);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
_buttonPins.getButtonByTag(TAG_BACKGROUND)?.text?.text = resources.getString(R.string.video);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(!_player.isFitMode && !_player.isFullScreen && !fragment.isInPictureInPicture)
|
if(!_player.isFitMode && !_player.isFullScreen && !fragment.isInPictureInPicture)
|
||||||
_player.fitHeight();
|
_player.fitHeight();
|
||||||
|
@ -1176,7 +1176,7 @@ class VideoDetailView : ConstraintLayout {
|
||||||
if(StateCasting.instance.isCasting)
|
if(StateCasting.instance.isCasting)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(allowBackground)
|
if(isAudioOnlyUserAction)
|
||||||
StatePlayer.instance.startOrUpdateMediaSession(context, video);
|
StatePlayer.instance.startOrUpdateMediaSession(context, video);
|
||||||
else {
|
else {
|
||||||
when (Settings.instance.playback.backgroundPlay) {
|
when (Settings.instance.playback.backgroundPlay) {
|
||||||
|
@ -1184,7 +1184,6 @@ class VideoDetailView : ConstraintLayout {
|
||||||
1 -> {
|
1 -> {
|
||||||
if(!(video?.isLive ?: false)) {
|
if(!(video?.isLive ?: false)) {
|
||||||
_player.switchToAudioMode(video);
|
_player.switchToAudioMode(video);
|
||||||
allowBackground = true;
|
|
||||||
}
|
}
|
||||||
StatePlayer.instance.startOrUpdateMediaSession(context, video);
|
StatePlayer.instance.startOrUpdateMediaSession(context, video);
|
||||||
}
|
}
|
||||||
|
@ -1972,10 +1971,10 @@ class VideoDetailView : ConstraintLayout {
|
||||||
|
|
||||||
if (isLimitedVersion && _player.isAudioMode) {
|
if (isLimitedVersion && _player.isAudioMode) {
|
||||||
_player.switchToVideoMode()
|
_player.switchToVideoMode()
|
||||||
allowBackground = false;
|
isAudioOnlyUserAction = false;
|
||||||
} else {
|
} else {
|
||||||
val thumbnail = video.thumbnails.getHQThumbnail();
|
val thumbnail = video.thumbnails.getHQThumbnail();
|
||||||
if ((videoSource == null || _player.isAudioMode) && !thumbnail.isNullOrBlank())
|
if ((videoSource == null) && !thumbnail.isNullOrBlank()) // || _player.isAudioMode
|
||||||
Glide.with(context).asBitmap().load(thumbnail)
|
Glide.with(context).asBitmap().load(thumbnail)
|
||||||
.into(object: CustomTarget<Bitmap>() {
|
.into(object: CustomTarget<Bitmap>() {
|
||||||
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
|
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
|
||||||
|
|
|
@ -475,6 +475,7 @@ class StatePlugins {
|
||||||
delay(500);
|
delay(500);
|
||||||
|
|
||||||
val client = ManagedHttpClient();
|
val client = ManagedHttpClient();
|
||||||
|
client.setTimeout(10000);
|
||||||
try {
|
try {
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
onProgress.invoke("Validating script", 0.25);
|
onProgress.invoke("Validating script", 0.25);
|
||||||
|
@ -489,14 +490,14 @@ class StatePlugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
val icon = config.absoluteIconUrl?.let { absIconUrl ->
|
val icon = config.absoluteIconUrl?.let { absIconUrl ->
|
||||||
withContext(Dispatchers.Main) {
|
|
||||||
onProgress.invoke("Saving plugin", 0.75);
|
|
||||||
}
|
|
||||||
val iconResp = client.get(absIconUrl);
|
val iconResp = client.get(absIconUrl);
|
||||||
if (iconResp.isOk)
|
if (iconResp.isOk)
|
||||||
return@let iconResp.body?.byteStream()?.use { it.readBytes() };
|
return@let iconResp.body?.byteStream()?.use { it.readBytes() };
|
||||||
return@let null;
|
return@let null;
|
||||||
}
|
}
|
||||||
|
withContext(Dispatchers.Main) {
|
||||||
|
onProgress.invoke("Saving plugin", 0.75);
|
||||||
|
}
|
||||||
val installEx = StatePlugins.instance.createPlugin(config, script, icon, true);
|
val installEx = StatePlugins.instance.createPlugin(config, script, icon, true);
|
||||||
if (installEx != null)
|
if (installEx != null)
|
||||||
throw installEx;
|
throw installEx;
|
||||||
|
|
|
@ -907,11 +907,14 @@ class FutoVideoPlayer : FutoVideoPlayerBase {
|
||||||
|
|
||||||
override fun switchToVideoMode() {
|
override fun switchToVideoMode() {
|
||||||
super.switchToVideoMode()
|
super.switchToVideoMode()
|
||||||
setArtwork(null)
|
//setArtwork(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun switchToAudioMode(video: IPlatformVideoDetails?) {
|
override fun switchToAudioMode(video: IPlatformVideoDetails?) {
|
||||||
super.switchToAudioMode(video)
|
super.switchToAudioMode(video)
|
||||||
|
|
||||||
|
//This causes issues, and is in general confusing, needs improvements
|
||||||
|
/*
|
||||||
val thumbnail = video?.thumbnails?.getHQThumbnail()
|
val thumbnail = video?.thumbnails?.getHQThumbnail()
|
||||||
if (!thumbnail.isNullOrBlank()) {
|
if (!thumbnail.isNullOrBlank()) {
|
||||||
Glide.with(context).asBitmap().load(thumbnail)
|
Glide.with(context).asBitmap().load(thumbnail)
|
||||||
|
@ -928,5 +931,6 @@ class FutoVideoPlayer : FutoVideoPlayerBase {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue