Skip to content

Commit 674ad05

Browse files
committed
Refresh access-control selection state on screen entry
1 parent 4cc88a8 commit 674ad05

3 files changed

Lines changed: 19 additions & 4 deletions

File tree

app/src/screen/settings/AccessControlScreen.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ fun AccessControlScreen(navigator: Navigator) {
5959
val uiState by viewModel.uiState.collectAsState()
6060
val filteredApps by viewModel.filteredApps.collectAsState()
6161

62+
LaunchedEffect(viewModel) { viewModel.refreshSelection() }
63+
6264
var showSortMenu by remember { mutableStateOf(false) }
6365
var showOpsMenu by remember { mutableStateOf(false) }
6466
val mainListState = rememberLazyListState()

app/src/screen/settings/AccessControlViewModel.kt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,8 @@ class AccessControlViewModel(
7272
val apps: List<AppInfo> = emptyList(),
7373
val selectedPackages: Set<String> = emptySet(),
7474
/**
75-
* Snapshot of the selected packages taken when the screen loads. Selected-first sorting
76-
* only ever looks at this snapshot, so toggling apps never reorders the visible list —
77-
* newly selected apps float to the top on the next screen entry instead.
75+
* Selection snapshot used for ordering the currently visible list. It is refreshed when
76+
* the screen is entered, so changing a checkbox does not immediately move that row.
7877
*/
7978
val initialSelectedPackages: Set<String> = emptySet(),
8079
val searchQuery: String = "",
@@ -183,6 +182,20 @@ class AccessControlViewModel(
183182
}
184183
}
185184

185+
/**
186+
* Synchronize selection-related state when the screen becomes visible again. The ViewModel is
187+
* activity-scoped by the Compose Koin owner, so navigating away does not recreate it.
188+
*/
189+
fun refreshSelection() {
190+
val selectedPackages = settings.accessControlPackages.value
191+
_uiState.update { state ->
192+
state.copy(
193+
selectedPackages = selectedPackages,
194+
initialSelectedPackages = selectedPackages,
195+
)
196+
}
197+
}
198+
186199
private fun loadInstalledApps(): List<AppInfo> {
187200
val pm = getApplication<Application>().packageManager
188201
val selfPackageName = getApplication<Application>().packageName

kernel.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ external.mihomo.includeTimestamp=false
3232
# Golang build configuration
3333
golang.buildTags=foss,with_gvisor,cmfa
3434
golang.buildFlags=-trimpath,-ldflags,-s -w
35-
golang.packageName=cfa/native
35+
golang.packageName=cfa/native

0 commit comments

Comments
 (0)