Skip to content

Commit a5f3f05

Browse files
committed
Fix continue watching series open
1 parent 101cccd commit a5f3f05

2 files changed

Lines changed: 52 additions & 29 deletions

File tree

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import java.util.Properties
33
import org.gradle.api.provider.Property
44
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
55

6-
val appVersionCode = 145
7-
val appVersionName = "3.4.9"
6+
val appVersionCode = 146
7+
val appVersionName = "3.5.0"
88

99
plugins {
1010
alias(libs.plugins.android.application)

app/src/main/java/com/example/xtreamplayer/MainActivityUi.kt

Lines changed: 50 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7001,13 +7001,15 @@ fun FavoritesScreen(
70017001
var pendingViewFocus by remember { mutableStateOf(false) }
70027002
var pendingCategoryEnterFocus by remember { mutableStateOf(false) }
70037003
var pendingCategoryReturnFocus by remember { mutableStateOf(false) }
7004+
var returnFocusItem by remember { mutableStateOf<ContentItem?>(null) }
70047005
var lastSelectedFavoriteCategoryId by remember { mutableStateOf<String?>(null) }
70057006
var lastSelectedFavoriteCategoryIndex by remember { mutableIntStateOf(0) }
70067007
var lastMenuSelection by remember { mutableStateOf(FavoritesView.ITEMS) }
70077008
val menuFocusRequesters = remember { listOf(FocusRequester(), FocusRequester()) }
70087009
val backFocusRequester = remember { FocusRequester() }
70097010
val backDownFocusRequester = remember { FocusRequester() }
70107011
val itemsFirstFocusRequester = remember { FocusRequester() }
7012+
val returnFocusFocusRequester = remember { FocusRequester() }
70117013
val episodesFocusRequester = remember { FocusRequester() }
70127014
var pendingEpisodeFocus by remember { mutableStateOf(false) }
70137015
var selectedCategoryContentCount by remember { mutableIntStateOf(0) }
@@ -7091,13 +7093,15 @@ fun FavoritesScreen(
70917093

70927094
LaunchedEffect(pendingSeriesReturnFocus, selectedSeries) {
70937095
if (pendingSeriesReturnFocus && selectedSeries == null) {
7094-
val requester =
7095-
if (resumeFocusId != null) {
7096-
resumeFocusRequester
7097-
} else {
7098-
contentItemFocusRequester
7099-
}
7100-
requestFocusWithFrameRetries(requester, frameRetries = 2)
7096+
val returnId = returnFocusItem?.id
7097+
val requester = when {
7098+
returnId != null && returnId == resumeFocusId -> resumeFocusRequester
7099+
returnId != null -> returnFocusFocusRequester
7100+
resumeFocusId != null -> resumeFocusRequester
7101+
else -> itemsFirstFocusRequester
7102+
}
7103+
requestFocusWithFrameRetries(requester, frameRetries = 5)
7104+
returnFocusItem = null
71017105
pendingSeriesReturnFocus = false
71027106
}
71037107
}
@@ -7274,8 +7278,13 @@ fun FavoritesScreen(
72747278
val activeSeries = selectedSeries!!
72757279
val closeSeriesDetails = {
72767280
pendingSeriesPlaybackTransition = false
7277-
onItemFocused(activeSeries)
7278-
runCatching { contentItemFocusRequester.requestFocus() }
7281+
val itemToFocus = returnFocusItem ?: activeSeries
7282+
val returnId = itemToFocus.id
7283+
runCatching {
7284+
if (returnId == resumeFocusId) resumeFocusRequester.requestFocus()
7285+
else returnFocusFocusRequester.requestFocus()
7286+
}
7287+
onItemFocused(itemToFocus)
72797288
pendingSeriesReturnFocus = true
72807289
selectedSeries = null
72817290
pendingSeriesInfo = null
@@ -7411,9 +7420,10 @@ fun FavoritesScreen(
74117420
(posterColumns - 1).coerceAtMost(sortedContent.lastIndex)
74127421
val requester =
74137422
when {
7423+
item.id == resumeFocusId -> resumeFocusRequester
7424+
item.id == returnFocusItem?.id -> returnFocusFocusRequester
74147425
index == 0 -> itemsFirstFocusRequester
74157426
index == backDownTargetIndex -> backDownFocusRequester
7416-
item.id == resumeFocusId -> resumeFocusRequester
74177427
else -> null
74187428
}
74197429
val isLeftEdge = index % posterColumns == 0
@@ -7439,8 +7449,11 @@ fun FavoritesScreen(
74397449
if (item.contentType == ContentType.SERIES &&
74407450
item.containerExtension.isNullOrBlank()
74417451
) {
7452+
returnFocusItem = item
74427453
pendingSeries = item
74437454
} else if (item.contentType == ContentType.MOVIES) {
7455+
returnFocusItem = item
7456+
runCatching { returnFocusFocusRequester.requestFocus() }
74447457
pendingSeries = null
74457458
onMovieInfo(item, sortedContent)
74467459
} else {
@@ -8910,6 +8923,7 @@ fun ContinueWatchingScreen(
89108923
val episodesFocusRequester = remember { FocusRequester() }
89118924
val clearAllFocusRequester = remember { FocusRequester() }
89128925
val clearAllDownFocusRequester = remember { FocusRequester() }
8926+
val returnFocusFocusRequester = remember { FocusRequester() }
89138927
val gridState = rememberLazyGridState()
89148928
val movieQueueItems =
89158929
remember(displayEntries) {
@@ -8971,18 +8985,18 @@ fun ContinueWatchingScreen(
89718985
if (!pendingSeriesReturnFocus || selectedSeries != null || displayEntries.isEmpty()) {
89728986
return@LaunchedEffect
89738987
}
8974-
val shouldResume =
8975-
resumeFocusId != null &&
8976-
displayEntries.any { entry ->
8977-
entry.displayItem.id == resumeFocusId ||
8978-
resolvedParents[entry.key]?.id == resumeFocusId
8979-
}
8980-
val requester = if (shouldResume) resumeFocusRequester else contentItemFocusRequester
8981-
val focused = requestFocusWithFrameRetries(requester, frameRetries = 2)
8982-
if (focused) {
8983-
pendingSeriesReturnFocus = false
8984-
return@LaunchedEffect
8985-
}
8988+
val returnId = returnFocusItem?.id
8989+
val requester = when {
8990+
returnId != null && returnId == resumeFocusId -> resumeFocusRequester
8991+
returnId != null -> returnFocusFocusRequester
8992+
resumeFocusId != null && displayEntries.any { entry ->
8993+
entry.displayItem.id == resumeFocusId ||
8994+
resolvedParents[entry.key]?.id == resumeFocusId
8995+
} -> resumeFocusRequester
8996+
else -> contentItemFocusRequester
8997+
}
8998+
requestFocusWithFrameRetries(requester, frameRetries = 5)
8999+
returnFocusItem = null
89869000
pendingSeriesReturnFocus = false
89879001
}
89889002

@@ -9020,6 +9034,11 @@ fun ContinueWatchingScreen(
90209034
val closeSeriesDetails = {
90219035
pendingSeriesPlaybackTransition = false
90229036
val itemToFocus = returnFocusItem ?: activeSeries
9037+
val returnId = itemToFocus.id
9038+
runCatching {
9039+
if (returnId == resumeFocusId) resumeFocusRequester.requestFocus()
9040+
else returnFocusFocusRequester.requestFocus()
9041+
}
90239042
selectedSeries = null
90249043
pendingSeriesInfo = null
90259044
pendingEpisodeFocus = false
@@ -9210,8 +9229,9 @@ fun ContinueWatchingScreen(
92109229
val item = displayItem
92119230
val requester =
92129231
when {
9213-
index == clearAllDownTargetIndex -> clearAllDownFocusRequester
92149232
item.id == resumeFocusId -> resumeFocusRequester
9233+
item.id == returnFocusItem?.id -> returnFocusFocusRequester
9234+
index == clearAllDownTargetIndex -> clearAllDownFocusRequester
92159235
index == 0 -> contentItemFocusRequester
92169236
else -> null
92179237
}
@@ -9237,7 +9257,11 @@ fun ContinueWatchingScreen(
92379257
fontScaleFactor = posterFontScale,
92389258
onActivate = {
92399259
when (entry.resumeItem.contentType) {
9240-
ContentType.MOVIES -> onMovieInfo(item, movieQueueItems)
9260+
ContentType.MOVIES -> {
9261+
returnFocusItem = item
9262+
runCatching { returnFocusFocusRequester.requestFocus() }
9263+
onMovieInfo(item, movieQueueItems)
9264+
}
92419265
ContentType.SERIES -> {
92429266
if (!firstSeriesLaunchLoadingShown) {
92439267
showFirstSeriesLaunchLoading = true
@@ -9448,14 +9472,13 @@ fun SeriesSeasonsScreen(
94489472
}
94499473

94509474
LaunchedEffect(seriesItem.streamId, focusPlayOnOpen) {
9451-
withFrameNanos {}
94529475
headerCollapsed = false
94539476
episodesViewportExpanded = false
94549477
internalEpisodeFocusRequested = false
94559478
if (focusPlayOnOpen) {
9456-
playFocusRequester.requestFocus()
9479+
requestFocusWithFrameRetries(playFocusRequester, frameRetries = 5)
94579480
} else {
9458-
contentItemFocusRequester.requestFocus()
9481+
requestFocusWithFrameRetries(contentItemFocusRequester, frameRetries = 5)
94599482
}
94609483
}
94619484

0 commit comments

Comments
 (0)