From 7f7f2026cb30737893187ab7397f0c8d09d75dcd Mon Sep 17 00:00:00 2001 From: kaajjo Date: Wed, 1 Jan 2025 19:22:58 +0300 Subject: [PATCH] fix(UndoRedoManager): IndexOutOfBoundsException when adding a state Fixes #123, fixes #126 --- .../libresudoku/core/utils/UndoRedoManager.kt | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/kaajjo/libresudoku/core/utils/UndoRedoManager.kt b/app/src/main/java/com/kaajjo/libresudoku/core/utils/UndoRedoManager.kt index 1c6c0fce..f3b79ddb 100644 --- a/app/src/main/java/com/kaajjo/libresudoku/core/utils/UndoRedoManager.kt +++ b/app/src/main/java/com/kaajjo/libresudoku/core/utils/UndoRedoManager.kt @@ -7,21 +7,20 @@ class UndoRedoManager(private val initialState: GameState) { private var states: MutableList = mutableListOf(initialState) private var currentState = 0 + /** + * Adds a new game state to the history of states. + * If the current state changes, all later states are removed. + * + * @param gameState The new game state to add. + */ fun addState(gameState: GameState) { - if (gameState == states[currentState]) { + if (currentState in states.indices && gameState == states[currentState]) { return } - val statesToDelete = mutableListOf() - for (i in states.indices - 1) { - if (i > currentState) { - statesToDelete.add(states[i]) - } + if (currentState < states.size - 1) { + states = states.subList(0, currentState + 1).toMutableList() } - statesToDelete.forEach { item -> - states.remove(item) - } - states.add(gameState) currentState = states.size - 1