in mobile/src/main/java/com/github/shadowsocks/ProfilesFragment.kt [360:377]
fun move(from: Int, to: Int) {
undoManager.flush()
val first = profiles[from]
var previousOrder = first.userOrder
val (step, range) = if (from < to) Pair(1, from until to) else Pair(-1, to + 1 downTo from)
for (i in range) {
val next = profiles[i + step]
val order = next.userOrder
next.userOrder = previousOrder
previousOrder = order
profiles[i] = next
updated.add(next)
}
first.userOrder = previousOrder
profiles[to] = first
updated.add(first)
notifyItemMoved(from, to)
}