Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ class VideoDetailFragment() : MainFragment() {
_viewDetail?.setFullscreen(true)
}

_viewDetail?.updateResumeClickability(state == State.MAXIMIZED)
updateOrientation()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import android.widget.ImageButton
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import androidx.compose.ui.text.toLowerCase
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.lifecycleScope
import androidx.media3.common.C
Expand All @@ -43,7 +42,6 @@ import androidx.media3.datasource.HttpDataSource
import androidx.media3.ui.PlayerControlView
import androidx.media3.ui.TimeBar
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.futo.platformplayer.BuildConfig
Expand All @@ -57,7 +55,6 @@ import com.futo.platformplayer.api.media.LiveChatManager
import com.futo.platformplayer.api.media.PlatformID
import com.futo.platformplayer.api.media.exceptions.ContentNotAvailableYetException
import com.futo.platformplayer.api.media.exceptions.NoPlatformClientException
import com.futo.platformplayer.api.media.models.PlatformAuthorLink
import com.futo.platformplayer.api.media.models.PlatformAuthorMembershipLink
import com.futo.platformplayer.api.media.models.chapters.ChapterType
import com.futo.platformplayer.api.media.models.chapters.IChapter
Expand Down Expand Up @@ -180,7 +177,6 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import kotlinx.serialization.json.Json
import userpackage.Protocol
import java.time.OffsetDateTime
import java.util.Locale
Expand Down Expand Up @@ -560,7 +556,6 @@ class VideoDetailView : ConstraintLayout {
_loaderGameVisible = b
fragment.lifecycleScope.launch(Dispatchers.Main) {
onShouldEnterPictureInPictureChanged.emit()
updateResumeVisibilityFor(lastPositionMilliseconds)
}
}
_player.loaderGameVisibilityChanged.subscribe(handleLoaderGameVisibilityChanged)
Expand Down Expand Up @@ -1848,7 +1843,6 @@ class VideoDetailView : ConstraintLayout {
TAG,
"Historical position: $_historicalPosition, last position: $lastPositionMilliseconds"
);
updateResumeVisibilityFor(lastPositionMilliseconds)
}
}
}
Expand Down Expand Up @@ -1899,12 +1893,10 @@ class VideoDetailView : ConstraintLayout {
}

private fun shouldShowResume(positionMs: Long): Boolean {
if (_loaderGameVisible) return false
val v = video ?: return false
val resumeS = _historicalPosition
val durS = v.duration

if (_overlay_loading.visibility == View.VISIBLE) return false
if (resumeS <= 60) return false
if (durS - resumeS <= 5) return false

Expand All @@ -1920,12 +1912,17 @@ class VideoDetailView : ConstraintLayout {
val visible = shouldShowResume(positionMs)
if (visible) {
_layoutResume.visibility = View.VISIBLE
_textResume.text = "Resume at ${_historicalPosition.toHumanTime(false)}"
_textResume.text = context.getString(R.string.resume_at, _historicalPosition.toHumanTime(false))
} else {
_layoutResume.visibility = View.GONE
_textResume.text = ""
}
}

fun updateResumeClickability(isClickable: Boolean) {
_layoutResume.isClickable = isClickable;
}

fun loadVODChat(video: IPlatformVideoDetails) {
_liveChat?.stop();
_container_content_liveChat.cancel();
Expand Down Expand Up @@ -2213,6 +2210,8 @@ class VideoDetailView : ConstraintLayout {
_layoutPlayerContainer.post {
onShouldEnterPictureInPictureChanged.emit()
}

updateResumeVisibilityFor(lastPositionMilliseconds);
}

private var _didTriggerDatasourceErrorCount = 0;
Expand Down Expand Up @@ -2843,6 +2842,7 @@ class VideoDetailView : ConstraintLayout {
private fun fetchVideo() {
Logger.i(TAG, "fetchVideo")
video = null;
_layoutResume.visibility = View.GONE;
cleanupPlaybackTracker();

val url = _url;
Expand Down Expand Up @@ -2958,8 +2958,6 @@ class VideoDetailView : ConstraintLayout {
_overlay_loading.visibility = View.GONE;
(_overlay_loading_spinner.drawable as Animatable?)?.stop()
}

updateResumeVisibilityFor(lastPositionMilliseconds)
}

//UI Actions
Expand Down Expand Up @@ -3252,7 +3250,11 @@ class VideoDetailView : ConstraintLayout {
}
}

updateResumeVisibilityFor(positionMilliseconds)
// Hide resume only if visible to avoid overriding manual states (PiP/minimized)
// and to prevent infinite update loops.
if (_layoutResume.visibility == View.VISIBLE) {
updateResumeVisibilityFor(positionMilliseconds);
}
}

private fun updateTracker(positionMs: Long, isPlaying: Boolean, forceUpdate: Boolean = false) {
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -607,6 +607,7 @@
<string name="last_week">На прошлой неделе</string>
<string name="last_year">В прошлом году</string>
<string name="all_time">За все время</string>
<string name="resume_at">Продолжить с %1$s</string>
<string-array name="home_screen_array">
<item>Рекомендации</item>
<item>Подписки</item>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -953,6 +953,7 @@
<string name="cd_button_scan_qr">Scan QR code</string>
<string name="cd_button_help">Help</string>
<string name="cd_image_polycentric">Change Polycentric profile picture</string>
<string name="resume_at">Resume at %1$s</string>
<string-array name="home_screen_array">
<item>Recommendations</item>
<item>Subscriptions</item>
Expand Down