diff options
author | desperateCoder <echotodevnull@gmail.com> | 2019-10-26 19:44:11 +0300 |
---|---|---|
committer | desperateCoder <echotodevnull@gmail.com> | 2019-10-26 19:44:11 +0300 |
commit | 71bcdcf689126c090dce8518fbb347ad8c4520f1 (patch) | |
tree | 3062c9d73a263c1f0d60c307565e867859b09515 /app/src/main/java | |
parent | 15558a2de8f7f4af5983382272516f6006f897d6 (diff) |
closes #161 drag n drop positioning
Diffstat (limited to 'app/src/main/java')
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java | 84 |
1 files changed, 52 insertions, 32 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java index 078d38c2e..f46c28c2f 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java @@ -9,6 +9,7 @@ import androidx.lifecycle.MutableLiveData; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException; +import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; @@ -797,52 +798,71 @@ public class SyncManager { }); } + private void reorderLocally(List<FullCard> cardsOfNewStack, FullCard movedCard, long newStackId, int newOrder) { // set new stack and order - Card card = movedCard.getCard(); - int oldOrder = card.getOrder(); - long oldStackId = card.getStackId(); + Card movedInnerCard = movedCard.getCard(); + int oldOrder = movedInnerCard.getOrder(); + long oldStackId = movedInnerCard.getStackId(); + - int updateFromOrder; - int updateToOrder; - int offset = 1; + List<Card> changedCards = new ArrayList<>(); + + int startingAtOrder = newOrder; if (oldStackId == newStackId) { // card was only reordered in the same stack - card.setStatusEnum(card.getStatus() == DBStatus.LOCAL_MOVED.getId() ? DBStatus.LOCAL_MOVED : DBStatus.LOCAL_EDITED); + movedInnerCard.setStatusEnum(movedInnerCard.getStatus() == DBStatus.LOCAL_MOVED.getId() ? DBStatus.LOCAL_MOVED : DBStatus.LOCAL_EDITED); // move direction? if (oldOrder > newOrder) { - //up - updateFromOrder = newOrder; - updateToOrder = oldOrder; + // up + changedCards.add(movedCard.getCard()); + for (FullCard cardToUpdate : cardsOfNewStack) { + Card cardEntity = cardToUpdate.getCard(); + if (cardEntity.getOrder() < newOrder) { + continue; + } + if (cardEntity.getOrder() >= oldOrder) { + break; + } + changedCards.add(cardEntity); + } } else { // down - offset = -1; - updateFromOrder = oldOrder; - updateToOrder = newOrder; + startingAtOrder = oldOrder; + for (FullCard cardToUpdate : cardsOfNewStack) { + Card cardEntity = cardToUpdate.getCard(); + if (cardEntity.getOrder() <= oldOrder) { + continue; + } + if (cardEntity.getOrder() > newOrder) { + break; + } + changedCards.add(cardEntity); + } + changedCards.add(movedCard.getCard()); } } else { // card was moved to an other stack - card.setStatusEnum(DBStatus.LOCAL_MOVED); - updateFromOrder = newOrder; - updateToOrder = cardsOfNewStack.isEmpty() ? - updateFromOrder : - cardsOfNewStack.get(cardsOfNewStack.size() - 1).getCard().getOrder(); + movedInnerCard.setStackId(newStackId); + movedInnerCard.setStatusEnum(DBStatus.LOCAL_MOVED); + changedCards.add(movedCard.getCard()); + for (FullCard fullCard : cardsOfNewStack) { + // skip unchanged cards + if (fullCard.getCard().getOrder() < newOrder){ + continue; + } + changedCards.add(fullCard.getCard()); + } } + reorderAscending(changedCards, startingAtOrder); - // update cards up to source-order - for (FullCard cardToUpdate : cardsOfNewStack) { - Card cardEntity = cardToUpdate.getCard(); - if (cardEntity.getOrder() < updateFromOrder) { - continue; - } - if (cardEntity.getOrder() > updateToOrder) { - break; - } - cardEntity.setOrder(cardEntity.getOrder() + offset); - dataBaseAdapter.updateCard(cardEntity, true); + } + + private void reorderAscending(List<Card> cardsToReorganize, int startingAtOrder) { + for (Card card : cardsToReorganize) { + card.setOrder(startingAtOrder); + dataBaseAdapter.updateCard(card, card.getStatus() == DBStatus.UP_TO_DATE.getId()); + startingAtOrder++; } - card.setStackId(newStackId); - card.setOrder(newOrder); - dataBaseAdapter.updateCard(card, false); } } |