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;
public class TemplateDetailsViewModel extends ViewModel {
private final MutableLiveData<List<TemplateDetailsItem>> items =
new MutableLiveData<>(Collections.emptyList());
+ private final AtomicInteger syntheticItemId = new AtomicInteger(0);
private Long mPatternId;
private String mDefaultPatternName;
private boolean itemsLoaded = false;
- private final AtomicInteger syntheticItemId = new AtomicInteger(0);
-
public String getDefaultPatternName() {
return mDefaultPatternName;
}
ArrayList<TemplateDetailsItem> 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()));
}
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;
return result;
}
public void moveItem(int sourcePos, int targetPos) {
- ArrayList<TemplateDetailsItem> newList = new ArrayList<>(items.getValue());
- TemplateDetailsItem item = newList.remove(sourcePos);
- newList.add(targetPos, item);
+ final List<TemplateDetailsItem> 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<TemplateDetailsItem> newList = new ArrayList<>(items.getValue());
+ Logger.debug("tmpl", "Removing item at position " + position);
+ ArrayList<TemplateDetailsItem> 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