|
|
@ -216,35 +216,28 @@ class HabitCardListCache @Inject constructor(
|
|
|
|
if (type == STANDALONE_HABIT) {
|
|
|
|
if (type == STANDALONE_HABIT) {
|
|
|
|
val h = data.uuidToHabit[uuid]
|
|
|
|
val h = data.uuidToHabit[uuid]
|
|
|
|
if (h != null) {
|
|
|
|
if (h != null) {
|
|
|
|
val pos = data.habits.indexOf(h)
|
|
|
|
data.habits.removeAt(position)
|
|
|
|
data.habits.removeAt(pos)
|
|
|
|
|
|
|
|
data.removeWithUUID(uuid)
|
|
|
|
data.removeWithUUID(uuid)
|
|
|
|
data.positionTypes.removeAt(pos)
|
|
|
|
data.removeWithPos(position)
|
|
|
|
data.positionIndices.removeAt(pos)
|
|
|
|
data.decrementPositions(position + 1, data.positionTypes.size)
|
|
|
|
data.positionToHabit.remove(pos)
|
|
|
|
listener.onItemRemoved(position)
|
|
|
|
data.decrementPositions(pos + 1, data.positionTypes.size)
|
|
|
|
|
|
|
|
listener.onItemRemoved(pos)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (type == SUB_HABIT) {
|
|
|
|
} else if (type == SUB_HABIT) {
|
|
|
|
val h = data.uuidToHabit[uuid]
|
|
|
|
val h = data.uuidToHabit[uuid]
|
|
|
|
if (h != null) {
|
|
|
|
if (h != null) {
|
|
|
|
val pos = data.uuidToPosition[uuid]!!
|
|
|
|
|
|
|
|
val hgrUUID = h.parentUUID
|
|
|
|
val hgrUUID = h.parentUUID
|
|
|
|
val hgr = data.uuidToHabitGroup[hgrUUID]
|
|
|
|
val hgr = data.uuidToHabitGroup[hgrUUID]
|
|
|
|
val hgrIdx = data.habitGroups.indexOf(hgr)
|
|
|
|
val hgrIdx = data.habitGroups.indexOf(hgr)
|
|
|
|
data.subHabits[hgrIdx].remove(h)
|
|
|
|
data.subHabits[hgrIdx].remove(h)
|
|
|
|
data.removeWithUUID(uuid)
|
|
|
|
data.removeWithUUID(uuid)
|
|
|
|
data.positionTypes.removeAt(pos)
|
|
|
|
data.removeWithPos(position)
|
|
|
|
data.positionIndices.removeAt(pos)
|
|
|
|
data.decrementPositions(position + 1, data.positionTypes.size)
|
|
|
|
data.positionToHabit.remove(pos)
|
|
|
|
listener.onItemRemoved(position)
|
|
|
|
data.decrementPositions(pos + 1, data.positionTypes.size)
|
|
|
|
|
|
|
|
listener.onItemRemoved(pos)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (type == HABIT_GROUP) {
|
|
|
|
} else if (type == HABIT_GROUP) {
|
|
|
|
val hgr = data.uuidToHabitGroup[uuid]
|
|
|
|
val hgr = data.uuidToHabitGroup[uuid]
|
|
|
|
if (hgr != null) {
|
|
|
|
if (hgr != null) {
|
|
|
|
val pos = data.uuidToPosition[uuid]!!
|
|
|
|
val hgrIdx = data.positionIndices[position]
|
|
|
|
val hgrIdx = data.habitGroups.indexOf(hgr)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (habit in data.subHabits[hgrIdx].reversed()) {
|
|
|
|
for (habit in data.subHabits[hgrIdx].reversed()) {
|
|
|
|
val habitPos = data.uuidToPosition[habit.uuid]!!
|
|
|
|
val habitPos = data.uuidToPosition[habit.uuid]!!
|
|
|
@ -255,7 +248,7 @@ class HabitCardListCache @Inject constructor(
|
|
|
|
data.habitGroups.removeAt(hgrIdx)
|
|
|
|
data.habitGroups.removeAt(hgrIdx)
|
|
|
|
data.removeWithUUID(hgr.uuid)
|
|
|
|
data.removeWithUUID(hgr.uuid)
|
|
|
|
data.rebuildPositions()
|
|
|
|
data.rebuildPositions()
|
|
|
|
listener.onItemRemoved(pos)
|
|
|
|
listener.onItemRemoved(position)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -500,8 +493,7 @@ class HabitCardListCache @Inject constructor(
|
|
|
|
|
|
|
|
|
|
|
|
if (type == STANDALONE_HABIT) {
|
|
|
|
if (type == STANDALONE_HABIT) {
|
|
|
|
habits.removeAt(fromPosition)
|
|
|
|
habits.removeAt(fromPosition)
|
|
|
|
positionTypes.removeAt(fromPosition)
|
|
|
|
removeWithPos(fromPosition)
|
|
|
|
positionIndices.removeAt(fromPosition)
|
|
|
|
|
|
|
|
if (fromPosition < checkedToPosition) {
|
|
|
|
if (fromPosition < checkedToPosition) {
|
|
|
|
decrementPositions(fromPosition + 1, checkedToPosition)
|
|
|
|
decrementPositions(fromPosition + 1, checkedToPosition)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
@ -513,10 +505,9 @@ class HabitCardListCache @Inject constructor(
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
val hgr = uuidToHabitGroup[habit.parentUUID]
|
|
|
|
val hgr = uuidToHabitGroup[habit.parentUUID]
|
|
|
|
val hgrIdx = habitGroups.indexOf(hgr)
|
|
|
|
val hgrIdx = habitGroups.indexOf(hgr)
|
|
|
|
val fromIdx = subHabits[hgrIdx].indexOf(habit)
|
|
|
|
val fromIdx = positionIndices[fromPosition]
|
|
|
|
subHabits[hgrIdx].removeAt(fromIdx)
|
|
|
|
subHabits[hgrIdx].removeAt(fromIdx)
|
|
|
|
positionTypes.removeAt(fromPosition)
|
|
|
|
removeWithPos(fromPosition)
|
|
|
|
positionIndices.removeAt(fromPosition)
|
|
|
|
|
|
|
|
if (fromPosition < checkedToPosition) {
|
|
|
|
if (fromPosition < checkedToPosition) {
|
|
|
|
decrementPositions(fromPosition + 1, checkedToPosition)
|
|
|
|
decrementPositions(fromPosition + 1, checkedToPosition)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
@ -564,6 +555,12 @@ class HabitCardListCache @Inject constructor(
|
|
|
|
checkmarks.remove(uuid)
|
|
|
|
checkmarks.remove(uuid)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fun removeWithPos(pos: Int) {
|
|
|
|
|
|
|
|
positionTypes.removeAt(pos)
|
|
|
|
|
|
|
|
positionIndices.removeAt(pos)
|
|
|
|
|
|
|
|
positionToHabit.remove(pos)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Creates a new CacheData without any content.
|
|
|
|
* Creates a new CacheData without any content.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
@ -664,9 +661,9 @@ class HabitCardListCache @Inject constructor(
|
|
|
|
data.positionTypes.add(position, STANDALONE_HABIT)
|
|
|
|
data.positionTypes.add(position, STANDALONE_HABIT)
|
|
|
|
data.positionIndices.add(position, position)
|
|
|
|
data.positionIndices.add(position, position)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
val hgr = data.uuidToHabitGroup[habit.parentUUID]
|
|
|
|
val hgrPos = data.uuidToPosition[habit.parentUUID]!!
|
|
|
|
val hgrIdx = data.habitGroups.indexOf(hgr)
|
|
|
|
val hgrIdx = data.positionIndices[hgrPos]
|
|
|
|
val habitIndex = newData.subHabits[hgrIdx].indexOf(habit)
|
|
|
|
val habitIndex = newData.positionIndices[position]
|
|
|
|
data.subHabits[hgrIdx].add(habitIndex, habit)
|
|
|
|
data.subHabits[hgrIdx].add(habitIndex, habit)
|
|
|
|
data.positionTypes.add(position, SUB_HABIT)
|
|
|
|
data.positionTypes.add(position, SUB_HABIT)
|
|
|
|
data.positionIndices.add(position, habitIndex)
|
|
|
|
data.positionIndices.add(position, habitIndex)
|
|
|
@ -685,10 +682,13 @@ class HabitCardListCache @Inject constructor(
|
|
|
|
private fun performInsert(habitGroup: HabitGroup, position: Int) {
|
|
|
|
private fun performInsert(habitGroup: HabitGroup, position: Int) {
|
|
|
|
if (!data.isValidInsert(habitGroup, position)) return
|
|
|
|
if (!data.isValidInsert(habitGroup, position)) return
|
|
|
|
val uuid = habitGroup.uuid
|
|
|
|
val uuid = habitGroup.uuid
|
|
|
|
val prevIdx = newData.habitGroups.indexOf(habitGroup)
|
|
|
|
val prevIdx = newData.positionIndices[position]
|
|
|
|
val habitList = newData.subHabits[prevIdx]
|
|
|
|
val habitList = newData.subHabits[prevIdx]
|
|
|
|
var idx = data.habitGroups.indexOf(data.positionToHabitGroup[position])
|
|
|
|
val idx = if (data.positionIndices.size > position) {
|
|
|
|
if (idx < 0) idx = data.habitGroups.size
|
|
|
|
data.positionIndices[position]
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
data.habitGroups.size
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
data.habitGroups.add(idx, habitGroup)
|
|
|
|
data.habitGroups.add(idx, habitGroup)
|
|
|
|
data.subHabits.add(prevIdx, habitList)
|
|
|
|
data.subHabits.add(prevIdx, habitList)
|
|
|
@ -737,9 +737,9 @@ class HabitCardListCache @Inject constructor(
|
|
|
|
val newPosition = if (type == STANDALONE_HABIT) {
|
|
|
|
val newPosition = if (type == STANDALONE_HABIT) {
|
|
|
|
currentPosition
|
|
|
|
currentPosition
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
val hgr = data.uuidToHabitGroup[habit.parentUUID]
|
|
|
|
val hgrPos = data.uuidToPosition[habit.parentUUID]!!
|
|
|
|
val hgrIdx = data.habitGroups.indexOf(hgr)
|
|
|
|
val hgrIdx = data.positionIndices[hgrPos]
|
|
|
|
newData.subHabits[hgrIdx].indexOf(habit) + data.uuidToPosition[hgr!!.uuid]!! + 1
|
|
|
|
newData.subHabits[hgrIdx].indexOf(habit) + hgrPos + 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (prevPosition < 0) {
|
|
|
|
if (prevPosition < 0) {
|
|
|
|
performInsert(habit, newPosition)
|
|
|
|
performInsert(habit, newPosition)
|
|
|
|