mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2025-04-20 03:24:50 +00:00
Keep screen on fixes.
This commit is contained in:
parent
0c1822b118
commit
0bba7fa373
10 changed files with 54 additions and 11 deletions
|
@ -426,6 +426,9 @@ class Settings : FragmentedStorageFileJson() {
|
|||
@Serializable(with = FlexibleBooleanSerializer::class)
|
||||
var enabled: Boolean = true;
|
||||
|
||||
@FormField(R.string.keep_screen_on, FieldForm.TOGGLE, R.string.keep_screen_on_while_casting, 1)
|
||||
@Serializable(with = FlexibleBooleanSerializer::class)
|
||||
var keepScreenOn: Boolean = true;
|
||||
|
||||
/*TODO: Should we have a different casting quality?
|
||||
@FormField("Preferred Casting Quality", FieldForm.DROPDOWN, "", 3)
|
||||
|
|
|
@ -95,6 +95,8 @@ class AutoUpdateDialog(context: Context?) : AlertDialog(context) {
|
|||
_buttonUpdate.visibility = Button.GONE;
|
||||
setCancelable(false);
|
||||
setCanceledOnTouchOutside(false);
|
||||
|
||||
Logger.i(TAG, "Keep screen on set update")
|
||||
window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
|
||||
_text.text = context.resources.getText(R.string.downloading_update);
|
||||
|
@ -178,6 +180,7 @@ class AutoUpdateDialog(context: Context?) : AlertDialog(context) {
|
|||
}
|
||||
} finally {
|
||||
withContext(Dispatchers.Main) {
|
||||
Logger.i(TAG, "Keep screen on unset install")
|
||||
window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -134,6 +134,8 @@ class ImportDialog : AlertDialog {
|
|||
|
||||
setCancelable(false);
|
||||
setCanceledOnTouchOutside(false);
|
||||
|
||||
Logger.i(TAG, "Keep screen on set import")
|
||||
window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
|
||||
_updateSpinner.drawable?.assume<Animatable>()?.start();
|
||||
|
@ -201,6 +203,7 @@ class ImportDialog : AlertDialog {
|
|||
} catch (e: Throwable) {
|
||||
Logger.e(TAG, "Failed to update import UI.", e)
|
||||
} finally {
|
||||
Logger.i(TAG, "Keep screen on unset update")
|
||||
window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -144,6 +144,7 @@ class MigrateDialog : AlertDialog {
|
|||
|
||||
setCancelable(false);
|
||||
setCanceledOnTouchOutside(false);
|
||||
Logger.i(TAG, "Keep screen on set restore")
|
||||
window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
|
||||
_updateSpinner.drawable?.assume<Animatable>()?.start();
|
||||
|
@ -214,6 +215,7 @@ class MigrateDialog : AlertDialog {
|
|||
} catch (e: Throwable) {
|
||||
Logger.e(TAG, "Failed to update import UI.", e)
|
||||
} finally {
|
||||
Logger.i(TAG, "Keep screen on unset restore")
|
||||
window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,8 +68,6 @@ class VideoDetailFragment : MainFragment {
|
|||
super.onShownWithView(parameter, isBack);
|
||||
Logger.i(TAG, "onShownWithView parameter=$parameter")
|
||||
|
||||
activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
|
||||
if(parameter is IPlatformVideoDetails)
|
||||
_viewDetail?.setVideoDetails(parameter, true);
|
||||
else if (parameter is IPlatformVideo)
|
||||
|
@ -176,7 +174,6 @@ class VideoDetailFragment : MainFragment {
|
|||
_viewDetail?.onStop();
|
||||
close();
|
||||
|
||||
activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
StatePlayer.instance.clearQueue();
|
||||
StatePlayer.instance.setPlayerClosed();
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import android.view.MotionEvent
|
|||
import android.view.View
|
||||
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
||||
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
import android.view.WindowManager
|
||||
import android.widget.*
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
|
@ -59,6 +60,7 @@ import com.futo.platformplayer.casting.StateCasting
|
|||
import com.futo.platformplayer.constructs.Event0
|
||||
import com.futo.platformplayer.constructs.Event1
|
||||
import com.futo.platformplayer.constructs.TaskHandler
|
||||
import com.futo.platformplayer.dialogs.AutoUpdateDialog
|
||||
import com.futo.platformplayer.downloads.VideoLocal
|
||||
import com.futo.platformplayer.engine.exceptions.ScriptAgeException
|
||||
import com.futo.platformplayer.engine.exceptions.ScriptException
|
||||
|
@ -216,6 +218,9 @@ class VideoDetailView : ConstraintLayout {
|
|||
private var _lastAudioSource: IAudioSource? = null;
|
||||
private var _lastSubtitleSource: ISubtitleSource? = null;
|
||||
private var _isCasting: Boolean = false;
|
||||
|
||||
var isPlaying: Boolean = false
|
||||
private set;
|
||||
var lastPositionMilliseconds: Long = 0
|
||||
private set;
|
||||
private var _historicalPosition: Long = 0;
|
||||
|
@ -600,6 +605,8 @@ class VideoDetailView : ConstraintLayout {
|
|||
_lastSubtitleSource = null;
|
||||
video = null;
|
||||
_playbackTracker = null;
|
||||
Logger.i(TAG, "Keep screen on unset onClose")
|
||||
fragment.activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
};
|
||||
|
||||
_layoutResume.setOnClickListener {
|
||||
|
@ -1680,14 +1687,28 @@ class VideoDetailView : ConstraintLayout {
|
|||
if(playing) {
|
||||
_minimize_controls_pause.visibility = View.VISIBLE;
|
||||
_minimize_controls_play.visibility = View.GONE;
|
||||
|
||||
if (_isCasting) {
|
||||
if (Settings.instance.casting.keepScreenOn) {
|
||||
Logger.i(TAG, "Keep screen on set handlePlayChanged casting")
|
||||
fragment.activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
}
|
||||
} else {
|
||||
Logger.i(TAG, "Keep screen on set handlePlayChanged player")
|
||||
fragment.activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
}
|
||||
}
|
||||
else {
|
||||
_minimize_controls_pause.visibility = View.GONE;
|
||||
_minimize_controls_play.visibility = View.VISIBLE;
|
||||
|
||||
Logger.i(TAG, "Keep screen on unset handlePlayChanged")
|
||||
fragment.activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
}
|
||||
|
||||
isPlaying = playing;
|
||||
onPlayChanged.emit(playing);
|
||||
updateTracker(_player.position, playing, true);
|
||||
updateTracker(lastPositionMilliseconds, playing, true);
|
||||
}
|
||||
|
||||
private fun handleSelectVideoTrack(videoSource: IVideoSource) {
|
||||
|
@ -2031,7 +2052,8 @@ class VideoDetailView : ConstraintLayout {
|
|||
StatePlaylists.instance.updateHistoryPosition(v, true, (positionMilliseconds.toFloat() / 1000.0f).toLong());
|
||||
_lastPositionSaveTime = currentTime;
|
||||
}
|
||||
updateTracker(positionMilliseconds, _player.playing, false);
|
||||
|
||||
updateTracker(positionMilliseconds, isPlaying, false);
|
||||
}
|
||||
|
||||
private fun updateTracker(positionMs: Long, isPlaying: Boolean, forceUpdate: Boolean = false) {
|
||||
|
|
|
@ -295,7 +295,7 @@ class FutoVideoPlayer : FutoVideoPlayerBase {
|
|||
Logger.i(TAG, "Updated chapter to [${_currentChapter?.name}] with speed ${delta}ms (${pos - (_currentChapter?.timeStart?.times(1000)?.toLong() ?: 0)}ms late [${_currentChapter?.timeStart}s])");
|
||||
}
|
||||
}
|
||||
if(playingCached)
|
||||
if(playing)
|
||||
updateChaptersLoop(loopId);
|
||||
else
|
||||
_currentChapterLoopActive = false;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.futo.platformplayer.views.video
|
||||
|
||||
import android.content.Context
|
||||
import android.media.session.PlaybackState
|
||||
import android.net.Uri
|
||||
import android.util.AttributeSet
|
||||
import android.widget.RelativeLayout
|
||||
|
@ -60,8 +61,7 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
|
|||
private set;
|
||||
val exoPlayerStateName: String;
|
||||
|
||||
protected var playingCached: Boolean = false;
|
||||
val playing: Boolean get() = exoPlayer?.player?.playWhenReady ?: false;
|
||||
var playing: Boolean = false;
|
||||
val position: Long get() = exoPlayer?.player?.currentPosition ?: 0;
|
||||
val duration: Long get() = exoPlayer?.player?.duration ?: 0;
|
||||
|
||||
|
@ -99,12 +99,23 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
updatePlaying();
|
||||
}
|
||||
|
||||
override fun onPlayWhenReadyChanged(playWhenReady: Boolean, reason: Int) {
|
||||
super.onPlayWhenReadyChanged(playWhenReady, reason)
|
||||
onPlayChanged.emit(playWhenReady);
|
||||
playingCached = playWhenReady;
|
||||
updatePlaying();
|
||||
}
|
||||
|
||||
fun updatePlaying() {
|
||||
val newPlaying = exoPlayer?.let { it.player.playWhenReady && it.player.playbackState != Player.STATE_ENDED && it.player.playbackState != Player.STATE_IDLE } ?: false
|
||||
if (newPlaying == playing) {
|
||||
return;
|
||||
}
|
||||
|
||||
playing = newPlaying;
|
||||
onPlayChanged.emit(playing);
|
||||
}
|
||||
|
||||
override fun onVideoSizeChanged(videoSize: VideoSize) {
|
||||
|
|
|
@ -60,6 +60,8 @@
|
|||
<string name="view_all">View all</string>
|
||||
<string name="creators">Creators</string>
|
||||
<string name="enabled">Enabled</string>
|
||||
<string name="keep_screen_on">Keep screen on</string>
|
||||
<string name="keep_screen_on_while_casting">Keep screen on while casting</string>
|
||||
<string name="discover">Discover</string>
|
||||
<string name="find_new_video_sources_to_add">Find new video sources to add</string>
|
||||
<string name="these_sources_have_been_disabled">These sources have been disabled</string>
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 4f89b4072f4473ff0ffac1711023dffd20f0a868
|
||||
Subproject commit 8f10daba1ef9cbcd99f3c640d86808f8c94aa84a
|
Loading…
Add table
Reference in a new issue