Skip to content
Merged
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
4 changes: 2 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import java.util.Properties
import org.gradle.api.provider.Property
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

val appVersionCode = 145
val appVersionName = "3.4.9"
val appVersionCode = 146
val appVersionName = "3.5.0"

plugins {
alias(libs.plugins.android.application)
Expand Down
77 changes: 50 additions & 27 deletions app/src/main/java/com/example/xtreamplayer/MainActivityUi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7001,13 +7001,15 @@ fun FavoritesScreen(
var pendingViewFocus by remember { mutableStateOf(false) }
var pendingCategoryEnterFocus by remember { mutableStateOf(false) }
var pendingCategoryReturnFocus by remember { mutableStateOf(false) }
var returnFocusItem by remember { mutableStateOf<ContentItem?>(null) }
var lastSelectedFavoriteCategoryId by remember { mutableStateOf<String?>(null) }
var lastSelectedFavoriteCategoryIndex by remember { mutableIntStateOf(0) }
var lastMenuSelection by remember { mutableStateOf(FavoritesView.ITEMS) }
val menuFocusRequesters = remember { listOf(FocusRequester(), FocusRequester()) }
val backFocusRequester = remember { FocusRequester() }
val backDownFocusRequester = remember { FocusRequester() }
val itemsFirstFocusRequester = remember { FocusRequester() }
val returnFocusFocusRequester = remember { FocusRequester() }
val episodesFocusRequester = remember { FocusRequester() }
var pendingEpisodeFocus by remember { mutableStateOf(false) }
var selectedCategoryContentCount by remember { mutableIntStateOf(0) }
Expand Down Expand Up @@ -7091,13 +7093,15 @@ fun FavoritesScreen(

LaunchedEffect(pendingSeriesReturnFocus, selectedSeries) {
if (pendingSeriesReturnFocus && selectedSeries == null) {
val requester =
if (resumeFocusId != null) {
resumeFocusRequester
} else {
contentItemFocusRequester
}
requestFocusWithFrameRetries(requester, frameRetries = 2)
val returnId = returnFocusItem?.id
val requester = when {
returnId != null && returnId == resumeFocusId -> resumeFocusRequester
returnId != null -> returnFocusFocusRequester
resumeFocusId != null -> resumeFocusRequester
else -> itemsFirstFocusRequester
}
requestFocusWithFrameRetries(requester, frameRetries = 5)
returnFocusItem = null
pendingSeriesReturnFocus = false
}
}
Expand Down Expand Up @@ -7274,8 +7278,13 @@ fun FavoritesScreen(
val activeSeries = selectedSeries!!
val closeSeriesDetails = {
pendingSeriesPlaybackTransition = false
onItemFocused(activeSeries)
runCatching { contentItemFocusRequester.requestFocus() }
val itemToFocus = returnFocusItem ?: activeSeries
val returnId = itemToFocus.id
runCatching {
if (returnId == resumeFocusId) resumeFocusRequester.requestFocus()
else returnFocusFocusRequester.requestFocus()
}
onItemFocused(itemToFocus)
pendingSeriesReturnFocus = true
selectedSeries = null
pendingSeriesInfo = null
Expand Down Expand Up @@ -7411,9 +7420,10 @@ fun FavoritesScreen(
(posterColumns - 1).coerceAtMost(sortedContent.lastIndex)
val requester =
when {
item.id == resumeFocusId -> resumeFocusRequester
item.id == returnFocusItem?.id -> returnFocusFocusRequester
index == 0 -> itemsFirstFocusRequester
index == backDownTargetIndex -> backDownFocusRequester
item.id == resumeFocusId -> resumeFocusRequester
else -> null
}
val isLeftEdge = index % posterColumns == 0
Expand All @@ -7439,8 +7449,11 @@ fun FavoritesScreen(
if (item.contentType == ContentType.SERIES &&
item.containerExtension.isNullOrBlank()
) {
returnFocusItem = item
pendingSeries = item
} else if (item.contentType == ContentType.MOVIES) {
returnFocusItem = item
runCatching { returnFocusFocusRequester.requestFocus() }
pendingSeries = null
onMovieInfo(item, sortedContent)
} else {
Expand Down Expand Up @@ -8910,6 +8923,7 @@ fun ContinueWatchingScreen(
val episodesFocusRequester = remember { FocusRequester() }
val clearAllFocusRequester = remember { FocusRequester() }
val clearAllDownFocusRequester = remember { FocusRequester() }
val returnFocusFocusRequester = remember { FocusRequester() }
val gridState = rememberLazyGridState()
val movieQueueItems =
remember(displayEntries) {
Expand Down Expand Up @@ -8971,18 +8985,18 @@ fun ContinueWatchingScreen(
if (!pendingSeriesReturnFocus || selectedSeries != null || displayEntries.isEmpty()) {
return@LaunchedEffect
}
val shouldResume =
resumeFocusId != null &&
displayEntries.any { entry ->
entry.displayItem.id == resumeFocusId ||
resolvedParents[entry.key]?.id == resumeFocusId
}
val requester = if (shouldResume) resumeFocusRequester else contentItemFocusRequester
val focused = requestFocusWithFrameRetries(requester, frameRetries = 2)
if (focused) {
pendingSeriesReturnFocus = false
return@LaunchedEffect
}
val returnId = returnFocusItem?.id
val requester = when {
returnId != null && returnId == resumeFocusId -> resumeFocusRequester
returnId != null -> returnFocusFocusRequester
resumeFocusId != null && displayEntries.any { entry ->
entry.displayItem.id == resumeFocusId ||
resolvedParents[entry.key]?.id == resumeFocusId
} -> resumeFocusRequester
else -> contentItemFocusRequester
}
requestFocusWithFrameRetries(requester, frameRetries = 5)
returnFocusItem = null
pendingSeriesReturnFocus = false
}

Expand Down Expand Up @@ -9020,6 +9034,11 @@ fun ContinueWatchingScreen(
val closeSeriesDetails = {
pendingSeriesPlaybackTransition = false
val itemToFocus = returnFocusItem ?: activeSeries
val returnId = itemToFocus.id
runCatching {
if (returnId == resumeFocusId) resumeFocusRequester.requestFocus()
else returnFocusFocusRequester.requestFocus()
}
selectedSeries = null
pendingSeriesInfo = null
pendingEpisodeFocus = false
Expand Down Expand Up @@ -9210,8 +9229,9 @@ fun ContinueWatchingScreen(
val item = displayItem
val requester =
when {
index == clearAllDownTargetIndex -> clearAllDownFocusRequester
item.id == resumeFocusId -> resumeFocusRequester
item.id == returnFocusItem?.id -> returnFocusFocusRequester
index == clearAllDownTargetIndex -> clearAllDownFocusRequester
index == 0 -> contentItemFocusRequester
else -> null
}
Expand All @@ -9237,7 +9257,11 @@ fun ContinueWatchingScreen(
fontScaleFactor = posterFontScale,
onActivate = {
when (entry.resumeItem.contentType) {
ContentType.MOVIES -> onMovieInfo(item, movieQueueItems)
ContentType.MOVIES -> {
returnFocusItem = item
runCatching { returnFocusFocusRequester.requestFocus() }
onMovieInfo(item, movieQueueItems)
}
ContentType.SERIES -> {
if (!firstSeriesLaunchLoadingShown) {
showFirstSeriesLaunchLoading = true
Expand Down Expand Up @@ -9448,14 +9472,13 @@ fun SeriesSeasonsScreen(
}

LaunchedEffect(seriesItem.streamId, focusPlayOnOpen) {
withFrameNanos {}
headerCollapsed = false
episodesViewportExpanded = false
internalEpisodeFocusRequested = false
if (focusPlayOnOpen) {
playFocusRequester.requestFocus()
requestFocusWithFrameRetries(playFocusRequester, frameRetries = 5)
} else {
contentItemFocusRequester.requestFocus()
requestFocusWithFrameRetries(contentItemFocusRequester, frameRetries = 5)
}
}

Expand Down
Loading