diff --git a/app/src/main/java/net/helcel/beans/activity/MainScreen.kt b/app/src/main/java/net/helcel/beans/activity/MainScreen.kt index 97cb90c..a0e3923 100644 --- a/app/src/main/java/net/helcel/beans/activity/MainScreen.kt +++ b/app/src/main/java/net/helcel/beans/activity/MainScreen.kt @@ -50,8 +50,8 @@ class MainScreen : ComponentActivity() { super.onCreate(savedInstanceState) actionBar?.hide() Settings.start(this) - GeoLocImporter.importStates(this) Data.loadData(this, Int.MIN_VALUE) + GeoLocImporter.importStates(this) setContent { SysTheme { diff --git a/app/src/main/java/net/helcel/beans/activity/SettingsScreen.kt b/app/src/main/java/net/helcel/beans/activity/SettingsScreen.kt index 3af4eb5..4937db8 100644 --- a/app/src/main/java/net/helcel/beans/activity/SettingsScreen.kt +++ b/app/src/main/java/net/helcel/beans/activity/SettingsScreen.kt @@ -168,8 +168,10 @@ fun SettingsScreen(navController: NavHostController = settingsNav()) { EditPlaceDialog(true) { showEdit = false val g = Data.selected_group - if (it && g != null) + if (it && g != null) { Data.visits.reassignAllVisitedToGroup(g.key) + Data.saveData() + } } LazyColumn( @@ -216,8 +218,10 @@ fun SettingsScreen(navController: NavHostController = settingsNav()) { deleteMode = true, onDismiss = { val g = Data.selected_group - if (g != null) + if (g != null) { Data.visits.reassignAllVisitedToGroup(g.key) + Data.saveData() + } showDialog = false }) } diff --git a/app/src/main/java/net/helcel/beans/activity/sub/EditPlaceScreen.kt b/app/src/main/java/net/helcel/beans/activity/sub/EditPlaceScreen.kt index e82f94c..7aecfb7 100644 --- a/app/src/main/java/net/helcel/beans/activity/sub/EditPlaceScreen.kt +++ b/app/src/main/java/net/helcel/beans/activity/sub/EditPlaceScreen.kt @@ -54,23 +54,35 @@ fun EditPlaceScreenPreview(){ EditPlaceScreen(Group.EEE) } -fun syncVisited(loc: GeoLoc?=World.WWW){ +fun syncVisited(loc: GeoLoc?=World.WWW): Boolean { + var changed = false loc?.children?.forEach { tt -> tt.children.forEach {itc-> if(Data.visits.getVisited(itc) in listOf(AUTO_GROUP,NO_GROUP)) { - if(itc.children.any { c -> Data.visits.getVisited(c) != NO_GROUP }) - Data.visits.setVisited(itc, AUTO_GROUP) + val newState = if(itc.children.any { c -> Data.visits.getVisited(c) != NO_GROUP }) + AUTO_GROUP else - Data.visits.setVisited(itc, NO_GROUP) + NO_GROUP + + if (Data.visits.getVisited(itc) != newState) { + Data.visits.setVisited(itc, newState) + changed = true + } } } if(Data.visits.getVisited(tt) in listOf(AUTO_GROUP,NO_GROUP)) { - if(tt.children.any { itc -> Data.visits.getVisited(itc) != NO_GROUP }) - Data.visits.setVisited(tt, AUTO_GROUP) + val newState = if(tt.children.any { itc -> Data.visits.getVisited(itc) != NO_GROUP }) + AUTO_GROUP else - Data.visits.setVisited(tt, NO_GROUP) + NO_GROUP + + if (Data.visits.getVisited(tt) != newState) { + Data.visits.setVisited(tt, newState) + changed = true + } } } + return changed } @Composable @@ -84,7 +96,9 @@ fun EditPlaceScreen(loc: GeoLoc, onExit:()->Unit={}) { selectedTab = tabs.lastIndex } SideEffect { - syncVisited() + if (syncVisited()) { + Data.saveData() + } } BackHandler { if (tabs.size > 1) tabs.removeAt(tabs.lastIndex) @@ -144,6 +158,7 @@ fun EditPlaceScreen(loc: GeoLoc, onExit:()->Unit={}) { Data.visits.getVisited(itc)!= NO_GROUP } == true) AUTO_GROUP else NO_GROUP ) + Data.saveData() Data.selected_group = null } else { Data.selected_group = null diff --git a/app/src/main/java/net/helcel/beans/helper/Data.kt b/app/src/main/java/net/helcel/beans/helper/Data.kt index 38415a1..a110ea0 100644 --- a/app/src/main/java/net/helcel/beans/helper/Data.kt +++ b/app/src/main/java/net/helcel/beans/helper/Data.kt @@ -43,14 +43,14 @@ object Data { if (groups.size() == 0) { groups.setGroup(DEFAULT_GROUP, "Visited", ContextCompat.getColor(ctx, R.color.blue).toDrawable()) - saveData() } + saveData() } fun saveData() { if(groups.id != visits.id) return val id = groups.id - sharedPreferences.edit { + sharedPreferences.edit(commit=true) { putString("groups_$id", groupsSerial.writeTo(groups)) putString("visits_$id", visitsSerial.writeTo(visits)) } diff --git a/app/src/main/java/net/helcel/beans/helper/Groups.kt b/app/src/main/java/net/helcel/beans/helper/Groups.kt index 458aafe..6a1ac02 100644 --- a/app/src/main/java/net/helcel/beans/helper/Groups.kt +++ b/app/src/main/java/net/helcel/beans/helper/Groups.kt @@ -32,6 +32,8 @@ class Groups(val id: Int, @SerialName("grps") private val groups: HashMap> = _groupsFlow.asStateFlow() fun setGroup(key: Int, name: String, col: ColorDrawable) { + val old = groups[key] + if (old != null && old.name == name && old.color.color == col.color) return groups[key] = Group(key, name, col) _groupsFlow.value = groups.values.toList() } diff --git a/app/src/main/java/net/helcel/beans/helper/Visits.kt b/app/src/main/java/net/helcel/beans/helper/Visits.kt index a9254bb..dd2bc5a 100644 --- a/app/src/main/java/net/helcel/beans/helper/Visits.kt +++ b/app/src/main/java/net/helcel/beans/helper/Visits.kt @@ -19,7 +19,7 @@ class Visits(val id: Int, private val locs: HashMap) { val visitsFlow: StateFlow> = _visitsFlow fun setVisited(key: GeoLoc?, b: Int) { - if (key == null) + if (key == null || locs[key.code] == b) return _visitsFlow.value = _visitsFlow.value.toMutableMap().apply { this[key.code] = b