X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Ftemplates%2FTemplateDetailsViewModel.java;h=e1143c463cfb58e5735db1479429a5c4c373e1c6;hb=300a857888f8139304b5b863cedb2d3fa3a89d0f;hp=5d8ef18a084dddb696721a574aa7c25b92bcf3c1;hpb=2df070af07bb9b7803ea1de244a6cc547a0167cc;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsViewModel.java b/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsViewModel.java index 5d8ef18a..e1143c46 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsViewModel.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsViewModel.java @@ -24,6 +24,7 @@ import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModel; +import net.ktnx.mobileledger.BuildConfig; import net.ktnx.mobileledger.dao.TemplateAccountDAO; import net.ktnx.mobileledger.dao.TemplateHeaderDAO; import net.ktnx.mobileledger.db.DB; @@ -172,6 +173,7 @@ public class TemplateDetailsViewModel extends ViewModel { ArrayList l = new ArrayList<>(); TemplateDetailsItem header = TemplateDetailsItem.fromRoomObject(src.header); + Logger.debug("tmpl-db", "Got header template item with id of " + header.getId()); l.add(header); Collections.sort(src.accounts, (o1, o2) -> Long.compare(o1.getPosition(), o2.getPosition())); @@ -180,7 +182,7 @@ public class TemplateDetailsViewModel extends ViewModel { } for (TemplateDetailsItem i : l) { - Logger.debug("patterns-db", "Loaded pattern item " + i); + Logger.debug("tmpl-db", "Loaded pattern item " + i); } applyList(l, true); itemsLoaded = true; @@ -265,14 +267,62 @@ public class TemplateDetailsViewModel extends ViewModel { return result; } public void moveItem(int sourcePos, int targetPos) { - ArrayList newList = new ArrayList<>(items.getValue()); - TemplateDetailsItem item = newList.remove(sourcePos); - newList.add(targetPos, item); + final List newList = copyItems(); + + if (BuildConfig.DEBUG) { + Logger.debug("drag", "Before move:"); + for (int i = 1; i < newList.size(); i++) { + final TemplateDetailsItem item = newList.get(i); + Logger.debug("drag", + String.format(Locale.US, " %d: id %d, pos %d", i, item.getId(), + item.getPosition())); + } + } + + { + TemplateDetailsItem item = newList.remove(sourcePos); + newList.add(targetPos, item); + } + + // adjust affected items' positions + { + int startPos, endPos; + if (sourcePos < targetPos) { + // moved down + startPos = sourcePos; + endPos = targetPos; + } + else { + // moved up + startPos = targetPos; + endPos = sourcePos; + } + + for (int i = startPos; i <= endPos; i++) { + newList.get(i) + .setPosition(i); + } + } + + if (BuildConfig.DEBUG) { + Logger.debug("drag", "After move:"); + for (int i = 1; i < newList.size(); i++) { + final TemplateDetailsItem item = newList.get(i); + Logger.debug("drag", + String.format(Locale.US, " %d: id %d, pos %d", i, item.getId(), + item.getPosition())); + } + } + items.setValue(newList); } public void removeItem(int position) { - ArrayList newList = new ArrayList<>(items.getValue()); + Logger.debug("tmpl", "Removing item at position " + position); + ArrayList newList = copyItems(); newList.remove(position); + for (int i = position; i < newList.size(); i++) + newList.get(i) + .setPosition(i); applyList(newList); } } \ No newline at end of file