diff --git a/app/src/main/java/com/laseroptek/raman/ui/screens/home/preset/PresetLoadPopup.kt b/app/src/main/java/com/laseroptek/raman/ui/screens/home/preset/PresetLoadPopup.kt index cd617ab..1863790 100644 --- a/app/src/main/java/com/laseroptek/raman/ui/screens/home/preset/PresetLoadPopup.kt +++ b/app/src/main/java/com/laseroptek/raman/ui/screens/home/preset/PresetLoadPopup.kt @@ -646,7 +646,7 @@ fun PresetLoadPopup( Timber.d("onClick - Confirm Save") // Check empty names and conflict priority exist in the preset viewmodel's presetList - val listToValidate = presetViewModel.presetList.value + var listToValidate = presetViewModel.presetList.value // Check for any presets with an empty name val hasEmptyName = @@ -678,18 +678,32 @@ fun PresetLoadPopup( } // Check for duplicate priorities (ignoring priority 0) - val priorityConflicts = listToValidate - .filter { it.priority > 0 } // Only consider prioritized items - .groupBy { it.priority } // Group them by priority - .any { it.value.size > 1 } // Check if any group is larger than 1 + val duplicatePriorityGroups = listToValidate + .filter { it.priority > 0 } + .groupBy { it.priority } + .filter { it.value.size > 1 } - if (priorityConflicts) { - Toast.makeText( - context, - "There are duplicate priorities. Please ensure each priority is unique.", - Toast.LENGTH_LONG - ).show() - return@noRippleClickable // Stop the process + if (duplicatePriorityGroups.isNotEmpty()) { + val resolvedList = listToValidate.map { it.copy() }.toMutableList() + val selectedPreset = resolvedList.getOrNull(selectedPresetIndex) + + duplicatePriorityGroups.forEach { (priorityValue, presets) -> + val keeperId = presets + .firstOrNull { preset -> + selectedPreset != null && preset.id == selectedPreset.id + } + ?.id + ?: presets.first().id + + resolvedList.forEachIndexed { index, preset -> + if (preset.priority == priorityValue && preset.id != keeperId) { + resolvedList[index] = preset.copy(priority = 0) + } + } + } + + presetViewModel.setPresetList(resolvedList) + listToValidate = resolvedList } Timber.d("Validation successful. Saving list to MainViewModel.")