Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordesperateCoder <echotodevnull@gmail.com>2019-10-26 19:44:11 +0300
committerdesperateCoder <echotodevnull@gmail.com>2019-10-26 19:44:11 +0300
commit71bcdcf689126c090dce8518fbb347ad8c4520f1 (patch)
tree3062c9d73a263c1f0d60c307565e867859b09515 /app/src/main
parent15558a2de8f7f4af5983382272516f6006f897d6 (diff)
closes #161 drag n drop positioning
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java84
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);
}
}