I have this compose code:
@Composable
fun TabItems(
viewableViewState: ViewableViewState.Ready,
onPlayClicked: (viewableInterface: ViewableInterface) -> Unit,
modifier: Modifier = Modifier,
) {
var selectedTabIndex by remember { mutableIntStateOf(0) }
var focusedTabIndex by remember { mutableIntStateOf(0) }
val tabItems = viewableViewState.viewable?.let {
getTabItems(it)
} ?: emptyList()
val context = LocalContext.current
val primaryColor = Color(context.partnerTheme.primaryBackground)
Column(
modifier = modifier
.animateContentSize()
.fillMaxHeight(),
) {
TabRow(
selectedTabIndex = selectedTabIndex,
containerColor = Color.Transparent,
modifier = Modifier.padding(start = 30.dp, end = 16.dp),
contentColor = primaryColor,
separator = { Spacer(modifier = Modifier.width(24.dp)) },
indicator = { _, _ ->
// set indicator if needed
},
) {
tabItems.forEachIndexed { index, item ->
Tab(
selected = selectedTabIndex == index,
onClick = { selectedTabIndex = index },
modifier = Modifier.focusRestorer(),
content = {
Text(
text = stringResource(id = item.textResourceId),
maxLines = 2,
style = typography.body.copy(
fontWeight = if (selectedTabIndex == index) FontWeight.Bold else FontWeight.Normal,
textDecoration = if (focusedTabIndex == index) TextDecoration.Underline else TextDecoration.None,
color = Color(context.partnerTheme.themePrimaryTint0),
),
)
},
onFocus = {
focusedTabIndex = index
},
)
}
}
Spacer(modifier = Modifier.height(16.dp))
if (tabItems.isNotEmpty()) {
when (val item = tabItems[selectedTabIndex]) {
is MoviesTabItem -> MoviesItemContent(
modifier = Modifier
.fillMaxSize()
.padding(start = 30.dp),
relatedContents = item.relatedContents,
onMoviePlay = onPlayClicked,
)
is ReadMoreTabItem -> ReadMoreTabItemContent(
modifier = Modifier
.fillMaxSize()
.padding(start = 30.dp),
data = item.data,
)
is SeasonTabItem -> SeasonTabItemContent(
modifier = Modifier
.fillMaxSize()
.padding(start = 30.dp),
seasons = item.seasons,
onEpisodePlay = onPlayClicked,
)
}
}
}
}
called from here:
TabItems(
viewableViewState = uiState,
modifier = Modifier
.onFocusChanged {
if (it.hasFocus) {
collapseMovieDetails = true
}
},
onPlayClicked = { viewable ->
context.startActivity(
PlayerActivity.newIntent(
context = context,
viewable = viewable,
),
)
},
)
}
My problem is that after going back to the same page the buttons focus is not restoring properly. Anyone have idea why?
I've tried to set focusRestore to the TabRow/TabItem but didn't helped. Maybe the place where I'm calling this from is "swallowing" the focus?