mirror of
https://github.com/JustinZeus/Wholphin.git
synced 2026-07-08 23:51:21 +02:00
More minor bug fixes (#728)
## Description - Better focus handling on discover page - Follow up to #723 to dim the user image when the nav drawer is closed - Add a missed closeable to stop theme music when leaving a series page
This commit is contained in:
parent
2572a38450
commit
7a20fedef4
6 changed files with 17 additions and 17 deletions
|
|
@ -121,6 +121,7 @@ class SeriesViewModel
|
||||||
) + Dispatchers.IO,
|
) + Dispatchers.IO,
|
||||||
) {
|
) {
|
||||||
Timber.v("Start")
|
Timber.v("Start")
|
||||||
|
addCloseable { themeSongPlayer.stop() }
|
||||||
val item = fetchItem(seriesId)
|
val item = fetchItem(seriesId)
|
||||||
backdropService.submit(item)
|
backdropService.submit(item)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,18 +18,17 @@ import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.focus.FocusRequester
|
import androidx.compose.ui.focus.FocusRequester
|
||||||
import androidx.compose.ui.focus.focusRequester
|
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import com.github.damontecres.wholphin.R
|
import com.github.damontecres.wholphin.R
|
||||||
import com.github.damontecres.wholphin.preferences.UserPreferences
|
import com.github.damontecres.wholphin.preferences.UserPreferences
|
||||||
|
import com.github.damontecres.wholphin.ui.OneTimeLaunchedEffect
|
||||||
import com.github.damontecres.wholphin.ui.components.ErrorMessage
|
import com.github.damontecres.wholphin.ui.components.ErrorMessage
|
||||||
import com.github.damontecres.wholphin.ui.components.TabRow
|
import com.github.damontecres.wholphin.ui.components.TabRow
|
||||||
import com.github.damontecres.wholphin.ui.logTab
|
import com.github.damontecres.wholphin.ui.logTab
|
||||||
import com.github.damontecres.wholphin.ui.nav.NavDrawerItem
|
import com.github.damontecres.wholphin.ui.nav.NavDrawerItem
|
||||||
import com.github.damontecres.wholphin.ui.preferences.PreferencesViewModel
|
import com.github.damontecres.wholphin.ui.preferences.PreferencesViewModel
|
||||||
import com.github.damontecres.wholphin.ui.tryRequestFocus
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DiscoverPage(
|
fun DiscoverPage(
|
||||||
|
|
@ -46,21 +45,16 @@ fun DiscoverPage(
|
||||||
stringResource(R.string.request),
|
stringResource(R.string.request),
|
||||||
)
|
)
|
||||||
var selectedTabIndex by rememberSaveable { mutableIntStateOf(rememberedTabIndex) }
|
var selectedTabIndex by rememberSaveable { mutableIntStateOf(rememberedTabIndex) }
|
||||||
val focusRequester = remember { FocusRequester() }
|
|
||||||
val tabFocusRequesters = remember(tabs) { List(tabs.size) { FocusRequester() } }
|
val tabFocusRequesters = remember(tabs) { List(tabs.size) { FocusRequester() } }
|
||||||
|
|
||||||
val firstTabFocusRequester = remember { FocusRequester() }
|
|
||||||
LaunchedEffect(Unit) { firstTabFocusRequester.tryRequestFocus() }
|
|
||||||
|
|
||||||
LaunchedEffect(selectedTabIndex) {
|
LaunchedEffect(selectedTabIndex) {
|
||||||
logTab("discover", selectedTabIndex)
|
logTab("discover", selectedTabIndex)
|
||||||
preferencesViewModel.saveRememberedTab(preferences, NavDrawerItem.Discover.id, selectedTabIndex)
|
preferencesViewModel.saveRememberedTab(preferences, NavDrawerItem.Discover.id, selectedTabIndex)
|
||||||
preferencesViewModel.backdropService.clearBackdrop()
|
|
||||||
}
|
}
|
||||||
|
OneTimeLaunchedEffect { preferencesViewModel.backdropService.clearBackdrop() }
|
||||||
|
|
||||||
var showHeader by rememberSaveable { mutableStateOf(true) }
|
var showHeader by rememberSaveable { mutableStateOf(true) }
|
||||||
|
|
||||||
LaunchedEffect(Unit) { focusRequester.tryRequestFocus("page") }
|
|
||||||
Column(
|
Column(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
) {
|
) {
|
||||||
|
|
@ -73,8 +67,7 @@ fun DiscoverPage(
|
||||||
selectedTabIndex = selectedTabIndex,
|
selectedTabIndex = selectedTabIndex,
|
||||||
modifier =
|
modifier =
|
||||||
Modifier
|
Modifier
|
||||||
.padding(start = 32.dp, top = 16.dp, bottom = 16.dp)
|
.padding(start = 32.dp, top = 16.dp, bottom = 16.dp),
|
||||||
.focusRequester(firstTabFocusRequester),
|
|
||||||
tabs = tabs,
|
tabs = tabs,
|
||||||
onClick = { selectedTabIndex = it },
|
onClick = { selectedTabIndex = it },
|
||||||
focusRequesters = tabFocusRequesters,
|
focusRequesters = tabFocusRequesters,
|
||||||
|
|
@ -87,8 +80,7 @@ fun DiscoverPage(
|
||||||
preferences = preferences,
|
preferences = preferences,
|
||||||
modifier =
|
modifier =
|
||||||
Modifier
|
Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize(),
|
||||||
.focusRequester(focusRequester),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -98,8 +90,7 @@ fun DiscoverPage(
|
||||||
focusRequesterOnEmpty = tabFocusRequesters.getOrNull(selectedTabIndex),
|
focusRequesterOnEmpty = tabFocusRequesters.getOrNull(selectedTabIndex),
|
||||||
modifier =
|
modifier =
|
||||||
Modifier
|
Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize(),
|
||||||
.focusRequester(focusRequester),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -197,7 +197,7 @@ fun SeerrDiscoverPage(
|
||||||
listOf(state.trending, state.movies, state.tv, state.upcomingMovies, state.upcomingTv)
|
listOf(state.trending, state.movies, state.tv, state.upcomingMovies, state.upcomingTv)
|
||||||
val ratingMap by viewModel.rating.collectAsState()
|
val ratingMap by viewModel.rating.collectAsState()
|
||||||
|
|
||||||
val focusRequesters = remember(2) { List(rows.size) { FocusRequester() } }
|
val focusRequesters = remember(rows) { List(rows.size) { FocusRequester() } }
|
||||||
var position by rememberPosition(0, -1)
|
var position by rememberPosition(0, -1)
|
||||||
val focusedItem =
|
val focusedItem =
|
||||||
remember(position) {
|
remember(position) {
|
||||||
|
|
@ -212,6 +212,8 @@ fun SeerrDiscoverPage(
|
||||||
LaunchedEffect(state.trending) {
|
LaunchedEffect(state.trending) {
|
||||||
if (!firstFocused && state.trending.items is DataLoadingState.Success<*>) {
|
if (!firstFocused && state.trending.items is DataLoadingState.Success<*>) {
|
||||||
firstFocused = focusRequesters.getOrNull(0)?.tryRequestFocus("discover") == true
|
firstFocused = focusRequesters.getOrNull(0)?.tryRequestFocus("discover") == true
|
||||||
|
} else if (firstFocused) {
|
||||||
|
focusRequesters.getOrNull(position.row)?.tryRequestFocus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -396,6 +396,7 @@ fun NavDrawer(
|
||||||
user = user,
|
user = user,
|
||||||
imageUrl = userImageUrl,
|
imageUrl = userImageUrl,
|
||||||
serverName = server.name ?: server.url,
|
serverName = server.name ?: server.url,
|
||||||
|
drawerOpen = drawerState.isOpen,
|
||||||
interactionSource = interactionSource,
|
interactionSource = interactionSource,
|
||||||
onClick = {
|
onClick = {
|
||||||
viewModel.setupNavigationManager.navigateTo(
|
viewModel.setupNavigationManager.navigateTo(
|
||||||
|
|
@ -581,6 +582,7 @@ fun NavigationDrawerScope.ProfileIcon(
|
||||||
user: JellyfinUser,
|
user: JellyfinUser,
|
||||||
imageUrl: String?,
|
imageUrl: String?,
|
||||||
serverName: String,
|
serverName: String,
|
||||||
|
drawerOpen: Boolean,
|
||||||
onClick: () -> Unit,
|
onClick: () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
|
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
|
||||||
|
|
@ -595,6 +597,7 @@ fun NavigationDrawerScope.ProfileIcon(
|
||||||
id = user.id,
|
id = user.id,
|
||||||
name = user.name,
|
name = user.name,
|
||||||
imageUrl = imageUrl,
|
imageUrl = imageUrl,
|
||||||
|
alpha = if (drawerOpen) 1f else .5f,
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -181,9 +181,10 @@ fun ServerList(
|
||||||
@Composable
|
@Composable
|
||||||
fun rememberIdColor(
|
fun rememberIdColor(
|
||||||
id: UUID?,
|
id: UUID?,
|
||||||
|
alpha: Float = 1f,
|
||||||
nullColor: Color = MaterialTheme.colorScheme.surfaceVariant,
|
nullColor: Color = MaterialTheme.colorScheme.surfaceVariant,
|
||||||
): Color =
|
): Color =
|
||||||
remember(id) {
|
remember(id, alpha) {
|
||||||
if (id == null) {
|
if (id == null) {
|
||||||
return@remember nullColor
|
return@remember nullColor
|
||||||
}
|
}
|
||||||
|
|
@ -212,6 +213,7 @@ fun rememberIdColor(
|
||||||
red = (r + m).coerceIn(0f, 1f),
|
red = (r + m).coerceIn(0f, 1f),
|
||||||
green = (g + m).coerceIn(0f, 1f),
|
green = (g + m).coerceIn(0f, 1f),
|
||||||
blue = (b + m).coerceIn(0f, 1f),
|
blue = (b + m).coerceIn(0f, 1f),
|
||||||
|
alpha = alpha,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -296,9 +296,10 @@ fun UserIconCardImage(
|
||||||
name: String?,
|
name: String?,
|
||||||
imageUrl: String?,
|
imageUrl: String?,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
alpha: Float = 1f,
|
||||||
) {
|
) {
|
||||||
var imageError by remember { mutableStateOf(false) }
|
var imageError by remember { mutableStateOf(false) }
|
||||||
val userColor = rememberIdColor(id)
|
val userColor = rememberIdColor(id, alpha)
|
||||||
Box(
|
Box(
|
||||||
modifier =
|
modifier =
|
||||||
modifier.background(
|
modifier.background(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue