diff options
52 files changed, 228 insertions, 178 deletions
diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 0b2d4d282..e45a649e9 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -21,8 +21,14 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + check-latest: true + cache: 'gradle' - name: Lint - run: bash ./gradlew lintDebug --stacktrace + run: bash ./gradlew lintDebug --stacktrace --no-configuration-cache test: name: Unit tests @@ -30,8 +36,14 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + check-latest: true + cache: 'gradle' - name: Unit tests - run: bash ./gradlew test --stacktrace + run: bash ./gradlew test --stacktrace --no-configuration-cache apk: name: Generate APK @@ -39,8 +51,14 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + check-latest: true + cache: 'gradle' - name: Build debug APK - run: bash ./gradlew assembleDev + run: bash ./gradlew assembleDev --no-configuration-cache - name: Upload APK uses: actions/upload-artifact@v4 with: diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 9b201704b..04220e473 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -17,11 +17,17 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + check-latest: true + cache: 'gradle' - name: Initialize CodeQL uses: github/codeql-action/init@v3 with: languages: java - name: Build debug APK - run: bash ./gradlew assembleDev --stacktrace + run: bash ./gradlew assembleDev --stacktrace --no-configuration-cache - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 diff --git a/app/build.gradle b/app/build.gradle index aa3e7efe4..b38ec42e5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,12 +2,13 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { - compileSdkVersion 33 - buildToolsVersion "31.0.0" + compileSdk 34 + namespace 'it.niedermann.nextcloud.deck' + defaultConfig { applicationId "it.niedermann.nextcloud.deck" - minSdkVersion 24 - targetSdkVersion 33 + minSdk 24 + targetSdk 34 versionCode 1023004 versionName "1.23.4" vectorDrawables.useSupportLibrary true @@ -20,6 +21,7 @@ android { } buildFeatures { viewBinding true + buildConfig true } buildTypes { release { @@ -29,8 +31,8 @@ android { } compileOptions { coreLibraryDesugaringEnabled true - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } flavorDimensions "version" productFlavors { @@ -63,16 +65,15 @@ android { abortOnError false disable 'MissingTranslation' } - namespace 'it.niedermann.nextcloud.deck' } dependencies { - def cameraVersion = "1.2.3" + def cameraVersion = "1.3.1" def lifecycleVersion = "2.6.2" - def roomVersion = "2.5.2" + def roomVersion = "2.6.1" def glideVersion = "4.16.0" - def nextcloudCommonsVersion = "1.8.2" - def androidCommonsVersion = "0.2.9" + def nextcloudCommonsVersion = "1.9.0" + def androidCommonsVersion = "0.3.2" implementation project(path: ':cross-tab-drag-and-drop') implementation project(path: ':tab-layout-helper') @@ -93,7 +94,7 @@ dependencies { annotationProcessor "androidx.room:room-compiler:$roomVersion" implementation 'androidx.core:core-splashscreen:1.0.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'androidx.work:work-runtime:2.8.1' + implementation 'androidx.work:work-runtime:2.9.0' implementation "com.google.android.material:material:$rootProject.materialVersion" // Glide @@ -104,8 +105,8 @@ dependencies { implementation 'id.zelory:compressor:3.0.1' // Single-Sign-On - implementation 'com.github.nextcloud:Android-SingleSignOn:0.8.1' - implementation 'com.github.nextcloud:android-common:0.12.0' + implementation 'com.github.nextcloud:Android-SingleSignOn:1.0.0' + implementation 'com.github.nextcloud:android-common:0.13.0' implementation "com.github.stefan-niedermann.nextcloud-commons:sso-glide:$nextcloudCommonsVersion" implementation "com.github.stefan-niedermann.nextcloud-commons:exception:$nextcloudCommonsVersion" implementation("com.github.stefan-niedermann.nextcloud-commons:markdown:$nextcloudCommonsVersion") { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/adapters/ServerAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/adapters/ServerAdapter.java index 33c781a5d..ec5dc551b 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/adapters/ServerAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/adapters/ServerAdapter.java @@ -10,6 +10,7 @@ import android.webkit.MimeTypeMap; import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.api.ParsedResponse; import com.nextcloud.android.sso.model.SingleSignOnAccount; @@ -139,7 +140,7 @@ public class ServerAdapter { RequestHelper.request(provider, () -> provider.getDeckAPI().createBoard(board), responseCallback); } - public void deleteBoard(Board board, @NonNull ResponseCallback<Void> responseCallback) { + public void deleteBoard(Board board, @NonNull ResponseCallback<EmptyResponse> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getDeckAPI().deleteBoard(board.getId()), responseCallback); } @@ -159,7 +160,7 @@ public class ServerAdapter { RequestHelper.request(provider, () -> provider.getDeckAPI().updateAccessControl(remoteBoardId, acl.getId(), acl), responseCallback); } - public void deleteAccessControl(long remoteBoardId, AccessControl acl, @NonNull ResponseCallback<Void> responseCallback) { + public void deleteAccessControl(long remoteBoardId, AccessControl acl, @NonNull ResponseCallback<EmptyResponse> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getDeckAPI().deleteAccessControl(remoteBoardId, acl.getId(), acl), responseCallback); } @@ -179,7 +180,7 @@ public class ServerAdapter { RequestHelper.request(provider, () -> provider.getDeckAPI().createStack(board.getId(), stack), responseCallback); } - public void deleteStack(Board board, Stack stack, @NonNull ResponseCallback<Void> responseCallback) { + public void deleteStack(Board board, Stack stack, @NonNull ResponseCallback<EmptyResponse> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getDeckAPI().deleteStack(board.getId(), stack.getId()), responseCallback); @@ -207,7 +208,7 @@ public class ServerAdapter { RequestHelper.request(provider, () -> provider.getDeckAPI().createCard(boardId, stackId, card), responseCallback); } - public void deleteCard(long boardId, long stackId, Card card, @NonNull ResponseCallback<Void> responseCallback) { + public void deleteCard(long boardId, long stackId, Card card, @NonNull ResponseCallback<EmptyResponse> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getDeckAPI().deleteCard(boardId, stackId, card.getId()), responseCallback); } @@ -217,22 +218,22 @@ public class ServerAdapter { RequestHelper.request(provider, () -> provider.getDeckAPI().updateCard(boardId, stackId, card.getId(), card), responseCallback); } - public void assignUserToCard(long boardId, long stackId, long cardId, String userUID, @NonNull ResponseCallback<Void> responseCallback) { + public void assignUserToCard(long boardId, long stackId, long cardId, String userUID, @NonNull ResponseCallback<EmptyResponse> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getDeckAPI().assignUserToCard(boardId, stackId, cardId, userUID), responseCallback); } - public void unassignUserFromCard(long boardId, long stackId, long cardId, String userUID, @NonNull ResponseCallback<Void> responseCallback) { + public void unassignUserFromCard(long boardId, long stackId, long cardId, String userUID, @NonNull ResponseCallback<EmptyResponse> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getDeckAPI().unassignUserFromCard(boardId, stackId, cardId, userUID), responseCallback); } - public void assignLabelToCard(long boardId, long stackId, long cardId, long labelId, @NonNull ResponseCallback<Void> responseCallback) { + public void assignLabelToCard(long boardId, long stackId, long cardId, long labelId, @NonNull ResponseCallback<EmptyResponse> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getDeckAPI().assignLabelToCard(boardId, stackId, cardId, labelId), responseCallback); } - public void unassignLabelFromCard(long boardId, long stackId, long cardId, long labelId, @NonNull ResponseCallback<Void> responseCallback) { + public void unassignLabelFromCard(long boardId, long stackId, long cardId, long labelId, @NonNull ResponseCallback<EmptyResponse> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getDeckAPI().unassignLabelFromCard(boardId, stackId, cardId, labelId), responseCallback); } @@ -245,7 +246,7 @@ public class ServerAdapter { RequestHelper.request(provider, () -> provider.getDeckAPI().createLabel(boardId, label), responseCallback); } - public void deleteLabel(long boardId, Label label, @NonNull ResponseCallback<Void> responseCallback) { + public void deleteLabel(long boardId, Label label, @NonNull ResponseCallback<EmptyResponse> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getDeckAPI().deleteLabel(boardId, label.getId()), responseCallback); } @@ -304,7 +305,7 @@ public class ServerAdapter { RequestHelper.request(provider, () -> provider.getDeckAPI().downloadAttachment(remoteBoardId, remoteStackId, remoteCardId, remoteAttachmentId), responseCallback); } - public void deleteAttachment(Long remoteBoardId, long remoteStackId, long remoteCardId, long remoteAttachmentId, @NonNull ResponseCallback<Void> responseCallback) { + public void deleteAttachment(Long remoteBoardId, long remoteStackId, long remoteCardId, long remoteAttachmentId, @NonNull ResponseCallback<EmptyResponse> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getDeckAPI().deleteAttachment(remoteBoardId, remoteStackId, remoteCardId, remoteAttachmentId), responseCallback); } @@ -329,7 +330,7 @@ public class ServerAdapter { RequestHelper.request(provider, () -> provider.getNextcloudAPI().updateCommentForCard(comment.getObjectId(), comment.getId(), comment), responseCallback); } - public void deleteCommentForCard(DeckComment comment, @NonNull ResponseCallback<Void> responseCallback) { + public void deleteCommentForCard(DeckComment comment, @NonNull ResponseCallback<EmptyResponse> responseCallback) { ensureInternetConnection(); RequestHelper.request(provider, () -> provider.getNextcloudAPI().deleteCommentForCard(comment.getObjectId(), comment.getId()), responseCallback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/DeckAPI.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/DeckAPI.java index 576ccc33b..1f17d2daa 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/DeckAPI.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/DeckAPI.java @@ -1,6 +1,7 @@ package it.niedermann.nextcloud.deck.remote.api; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.api.ParsedResponse; import java.util.List; @@ -54,7 +55,7 @@ public interface DeckAPI { Observable<FullBoard> updateBoard(@Path("id") long id, @Body Board board); @DELETE("v1.0/boards/{id}") - Observable<Void> deleteBoard(@Path("id") long id); + Observable<EmptyResponse> deleteBoard(@Path("id") long id); @DELETE("v1.0/boards/{id}/undo_delete") Observable<FullBoard> restoreBoard(@Path("id") long id); @@ -75,7 +76,7 @@ public interface DeckAPI { Observable<FullStack> updateStack(@Path("boardId") long boardId, @Path("stackId") long id, @Body Stack stack); @DELETE("v1.0/boards/{boardId}/stacks/{stackId}") - Observable<Void> deleteStack(@Path("boardId") long boardId, @Path("stackId") long id); + Observable<EmptyResponse> deleteStack(@Path("boardId") long boardId, @Path("stackId") long id); @GET("v1.0/boards/{boardId}/stacks/{stackId}") Observable<FullStack> getStack(@Path("boardId") long boardId, @Path("stackId") long id, @Header(MODIFIED_SINCE_HEADER) String lastSync); @@ -97,25 +98,25 @@ public interface DeckAPI { @FormUrlEncoded @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignLabel") - Observable<Void> assignLabelToCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("labelId") long labelId); + Observable<EmptyResponse> assignLabelToCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("labelId") long labelId); @FormUrlEncoded @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/removeLabel") - Observable<Void> unassignLabelFromCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("labelId") long labelId); + Observable<EmptyResponse> unassignLabelFromCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("labelId") long labelId); @FormUrlEncoded @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignUser") - Observable<Void> assignUserToCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("userId") String userUID); + Observable<EmptyResponse> assignUserToCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("userId") String userUID); @FormUrlEncoded @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/unassignUser") - Observable<Void> unassignUserFromCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("userId") String userUID); + Observable<EmptyResponse> unassignUserFromCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("userId") String userUID); @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/reorder") Observable<List<FullCard>> moveCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Body Reorder reorder); @DELETE("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}") - Observable<Void> deleteCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId); + Observable<EmptyResponse> deleteCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId); /** * @see <a href="https://github.com/nextcloud/deck/issues/2874">This endpoint does only return {@link Attachment}s of type {@link EAttachmentType.DECK_FILE}</a> @@ -140,7 +141,7 @@ public interface DeckAPI { Observable<Label> createLabel(@Path("boardId") long boardId, @Body Label label); @DELETE("v1.0/boards/{boardId}/labels/{labelId}") - Observable<Void> deleteLabel(@Path("boardId") long boardId, @Path("labelId") long labelId); + Observable<EmptyResponse> deleteLabel(@Path("boardId") long boardId, @Path("labelId") long labelId); // Attachments @@ -160,7 +161,7 @@ public interface DeckAPI { Observable<Attachment> updateAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId, @Part MultipartBody.Part type, @Part MultipartBody.Part attachment); @DELETE("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}") - Observable<Void> deleteAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId); + Observable<EmptyResponse> deleteAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId); @PUT("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}/restore") Observable<Attachment> restoreAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId); @@ -175,6 +176,6 @@ public interface DeckAPI { Observable<AccessControl> updateAccessControl(@Path("boardId") long boardId, @Path("aclId") long aclId, @Body AccessControl acl); @DELETE("v1.0/boards/{boardId}/acl/{aclId}") - Observable<Void> deleteAccessControl(@Path("boardId") long boardId, @Path("aclId") long aclId, @Body AccessControl acl); + Observable<EmptyResponse> deleteAccessControl(@Path("boardId") long boardId, @Path("aclId") long aclId, @Body AccessControl acl); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/NextcloudServerAPI.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/NextcloudServerAPI.java index 6f260f31a..2e005d35f 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/NextcloudServerAPI.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/api/NextcloudServerAPI.java @@ -1,6 +1,7 @@ package it.niedermann.nextcloud.deck.remote.api; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.api.ParsedResponse; import java.util.List; @@ -89,5 +90,5 @@ public interface NextcloudServerAPI { "Content-Type: application/json;charset=utf-8" }) @DELETE("apps/deck/api/v1.0/cards/{cardId}/comments/{commentId}") - Observable<Void> deleteCommentForCard(@Path("cardId") long cardId, @Path("commentId") long commentId); + Observable<EmptyResponse> deleteCommentForCard(@Path("cardId") long cardId, @Path("commentId") long commentId); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/DataPropagationHelper.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/DataPropagationHelper.java index ac6bdedc2..6b6549ac7 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/DataPropagationHelper.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/DataPropagationHelper.java @@ -3,6 +3,8 @@ package it.niedermann.nextcloud.deck.remote.helpers; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.nextcloud.android.sso.api.EmptyResponse; + import java.util.concurrent.ExecutorService; import java.util.function.BiConsumer; @@ -109,7 +111,7 @@ public class DataPropagationHelper { } } - public <T extends IRemoteEntity> void deleteEntity(@NonNull final AbstractSyncDataProvider<T> provider, @NonNull T entity, @NonNull ResponseCallback<Void> callback){ + public <T extends IRemoteEntity> void deleteEntity(@NonNull final AbstractSyncDataProvider<T> provider, @NonNull T entity, @NonNull ResponseCallback<EmptyResponse> callback){ final long accountId = callback.getAccount().getId(); // known to server? if (entity.getId() != null) { @@ -122,7 +124,7 @@ public class DataPropagationHelper { try { provider.deleteOnServer(serverAdapter, accountId, new ResponseCallback<>(new Account(accountId)) { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { executor.submit(() -> { provider.deletePhysicallyInDB(dataBaseAdapter, accountId, entity); callback.onResponse(null); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/SyncHelper.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/SyncHelper.java index 846c7cf0e..4028e3ad3 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/SyncHelper.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/SyncHelper.java @@ -3,6 +3,7 @@ package it.niedermann.nextcloud.deck.remote.helpers; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; import java.net.HttpURLConnection; @@ -133,10 +134,10 @@ public class SyncHelper { } } - private <T extends IRemoteEntity> ResponseCallback<Void> getDeleteCallback(@NonNull AbstractSyncDataProvider<T> provider, T entity) { + private <T extends IRemoteEntity> ResponseCallback<EmptyResponse> getDeleteCallback(@NonNull AbstractSyncDataProvider<T> provider, T entity) { return new ResponseCallback<>(account) { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { provider.deletePhysicallyInDB(dataBaseAdapter, accountId, entity); provider.goDeeperForUpSync(SyncHelper.this, serverAdapter, dataBaseAdapter, responseCallback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AbstractSyncDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AbstractSyncDataProvider.java index 36eba5704..4347af0b5 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AbstractSyncDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AbstractSyncDataProvider.java @@ -2,6 +2,8 @@ package it.niedermann.nextcloud.deck.remote.helpers.providers; import androidx.annotation.Nullable; +import com.nextcloud.android.sso.api.EmptyResponse; + import java.time.Instant; import java.util.ArrayList; import java.util.List; @@ -105,7 +107,7 @@ public abstract class AbstractSyncDataProvider<T extends IRemoteEntity> { public abstract void updateOnServer(ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, long accountId, ResponseCallback<T> callback, T entity); - public abstract void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, T entity, DataBaseAdapter dataBaseAdapter); + public abstract void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, T entity, DataBaseAdapter dataBaseAdapter); public void childDone(AbstractSyncDataProvider<?> child, ResponseCallback<Boolean> responseCallback, boolean syncChangedSomething) { removeChild(child); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AccessControlDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AccessControlDataProvider.java index cff7dae89..030669158 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AccessControlDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AccessControlDataProvider.java @@ -2,6 +2,8 @@ package it.niedermann.nextcloud.deck.remote.helpers.providers; import androidx.annotation.Nullable; +import com.nextcloud.android.sso.api.EmptyResponse; + import java.time.Instant; import java.util.List; import java.util.concurrent.CountDownLatch; @@ -174,7 +176,7 @@ public class AccessControlDataProvider extends AbstractSyncDataProvider<AccessCo } @Override - public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, AccessControl entity, DataBaseAdapter dataBaseAdapter) { + public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, AccessControl entity, DataBaseAdapter dataBaseAdapter) { serverAdapter.deleteAccessControl(board.getBoard().getId(), entity, callback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/ActivityDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/ActivityDataProvider.java index 018ac0282..b4981bf08 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/ActivityDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/ActivityDataProvider.java @@ -2,6 +2,8 @@ package it.niedermann.nextcloud.deck.remote.helpers.providers; import androidx.annotation.NonNull; +import com.nextcloud.android.sso.api.EmptyResponse; + import java.time.Instant; import java.util.Collections; import java.util.List; @@ -63,7 +65,7 @@ public class ActivityDataProvider extends AbstractSyncDataProvider<Activity> { } @Override - public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, Activity entity, DataBaseAdapter dataBaseAdapter) { + public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, Activity entity, DataBaseAdapter dataBaseAdapter) { // nope. } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AttachmentDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AttachmentDataProvider.java index 0d8ca5d51..e3f84fdaf 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AttachmentDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/AttachmentDataProvider.java @@ -3,6 +3,8 @@ package it.niedermann.nextcloud.deck.remote.helpers.providers; import android.annotation.SuppressLint; import android.net.Uri; +import com.nextcloud.android.sso.api.EmptyResponse; + import java.io.File; import java.io.IOException; import java.time.Instant; @@ -101,7 +103,7 @@ public class AttachmentDataProvider extends AbstractSyncDataProvider<Attachment> } @Override - public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, Attachment entity, DataBaseAdapter dataBaseAdapter) { + public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, Attachment entity, DataBaseAdapter dataBaseAdapter) { serverAdapter.deleteAttachment(board.getId(), stack.getId(), card.getId(), entity.getId(), callback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/BoardDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/BoardDataProvider.java index cd8350535..a4d29f4bc 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/BoardDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/BoardDataProvider.java @@ -5,6 +5,7 @@ import android.util.Pair; import androidx.lifecycle.MutableLiveData; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.api.ParsedResponse; import java.time.Instant; @@ -242,7 +243,7 @@ public class BoardDataProvider extends AbstractSyncDataProvider<FullBoard> { } @Override - public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, FullBoard entity, DataBaseAdapter dataBaseAdapter) { + public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, FullBoard entity, DataBaseAdapter dataBaseAdapter) { serverAdapter.deleteBoard(entity.getBoard(), callback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/CardDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/CardDataProvider.java index b8f3e5000..a1e87897e 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/CardDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/CardDataProvider.java @@ -2,6 +2,7 @@ package it.niedermann.nextcloud.deck.remote.helpers.providers; import android.annotation.SuppressLint; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; import java.time.Instant; @@ -203,7 +204,7 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> { } @Override - public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, FullCard entity, DataBaseAdapter dataBaseAdapter) { + public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, FullCard entity, DataBaseAdapter dataBaseAdapter) { serverAdapter.deleteCard(board.getId(), stack.getId(), entity.getCard(), callback); } @@ -255,7 +256,7 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> { } else { serverAdapter.unassignLabelFromCard(board.getId(), stack.getId(), changedLabel.getCardId(), changedLabel.getLabelId(), new ResponseCallback<>(account) { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { dataBaseAdapter.deleteJoinedLabelForCardPhysicallyByRemoteIDs(account.getId(), changedLabel.getCardId(), changedLabel.getLabelId()); } }); @@ -270,7 +271,7 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> { LABEL_JOINS_IN_SYNC.add(changedLabel); serverAdapter.assignLabelToCard(board.getId(), stack.getId(), changedLabel.getCardId(), changedLabel.getLabelId(), new ResponseCallback<>(account) { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { Label label = dataBaseAdapter.getLabelByRemoteIdDirectly(account.getId(), changedLabel.getLabelId()); dataBaseAdapter.setStatusForJoinCardWithLabel(card.getLocalId(), label.getLocalId(), DBStatus.UP_TO_DATE.getId()); LABEL_JOINS_IN_SYNC.remove(changedLabel); @@ -322,14 +323,14 @@ public class CardDataProvider extends AbstractSyncDataProvider<FullCard> { if (changedUser.getStatusEnum() == DBStatus.LOCAL_DELETED) { serverAdapter.unassignUserFromCard(board.getId(), stack.getId(), changedUser.getCardId(), user.getUid(), new ResponseCallback<>(account) { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { dataBaseAdapter.deleteJoinedUserForCardPhysicallyByRemoteIDs(account.getId(), changedUser.getCardId(), user.getUid()); } }); } else if (changedUser.getStatusEnum() == DBStatus.LOCAL_EDITED) { serverAdapter.assignUserToCard(board.getId(), stack.getId(), changedUser.getCardId(), user.getUid(), new ResponseCallback<>(account) { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { dataBaseAdapter.setStatusForJoinCardWithUser(card.getLocalId(), user.getLocalId(), DBStatus.UP_TO_DATE.getId()); } }); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/CardPropagationDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/CardPropagationDataProvider.java index e9028c685..c91ac9740 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/CardPropagationDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/CardPropagationDataProvider.java @@ -2,6 +2,8 @@ package it.niedermann.nextcloud.deck.remote.helpers.providers; import android.annotation.SuppressLint; +import com.nextcloud.android.sso.api.EmptyResponse; + import it.niedermann.nextcloud.deck.database.DataBaseAdapter; import it.niedermann.nextcloud.deck.model.Board; import it.niedermann.nextcloud.deck.model.Card; @@ -83,7 +85,7 @@ public class CardPropagationDataProvider extends CardDataProvider { } @Override - public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, FullCard entity, DataBaseAdapter dataBaseAdapter) { + public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, FullCard entity, DataBaseAdapter dataBaseAdapter) { serverAdapter.deleteCard(board.getId(), stack.getId(), entity.getCard(), callback); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/DeckCommentsDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/DeckCommentsDataProvider.java index c366ca1fc..ee0b357f0 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/DeckCommentsDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/DeckCommentsDataProvider.java @@ -2,6 +2,8 @@ package it.niedermann.nextcloud.deck.remote.helpers.providers; import android.annotation.SuppressLint; +import com.nextcloud.android.sso.api.EmptyResponse; + import java.time.Instant; import java.util.ArrayList; import java.util.Collections; @@ -154,7 +156,7 @@ public class DeckCommentsDataProvider extends AbstractSyncDataProvider<OcsCommen } @Override - public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, OcsComment entity, DataBaseAdapter dataBaseAdapter) { + public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, OcsComment entity, DataBaseAdapter dataBaseAdapter) { DeckComment comment = entity.getSingle(); comment.setObjectId(card.getId()); serverAdapter.deleteCommentForCard(comment, callback); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/LabelDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/LabelDataProvider.java index 9259391bb..b01ca2b51 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/LabelDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/LabelDataProvider.java @@ -2,6 +2,8 @@ package it.niedermann.nextcloud.deck.remote.helpers.providers; import android.annotation.SuppressLint; +import com.nextcloud.android.sso.api.EmptyResponse; + import java.time.Instant; import java.util.List; @@ -94,7 +96,7 @@ public class LabelDataProvider extends AbstractSyncDataProvider<Label> { } @Override - public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, Label entity, DataBaseAdapter dataBaseAdapter) { + public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, Label entity, DataBaseAdapter dataBaseAdapter) { serverAdapter.deleteLabel(board.getId(), entity, callback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/OcsProjectDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/OcsProjectDataProvider.java index 40d661b8b..0f5d28ff6 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/OcsProjectDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/OcsProjectDataProvider.java @@ -1,5 +1,7 @@ package it.niedermann.nextcloud.deck.remote.helpers.providers; +import com.nextcloud.android.sso.api.EmptyResponse; + import java.time.Instant; import java.util.Collections; import java.util.List; @@ -105,7 +107,7 @@ public class OcsProjectDataProvider extends AbstractSyncDataProvider<OcsProject> } @Override - public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, OcsProject entity, DataBaseAdapter dataBaseAdapter) { + public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, OcsProject entity, DataBaseAdapter dataBaseAdapter) { // Do Nothing } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/StackDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/StackDataProvider.java index 6645390a5..16eea8692 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/StackDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/StackDataProvider.java @@ -1,5 +1,7 @@ package it.niedermann.nextcloud.deck.remote.helpers.providers; +import com.nextcloud.android.sso.api.EmptyResponse; + import java.time.Instant; import java.util.Collections; import java.util.List; @@ -91,7 +93,7 @@ public class StackDataProvider extends AbstractSyncDataProvider<FullStack> { } @Override - public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, FullStack entity, DataBaseAdapter dataBaseAdapter) { + public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, FullStack entity, DataBaseAdapter dataBaseAdapter) { entity.getStack().setBoardId(board.getId()); serverAdapter.deleteStack(board.getBoard(), entity.getStack(), callback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/UserDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/UserDataProvider.java index e644b3a8d..7b322b5e9 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/UserDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/remote/helpers/providers/UserDataProvider.java @@ -1,5 +1,7 @@ package it.niedermann.nextcloud.deck.remote.helpers.providers; +import com.nextcloud.android.sso.api.EmptyResponse; + import java.time.Instant; import java.util.List; @@ -62,7 +64,7 @@ public class UserDataProvider extends AbstractSyncDataProvider<User> { } @Override - public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<Void> callback, User entity, DataBaseAdapter dataBaseAdapter) { + public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback<EmptyResponse> callback, User entity, DataBaseAdapter dataBaseAdapter) { //TODO: implement } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/repository/SyncRepository.java b/app/src/main/java/it/niedermann/nextcloud/deck/repository/SyncRepository.java index fa425038a..b08cbc8a7 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/repository/SyncRepository.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/repository/SyncRepository.java @@ -18,6 +18,7 @@ import androidx.lifecycle.MediatorLiveData; import androidx.lifecycle.MutableLiveData; import com.nextcloud.android.sso.AccountImporter; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.api.ParsedResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; @@ -559,7 +560,7 @@ public class SyncRepository extends BaseRepository { } @AnyThread - public void deleteComment(long accountId, long localCardId, long localCommentId, @NonNull IResponseCallback<Void> callback) { + public void deleteComment(long accountId, long localCardId, long localCommentId, @NonNull IResponseCallback<EmptyResponse> callback) { executor.submit(() -> { final Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); final Card card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, localCardId); @@ -571,7 +572,7 @@ public class SyncRepository extends BaseRepository { } @AnyThread - public void deleteBoard(@NonNull Board board, @NonNull IResponseCallback<Void> callback) { + public void deleteBoard(@NonNull Board board, @NonNull IResponseCallback<EmptyResponse> callback) { executor.submit(() -> { long accountId = board.getAccountId(); Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); @@ -614,14 +615,14 @@ public class SyncRepository extends BaseRepository { } @AnyThread - public void deleteAccessControl(@NonNull AccessControl entity, @NonNull IResponseCallback<Void> callback) { + public void deleteAccessControl(@NonNull AccessControl entity, @NonNull IResponseCallback<EmptyResponse> callback) { executor.submit(() -> { Account account = dataBaseAdapter.getAccountByIdDirectly(entity.getAccountId()); FullBoard board = dataBaseAdapter.getFullBoardByLocalIdDirectly(entity.getAccountId(), entity.getBoardId()); new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).deleteEntity( new AccessControlDataProvider(null, board, Collections.singletonList(entity)), entity, new ResponseCallback<>(account) { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { // revoked own board-access? if (entity.getAccountId() == entity.getAccountId() && entity.getUser().getUid().equals(account.getUserName())) { dataBaseAdapter.saveNeighbourOfBoard(board.getAccountId(), board.getLocalId()); @@ -658,7 +659,7 @@ public class SyncRepository extends BaseRepository { } @AnyThread - public void deleteStack(long accountId, long boardLocalId, long stackLocalId, @NonNull IResponseCallback<Void> callback) { + public void deleteStack(long accountId, long boardLocalId, long stackLocalId, @NonNull IResponseCallback<EmptyResponse> callback) { executor.submit(() -> { Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); FullStack fullStack = dataBaseAdapter.getFullStackByLocalIdDirectly(stackLocalId); @@ -828,7 +829,7 @@ public class SyncRepository extends BaseRepository { } @AnyThread - public void deleteCard(@NonNull Card card, @NonNull IResponseCallback<Void> callback) { + public void deleteCard(@NonNull Card card, @NonNull IResponseCallback<EmptyResponse> callback) { executor.submit(() -> { FullCard fullCard = dataBaseAdapter.getFullCardByLocalIdDirectly(card.getAccountId(), card.getLocalId()); if (fullCard == null) { @@ -868,7 +869,7 @@ public class SyncRepository extends BaseRepository { } @AnyThread - public void archiveCardsInStack(long accountId, long stackLocalId, @NonNull FilterInformation filterInformation, @NonNull IResponseCallback<Void> callback) { + public void archiveCardsInStack(long accountId, long stackLocalId, @NonNull FilterInformation filterInformation, @NonNull IResponseCallback<EmptyResponse> callback) { executor.submit(() -> { Account account = dataBaseAdapter.getAccountByIdDirectly(accountId); FullStack stack = dataBaseAdapter.getFullStackByLocalIdDirectly(stackLocalId); @@ -1033,7 +1034,7 @@ public class SyncRepository extends BaseRepository { */ @SuppressWarnings("JavadocReference") @AnyThread - public void moveCard(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId, @NonNull IResponseCallback<Void> callback) { + public void moveCard(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId, @NonNull IResponseCallback<EmptyResponse> callback) { executor.submit(() -> { final FullCard originalCard = dataBaseAdapter.getFullCardByLocalIdDirectly(originAccountId, originCardLocalId); final int newIndex = dataBaseAdapter.getHighestCardOrderInStack(targetStackLocalId) + 1; @@ -1207,7 +1208,7 @@ public class SyncRepository extends BaseRepository { } @AnyThread - public void deleteLabel(@NonNull Label label, @NonNull IResponseCallback<Void> callback) { + public void deleteLabel(@NonNull Label label, @NonNull IResponseCallback<EmptyResponse> callback) { executor.submit(() -> { Account account = dataBaseAdapter.getAccountByIdDirectly(label.getAccountId()); Board board = dataBaseAdapter.getBoardByLocalIdDirectly(label.getBoardId()); @@ -1243,7 +1244,7 @@ public class SyncRepository extends BaseRepository { serverAdapter.assignUserToCard(board.getId(), stack.getId(), card.getId(), user.getUid(), new ResponseCallback<>(account) { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { dataBaseAdapter.setStatusForJoinCardWithUser(localCardId, localUserId, DBStatus.UP_TO_DATE.getId()); } }); @@ -1272,7 +1273,7 @@ public class SyncRepository extends BaseRepository { serverAdapterToUse.assignLabelToCard(board.getId(), stack.getId(), card.getId(), label.getId(), new ResponseCallback<>(account) { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { dataBaseAdapter.setStatusForJoinCardWithLabel(localCardId, localLabelId, DBStatus.UP_TO_DATE.getId()); } }); @@ -1290,7 +1291,7 @@ public class SyncRepository extends BaseRepository { if (connectivityUtil.hasInternetConnection()) { serverAdapter.unassignLabelFromCard(board.getId(), stack.getId(), card.getId(), label.getId(), new ResponseCallback<>(account) { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { dataBaseAdapter.deleteJoinedLabelForCardPhysically(card.getLocalId(), label.getLocalId()); } }); @@ -1308,7 +1309,7 @@ public class SyncRepository extends BaseRepository { Account account = dataBaseAdapter.getAccountByIdDirectly(card.getAccountId()); serverAdapter.unassignUserFromCard(board.getId(), stack.getId(), card.getId(), user.getUid(), new ResponseCallback<>(account) { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { dataBaseAdapter.deleteJoinedUserForCardPhysically(card.getLocalId(), user.getLocalId()); } }); @@ -1499,7 +1500,7 @@ public class SyncRepository extends BaseRepository { } @AnyThread - public void deleteAttachmentOfCard(long accountId, long localCardId, long localAttachmentId, @NonNull IResponseCallback<Void> callback) { + public void deleteAttachmentOfCard(long accountId, long localCardId, long localAttachmentId, @NonNull IResponseCallback<EmptyResponse> callback) { executor.submit(() -> { if (connectivityUtil.hasInternetConnection()) { FullCard card = dataBaseAdapter.getFullCardByLocalIdDirectly(accountId, localCardId); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java index 93902d9f8..7e2535755 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/PickStackActivity.java @@ -10,6 +10,8 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.lifecycle.ViewModelProvider; +import com.nextcloud.android.sso.api.EmptyResponse; + import it.niedermann.android.reactivelivedata.ReactiveLiveData; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.ActivityPickStackBinding; @@ -61,7 +63,7 @@ public abstract class PickStackActivity extends AppCompatActivity implements The viewModel.setSubmitInProgress(true); onSubmit(viewModel.getAccount(), viewModel.getBoardLocalId(), viewModel.getStackLocalId(), new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { runOnUiThread(() -> viewModel.setSubmitInProgress(false)); } @@ -113,7 +115,7 @@ public abstract class PickStackActivity extends AppCompatActivity implements The utils.material.colorTextInputLayout(binding.inputWrapper); } - abstract protected void onSubmit(Account account, long boardLocalId, long stackId, @NonNull IResponseCallback<Void> callback); + abstract protected void onSubmit(Account account, long boardLocalId, long stackId, @NonNull IResponseCallback<EmptyResponse> callback); abstract protected boolean showBoardsWithoutEditPermission(); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActivity.java index 58237dbd5..866f539ba 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActivity.java @@ -10,6 +10,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import com.nextcloud.android.sso.api.EmptyResponse; + import it.niedermann.android.reactivelivedata.ReactiveLiveData; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.databinding.ActivityArchivedBinding; @@ -82,7 +84,7 @@ public class ArchivedBoardsActivity extends AppCompatActivity implements Themed, public void onBoardDeleted(Board board) { archivedBoardsViewModel.deleteBoard(board, new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.info("Successfully deleted board", board.getTitle()); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsViewModel.java index bcd9345fc..4b54017ba 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsViewModel.java @@ -5,6 +5,7 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import java.util.Collections; @@ -32,7 +33,7 @@ public class ArchivedBoardsViewModel extends SyncViewModel { syncRepository.updateBoard(board, callback); } - public void deleteBoard(@NonNull Board board, @NonNull IResponseCallback<Void> callback) { + public void deleteBoard(@NonNull Board board, @NonNull IResponseCallback<EmptyResponse> callback) { syncRepository.deleteBoard(board, callback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java index aeb2e62c4..d25f1507b 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java @@ -16,6 +16,7 @@ import androidx.fragment.app.DialogFragment; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import java.util.List; @@ -141,7 +142,7 @@ public class AccessControlDialogFragment extends DialogFragment implements Acces public void deleteAccessControl(AccessControl ac) { accessControlViewModel.deleteAccessControl(ac, new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.info("Successfully deleted access control for user", ac.getUser().getDisplayname()); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlViewModel.java index a83ead085..570eacf3c 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlViewModel.java @@ -5,6 +5,7 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import java.util.List; @@ -42,7 +43,7 @@ public class AccessControlViewModel extends SyncViewModel { syncRepository.updateAccessControl(entity, callback); } - public void deleteAccessControl(@NonNull AccessControl entity, @NonNull IResponseCallback<Void> callback) { + public void deleteAccessControl(@NonNull AccessControl entity, @NonNull IResponseCallback<EmptyResponse> callback) { syncRepository.deleteAccessControl(entity, callback); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/LabelsViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/LabelsViewModel.java index 699d7ed8e..3537b8521 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/LabelsViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/LabelsViewModel.java @@ -5,6 +5,7 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import it.niedermann.android.reactivelivedata.ReactiveLiveData; @@ -32,7 +33,7 @@ public class LabelsViewModel extends SyncViewModel { syncRepository.createLabel(account.getId(), label, localBoardId, callback); } - public void deleteLabel(@NonNull Label label, @NonNull IResponseCallback<Void> callback) { + public void deleteLabel(@NonNull Label label, @NonNull IResponseCallback<EmptyResponse> callback) { syncRepository.deleteLabel(label, callback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java index 6accebc80..07bc4c215 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java @@ -13,6 +13,7 @@ import androidx.annotation.UiThread; import androidx.fragment.app.DialogFragment; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.nextcloud.android.sso.api.EmptyResponse; import java.util.Random; @@ -162,7 +163,7 @@ public class ManageLabelsDialogFragment extends ThemedDialogFragment implements private void deleteLabel(@NonNull Label label) { labelsViewModel.deleteLabel(label, new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.info("Successfully deleted label", label.getTitle()); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java index 2d2eb585f..9d201659b 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java @@ -13,6 +13,7 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.preference.PreferenceManager; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import java.io.File; @@ -190,7 +191,7 @@ public class EditCardViewModel extends BaseViewModel { syncRepository.addAttachmentToCard(accountId, localCardId, mimeType, file, callback); } - public void deleteAttachmentOfCard(long accountId, long localCardId, long localAttachmentId, @NonNull IResponseCallback<Void> callback) { + public void deleteAttachmentOfCard(long accountId, long localCardId, long localAttachmentId, @NonNull IResponseCallback<EmptyResponse> callback) { syncRepository.deleteAttachmentOfCard(accountId, localCardId, localAttachmentId, callback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java index 458f048be..4de403ba7 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java @@ -46,6 +46,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.snackbar.Snackbar; import com.nextcloud.android.common.ui.theme.utils.ColorRole; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; import java.io.File; @@ -159,7 +160,15 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentDelet mBottomSheetBehaviour.setDraggable(true); mBottomSheetBehaviour.setHideable(true); mBottomSheetBehaviour.setState(STATE_HIDDEN); - mBottomSheetBehaviour.addBottomSheetCallback(new CardAttachmentsBottomsheetBehaviorCallback(requireContext(), backPressedCallback, binding.fab, binding.pickerBackdrop, binding.bottomNavigation, R.color.mdtp_transparent_black, android.R.color.transparent, R.dimen.attachments_bottom_navigation_height)); + mBottomSheetBehaviour.addBottomSheetCallback(new CardAttachmentsBottomsheetBehaviorCallback( + requireContext(), + backPressedCallback, + binding.fab, + binding.pickerBackdrop, + binding.bottomNavigation, + R.color.bottom_sheet_backdrop, + android.R.color.transparent, + R.dimen.attachments_bottom_navigation_height)); binding.pickerBackdrop.setOnClickListener(v -> mBottomSheetBehaviour.setState(STATE_HIDDEN)); final var displayMetrics = getResources().getDisplayMetrics(); @@ -493,7 +502,7 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentDelet if (attachment.getLocalId() != null) { editViewModel.deleteAttachmentOfCard(editViewModel.getAccount().getId(), editViewModel.getFullCard().getLocalId(), attachment.getLocalId(), new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.info("Successfully delete", Attachment.class.getSimpleName(), attachment.getFilename(), "from", Card.class.getSimpleName(), editViewModel.getFullCard().getCard().getTitle()); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java index 495aabd50..caa13cb07 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java @@ -21,6 +21,7 @@ import androidx.lifecycle.ViewModelProvider; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; +import com.nextcloud.android.sso.api.EmptyResponse; import java.time.Instant; @@ -172,7 +173,7 @@ public class CardCommentsFragment extends Fragment implements Themed, CommentEdi public void onCommentDeleted(Long localId) { commentsViewModel.deleteComment(editCardViewModel.getAccount().getId(), editCardViewModel.getFullCard().getLocalId(), localId, new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.info("Successfully deleted comment with localId", localId); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CommentsViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CommentsViewModel.java index 79b0043fe..41179ce37 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CommentsViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CommentsViewModel.java @@ -8,6 +8,7 @@ import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import java.util.List; @@ -47,7 +48,7 @@ public class CommentsViewModel extends SyncViewModel { syncRepository.updateComment(accountId, localCardId, localCommentId, comment); } - public void deleteComment(long accountId, long localCardId, long localCommentId, @NonNull IResponseCallback<Void> callback) { + public void deleteComment(long accountId, long localCardId, long localCommentId, @NonNull IResponseCallback<EmptyResponse> callback) { syncRepository.deleteComment(accountId, localCardId, localCommentId, callback); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/main/MainActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/main/MainActivity.java index fc5992b68..e6d4693e0 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/main/MainActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/main/MainActivity.java @@ -45,6 +45,7 @@ import com.bumptech.glide.request.transition.Transition; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; import com.google.android.material.tabs.TabLayoutMediator; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; import com.nextcloud.android.sso.exceptions.UnknownErrorException; @@ -706,7 +707,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen final var filterInformation = Optional.ofNullable(filterViewModel.getFilterInformation().getValue()).orElse(new FilterInformation()); mainViewModel.archiveCardsInStack(stack.getAccountId(), stackLocalId, filterInformation, new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.info("Successfully archived all cards in stack local id", stackLocalId); } @@ -860,7 +861,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen public void onDeleteStack(long accountId, long boardId, long stackId) { mainViewModel.deleteStack(accountId, boardId, stackId, new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.info("Successfully deleted stack with local id", stackId, "and remote id", stackId); } @@ -878,7 +879,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen public void onBoardDeleted(Board board) { mainViewModel.deleteBoard(board, new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.info("Successfully deleted board", board.getTitle()); } @@ -969,7 +970,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen public void onDelete(@NonNull FullCard fullCard) { mainViewModel.deleteCard(fullCard.getCard(), new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.info("Successfully deleted card", fullCard.getCard().getTitle()); } @@ -1030,7 +1031,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen public void move(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId) { mainViewModel.moveCard(originAccountId, originCardLocalId, targetAccountId, targetBoardLocalId, targetStackLocalId, new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.log("Moved", Card.class.getSimpleName(), originCardLocalId, "to", Stack.class.getSimpleName(), targetStackLocalId); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/main/MainViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/main/MainViewModel.java index 8fe3ce0a5..54c39600e 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/main/MainViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/main/MainViewModel.java @@ -11,6 +11,7 @@ import androidx.core.util.Pair; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import java.io.File; @@ -129,7 +130,7 @@ public class MainViewModel extends BaseViewModel { } } - public void deleteBoard(@NonNull Board board, @NonNull IResponseCallback<Void> callback) { + public void deleteBoard(@NonNull Board board, @NonNull IResponseCallback<EmptyResponse> callback) { if (syncRepository == null) { callback.onError(getInvalidSyncManagerException()); } else { @@ -172,7 +173,7 @@ public class MainViewModel extends BaseViewModel { } } - public void deleteStack(long accountId, long boardId, long stackLocalId, @NonNull IResponseCallback<Void> callback) { + public void deleteStack(long accountId, long boardId, long stackLocalId, @NonNull IResponseCallback<EmptyResponse> callback) { if (syncRepository == null) { callback.onError(getInvalidSyncManagerException()); } else { @@ -196,7 +197,7 @@ public class MainViewModel extends BaseViewModel { } } - public void archiveCardsInStack(long accountId, long stackId, @NonNull FilterInformation filterInformation, @NonNull IResponseCallback<Void> callback) { + public void archiveCardsInStack(long accountId, long stackId, @NonNull FilterInformation filterInformation, @NonNull IResponseCallback<EmptyResponse> callback) { if (syncRepository == null) { callback.onError(getInvalidSyncManagerException()); } else { @@ -274,7 +275,7 @@ public class MainViewModel extends BaseViewModel { } } - public void deleteCard(@NonNull Card card, @NonNull IResponseCallback<Void> callback) { + public void deleteCard(@NonNull Card card, @NonNull IResponseCallback<EmptyResponse> callback) { if (syncRepository == null) { callback.onError(getInvalidSyncManagerException()); } else { @@ -304,7 +305,7 @@ public class MainViewModel extends BaseViewModel { return baseRepository.getUserByUidDirectly(accountId, uid); } - public void moveCard(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId, @NonNull IResponseCallback<Void> callback) { + public void moveCard(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId, @NonNull IResponseCallback<EmptyResponse> callback) { if (syncRepository == null) { callback.onError(getInvalidSyncManagerException()); } else { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java index 1a87cd2c7..fd39beefb 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java @@ -10,6 +10,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.ViewModelProvider; +import com.nextcloud.android.sso.api.EmptyResponse; + import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.full.FullCard; @@ -33,7 +35,7 @@ public class PrepareCreateActivity extends PickStackActivity { } @Override - protected void onSubmit(Account account, long boardId, long stackId, @NonNull IResponseCallback<Void> callback) { + protected void onSubmit(Account account, long boardId, long stackId, @NonNull IResponseCallback<EmptyResponse> callback) { Toast.makeText(this, R.string.saving_new_card, Toast.LENGTH_SHORT).show(); final FullCard fullCard; if (requireContent()) { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java index 33925a8f5..6e328b7d7 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java @@ -20,6 +20,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.nextcloud.android.common.ui.theme.utils.ColorRole; +import com.nextcloud.android.sso.api.EmptyResponse; import it.niedermann.android.crosstabdnd.DragAndDropTab; import it.niedermann.android.reactivelivedata.ReactiveLiveData; @@ -170,7 +171,7 @@ public class StackFragment extends Fragment implements Themed, DragAndDropTab<Ca public void move(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId) { stackViewModel.moveCard(originAccountId, originCardLocalId, targetAccountId, targetBoardLocalId, targetStackLocalId, new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.log("Moved", Card.class.getSimpleName(), originCardLocalId, "to", Stack.class.getSimpleName(), targetStackLocalId); } @@ -228,7 +229,7 @@ public class StackFragment extends Fragment implements Themed, DragAndDropTab<Ca public void onDelete(@NonNull FullCard fullCard) { stackViewModel.deleteCard(fullCard.getCard(), new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.info("Successfully deleted card", fullCard.getCard().getTitle()); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackViewModel.java index c6746449c..d7fdb3364 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackViewModel.java @@ -8,6 +8,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.LiveData; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import java.util.List; @@ -29,7 +30,7 @@ public class StackViewModel extends SyncViewModel { super(application, account); } - public void moveCard(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId, @NonNull IResponseCallback<Void> callback) { + public void moveCard(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId, @NonNull IResponseCallback<EmptyResponse> callback) { syncRepository.moveCard(originAccountId, originCardLocalId, targetAccountId, targetBoardLocalId, targetStackLocalId, callback); } @@ -69,7 +70,7 @@ public class StackViewModel extends SyncViewModel { } - public void deleteCard(@NonNull Card card, @NonNull IResponseCallback<Void> callback) { + public void deleteCard(@NonNull Card card, @NonNull IResponseCallback<EmptyResponse> callback) { syncRepository.deleteCard(card, callback); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java index 1d2e68633..aed6d5f48 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsActivity.java @@ -11,6 +11,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.ViewModelProvider; import com.nextcloud.android.common.ui.theme.utils.ColorRole; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import it.niedermann.nextcloud.deck.DeckLog; @@ -84,7 +85,7 @@ public class UpcomingCardsActivity extends AppCompatActivity implements Themed, }), card -> viewModel.deleteCard(card, new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.info("Successfully deleted card", card.getTitle()); } @@ -128,7 +129,7 @@ public class UpcomingCardsActivity extends AppCompatActivity implements Themed, public void move(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId) { viewModel.moveCard(originAccountId, originCardLocalId, targetAccountId, targetBoardLocalId, targetStackLocalId, new IResponseCallback<>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { DeckLog.log("Moved", Card.class.getSimpleName(), originCardLocalId, "to", Stack.class.getSimpleName(), targetStackLocalId); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsViewModel.java index c3dbcb8a7..870a23cdc 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/upcomingcards/UpcomingCardsViewModel.java @@ -5,6 +5,7 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; +import com.nextcloud.android.sso.api.EmptyResponse; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import java.util.List; @@ -49,7 +50,7 @@ public class UpcomingCardsViewModel extends BaseViewModel { }); } - public void deleteCard(@NonNull Card card, @NonNull IResponseCallback<Void> callback) { + public void deleteCard(@NonNull Card card, @NonNull IResponseCallback<EmptyResponse> callback) { executor.submit(() -> { final var account = baseRepository.readAccountDirectly(card.getAccountId()); try { @@ -61,7 +62,7 @@ public class UpcomingCardsViewModel extends BaseViewModel { }); } - public void moveCard(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId, @NonNull IResponseCallback<Void> callback) { + public void moveCard(long originAccountId, long originCardLocalId, long targetAccountId, long targetBoardLocalId, long targetStackLocalId, @NonNull IResponseCallback<EmptyResponse> callback) { executor.submit(() -> { final var account = baseRepository.readAccountDirectly(originAccountId); try { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/DueDateChip.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/DueDateChip.java index 095a46bd3..f2bdf8699 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/DueDateChip.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/DueDateChip.java @@ -35,7 +35,7 @@ public class DueDateChip extends Chip { } public DueDateChip(Context context, AttributeSet attrs) { - this(context, attrs, R.attr.chipStyle); + this(context, attrs, com.google.android.material.R.attr.chipStyle); } public DueDateChip(Context context, AttributeSet attrs, int defStyleAttr) { @@ -43,7 +43,7 @@ public class DueDateChip extends Chip { final var typedValue = new TypedValue(); final var theme = getContext().getTheme(); - theme.resolveAttribute(R.attr.colorOnSurfaceVariant, typedValue, true); + theme.resolveAttribute(com.google.android.material.R.attr.colorOnSecondary, typedValue, true); this.colorOnSurface = typedValue.data; final var styles = context.obtainStyledAttributes(attrs, R.styleable.DueDateChip, defStyleAttr, 0); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/FilterIndicator.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/FilterIndicator.java deleted file mode 100644 index 73b3a84a6..000000000 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/FilterIndicator.java +++ /dev/null @@ -1,27 +0,0 @@ -package it.niedermann.nextcloud.deck.ui.view; - -import android.content.Context; -import android.util.AttributeSet; - -import androidx.core.content.ContextCompat; - -import com.google.android.material.button.MaterialButton; - -import it.niedermann.nextcloud.deck.R; - -public class FilterIndicator extends MaterialButton { - - public FilterIndicator(Context context) { - this(context, null, 0); - } - - public FilterIndicator(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public FilterIndicator(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, R.style.ThemeOverlay_Material3_Button_IconButton); - setIcon(ContextCompat.getDrawable(context, R.drawable.filter_active)); - } - -}
\ No newline at end of file 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 eaa8ba264..965c2b938 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 @@ -9,6 +9,8 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.lifecycle.ViewModelProvider; +import com.nextcloud.android.sso.api.EmptyResponse; + import java.util.Collections; import it.niedermann.nextcloud.deck.DeckLog; @@ -53,7 +55,7 @@ public class StackWidgetConfigurationActivity extends PickStackActivity { } @Override - protected void onSubmit(Account account, long boardId, long stackId, @NonNull IResponseCallback<Void> callback) { + protected void onSubmit(Account account, long boardId, long stackId, @NonNull IResponseCallback<EmptyResponse> callback) { final FilterWidget config = new FilterWidget(appWidgetId, EWidgetType.STACK_WIDGET); final FilterWidgetAccount filterWidgetAccount = new FilterWidgetAccount(account.getId(), false); filterWidgetAccount.setIncludeNoProject(false); diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index b556a9e94..1b9a313f4 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,6 +15,7 @@ <!-- TODO REMOVE --> <!-- ======================================= --> + <color name="bottom_sheet_backdrop">#7f000000</color> <color name="grey600">#757575</color> <color name="fg_secondary">#999</color> <color name="bg_highlighted">#eee</color> diff --git a/app/src/test/java/it/niedermann/nextcloud/deck/remote/api/ResponseCallbackTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/remote/api/ResponseCallbackTest.java index 14c398132..4b5786564 100644 --- a/app/src/test/java/it/niedermann/nextcloud/deck/remote/api/ResponseCallbackTest.java +++ b/app/src/test/java/it/niedermann/nextcloud/deck/remote/api/ResponseCallbackTest.java @@ -10,6 +10,8 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import com.nextcloud.android.sso.api.EmptyResponse; + import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; @@ -50,9 +52,9 @@ public class ResponseCallbackTest { @Test public void testFrom() { // No lambda, since Mockito requires a non final class for a spy - final var originalCallback = new IResponseCallback<Void>() { + final var originalCallback = new IResponseCallback<EmptyResponse>() { @Override - public void onResponse(Void response) { + public void onResponse(EmptyResponse response) { // Do nothing... } }; diff --git a/app/src/test/java/it/niedermann/nextcloud/deck/remote/api/ServerCommunicationErrorHandlerTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/remote/api/ServerCommunicationErrorHandlerTest.java index b9c7288a0..1ff698707 100644 --- a/app/src/test/java/it/niedermann/nextcloud/deck/remote/api/ServerCommunicationErrorHandlerTest.java +++ b/app/src/test/java/it/niedermann/nextcloud/deck/remote/api/ServerCommunicationErrorHandlerTest.java @@ -51,6 +51,6 @@ public class ServerCommunicationErrorHandlerTest { @Test public void shouldSkip_KnownExceptions_WithNullMessages() { assertEquals(ClassNotFoundException.class, ServerCommunicationErrorHandler.translateError(new ClassNotFoundException()).getClass()); - assertEquals(UnknownErrorException.class, ServerCommunicationErrorHandler.translateError(new UnknownErrorException()).getClass()); + assertEquals(UnknownErrorException.class, ServerCommunicationErrorHandler.translateError(new UnknownErrorException("Foo")).getClass()); } } diff --git a/app/src/test/java/it/niedermann/nextcloud/deck/repository/SyncRepositoryTest.java b/app/src/test/java/it/niedermann/nextcloud/deck/repository/SyncRepositoryTest.java index 54bc2dc4a..0273a1b64 100644 --- a/app/src/test/java/it/niedermann/nextcloud/deck/repository/SyncRepositoryTest.java +++ b/app/src/test/java/it/niedermann/nextcloud/deck/repository/SyncRepositoryTest.java @@ -229,7 +229,7 @@ public class SyncRepositoryTest { when(dataBaseAdapter.createAccountDirectly(any(Account.class))).thenReturn(account); doAnswer(invocation -> { ((ResponseCallback<ParsedResponse<Capabilities>>) invocation.getArgument(0)) - .onError(new NextcloudHttpRequestFailedException(404, new RuntimeException())); + .onError(new NextcloudHttpRequestFailedException(ApplicationProvider.getApplicationContext(), 404, new RuntimeException())); return null; }).when(serverAdapter).getBoards(any()); @@ -269,7 +269,6 @@ public class SyncRepositoryTest { public void testRefreshCapabilities() throws ExecutionException, InterruptedException { final var account = new Account(1337L, "Test", "Peter", "example.com"); account.setEtag("This-Is-The-Old_ETag"); - //noinspection unchecked final var mockedResponse = mock(ParsedResponse.class); final var serverResponse = new Capabilities(); serverResponse.setDeckVersion(Version.of("1.0.0")); @@ -309,7 +308,7 @@ public class SyncRepositoryTest { doAnswer(invocation -> { //noinspection unchecked ((ResponseCallback<ParsedResponse<Capabilities>>) invocation.getArgument(1)) - .onError(new NextcloudHttpRequestFailedException(304, new RuntimeException())); + .onError(new NextcloudHttpRequestFailedException(ApplicationProvider.getApplicationContext(), 304, new RuntimeException())); return null; }).when(serverAdapter).getCapabilities(anyString(), any()); @@ -335,7 +334,7 @@ public class SyncRepositoryTest { doAnswer(invocation -> { //noinspection unchecked ((ResponseCallback<ParsedResponse<Capabilities>>) invocation.getArgument(1)) - .onError(new NextcloudHttpRequestFailedException(500, new RuntimeException())); + .onError(new NextcloudHttpRequestFailedException(ApplicationProvider.getApplicationContext(), 500, new RuntimeException())); return null; }).when(serverAdapter).getCapabilities(anyString(), any()); @@ -358,7 +357,7 @@ public class SyncRepositoryTest { doAnswer(invocation -> { //noinspection unchecked ((ResponseCallback<ParsedResponse<Capabilities>>) invocation.getArgument(1)) - .onError(new NextcloudHttpRequestFailedException(503, new RuntimeException("{\"ocs\": {\"meta\": {\"statuscode\": 503}, \"data\": {\"version\": {\"major\": 20, \"minor\": 0, \"patch\": 1}}}}"))); + .onError(new NextcloudHttpRequestFailedException(ApplicationProvider.getApplicationContext(), 503, new RuntimeException("{\"ocs\": {\"meta\": {\"statuscode\": 503}, \"data\": {\"version\": {\"major\": 20, \"minor\": 0, \"patch\": 1}}}}"))); return null; }).when(serverAdapter).getCapabilities(anyString(), any()); diff --git a/build.gradle b/build.gradle index c2b883b1e..4ca574f30 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.materialVersion = "1.9.0" + ext.materialVersion = "1.11.0" repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.2.1' //noinspection DifferentKotlinGradleVersion classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.22" diff --git a/cross-tab-drag-and-drop/build.gradle b/cross-tab-drag-and-drop/build.gradle index df18a07b2..fd907ec29 100644 --- a/cross-tab-drag-and-drop/build.gradle +++ b/cross-tab-drag-and-drop/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 33 - buildToolsVersion "31.0.0" + compileSdk 34 + namespace 'it.niedermann.android.crosstabdnd' + defaultConfig { minSdkVersion 22 - targetSdkVersion 33 + targetSdk 34 } - namespace 'it.niedermann.android.crosstabdnd' } dependencies { diff --git a/gradle.properties b/gradle.properties index eab924acd..4e8e44e95 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,14 +1,3 @@ -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 +org.gradle.configuration-cache=true android.useAndroidX=true -org.gradle.jvmargs=-Xmx4096m -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8fad3f5a9..b93c46a5f 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-7.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/reactive-livedata/build.gradle b/reactive-livedata/build.gradle index 66d7eeb92..c18feca69 100644 --- a/reactive-livedata/build.gradle +++ b/reactive-livedata/build.gradle @@ -1,25 +1,26 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 33 - buildToolsVersion "31.0.0" + compileSdk 34 + namespace 'it.niedermann.android.reactivelivedata' + defaultConfig { - minSdkVersion 22 - targetSdkVersion 33 + minSdk 22 + targetSdk 34 } - namespace 'it.niedermann.android.reactivelivedata' + compileOptions { coreLibraryDesugaringEnabled true - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' - implementation "androidx.lifecycle:lifecycle-livedata:2.6.2" - implementation 'androidx.core:core:1.10.1' + implementation "androidx.lifecycle:lifecycle-livedata:2.7.0" + implementation 'androidx.core:core:1.12.0' testImplementation 'junit:junit:4.13.2' testImplementation 'org.robolectric:robolectric:4.11.1' diff --git a/tab-layout-helper/build.gradle b/tab-layout-helper/build.gradle index 95aef30bb..f741a324c 100644 --- a/tab-layout-helper/build.gradle +++ b/tab-layout-helper/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 33 - buildToolsVersion "31.0.0" + compileSdk 34 + namespace 'it.niedermann.android.tablayouthelper' + defaultConfig { - minSdkVersion 22 - targetSdkVersion 33 + minSdk 22 + targetSdk 34 } - namespace 'it.niedermann.android.tablayouthelper' } dependencies { |