Refactors the top bar relay updates.
This commit is contained in:
@@ -99,10 +99,20 @@ fun AppTopBar(
|
|||||||
) {
|
) {
|
||||||
val currentRoute by remember(navEntryState.value) {
|
val currentRoute by remember(navEntryState.value) {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
navEntryState?.value?.destination?.route?.substringBefore("?")
|
navEntryState.value?.destination?.route?.substringBefore("?")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RenderTopRouteBar(currentRoute, followLists, scaffoldState, accountViewModel)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun RenderTopRouteBar(
|
||||||
|
currentRoute: String?,
|
||||||
|
followLists: FollowListViewModel,
|
||||||
|
scaffoldState: ScaffoldState,
|
||||||
|
accountViewModel: AccountViewModel
|
||||||
|
) {
|
||||||
when (currentRoute) {
|
when (currentRoute) {
|
||||||
// Route.Profile.route -> TopBarWithBackButton(nav)
|
// Route.Profile.route -> TopBarWithBackButton(nav)
|
||||||
Route.Home.base -> HomeTopBar(followLists, scaffoldState, accountViewModel)
|
Route.Home.base -> HomeTopBar(followLists, scaffoldState, accountViewModel)
|
||||||
@@ -242,15 +252,6 @@ private fun RelayStatus(
|
|||||||
onClick: () -> Unit
|
onClick: () -> Unit
|
||||||
) {
|
) {
|
||||||
val relayViewModel: RelayPoolViewModel = viewModel { RelayPoolViewModel() }
|
val relayViewModel: RelayPoolViewModel = viewModel { RelayPoolViewModel() }
|
||||||
val connectedRelaysLiveData = relayViewModel.connectedRelaysLiveData.observeAsState()
|
|
||||||
val availableRelaysLiveData = relayViewModel.availableRelaysLiveData.observeAsState()
|
|
||||||
|
|
||||||
val connectedRelaysText by remember(connectedRelaysLiveData, availableRelaysLiveData) {
|
|
||||||
derivedStateOf {
|
|
||||||
"${connectedRelaysLiveData.value ?: "--"}/${availableRelaysLiveData.value ?: "--"}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -261,24 +262,56 @@ private fun RelayStatus(
|
|||||||
modifier = Modifier.fillMaxHeight(),
|
modifier = Modifier.fillMaxHeight(),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
Text(
|
RelayStatus(relayViewModel, onClick)
|
||||||
text = connectedRelaysText,
|
|
||||||
color = if (connectedRelaysLiveData.value == 0) {
|
|
||||||
Color.Red
|
|
||||||
} else {
|
|
||||||
MaterialTheme.colors.onSurface.copy(
|
|
||||||
alpha = 0.32f
|
|
||||||
)
|
|
||||||
},
|
|
||||||
style = MaterialTheme.typography.subtitle1,
|
|
||||||
modifier = Modifier.clickable(
|
|
||||||
onClick = onClick
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun RelayStatus(
|
||||||
|
relayViewModel: RelayPoolViewModel,
|
||||||
|
onClick: () -> Unit
|
||||||
|
) {
|
||||||
|
val connectedRelaysLiveData = relayViewModel.connectedRelaysLiveData.observeAsState()
|
||||||
|
val availableRelaysLiveData = relayViewModel.availableRelaysLiveData.observeAsState()
|
||||||
|
|
||||||
|
val connectedRelaysText by remember(connectedRelaysLiveData, availableRelaysLiveData) {
|
||||||
|
derivedStateOf {
|
||||||
|
"${connectedRelaysLiveData.value ?: "--"}/${availableRelaysLiveData.value ?: "--"}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val isConnected by remember(connectedRelaysLiveData) {
|
||||||
|
derivedStateOf {
|
||||||
|
(connectedRelaysLiveData.value ?: 0) > 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RenderRelayStatus(connectedRelaysText, isConnected, onClick)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun RenderRelayStatus(
|
||||||
|
connectedRelaysText: String,
|
||||||
|
isConnected: Boolean,
|
||||||
|
onClick: () -> Unit
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = connectedRelaysText,
|
||||||
|
color = if (isConnected) {
|
||||||
|
MaterialTheme.colors.onSurface.copy(
|
||||||
|
alpha = 0.32f
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Color.Red
|
||||||
|
},
|
||||||
|
style = MaterialTheme.typography.subtitle1,
|
||||||
|
modifier = Modifier.clickable(
|
||||||
|
onClick = onClick
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun RelayIcon(onClick: () -> Unit) {
|
private fun RelayIcon(onClick: () -> Unit) {
|
||||||
IconButton(
|
IconButton(
|
||||||
@@ -387,6 +420,7 @@ class FollowListViewModel(val account: Account) : ViewModel() {
|
|||||||
refresh()
|
refresh()
|
||||||
collectorJob = viewModelScope.launch(Dispatchers.IO) {
|
collectorJob = viewModelScope.launch(Dispatchers.IO) {
|
||||||
LocalCache.live.newEventBundles.collect { newNotes ->
|
LocalCache.live.newEventBundles.collect { newNotes ->
|
||||||
|
checkNotInMainThread()
|
||||||
if (newNotes.any { it.event is PeopleListEvent }) {
|
if (newNotes.any { it.event is PeopleListEvent }) {
|
||||||
refresh()
|
refresh()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user