diff options
7 files changed, 317 insertions, 320 deletions
diff --git a/app/build.gradle b/app/build.gradle index 30b670c2e..a9f4c895f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -33,6 +33,8 @@ android { } compileOptions { coreLibraryDesugaringEnabled true + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 } flavorDimensions "version" productFlavors { 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 f9723fa27..8507a2ab4 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 @@ -1,5 +1,8 @@ package it.niedermann.nextcloud.deck.persistence.sync; +import static java.net.HttpURLConnection.HTTP_NOT_MODIFIED; +import static java.net.HttpURLConnection.HTTP_UNAVAILABLE; + import android.annotation.SuppressLint; import android.content.Context; import android.database.sqlite.SQLiteConstraintException; @@ -23,14 +26,12 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.NoSuchElementException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.regex.Matcher; import java.util.regex.Pattern; import it.niedermann.nextcloud.deck.DeckLog; @@ -45,7 +46,6 @@ import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.Attachment; import it.niedermann.nextcloud.deck.model.Board; import it.niedermann.nextcloud.deck.model.Card; -import it.niedermann.nextcloud.deck.model.JoinCardWithUser; import it.niedermann.nextcloud.deck.model.Label; import it.niedermann.nextcloud.deck.model.Stack; import it.niedermann.nextcloud.deck.model.User; @@ -84,9 +84,6 @@ import it.niedermann.nextcloud.deck.persistence.sync.helpers.providers.partial.B import it.niedermann.nextcloud.deck.persistence.sync.helpers.providers.partial.BoardWithStacksAndLabelsUpSyncDataProvider; import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsAdapterItem; -import static java.net.HttpURLConnection.HTTP_NOT_MODIFIED; -import static java.net.HttpURLConnection.HTTP_UNAVAILABLE; - @SuppressWarnings("WeakerAccess") public class SyncManager { @@ -135,13 +132,13 @@ public class SyncManager { @WorkerThread public boolean synchronizeEverything() { - List<Account> accounts = dataBaseAdapter.getAllAccountsDirectly(); + final var accounts = dataBaseAdapter.getAllAccountsDirectly(); if (accounts.size() > 0) { - final AtomicBoolean success = new AtomicBoolean(true); - CountDownLatch latch = new CountDownLatch(accounts.size()); + final var success = new AtomicBoolean(true); + final var latch = new CountDownLatch(accounts.size()); try { - for (Account account : accounts) { - new SyncManager(dataBaseAdapter.getContext(), account.getName()).synchronize(new ResponseCallback<Boolean>(account) { + for (var account : accounts) { + new SyncManager(dataBaseAdapter.getContext(), account.getName()).synchronize(new ResponseCallback<>(account) { @Override public void onResponse(Boolean response) { success.set(success.get() && Boolean.TRUE.equals(response)); @@ -167,9 +164,9 @@ public class SyncManager { } @AnyThread - public void synchronizeBoard(@NonNull ResponseCallback<Boolean> responseCallback, long localBoadId) { + public void synchronizeBoard(@NonNull ResponseCallback<Boolean> responseCallback, long localBoardId) { executor.submit(() -> { - FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(responseCallback.getAccount().getId(), localBoadId); + FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(responseCallback.getAccount().getId(), localBoardId); try { syncHelperFactory.create(serverAdapter, dataBaseAdapter, null) .setResponseCallback(responseCallback) @@ -183,8 +180,8 @@ public class SyncManager { @AnyThread public void synchronizeCard(@NonNull ResponseCallback<Boolean> responseCallback, @NonNull Card card) { executor.submit(() -> { - FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); + final var stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); try { syncHelperFactory.create(serverAdapter, dataBaseAdapter, null) .setResponseCallback(responseCallback) @@ -197,32 +194,30 @@ public class SyncManager { @AnyThread public void synchronize(@NonNull ResponseCallback<Boolean> responseCallback) { - Account callbackAccount = responseCallback.getAccount(); + final var callbackAccount = responseCallback.getAccount(); if (callbackAccount == null) { throw new IllegalArgumentException(Account.class.getSimpleName() + " object in given " + ResponseCallback.class.getSimpleName() + " must not be null."); } - Long callbackAccountId = callbackAccount.getId(); + final var callbackAccountId = callbackAccount.getId(); if (callbackAccountId == null) { throw new IllegalArgumentException(Account.class.getSimpleName() + " object in given " + ResponseCallback.class.getSimpleName() + " must contain a valid id, but given id was null."); } executor.submit(() -> { - refreshCapabilities(new ResponseCallback<Capabilities>(responseCallback.getAccount()) { + refreshCapabilities(new ResponseCallback<>(responseCallback.getAccount()) { @Override public void onResponse(Capabilities response) { if (response != null && !response.isMaintenanceEnabled()) { if (response.getDeckVersion().isSupported()) { - long accountId = callbackAccountId; - Instant lastSyncDate = LastSyncUtil.getLastSyncDate(callbackAccountId); + final var lastSyncDate = LastSyncUtil.getLastSyncDate(callbackAccountId); + final var syncHelper = syncHelperFactory.create(serverAdapter, dataBaseAdapter, lastSyncDate); - final SyncHelper syncHelper = syncHelperFactory.create(serverAdapter, dataBaseAdapter, lastSyncDate); - - ResponseCallback<Boolean> callback = new ResponseCallback<Boolean>(callbackAccount) { + ResponseCallback<Boolean> callback = new ResponseCallback<>(callbackAccount) { @Override public void onResponse(Boolean response) { - syncHelper.setResponseCallback(new ResponseCallback<Boolean>(account) { + syncHelper.setResponseCallback(new ResponseCallback<>(account) { @Override public void onResponse(Boolean response) { - LastSyncUtil.setLastSyncDate(accountId, Instant.now()); + LastSyncUtil.setLastSyncDate(callbackAccountId, Instant.now()); responseCallback.onResponse(response); } @@ -320,7 +315,7 @@ public class SyncManager { public void createAccount(@NonNull Account account, @NonNull IResponseCallback<Account> callback) { executor.submit(() -> { try { - final Account createdAccount = dataBaseAdapter.createAccountDirectly(account); + final var createdAccount = dataBaseAdapter.createAccountDirectly(account); if (createdAccount == null) { throw new RuntimeException("Created account is null. Source: " + account); } @@ -343,7 +338,7 @@ public class SyncManager { }); } - @AnyThread + @MainThread public LiveData<Account> readAccount(long id) { return dataBaseAdapter.readAccount(id); } @@ -353,12 +348,12 @@ public class SyncManager { return dataBaseAdapter.readAccountDirectly(id); } - @AnyThread + @MainThread public LiveData<Account> readAccount(@Nullable String name) { return dataBaseAdapter.readAccount(name); } - @AnyThread + @MainThread public LiveData<List<Account>> readAccounts() { return dataBaseAdapter.readAccounts(); } @@ -382,13 +377,13 @@ public class SyncManager { */ @MainThread public LiveData<List<Account>> readAccountsForHostWithReadAccessToBoard(String host, long boardRemoteId) { - MediatorLiveData<List<Account>> liveData = new MediatorLiveData<>(); + final var liveData = new MediatorLiveData<List<Account>>(); liveData.addSource(dataBaseAdapter.readAccountsForHostWithReadAccessToBoard(host, boardRemoteId), accounts -> { liveData.postValue(accounts); executor.submit(() -> { - for (Account account : accounts) { + for (var account : accounts) { syncHelperFactory.create(serverAdapter, dataBaseAdapter, null) - .setResponseCallback(new ResponseCallback<Boolean>(account) { + .setResponseCallback(new ResponseCallback<>(account) { @Override public void onResponse(Boolean response) { liveData.postValue(dataBaseAdapter.readAccountsForHostWithReadAccessToBoardDirectly(host, boardRemoteId)); @@ -405,11 +400,11 @@ public class SyncManager { public Future<?> refreshCapabilities(@NonNull ResponseCallback<Capabilities> callback) { return executor.submit(() -> { try { - Account accountForEtag = dataBaseAdapter.getAccountByIdDirectly(callback.getAccount().getId()); - serverAdapter.getCapabilities(accountForEtag.getEtag(), new ResponseCallback<ParsedResponse<Capabilities>>(callback.getAccount()) { + final var accountForEtag = dataBaseAdapter.getAccountByIdDirectly(callback.getAccount().getId()); + serverAdapter.getCapabilities(accountForEtag.getEtag(), new ResponseCallback<>(callback.getAccount()) { @Override public void onResponse(ParsedResponse<Capabilities> response) { - Account acc = dataBaseAdapter.getAccountByIdDirectly(account.getId()); + final var acc = dataBaseAdapter.getAccountByIdDirectly(account.getId()); acc.applyCapabilities(response.getResponse(), response.getHeaders().get("ETag")); dataBaseAdapter.updateAccount(acc); callback.getAccount().setServerDeckVersion(acc.getServerDeckVersion()); @@ -420,11 +415,11 @@ public class SyncManager { @Override public void onError(Throwable throwable) { if (throwable instanceof NextcloudHttpRequestFailedException) { - final NextcloudHttpRequestFailedException requestFailedException = (NextcloudHttpRequestFailedException) throwable; + final var requestFailedException = (NextcloudHttpRequestFailedException) throwable; DeckLog.verbose("HTTP Status " + requestFailedException.getStatusCode()); if (requestFailedException.getStatusCode() == HTTP_UNAVAILABLE && requestFailedException.getCause() != null) { - final String errorString = requestFailedException.getCause().getMessage(); - final Capabilities capabilities = GsonConfig.getGson().fromJson(errorString, Capabilities.class); + final var errorString = requestFailedException.getCause().getMessage(); + final var capabilities = GsonConfig.getGson().fromJson(errorString, Capabilities.class); if (capabilities.isMaintenanceEnabled()) { DeckLog.verbose("Yes, it is in maintenance mode according to the capabilities"); executor.submit(() -> onResponse(ParsedResponse.of(capabilities))); @@ -436,12 +431,12 @@ public class SyncManager { DeckLog.verbose("HTTP Status", HTTP_NOT_MODIFIED + ": There haven't been any changes on the server side for this request."); // could be after maintenance. so we have to at least revert the maintenance flag executor.submit(() -> { - final Account acc = dataBaseAdapter.getAccountByIdDirectly(account.getId()); + final var acc = dataBaseAdapter.getAccountByIdDirectly(account.getId()); if (acc.isMaintenanceEnabled()) { acc.setMaintenanceEnabled(false); dataBaseAdapter.updateAccount(acc); } - final Capabilities capabilities = new Capabilities(); + final var capabilities = new Capabilities(); capabilities.setMaintenanceEnabled(false); capabilities.setDeckVersion(acc.getServerDeckVersionAsObject()); capabilities.setTextColor(acc.getTextColor()); @@ -520,12 +515,12 @@ public class SyncManager { @AnyThread public void createBoard(long accountId, @NonNull Board board, @NonNull IResponseCallback<FullBoard> callback) { executor.submit(() -> { - final Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - final User owner = dataBaseAdapter.getUserByUidDirectly(accountId, account.getUserName()); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var owner = dataBaseAdapter.getUserByUidDirectly(accountId, account.getUserName()); if (owner == null) { callback.onError(new IllegalStateException("Owner is null. This can be the case if the Deck app has never before been opened in the webinterface")); } else { - final FullBoard fullBoard = new FullBoard(); + final var fullBoard = new FullBoard(); board.setOwnerId(owner.getLocalId()); fullBoard.setOwner(owner); fullBoard.setBoard(board); @@ -546,26 +541,26 @@ public class SyncManager { @AnyThread public void cloneBoard(long originAccountId, long originBoardLocalId, long targetAccountId, @ColorInt int targetBoardColor, boolean cloneCards, @NonNull IResponseCallback<FullBoard> callback) { executor.submit(() -> { - Account originAccount = dataBaseAdapter.getAccountByIdDirectly(originAccountId); - User newOwner = dataBaseAdapter.getUserByUidDirectly(originAccountId, originAccount.getUserName()); + final var originAccount = dataBaseAdapter.getAccountByIdDirectly(originAccountId); + final var newOwner = dataBaseAdapter.getUserByUidDirectly(originAccountId, originAccount.getUserName()); if (newOwner == null) { callback.onError(new DeckException(DeckException.Hint.UNKNOWN_ACCOUNT_USER_ID, "User with Account-UID \"" + originAccount.getUserName() + "\" not found.")); return; } - FullBoard originalBoard = dataBaseAdapter.getFullBoardByLocalIdDirectly(originAccountId, originBoardLocalId); - String newBoardTitleBaseName = originalBoard.getBoard().getTitle().trim(); - int newBoardTitleCopyIndex = 0; + final var originalBoard = dataBaseAdapter.getFullBoardByLocalIdDirectly(originAccountId, originBoardLocalId); + var newBoardTitleBaseName = originalBoard.getBoard().getTitle().trim(); + var newBoardTitleCopyIndex = 0; //already a copy? - String regex = " \\(copy [0-9]+\\)$"; - Pattern pattern = Pattern.compile(regex); - Matcher matcher = pattern.matcher(originalBoard.getBoard().getTitle()); + final var regex = " \\(copy [0-9]+\\)$"; + final var pattern = Pattern.compile(regex); + final var matcher = pattern.matcher(originalBoard.getBoard().getTitle()); if (matcher.find()) { - String found = matcher.group(); + final var found = matcher.group(); newBoardTitleBaseName = newBoardTitleBaseName.substring(0, newBoardTitleBaseName.length() - found.length()); - Matcher indexMatcher = Pattern.compile("[0-9]+").matcher(found); + final var indexMatcher = Pattern.compile("[0-9]+").matcher(found); //noinspection ResultOfMethodCallIgnored indexMatcher.find(); - String oldIndexString = indexMatcher.group(); + final var oldIndexString = indexMatcher.group(); newBoardTitleCopyIndex = Integer.parseInt(oldIndexString); } @@ -585,14 +580,14 @@ public class SyncManager { originalBoard.getBoard().setOwnerId(newOwner.getLocalId()); originalBoard.setStatusEnum(DBStatus.LOCAL_EDITED); originalBoard.setOwner(newOwner); - long newBoardId = dataBaseAdapter.createBoardDirectly(originAccountId, originalBoard.getBoard()); + final var newBoardId = dataBaseAdapter.createBoardDirectly(originAccountId, originalBoard.getBoard()); originalBoard.setLocalId(newBoardId); - boolean isSameAccount = targetAccountId == originAccountId; + final var isSameAccount = targetAccountId == originAccountId; if (isSameAccount) { - List<AccessControl> aclList = originalBoard.getParticipants(); - for (AccessControl acl : aclList) { + final var aclList = originalBoard.getParticipants(); + for (var acl : aclList) { acl.setLocalId(null); acl.setId(null); acl.setBoardId(newBoardId); @@ -600,42 +595,42 @@ public class SyncManager { } } - Map<Long, Long> oldToNewLabelIdsDictionary = new HashMap<>(); + final var oldToNewLabelIdsDictionary = new HashMap<Long, Long>(); - for (Label label : originalBoard.getLabels()) { - Long oldLocalId = label.getLocalId(); + for (var label : originalBoard.getLabels()) { + final var oldLocalId = label.getLocalId(); label.setLocalId(null); label.setId(null); label.setAccountId(targetAccountId); label.setStatusEnum(DBStatus.LOCAL_EDITED); label.setBoardId(newBoardId); - long newLocalId = dataBaseAdapter.createLabelDirectly(targetAccountId, label); + final var newLocalId = dataBaseAdapter.createLabelDirectly(targetAccountId, label); oldToNewLabelIdsDictionary.put(oldLocalId, newLocalId); } - List<Stack> oldStacks = originalBoard.getStacks(); - for (Stack stack : oldStacks) { - Long oldStackId = stack.getLocalId(); + final var oldStacks = originalBoard.getStacks(); + for (var stack : oldStacks) { + final var oldStackId = stack.getLocalId(); stack.setLocalId(null); stack.setId(null); stack.setStatusEnum(DBStatus.LOCAL_EDITED); stack.setAccountId(targetAccountId); stack.setBoardId(newBoardId); - long createdStackId = dataBaseAdapter.createStack(targetAccountId, stack); + final var createdStackId = dataBaseAdapter.createStack(targetAccountId, stack); if (cloneCards) { - List<FullCard> oldCards = dataBaseAdapter.getFullCardsForStackDirectly(originAccountId, oldStackId, null); - for (FullCard oldCard : oldCards) { - Card newCard = oldCard.getCard(); + final var oldCards = dataBaseAdapter.getFullCardsForStackDirectly(originAccountId, oldStackId, null); + for (var oldCard : oldCards) { + final var newCard = oldCard.getCard(); newCard.setId(null); newCard.setUserId(newOwner.getLocalId()); newCard.setLocalId(null); newCard.setStackId(createdStackId); newCard.setAccountId(targetAccountId); newCard.setStatusEnum(DBStatus.LOCAL_EDITED); - long createdCardId = dataBaseAdapter.createCardDirectly(targetAccountId, newCard); + final var createdCardId = dataBaseAdapter.createCardDirectly(targetAccountId, newCard); if (oldCard.getLabels() != null) { - for (Label oldLabel : oldCard.getLabels()) { - Long newLabelId = oldToNewLabelIdsDictionary.get(oldLabel.getLocalId()); + for (var oldLabel : oldCard.getLabels()) { + final var newLabelId = oldToNewLabelIdsDictionary.get(oldLabel.getLocalId()); if (newLabelId != null) { dataBaseAdapter.createJoinCardWithLabel(newLabelId, createdCardId, DBStatus.LOCAL_EDITED); } else @@ -643,7 +638,7 @@ public class SyncManager { } } if (isSameAccount && oldCard.getAssignedUsers() != null) { - for (User assignedUser : oldCard.getAssignedUsers()) { + for (var assignedUser : oldCard.getAssignedUsers()) { dataBaseAdapter.createJoinCardWithUser(assignedUser.getLocalId(), createdCardId, DBStatus.LOCAL_EDITED); } } @@ -651,8 +646,8 @@ public class SyncManager { } } if (serverAdapter.hasInternetConnection()) { - Account targetAccount = dataBaseAdapter.getAccountByIdDirectly(targetAccountId); - ServerAdapter serverAdapterToUse = this.serverAdapter; + final var targetAccount = dataBaseAdapter.getAccountByIdDirectly(targetAccountId); + var serverAdapterToUse = this.serverAdapter; if (originAccountId != targetAccountId) { serverAdapterToUse = new ServerAdapter(appContext, targetAccount.getName()); } @@ -681,7 +676,7 @@ public class SyncManager { if (serverAdapter.hasInternetConnection()) { if (card.getId() != null) { syncHelperFactory.create(serverAdapter, dataBaseAdapter, null) - .setResponseCallback(new ResponseCallback<Boolean>(dataBaseAdapter.getAccountByIdDirectly(card.getAccountId())) { + .setResponseCallback(new ResponseCallback<>(dataBaseAdapter.getAccountByIdDirectly(card.getAccountId())) { @Override public void onResponse(Boolean response) { // do nothing @@ -698,10 +693,10 @@ public class SyncManager { @AnyThread public void addCommentToCard(long accountId, long cardId, @NonNull DeckComment comment) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - Card card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, cardId); - OcsComment commentEntity = OcsComment.of(comment); - new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).createEntity(new DeckCommentsDataProvider(null, card), commentEntity, new ResponseCallback<OcsComment>(account) { + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, cardId); + final var commentEntity = OcsComment.of(comment); + new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).createEntity(new DeckCommentsDataProvider(null, card), commentEntity, new ResponseCallback<>(account) { @Override public void onResponse(OcsComment response) { // nothing so far @@ -713,12 +708,12 @@ public class SyncManager { @AnyThread public void updateComment(long accountId, long localCardId, long localCommentId, String comment) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - Card card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, localCardId); - DeckComment entity = dataBaseAdapter.getCommentByLocalIdDirectly(accountId, localCommentId); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, localCardId); + final var entity = dataBaseAdapter.getCommentByLocalIdDirectly(accountId, localCommentId); entity.setMessage(comment); - OcsComment commentEntity = OcsComment.of(entity); - new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).updateEntity(new DeckCommentsDataProvider(null, card), commentEntity, new ResponseCallback<OcsComment>(account) { + final var commentEntity = OcsComment.of(entity); + new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).updateEntity(new DeckCommentsDataProvider(null, card), commentEntity, new ResponseCallback<>(account) { @Override public void onResponse(OcsComment response) { // nothing so far @@ -730,10 +725,10 @@ public class SyncManager { @AnyThread public void deleteComment(long accountId, long localCardId, long localCommentId, @NonNull IResponseCallback<Void> callback) { executor.submit(() -> { - final Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - final Card card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, localCardId); - final DeckComment entity = dataBaseAdapter.getCommentByLocalIdDirectly(accountId, localCommentId); - final OcsComment commentEntity = OcsComment.of(entity); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, localCardId); + final var entity = dataBaseAdapter.getCommentByLocalIdDirectly(accountId, localCommentId); + final var commentEntity = OcsComment.of(entity); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).deleteEntity(new DeckCommentsDataProvider(null, card), commentEntity, ResponseCallback.from(account, callback)); }); @@ -746,9 +741,9 @@ public class SyncManager { @AnyThread public void deleteBoard(@NonNull Board board, @NonNull IResponseCallback<Void> callback) { executor.submit(() -> { - long accountId = board.getAccountId(); - Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - FullBoard fullBoard = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, board.getLocalId()); + final var accountId = board.getAccountId(); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var fullBoard = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, board.getLocalId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).deleteEntity(new BoardDataProvider(), fullBoard, ResponseCallback.from(account, callback)); }); } @@ -756,8 +751,8 @@ public class SyncManager { @AnyThread public void updateBoard(@NonNull FullBoard board, @NonNull IResponseCallback<FullBoard> callback) { executor.submit(() -> { - long accountId = board.getAccountId(); - Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var accountId = board.getAccountId(); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).updateEntity(new BoardDataProvider(), board, ResponseCallback.from(account, callback)); }); } @@ -778,8 +773,8 @@ public class SyncManager { @AnyThread public void createAccessControl(long accountId, @NonNull AccessControl entity, @NonNull IResponseCallback<AccessControl> callback) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, entity.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var board = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, entity.getBoardId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).createEntity( new AccessControlDataProvider(null, board, Collections.singletonList(entity)), entity, ResponseCallback.from(account, callback), ((entity1, response) -> { response.setBoardId(entity.getBoardId()); @@ -801,8 +796,8 @@ public class SyncManager { @AnyThread public void updateAccessControl(@NonNull AccessControl entity, @NonNull IResponseCallback<AccessControl> callback) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(entity.getAccountId()); - FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(entity.getAccountId(), entity.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(entity.getAccountId()); + final var board = dataBaseAdapter.getFullBoardByLocalIdDirectly(entity.getAccountId(), entity.getBoardId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).updateEntity( new AccessControlDataProvider(null, board, Collections.singletonList(entity)), entity, ResponseCallback.from(account, callback)); }); @@ -811,8 +806,8 @@ public class SyncManager { @AnyThread public void deleteAccessControl(@NonNull AccessControl entity, @NonNull IResponseCallback<Void> callback) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(entity.getAccountId()); - FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(entity.getAccountId(), entity.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(entity.getAccountId()); + final var board = dataBaseAdapter.getFullBoardByLocalIdDirectly(entity.getAccountId(), entity.getBoardId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).deleteEntity( new AccessControlDataProvider(null, board, Collections.singletonList(entity)), entity, new ResponseCallback<Void>(account) { @Override @@ -844,10 +839,10 @@ public class SyncManager { @AnyThread public void createStack(long accountId, @NonNull String title, long boardLocalId, @NonNull IResponseCallback<FullStack> callback) { executor.submit(() -> { - Stack stack = new Stack(title, boardLocalId); - Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, stack.getBoardId()); - FullStack fullStack = new FullStack(); + final var stack = new Stack(title, boardLocalId); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var board = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, stack.getBoardId()); + final var fullStack = new FullStack(); stack.setOrder(dataBaseAdapter.getHighestStackOrderInBoard(stack.getBoardId()) + 1); stack.setAccountId(accountId); stack.setBoardId(board.getLocalId()); @@ -860,9 +855,9 @@ public class SyncManager { @AnyThread public void deleteStack(long accountId, long stackLocalId, long boardLocalId, @NonNull IResponseCallback<Void> callback) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - FullStack fullStack = dataBaseAdapter.getFullStackByLocalIdDirectly(stackLocalId); - FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, boardLocalId); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var fullStack = dataBaseAdapter.getFullStackByLocalIdDirectly(stackLocalId); + final var board = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, boardLocalId); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).deleteEntity(new StackDataProvider(null, board), fullStack, ResponseCallback.from(account, callback)); }); } @@ -870,9 +865,9 @@ public class SyncManager { @AnyThread public void updateStackTitle(long localStackId, @NonNull String newTitle, @NonNull IResponseCallback<FullStack> callback) { executor.submit(() -> { - FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(localStackId); - FullBoard fullBoard = dataBaseAdapter.getFullBoardByLocalIdDirectly(stack.getAccountId(), stack.getStack().getBoardId()); - Account account = dataBaseAdapter.getAccountByIdDirectly(stack.getAccountId()); + final var stack = dataBaseAdapter.getFullStackByLocalIdDirectly(localStackId); + final var fullBoard = dataBaseAdapter.getFullBoardByLocalIdDirectly(stack.getAccountId(), stack.getStack().getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(stack.getAccountId()); stack.getStack().setTitle(newTitle); updateStack(account, fullBoard, stack, callback); }); @@ -894,15 +889,15 @@ public class SyncManager { @AnyThread public void reorderStack(long accountId, long boardLocalId, long stackLocalId, boolean moveToRight) { executor.submit(() -> { - final Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - final FullBoard fullBoard = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, boardLocalId); - final List<FullStack> stacks = dataBaseAdapter.getFullStacksForBoardDirectly(accountId, boardLocalId); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var fullBoard = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, boardLocalId); + final var stacks = dataBaseAdapter.getFullStacksForBoardDirectly(accountId, boardLocalId); - int lastOrderValue = -1; - boolean moveDone = false; + var lastOrderValue = -1; + var moveDone = false; for (int i = 0; i < stacks.size(); i++) { - FullStack s = stacks.get(i); - boolean currentStackChanged = false; + final var s = stacks.get(i); + var currentStackChanged = false; // ensure order validity if (lastOrderValue >= s.getStack().getOrder()) { s.getStack().setOrder(lastOrderValue + 1); @@ -911,7 +906,7 @@ public class SyncManager { lastOrderValue = s.getStack().getOrder(); if (!moveDone && i < stacks.size() - 1 && (moveToRight ? s : stacks.get(i + 1)).getLocalId() == stackLocalId) { - FullStack rightStack = stacks.get(i + 1); + final var rightStack = stacks.get(i + 1); // fix orders rightStack.getStack().setOrder(lastOrderValue); s.getStack().setOrder(lastOrderValue + 1); @@ -949,7 +944,7 @@ public class SyncManager { // TODO implement, see https://github.com/stefan-niedermann/nextcloud-deck/issues/395 public LiveData<List<FullCard>> getArchivedFullCardsForBoard(long accountId, long localBoardId) { - MutableLiveData<List<FullCard>> dummyData = new MutableLiveData<>(); + final var dummyData = new MutableLiveData<List<FullCard>>(); dummyData.postValue(new ArrayList<>()); return dummyData; } @@ -983,34 +978,34 @@ public class SyncManager { @AnyThread public void createFullCard(long accountId, long localBoardId, long localStackId, @NonNull FullCard card, @NonNull IResponseCallback<FullCard> callback) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - User owner = dataBaseAdapter.getUserByUidDirectly(accountId, account.getUserName()); - FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(localStackId); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(localBoardId); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var owner = dataBaseAdapter.getUserByUidDirectly(accountId, account.getUserName()); + final var stack = dataBaseAdapter.getFullStackByLocalIdDirectly(localStackId); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(localBoardId); card.getCard().setUserId(owner.getLocalId()); card.getCard().setStackId(stack.getLocalId()); card.getCard().setAccountId(accountId); card.getCard().setStatusEnum(DBStatus.LOCAL_EDITED); card.getCard().setOrder(dataBaseAdapter.getHighestCardOrderInStack(localStackId) + 1); - long localCardId = dataBaseAdapter.createCardDirectly(accountId, card.getCard()); + final var localCardId = dataBaseAdapter.createCardDirectly(accountId, card.getCard()); card.getCard().setLocalId(localCardId); - List<User> assignedUsers = card.getAssignedUsers(); + final var assignedUsers = card.getAssignedUsers(); if (assignedUsers != null) { for (User assignedUser : assignedUsers) { dataBaseAdapter.createJoinCardWithUser(assignedUser.getLocalId(), localCardId, DBStatus.LOCAL_EDITED); } } - List<Label> labels = card.getLabels(); + final var labels = card.getLabels(); if (labels != null) { - for (Label label : labels) { + for (var label : labels) { dataBaseAdapter.createJoinCardWithLabel(label.getLocalId(), localCardId, DBStatus.LOCAL_EDITED); } } if (card.getAttachments() != null) { - for (Attachment attachment : card.getAttachments()) { + for (var attachment : card.getAttachments()) { if (attachment.getLocalId() == null) { attachment.setCardId(localCardId); dataBaseAdapter.createAttachment(accountId, attachment); @@ -1020,7 +1015,7 @@ public class SyncManager { if (serverAdapter.hasInternetConnection()) { syncHelperFactory.create(serverAdapter, dataBaseAdapter, null) - .setResponseCallback(new ResponseCallback<Boolean>(account) { + .setResponseCallback(new ResponseCallback<>(account) { @Override public void onResponse(Boolean response) { callback.onResponse(card); @@ -1046,13 +1041,13 @@ public class SyncManager { @AnyThread public void deleteCard(@NonNull Card card, @NonNull IResponseCallback<Void> callback) { executor.submit(() -> { - FullCard fullCard = dataBaseAdapter.getFullCardByLocalIdDirectly(card.getAccountId(), card.getLocalId()); + final var fullCard = dataBaseAdapter.getFullCardByLocalIdDirectly(card.getAccountId(), card.getLocalId()); if (fullCard == null) { throw new IllegalArgumentException("card with id " + card.getLocalId() + " to delete does not exist."); } - Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); - FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + final var stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).deleteEntity(new CardPropagationDataProvider(null, board, stack), fullCard, ResponseCallback.from(account, callback)); }); } @@ -1060,9 +1055,9 @@ public class SyncManager { @AnyThread public void archiveCard(@NonNull FullCard card, @NonNull IResponseCallback<FullCard> callback) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); - FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getCard().getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + final var stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getCard().getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); card.getCard().setArchived(true); updateCardForArchive(stack, board, card, ResponseCallback.from(account, callback)); }); @@ -1075,9 +1070,9 @@ public class SyncManager { @AnyThread public void dearchiveCard(@NonNull FullCard card, @NonNull IResponseCallback<FullCard> callback) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); - FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getCard().getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + final var stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getCard().getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); card.getCard().setArchived(false); updateCardForArchive(stack, board, card, ResponseCallback.from(account, callback)); }); @@ -1086,22 +1081,22 @@ public class SyncManager { @AnyThread public void archiveCardsInStack(long accountId, long stackLocalId, @NonNull FilterInformation filterInformation, @NonNull IResponseCallback<Void> callback) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(stackLocalId); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); - List<FullCard> cards = dataBaseAdapter.getFullCardsForStackDirectly(accountId, stackLocalId, filterInformation); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var stack = dataBaseAdapter.getFullStackByLocalIdDirectly(stackLocalId); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); + final var cards = dataBaseAdapter.getFullCardsForStackDirectly(accountId, stackLocalId, filterInformation); if (cards.size() <= 0) { callback.onResponse(null); return; } - final CountDownLatch latch = new CountDownLatch(cards.size()); - for (FullCard card : cards) { + final var latch = new CountDownLatch(cards.size()); + for (var card : cards) { if (card.getCard().isArchived()) { latch.countDown(); continue; } card.getCard().setArchived(true); - updateCardForArchive(stack, board, card, new ResponseCallback<FullCard>(account) { + updateCardForArchive(stack, board, card, new ResponseCallback<>(account) { @Override public void onResponse(FullCard response) { latch.countDown(); @@ -1128,7 +1123,7 @@ public class SyncManager { public void archiveBoard(@NonNull Board board, @NonNull IResponseCallback<FullBoard> callback) { executor.submit(() -> { try { - FullBoard b = dataBaseAdapter.getFullBoardByLocalIdDirectly(board.getAccountId(), board.getLocalId()); + final var b = dataBaseAdapter.getFullBoardByLocalIdDirectly(board.getAccountId(), board.getLocalId()); b.getBoard().setArchived(true); updateBoard(b, callback); } catch (Throwable e) { @@ -1141,7 +1136,7 @@ public class SyncManager { public void dearchiveBoard(@NonNull Board board, @NonNull IResponseCallback<FullBoard> callback) { executor.submit(() -> { try { - FullBoard b = dataBaseAdapter.getFullBoardByLocalIdDirectly(board.getAccountId(), board.getLocalId()); + final var b = dataBaseAdapter.getFullBoardByLocalIdDirectly(board.getAccountId(), board.getLocalId()); b.getBoard().setArchived(false); updateBoard(b, callback); } catch (Throwable e) { @@ -1153,39 +1148,39 @@ public class SyncManager { @AnyThread public void updateCard(@NonNull FullCard card, @NonNull IResponseCallback<FullCard> callback) { executor.submit(() -> { - final FullCard fullCardFromDB = dataBaseAdapter.getFullCardByLocalIdDirectly(card.getAccountId(), card.getLocalId()); + final var fullCardFromDB = dataBaseAdapter.getFullCardByLocalIdDirectly(card.getAccountId(), card.getLocalId()); if (fullCardFromDB == null) { throw new IllegalArgumentException("card to update does not exist."); } dataBaseAdapter.filterRelationsForCard(fullCardFromDB); - List<User> deletedUsers = AbstractSyncDataProvider.findDelta(card.getAssignedUsers(), fullCardFromDB.getAssignedUsers()); - List<User> addedUsers = AbstractSyncDataProvider.findDelta(fullCardFromDB.getAssignedUsers(), card.getAssignedUsers()); - for (User addedUser : addedUsers) { + final var deletedUsers = AbstractSyncDataProvider.findDelta(card.getAssignedUsers(), fullCardFromDB.getAssignedUsers()); + final var addedUsers = AbstractSyncDataProvider.findDelta(fullCardFromDB.getAssignedUsers(), card.getAssignedUsers()); + for (var addedUser : addedUsers) { dataBaseAdapter.createJoinCardWithUser(addedUser.getLocalId(), card.getLocalId(), DBStatus.LOCAL_EDITED); } - for (User deletedUser : deletedUsers) { + for (var deletedUser : deletedUsers) { dataBaseAdapter.deleteJoinedUserForCard(card.getLocalId(), deletedUser.getLocalId()); } - List<Label> deletedLabels = AbstractSyncDataProvider.findDelta(card.getLabels(), fullCardFromDB.getLabels()); - List<Label> addedLabels = AbstractSyncDataProvider.findDelta(fullCardFromDB.getLabels(), card.getLabels()); - for (Label addedLabel : addedLabels) { + final var deletedLabels = AbstractSyncDataProvider.findDelta(card.getLabels(), fullCardFromDB.getLabels()); + final var addedLabels = AbstractSyncDataProvider.findDelta(fullCardFromDB.getLabels(), card.getLabels()); + for (var addedLabel : addedLabels) { dataBaseAdapter.createJoinCardWithLabel(addedLabel.getLocalId(), card.getLocalId(), DBStatus.LOCAL_EDITED); } - for (Label deletedLabel : deletedLabels) { + for (var deletedLabel : deletedLabels) { dataBaseAdapter.deleteJoinedLabelForCard(card.getLocalId(), deletedLabel.getLocalId()); } - FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getCard().getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); + final var stack = dataBaseAdapter.getFullStackByLocalIdDirectly(card.getCard().getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getStack().getBoardId()); fullCardFromDB.setCard(card.getCard()); card.getCard().setStatus(DBStatus.LOCAL_EDITED.getId()); dataBaseAdapter.updateCard(card.getCard(), false); if (serverAdapter.hasInternetConnection()) { - Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); syncHelperFactory.create(serverAdapter, dataBaseAdapter, null) - .setResponseCallback(new ResponseCallback<Boolean>(account) { + .setResponseCallback(new ResponseCallback<>(account) { @Override public void onResponse(Boolean response) { callback.onResponse(dataBaseAdapter.getFullCardByLocalIdDirectly(card.getAccountId(), card.getLocalId())); @@ -1227,9 +1222,9 @@ public class SyncManager { @AnyThread public void moveCard(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId, @NonNull IResponseCallback<Void> callback) { executor.submit(() -> { - final FullCard originalCard = dataBaseAdapter.getFullCardByLocalIdDirectly(originAccountId, originCardLocalId); - final int newIndex = dataBaseAdapter.getHighestCardOrderInStack(targetStackLocalId) + 1; - final FullBoard originalBoard = dataBaseAdapter.getFullBoardByLocalCardIdDirectly(originCardLocalId); + final var originalCard = dataBaseAdapter.getFullCardByLocalIdDirectly(originAccountId, originCardLocalId); + final var newIndex = dataBaseAdapter.getHighestCardOrderInStack(targetStackLocalId) + 1; + final var originalBoard = dataBaseAdapter.getFullBoardByLocalCardIdDirectly(originCardLocalId); // ### maybe shortcut possible? (just moved to another stack) if (targetBoardLocalId == originalBoard.getLocalId()) { reorder(originAccountId, originalCard, targetStackLocalId, newIndex); @@ -1237,7 +1232,7 @@ public class SyncManager { return; } // ### get rid of original card where it is now. - final Card originalInnerCard = originalCard.getCard(); + final var originalInnerCard = originalCard.getCard(); deleteCard(new Card(originalInnerCard), IResponseCallback.empty()); // ### clone card itself // TODO Why not use copy constructor? Attention, something might missing, e. g. accountId @@ -1250,20 +1245,20 @@ public class SyncManager { originalInnerCard.setArchived(false); originalInnerCard.setAttachmentCount(0); originalInnerCard.setCommentsUnread(0); - final FullCard fullCardForServerPropagation = new FullCard(); + final var fullCardForServerPropagation = new FullCard(); fullCardForServerPropagation.setCard(originalInnerCard); - final Account targetAccount = dataBaseAdapter.getAccountByIdDirectly(targetAccountId); - final FullBoard targetBoard = dataBaseAdapter.getFullBoardByLocalIdDirectly(targetAccountId, targetBoardLocalId); - final FullStack targetFullStack = dataBaseAdapter.getFullStackByLocalIdDirectly(targetStackLocalId); - final User userOfTargetAccount = dataBaseAdapter.getUserByUidDirectly(targetAccountId, targetAccount.getUserName()); - final CountDownLatch latch = new CountDownLatch(1); + final var targetAccount = dataBaseAdapter.getAccountByIdDirectly(targetAccountId); + final var targetBoard = dataBaseAdapter.getFullBoardByLocalIdDirectly(targetAccountId, targetBoardLocalId); + final var targetFullStack = dataBaseAdapter.getFullStackByLocalIdDirectly(targetStackLocalId); + final var userOfTargetAccount = dataBaseAdapter.getUserByUidDirectly(targetAccountId, targetAccount.getUserName()); + final var latch = new CountDownLatch(1); - ServerAdapter serverToUse = serverAdapter; + var serverToUse = serverAdapter; if (originAccountId != targetAccountId) { serverToUse = new ServerAdapter(appContext, targetAccount.getName()); } - new DataPropagationHelper(serverToUse, dataBaseAdapter, executor).createEntity(new CardPropagationDataProvider(null, targetBoard.getBoard(), targetFullStack), fullCardForServerPropagation, new ResponseCallback<FullCard>(targetAccount) { + new DataPropagationHelper(serverToUse, dataBaseAdapter, executor).createEntity(new CardPropagationDataProvider(null, targetBoard.getBoard(), targetFullStack), fullCardForServerPropagation, new ResponseCallback<>(targetAccount) { @Override public void onResponse(FullCard response) { originalInnerCard.setId(response.getId()); @@ -1276,7 +1271,7 @@ public class SyncManager { public void onError(Throwable throwable) { callback.onError(new RuntimeException("unable to create card in moveCard target", throwable)); } - }, (FullCard entity, FullCard response) -> { + }, (entity, response) -> { response.getCard().setUserId(userOfTargetAccount.getLocalId()); response.getCard().setStackId(targetFullStack.getLocalId()); entity.getCard().setUserId(userOfTargetAccount.getLocalId()); @@ -1289,15 +1284,15 @@ public class SyncManager { callback.onError(new RuntimeException("error fulfilling countDownLatch", e)); } - final long newCardId = originalInnerCard.getLocalId(); + final var newCardId = originalInnerCard.getLocalId(); // ### clone labels, assign them // prepare // has user of targetaccount manage permissions? - boolean hasManagePermission = targetBoard.getBoard().getOwnerId() == userOfTargetAccount.getLocalId(); - List<AccessControl> aclOfTargetBoard = dataBaseAdapter.getAccessControlByLocalBoardIdDirectly(targetAccountId, targetBoard.getLocalId()); + var hasManagePermission = targetBoard.getBoard().getOwnerId() == userOfTargetAccount.getLocalId(); + final var aclOfTargetBoard = dataBaseAdapter.getAccessControlByLocalBoardIdDirectly(targetAccountId, targetBoard.getLocalId()); if (!hasManagePermission) { - for (AccessControl accessControl : aclOfTargetBoard) { + for (var accessControl : aclOfTargetBoard) { if (accessControl.getUserId().equals(userOfTargetAccount.getLocalId()) && accessControl.isPermissionManage()) { hasManagePermission = true; break; @@ -1306,10 +1301,10 @@ public class SyncManager { } // actual doing - for (Label originalLabel : originalCard.getLabels()) { + for (var originalLabel : originalCard.getLabels()) { // already exists? Label existingMatch = null; - for (Label targetBoardLabel : targetBoard.getLabels()) { + for (var targetBoardLabel : targetBoard.getLabels()) { if (originalLabel.getTitle().trim().equalsIgnoreCase(targetBoardLabel.getTitle().trim())) { existingMatch = targetBoardLabel; break; @@ -1330,14 +1325,14 @@ public class SyncManager { } // ### Clone assigned users - final Account originalAccount = dataBaseAdapter.getAccountByIdDirectly(originAccountId); + final var originalAccount = dataBaseAdapter.getAccountByIdDirectly(originAccountId); // same instance? otherwise doesn't make sense if (originalAccount.getUrl().equalsIgnoreCase(targetAccount.getUrl())) { - for (User assignedUser : originalCard.getAssignedUsers()) { + for (var assignedUser : originalCard.getAssignedUsers()) { // has assignedUser at least view permissions? - boolean hasViewPermission = targetBoard.getBoard().getOwnerId() == assignedUser.getLocalId(); + var hasViewPermission = targetBoard.getBoard().getOwnerId() == assignedUser.getLocalId(); if (!hasViewPermission) { - for (AccessControl accessControl : aclOfTargetBoard) { + for (var accessControl : aclOfTargetBoard) { if (accessControl.getUserId().equals(userOfTargetAccount.getLocalId())) { // ACL exists, so viewing is granted hasViewPermission = true; @@ -1357,13 +1352,13 @@ public class SyncManager { @AnyThread public void createLabel(long accountId, Label label, long localBoardId, @NonNull IResponseCallback<Label> callback) { executor.submit(() -> { - Label existing = dataBaseAdapter.getLabelByBoardIdAndTitleDirectly(label.getBoardId(), label.getTitle()); + final var existing = dataBaseAdapter.getLabelByBoardIdAndTitleDirectly(label.getBoardId(), label.getTitle()); if (existing != null) { callback.onError(new SQLiteConstraintException("label \"" + label.getTitle() + "\" already exists for this board!")); return; } - Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(localBoardId); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(localBoardId); label.setAccountId(accountId); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).createEntity(new LabelDataProvider(null, board, null), label, ResponseCallback.from(account, callback), (entity, response) -> response.setBoardId(board.getLocalId())); }); @@ -1375,10 +1370,10 @@ public class SyncManager { @AnyThread private MutableLiveData<Label> createAndAssignLabelToCard(long accountId, @NonNull Label label, long localCardId, ServerAdapter serverAdapterToUse) { - MutableLiveData<Label> liveData = new MutableLiveData<>(); + final var liveData = new MutableLiveData<Label>(); executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); - Board board = dataBaseAdapter.getBoardByLocalCardIdDirectly(localCardId); + final var account = dataBaseAdapter.getAccountByIdDirectly(accountId); + final var board = dataBaseAdapter.getBoardByLocalCardIdDirectly(localCardId); label.setAccountId(accountId); new DataPropagationHelper(serverAdapterToUse, dataBaseAdapter, executor).createEntity(new LabelDataProvider(null, board, null), label, new ResponseCallback<Label>(account) { @Override @@ -1402,8 +1397,8 @@ public class SyncManager { @AnyThread public void deleteLabel(@NonNull Label label, @NonNull IResponseCallback<Void> callback) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(label.getAccountId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(label.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(label.getAccountId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(label.getBoardId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor) .deleteEntity(new LabelDataProvider(null, board, Collections.emptyList()), label, ResponseCallback.from(account, callback)); }); @@ -1412,8 +1407,8 @@ public class SyncManager { @AnyThread public void updateLabel(@NonNull Label label, @NonNull IResponseCallback<Label> callback) { executor.submit(() -> { - Account account = dataBaseAdapter.getAccountByIdDirectly(label.getAccountId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(label.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(label.getAccountId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(label.getBoardId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor) .updateEntity(new LabelDataProvider(null, board, Collections.emptyList()), label, ResponseCallback.from(account, callback)); }); @@ -1422,18 +1417,18 @@ public class SyncManager { @AnyThread public void assignUserToCard(@NonNull User user, @NonNull Card card) { executor.submit(() -> { - final long localUserId = user.getLocalId(); - final long localCardId = card.getLocalId(); - JoinCardWithUser joinCardWithUser = dataBaseAdapter.getJoinCardWithUser(localUserId, localCardId); + final var localUserId = user.getLocalId(); + final var localCardId = card.getLocalId(); + final var joinCardWithUser = dataBaseAdapter.getJoinCardWithUser(localUserId, localCardId); if (joinCardWithUser != null && joinCardWithUser.getStatus() != DBStatus.LOCAL_DELETED.getId()) { return; } dataBaseAdapter.createJoinCardWithUser(localUserId, localCardId, DBStatus.LOCAL_EDITED); - Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); - Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + final var stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); if (serverAdapter.hasInternetConnection()) { - serverAdapter.assignUserToCard(board.getId(), stack.getId(), card.getId(), user.getUid(), new ResponseCallback<Void>(account) { + serverAdapter.assignUserToCard(board.getId(), stack.getId(), card.getId(), user.getUid(), new ResponseCallback<>(account) { @Override public void onResponse(Void response) { @@ -1452,17 +1447,17 @@ public class SyncManager { @AnyThread public void assignLabelToCard(@NonNull Label label, @NonNull Card card, ServerAdapter serverAdapterToUse) { executor.submit(() -> { - final long localLabelId = label.getLocalId(); - final long localCardId = card.getLocalId(); + final var localLabelId = label.getLocalId(); + final var localCardId = card.getLocalId(); dataBaseAdapter.createJoinCardWithLabel(localLabelId, localCardId, DBStatus.LOCAL_EDITED); if (label.getId() == null || card.getId() == null) { return; } - Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); - Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + final var stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); if (serverAdapterToUse.hasInternetConnection()) { - serverAdapterToUse.assignLabelToCard(board.getId(), stack.getId(), card.getId(), label.getId(), new ResponseCallback<Void>(account) { + serverAdapterToUse.assignLabelToCard(board.getId(), stack.getId(), card.getId(), label.getId(), new ResponseCallback<>(account) { @Override public void onResponse(Void response) { @@ -1477,11 +1472,11 @@ public class SyncManager { public void unassignLabelFromCard(@NonNull Label label, @NonNull Card card) { executor.submit(() -> { dataBaseAdapter.deleteJoinedLabelForCard(card.getLocalId(), label.getLocalId()); - Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); - Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + final var stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); if (serverAdapter.hasInternetConnection()) { - serverAdapter.unassignLabelFromCard(board.getId(), stack.getId(), card.getId(), label.getId(), new ResponseCallback<Void>(account) { + serverAdapter.unassignLabelFromCard(board.getId(), stack.getId(), card.getId(), label.getId(), new ResponseCallback<>(account) { @Override public void onResponse(Void response) { dataBaseAdapter.deleteJoinedLabelForCardPhysically(card.getLocalId(), label.getLocalId()); @@ -1496,10 +1491,10 @@ public class SyncManager { executor.submit(() -> { dataBaseAdapter.deleteJoinedUserForCard(card.getLocalId(), user.getLocalId()); if (serverAdapter.hasInternetConnection()) { - Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); - Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); - serverAdapter.unassignUserFromCard(board.getId(), stack.getId(), card.getId(), user.getUid(), new ResponseCallback<Void>(account) { + final var stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + serverAdapter.unassignUserFromCard(board.getId(), stack.getId(), card.getId(), user.getUid(), new ResponseCallback<>(account) { @Override public void onResponse(Void response) { dataBaseAdapter.deleteJoinedUserForCardPhysically(card.getLocalId(), user.getLocalId()); @@ -1581,17 +1576,17 @@ public class SyncManager { public void reorder(long accountId, @NonNull FullCard movedCard, long newStackId, int newIndex) { executor.submit(() -> { // read cards of new stack - List<FullCard> cardsOfNewStack = dataBaseAdapter.getFullCardsForStackDirectly(accountId, newStackId, null); + final var cardsOfNewStack = dataBaseAdapter.getFullCardsForStackDirectly(accountId, newStackId, null); int newOrder = newIndex; if (cardsOfNewStack.size() > newIndex) { newOrder = cardsOfNewStack.get(newIndex).getCard().getOrder(); } - boolean orderIsCorrect = true; + var orderIsCorrect = true; if (newOrder == movedCard.getCard().getOrder() && newStackId == movedCard.getCard().getStackId()) { - int lastOrder = Integer.MIN_VALUE; - for (FullCard fullCard : cardsOfNewStack) { - int currentOrder = fullCard.getCard().getOrder(); + var lastOrder = Integer.MIN_VALUE; + for (var fullCard : cardsOfNewStack) { + final var currentOrder = fullCard.getCard().getOrder(); if (currentOrder > lastOrder) { lastOrder = currentOrder; } else { @@ -1608,7 +1603,7 @@ public class SyncManager { cardsOfNewStack.remove(movedCard); cardsOfNewStack.add(newIndex, movedCard); for (int i = 0; i < cardsOfNewStack.size(); i++) { - Card card = cardsOfNewStack.get(i).getCard(); + final var card = cardsOfNewStack.get(i).getCard(); card.setOrder(i); dataBaseAdapter.updateCard(card, true); } @@ -1648,10 +1643,10 @@ public class SyncManager { } //FIXME: remove the sync-block, when commentblock up there is activated. (waiting for deck server bugfix) if (hasInternetConnection()) { - Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(movedCard.getCard().getStackId()); - FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, stack.getBoardId()); - Account account = dataBaseAdapter.getAccountByIdDirectly(movedCard.getCard().getAccountId()); - syncHelperFactory.create(serverAdapter, dataBaseAdapter, Instant.now()).setResponseCallback(new ResponseCallback<Boolean>(account) { + final var stack = dataBaseAdapter.getStackByLocalIdDirectly(movedCard.getCard().getStackId()); + final var board = dataBaseAdapter.getFullBoardByLocalIdDirectly(accountId, stack.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(movedCard.getCard().getAccountId()); + syncHelperFactory.create(serverAdapter, dataBaseAdapter, Instant.now()).setResponseCallback(new ResponseCallback<>(account) { @Override public void onResponse(Boolean response) { // doNothing(); @@ -1665,14 +1660,14 @@ public class SyncManager { private void reorderLocally(List<FullCard> cardsOfNewStack, @NonNull FullCard movedCard, long newStackId, int newOrder) { // set new stack and order - Card movedInnerCard = movedCard.getCard(); - int oldOrder = movedInnerCard.getOrder(); - long oldStackId = movedInnerCard.getStackId(); + final var movedInnerCard = movedCard.getCard(); + final var oldOrder = movedInnerCard.getOrder(); + final var oldStackId = movedInnerCard.getStackId(); - List<Card> changedCards = new ArrayList<>(); + final var changedCards = new ArrayList<Card>(); - int startingAtOrder = newOrder; + var startingAtOrder = newOrder; if (oldStackId == newStackId) { // card was only reordered in the same stack movedInnerCard.setStatusEnum(movedInnerCard.getStatus() == DBStatus.LOCAL_MOVED.getId() ? DBStatus.LOCAL_MOVED : DBStatus.LOCAL_EDITED); @@ -1680,8 +1675,8 @@ public class SyncManager { if (oldOrder > newOrder) { // up changedCards.add(movedCard.getCard()); - for (FullCard cardToUpdate : cardsOfNewStack) { - Card cardEntity = cardToUpdate.getCard(); + for (var cardToUpdate : cardsOfNewStack) { + final var cardEntity = cardToUpdate.getCard(); if (cardEntity.getOrder() < newOrder) { continue; } @@ -1693,8 +1688,8 @@ public class SyncManager { } else { // down startingAtOrder = oldOrder; - for (FullCard cardToUpdate : cardsOfNewStack) { - Card cardEntity = cardToUpdate.getCard(); + for (var cardToUpdate : cardsOfNewStack) { + final var cardEntity = cardToUpdate.getCard(); if (cardEntity.getOrder() <= oldOrder) { continue; } @@ -1710,7 +1705,7 @@ public class SyncManager { movedInnerCard.setStackId(newStackId); movedInnerCard.setStatusEnum(DBStatus.LOCAL_MOVED); changedCards.add(movedCard.getCard()); - for (FullCard fullCard : cardsOfNewStack) { + for (var fullCard : cardsOfNewStack) { // skip unchanged cards if (fullCard.getCard().getOrder() < newOrder) { continue; @@ -1722,8 +1717,8 @@ public class SyncManager { } private void reorderAscending(@NonNull Card movedCard, @NonNull List<Card> cardsToReorganize, int startingAtOrder) { - final Instant now = Instant.now(); - for (Card card : cardsToReorganize) { + final var now = Instant.now(); + for (var card : cardsToReorganize) { card.setOrder(startingAtOrder); if (card.getStatus() == DBStatus.UP_TO_DATE.getId()) { card.setStatusEnum(DBStatus.LOCAL_EDITED_SILENT); @@ -1748,14 +1743,14 @@ public class SyncManager { @AnyThread public void addAttachmentToCard(long accountId, long localCardId, @NonNull String mimeType, @NonNull File file, @NonNull IResponseCallback<Attachment> callback) { executor.submit(() -> { - Attachment attachment = populateAttachmentEntityForFile(new Attachment(), localCardId, mimeType, file); - final Instant now = Instant.now(); + final var attachment = populateAttachmentEntityForFile(new Attachment(), localCardId, mimeType, file); + final var now = Instant.now(); attachment.setLastModifiedLocal(now); attachment.setCreatedAt(now); - FullCard card = dataBaseAdapter.getFullCardByLocalIdDirectly(accountId, localCardId); - Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getCard().getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); - Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + final var card = dataBaseAdapter.getFullCardByLocalIdDirectly(accountId, localCardId); + final var stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getCard().getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).createEntity( new AttachmentDataProvider(null, board, stack, card, Collections.singletonList(attachment)), attachment, ResponseCallback.from(account, callback) @@ -1765,17 +1760,17 @@ public class SyncManager { @AnyThread public WrappedLiveData<Attachment> updateAttachmentForCard(long accountId, @NonNull Attachment existing, @NonNull String mimeType, @NonNull File file) { - WrappedLiveData<Attachment> liveData = new WrappedLiveData<>(); + final var liveData = new WrappedLiveData<Attachment>(); executor.submit(() -> { - Attachment attachment = populateAttachmentEntityForFile(existing, existing.getCardId(), mimeType, file); + final var attachment = populateAttachmentEntityForFile(existing, existing.getCardId(), mimeType, file); attachment.setLastModifiedLocal(Instant.now()); if (serverAdapter.hasInternetConnection()) { - FullCard card = dataBaseAdapter.getFullCardByLocalIdDirectly(accountId, existing.getCardId()); - Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getCard().getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); - Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + final var card = dataBaseAdapter.getFullCardByLocalIdDirectly(accountId, existing.getCardId()); + final var stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getCard().getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); + final var account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor) - .updateEntity(new AttachmentDataProvider(null, board, stack, card, Collections.singletonList(attachment)), attachment, new ResponseCallback<Attachment>(account) { + .updateEntity(new AttachmentDataProvider(null, board, stack, card, Collections.singletonList(attachment)), attachment, new ResponseCallback<>(account) { @Override public void onResponse(Attachment response) { liveData.postValue(response); @@ -1808,11 +1803,11 @@ public class SyncManager { public void deleteAttachmentOfCard(long accountId, long localCardId, long localAttachmentId, @NonNull IResponseCallback<Void> callback) { executor.submit(() -> { if (serverAdapter.hasInternetConnection()) { - FullCard card = dataBaseAdapter.getFullCardByLocalIdDirectly(accountId, localCardId); - Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getCard().getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); - Attachment attachment = dataBaseAdapter.getAttachmentByLocalIdDirectly(accountId, localAttachmentId); - Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); + final var card = dataBaseAdapter.getFullCardByLocalIdDirectly(accountId, localCardId); + final var stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getCard().getStackId()); + final var board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); + final var attachment = dataBaseAdapter.getAttachmentByLocalIdDirectly(accountId, localAttachmentId); + final var account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor) .deleteEntity(new AttachmentDataProvider(null, board, stack, card, Collections.singletonList(attachment)), attachment, ResponseCallback.from(account, callback)); @@ -1830,7 +1825,7 @@ public class SyncManager { public void createFilterWidget(@NonNull FilterWidget filterWidget, @NonNull IResponseCallback<Integer> callback) { executor.submit(() -> { try { - int filterWidgetId = dataBaseAdapter.createFilterWidgetDirectly(filterWidget); + final var filterWidgetId = dataBaseAdapter.createFilterWidgetDirectly(filterWidget); callback.onResponse(filterWidgetId); } catch (Throwable t) { callback.onError(t); @@ -1905,7 +1900,7 @@ public class SyncManager { @WorkerThread public FullSingleCardWidgetModel getSingleCardWidgetModelDirectly(int appWidgetId) throws NoSuchElementException { - final FullSingleCardWidgetModel model = dataBaseAdapter.getFullSingleCardWidgetModel(appWidgetId); + final var model = dataBaseAdapter.getFullSingleCardWidgetModel(appWidgetId); if (model == null) { throw new NoSuchElementException("There is no " + FullSingleCardWidgetModel.class.getSimpleName() + " with the given appWidgetId " + appWidgetId); } @@ -1923,7 +1918,7 @@ public class SyncManager { @WorkerThread public StackWidgetModel getStackWidgetModelDirectly(int appWidgetId) throws NoSuchElementException { - final StackWidgetModel model = dataBaseAdapter.getStackWidgetModelDirectly(appWidgetId); + final var model = dataBaseAdapter.getStackWidgetModelDirectly(appWidgetId); if (model == null) { throw new NoSuchElementException(); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java index 62acb0ac1..fbde8333a 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/BoardDataProvider.java @@ -31,7 +31,7 @@ public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> { @Override public void getAllFromServer(ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, long accountId, ResponseCallback<List<FullBoard>> responder, Instant lastSync) { - serverAdapter.getBoards(new ResponseCallback<ParsedResponse<List<FullBoard>>>(responder.getAccount()) { + serverAdapter.getBoards(new ResponseCallback<>(responder.getAccount()) { @Override public void onResponse(ParsedResponse<List<FullBoard>> response) { String etag = response.getHeaders().get("ETag"); @@ -51,14 +51,14 @@ public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> { } @Override - public FullBoard getSingleFromDB(DataBaseAdapter dataBaseAdapter, long accountId, FullBoard entitiy) { - return dataBaseAdapter.getFullBoardByRemoteIdDirectly(accountId, entitiy.getEntity().getId()); + public FullBoard getSingleFromDB(DataBaseAdapter dataBaseAdapter, long accountId, FullBoard entity) { + return dataBaseAdapter.getFullBoardByRemoteIdDirectly(accountId, entity.getEntity().getId()); } @Override public long createInDB(DataBaseAdapter dataBaseAdapter, long accountId, FullBoard entity) { handleOwner(dataBaseAdapter, accountId, entity); - Long localId = dataBaseAdapter.createBoardDirectly(accountId, entity.getBoard()); + final long localId = dataBaseAdapter.createBoardDirectly(accountId, entity.getBoard()); entity.getBoard().setLocalId(localId); handleUsers(dataBaseAdapter, accountId, entity); return localId; diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java index 5f8fda81b..c1fcaaa70 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java @@ -1,5 +1,29 @@ package it.niedermann.nextcloud.deck.ui; +import static androidx.lifecycle.Transformations.switchMap; +import static it.niedermann.nextcloud.deck.DeckApplication.NO_ACCOUNT_ID; +import static it.niedermann.nextcloud.deck.DeckApplication.NO_BOARD_ID; +import static it.niedermann.nextcloud.deck.DeckApplication.NO_STACK_ID; +import static it.niedermann.nextcloud.deck.DeckApplication.readCurrentAccountId; +import static it.niedermann.nextcloud.deck.DeckApplication.readCurrentBoardId; +import static it.niedermann.nextcloud.deck.DeckApplication.readCurrentStackId; +import static it.niedermann.nextcloud.deck.DeckApplication.saveCurrentAccount; +import static it.niedermann.nextcloud.deck.DeckApplication.saveCurrentBoardId; +import static it.niedermann.nextcloud.deck.DeckApplication.saveCurrentStackId; +import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToFAB; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToPrimaryTabLayout; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.clearBrandColors; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.saveBrandColors; +import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficient; +import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficientBigAreas; +import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ABOUT; +import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ADD_BOARD; +import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ARCHIVED_BOARDS; +import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_SETTINGS; +import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_UPCOMING_CARDS; + import android.animation.AnimatorInflater; import android.annotation.SuppressLint; import android.content.Context; @@ -105,30 +129,6 @@ import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsActivity; import it.niedermann.nextcloud.deck.util.CustomAppGlideModule; import it.niedermann.nextcloud.deck.util.DrawerMenuUtil; -import static androidx.lifecycle.Transformations.switchMap; -import static it.niedermann.nextcloud.deck.DeckApplication.NO_ACCOUNT_ID; -import static it.niedermann.nextcloud.deck.DeckApplication.NO_BOARD_ID; -import static it.niedermann.nextcloud.deck.DeckApplication.NO_STACK_ID; -import static it.niedermann.nextcloud.deck.DeckApplication.readCurrentAccountId; -import static it.niedermann.nextcloud.deck.DeckApplication.readCurrentBoardId; -import static it.niedermann.nextcloud.deck.DeckApplication.readCurrentStackId; -import static it.niedermann.nextcloud.deck.DeckApplication.saveCurrentAccount; -import static it.niedermann.nextcloud.deck.DeckApplication.saveCurrentBoardId; -import static it.niedermann.nextcloud.deck.DeckApplication.saveCurrentStackId; -import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToFAB; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToPrimaryTabLayout; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.clearBrandColors; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.saveBrandColors; -import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficient; -import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficientBigAreas; -import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ABOUT; -import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ADD_BOARD; -import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ARCHIVED_BOARDS; -import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_SETTINGS; -import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_UPCOMING_CARDS; - public class MainActivity extends AppCompatActivity implements DeleteStackListener, EditStackListener, DeleteBoardListener, EditBoardListener, ArchiveBoardListener, OnScrollListener, OnNavigationItemSelectedListener { protected ActivityMainBinding binding; @@ -178,7 +178,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen setTheme(R.style.AppTheme); - final TypedValue typedValue = new TypedValue(); + final var typedValue = new TypedValue(); getTheme().resolveAttribute(R.attr.colorAccent, typedValue, true); colorAccent = typedValue.data; @@ -195,7 +195,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen setSupportActionBar(binding.toolbar); - final ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, binding.drawerLayout, binding.toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + final var toggle = new ActionBarDrawerToggle(this, binding.drawerLayout, binding.toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); binding.drawerLayout.addDrawerListener(toggle); toggle.syncState(); @@ -237,16 +237,16 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen startActivityForResult(ImportAccountActivity.createIntent(this), ImportAccountActivity.REQUEST_CODE_IMPORT_ACCOUNT); return null; } - }).observe(this, (List<Account> accounts) -> { + }).observe(this, accounts -> { if (accounts == null || accounts.size() == 0) { // Last account has been deleted. hasAccounts LiveData will handle this, but we make sure, that branding is reset. saveBrandColors(this, ContextCompat.getColor(this, R.color.defaultBrand)); return; } - long lastAccountId = readCurrentAccountId(this); + final var lastAccountId = readCurrentAccountId(this); - for (Account account : accounts) { + for (var account : accounts) { if (lastAccountId == account.getId() || lastAccountId == NO_ACCOUNT_ID) { mainViewModel.setCurrentAccount(account); if (!firstAccountAdded) { @@ -306,7 +306,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen binding.filter.setOnClickListener(null); } - final Board finalCurrentBoard = currentBoard; + final var finalCurrentBoard = currentBoard; if (hasArchivedBoardsLiveData != null && hasArchivedBoardsLiveDataObserver != null) { hasArchivedBoardsLiveData.removeObserver(hasArchivedBoardsLiveDataObserver); } @@ -342,14 +342,14 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen binding.viewPager.setAdapter(stackAdapter); binding.viewPager.setOffscreenPageLimit(2); - final CrossTabDragAndDrop<StackFragment, CardAdapter, FullCard> dragAndDrop = new CrossTabDragAndDrop<>(getResources(), ViewCompat.getLayoutDirection(binding.getRoot()) == ViewCompat.LAYOUT_DIRECTION_LTR); + final var dragAndDrop = new CrossTabDragAndDrop<StackFragment, CardAdapter, FullCard>(getResources(), ViewCompat.getLayoutDirection(binding.getRoot()) == ViewCompat.LAYOUT_DIRECTION_LTR); dragAndDrop.register(binding.viewPager, binding.stackTitles, getSupportFragmentManager()); dragAndDrop.addItemMovedByDragListener((movedCard, stackId, position) -> { mainViewModel.reorder(mainViewModel.getCurrentAccount().getId(), movedCard, stackId, position); DeckLog.info("Card", movedCard.getCard().getTitle(), "was moved to Stack", stackId, "on position", position); }); - final PopupMenu listMenuPopup = new PopupMenu(this, binding.listMenuButton); + final var listMenuPopup = new PopupMenu(this, binding.listMenuButton); listMenu = listMenuPopup.getMenu(); getMenuInflater().inflate(R.menu.list_menu, listMenu); listMenuPopup.setOnMenuItemClickListener(this::onOptionsItemSelected); @@ -487,7 +487,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen @Override public void onUpdateStack(long localStackId, String stackName) { - mainViewModel.updateStackTitle(localStackId, stackName, new IResponseCallback<FullStack>() { + mainViewModel.updateStackTitle(localStackId, stackName, new IResponseCallback<>() { @Override public void onResponse(FullStack response) { DeckLog.info("Successfully updated", Stack.class.getSimpleName(), "to", stackName); @@ -507,7 +507,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen throw new IllegalStateException("Cannot create board when noone observe boards yet. boardsLiveData or observer is null."); } boardsLiveData.removeObserver(boardsLiveDataObserver); - final Board boardToCreate = new Board(title, color); + final var boardToCreate = new Board(title, color); boardToCreate.setPermissionEdit(true); boardToCreate.setPermissionManage(true); @@ -644,7 +644,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen int stackPositionInAdapter = 0; stackAdapter.setStacks(stacks); - final long currentStackId = readCurrentStackId(this, mainViewModel.getCurrentAccount().getId(), mainViewModel.getCurrentBoardLocalId()); + final var currentStackId = readCurrentStackId(this, mainViewModel.getCurrentAccount().getId(), mainViewModel.getCurrentBoardLocalId()); for (int i = 0; i < currentBoardStacksCount; i++) { if (stacks.get(i).getLocalId() == currentStackId || currentStackId == NO_STACK_ID) { stackPositionInAdapter = i; @@ -660,7 +660,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen return "ERROR"; } }; - final TabLayoutMediator newMediator = new TabLayoutMediator(binding.stackTitles, binding.viewPager, (tab, position) -> tab.setText(tabTitleGenerator.getTitle(position))); + final var newMediator = new TabLayoutMediator(binding.stackTitles, binding.viewPager, (tab, position) -> tab.setText(tabTitleGenerator.getTitle(position))); runOnUiThread(() -> { setStackMediator(newMediator); binding.viewPager.setCurrentItem(stackPositionInAdapterClone, false); @@ -697,7 +697,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen @UiThread protected void inflateBoardMenu(@Nullable Board currentBoard) { binding.navigationView.setItemIconTintList(null); - final Menu menu = binding.navigationView.getMenu(); + final var menu = binding.navigationView.getMenu(); menu.clear(); DrawerMenuUtil.inflateBoards(this, menu, this.boardsList, mainViewModel.currentAccountHasArchivedBoards(), mainViewModel.getCurrentAccount().getServerDeckVersionAsObject().isSupported()); binding.navigationView.setCheckedItem(boardsList.indexOf(currentBoard)); @@ -731,10 +731,10 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen @Override public boolean onOptionsItemSelected(MenuItem item) { - int itemId = item.getItemId(); + final int itemId = item.getItemId(); if (itemId == R.id.archive_cards) { - final Stack stack = stackAdapter.getItem(binding.viewPager.getCurrentItem()); - final long stackLocalId = stack.getLocalId(); + final var stack = stackAdapter.getItem(binding.viewPager.getCurrentItem()); + final var stackLocalId = stack.getLocalId(); mainViewModel.countCardsInStack(mainViewModel.getCurrentAccount().getId(), stackLocalId, (numberOfCards) -> runOnUiThread(() -> new AlertDialog.Builder(this) .setTitle(R.string.archive_cards) @@ -767,7 +767,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen EditStackDialogFragment.newInstance().show(getSupportFragmentManager(), addList); return true; } else if (itemId == R.id.rename_list) { - final long stackId = stackAdapter.getItem(binding.viewPager.getCurrentItem()).getLocalId(); + final var stackId = stackAdapter.getItem(binding.viewPager.getCurrentItem()).getLocalId(); observeOnce(mainViewModel.getStack(mainViewModel.getCurrentAccount().getId(), stackId), MainActivity.this, fullStack -> EditStackDialogFragment.newInstance(fullStack.getLocalId(), fullStack.getStack().getTitle()) .show(getSupportFragmentManager(), EditStackDialogFragment.class.getCanonicalName())); @@ -834,11 +834,11 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen default: try { AccountImporter.onActivityResult(requestCode, resultCode, data, this, (account) -> { - final Account accountToCreate = new Account(account.name, account.userId, account.url); - mainViewModel.createAccount(accountToCreate, new IResponseCallback<Account>() { + final var accountToCreate = new Account(account.name, account.userId, account.url); + mainViewModel.createAccount(accountToCreate, new IResponseCallback<>() { @Override public void onResponse(Account createdAccount) { - final SyncManager importSyncManager = new SyncManager(MainActivity.this, account.name); + final var importSyncManager = new SyncManager(MainActivity.this, account.name); importSyncManager.refreshCapabilities(new ResponseCallback<Capabilities>(createdAccount) { @SuppressLint("StringFormatInvalid") @Override @@ -846,9 +846,9 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen if (!response.isMaintenanceEnabled()) { if (response.getDeckVersion().isSupported()) { runOnUiThread(() -> { - final Snackbar importSnackbar = BrandedSnackbar.make(binding.coordinatorLayout, R.string.account_is_getting_imported, Snackbar.LENGTH_INDEFINITE); + final var importSnackbar = BrandedSnackbar.make(binding.coordinatorLayout, R.string.account_is_getting_imported, Snackbar.LENGTH_INDEFINITE); importSnackbar.show(); - importSyncManager.synchronize(new ResponseCallback<Boolean>(createdAccount) { + importSyncManager.synchronize(new ResponseCallback<>(createdAccount) { @Override public void onResponse(Boolean syncSuccess) { importSnackbar.dismiss(); @@ -878,7 +878,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen .setMessage(getString(R.string.deck_outdated_please_update, response.getDeckVersion().getOriginalVersion())) .setNegativeButton(R.string.simple_discard, null) .setPositiveButton(R.string.simple_update, (dialog, whichButton) -> { - final Intent openURL = new Intent(Intent.ACTION_VIEW); + final var openURL = new Intent(Intent.ACTION_VIEW); openURL.setData(Uri.parse(createdAccount.getUrl() + getString(R.string.url_fragment_update_deck))); startActivity(openURL); finish(); @@ -949,14 +949,14 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen binding.searchToolbar.setNavigationOnClickListener(v1 -> onBackPressed()); binding.enableSearch.setVisibility(View.GONE); binding.filterText.requestFocus(); - final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + final var imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(binding.filterText, InputMethodManager.SHOW_IMPLICIT); binding.toolbarCard.setStateListAnimator(AnimatorInflater.loadStateListAnimator(this, R.animator.appbar_elevation_on)); } private void hideFilterTextToolbar() { binding.filterText.setText(null); - final InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); + final var imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); binding.searchToolbar.setVisibility(View.GONE); binding.enableSearch.setVisibility(View.VISIBLE); @@ -965,8 +965,8 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen } private void registerAutoSyncOnNetworkAvailable() { - final ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); - final NetworkRequest.Builder builder = new NetworkRequest.Builder(); + final var connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + final var builder = new NetworkRequest.Builder(); if (connectivityManager != null) { if (networkCallback == null) { @@ -974,7 +974,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen @Override public void onAvailable(@NonNull Network network) { DeckLog.log("Got Network connection"); - mainViewModel.synchronize(new ResponseCallback<Boolean>(mainViewModel.getCurrentAccount()) { + mainViewModel.synchronize(new ResponseCallback<>(mainViewModel.getCurrentAccount()) { @Override public void onResponse(Boolean response) { DeckLog.log("Auto-Sync after connection available successful"); @@ -1084,7 +1084,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen @Override public void onArchive(@NonNull Board board) { - mainViewModel.archiveBoard(board, new IResponseCallback<FullBoard>() { + mainViewModel.archiveBoard(board, new IResponseCallback<>() { @Override public void onResponse(FullBoard response) { DeckLog.info("Successfully archived board", board.getTitle()); @@ -1107,9 +1107,9 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen .setMultiChoiceItems(animals, checkedItems, (dialog, which, isChecked) -> checkedItems[0] = isChecked) .setPositiveButton(R.string.simple_clone, (dialog, which) -> { binding.drawerLayout.closeDrawer(GravityCompat.START); - final Snackbar snackbar = BrandedSnackbar.make(binding.coordinatorLayout, getString(R.string.cloning_board, board.getTitle()), Snackbar.LENGTH_INDEFINITE); + final var snackbar = BrandedSnackbar.make(binding.coordinatorLayout, getString(R.string.cloning_board, board.getTitle()), Snackbar.LENGTH_INDEFINITE); snackbar.show(); - mainViewModel.cloneBoard(board.getAccountId(), board.getLocalId(), board.getAccountId(), board.getColor(), checkedItems[0], new IResponseCallback<FullBoard>() { + mainViewModel.cloneBoard(board.getAccountId(), board.getLocalId(), board.getAccountId(), board.getColor(), checkedItems[0], new IResponseCallback<>() { @Override public void onResponse(FullBoard response) { runOnUiThread(() -> { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/stack/StackWidgetConfigurationActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/stack/StackWidgetConfigurationActivity.java index 85c987740..95604de26 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/stack/StackWidgetConfigurationActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/stack/StackWidgetConfigurationActivity.java @@ -63,7 +63,7 @@ public class StackWidgetConfigurationActivity extends PickStackActivity { Collections.singletonList(filterWidgetBoard)); config.setAccounts(Collections.singletonList(filterWidgetAccount)); - stackWidgetConfigurationViewModel.addStackWidget(config, new ResponseCallback<Integer>(account) { + stackWidgetConfigurationViewModel.addStackWidget(config, new ResponseCallback<>(account) { @Override public void onResponse(Integer response) { final Intent updateIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, diff --git a/build.gradle b/build.gradle index 0970cb67d..5cda39344 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' + classpath 'com.android.tools.build:gradle:7.0.0' //noinspection DifferentKotlinGradleVersion classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1f3fdbc52..29e413457 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists |