From 82e2b25e15a530b4eb93bb074a4838b355a16969 Mon Sep 17 00:00:00 2001 From: Stefan Niedermann Date: Mon, 22 Jan 2024 08:08:36 +0100 Subject: fix(attachments): Allow to delete "file" attachments Refs: #871 Signed-off-by: Stefan Niedermann --- FAQ.md | 1 - .../it/niedermann/nextcloud/deck/model/ocs/Version.java | 4 ++++ .../nextcloud/deck/remote/adapters/ServerAdapter.java | 4 ++-- .../it/niedermann/nextcloud/deck/remote/api/DeckAPI.java | 2 +- .../remote/helpers/providers/AttachmentDataProvider.java | 2 +- .../deck/ui/card/attachments/AttachmentViewHolder.java | 14 ++++---------- fastlane/metadata/android/en-US/changelogs/1024000.txt | 1 + 7 files changed, 13 insertions(+), 15 deletions(-) diff --git a/FAQ.md b/FAQ.md index 7fb1aa631..a3eca4904 100644 --- a/FAQ.md +++ b/FAQ.md @@ -81,7 +81,6 @@ We opened a [feature request](https://github.com/nextcloud/deck/issues/3101) to Here is a collection of issues which are caused by the (not by us developed) Deck server app and can not be fixed within Deck Android. Please [contact the Nextcloud GmbH](https://nextcloud.com/contact/) if you want them to be fixed. -- Attachments are not deletable since Deck server 1.3: https://github.com/nextcloud/deck/issues/2904 - Viewing archived cards is not possible: https://github.com/nextcloud/deck/issues/2613 - Renaming a list in the web UI does not update in Deck Android: https://github.com/nextcloud/deck/issues/2866 diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/ocs/Version.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/ocs/Version.java index 7a6aba31d..ccb236ea6 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/model/ocs/Version.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/ocs/Version.java @@ -173,6 +173,10 @@ public class Version implements Comparable { return isGreaterOrEqualTo(VERSION_1_3_0); } + public boolean supportsDeletingFileAttachments() { + return isGreaterOrEqualTo(VERSION_1_12_2); + } + /** * Cards started to have an additional property called done with version {@link #VERSION_1_12_0} of the Deck server app. * However, there was an issue that would have required to call a second endpoint when marking a card as undone which was fixed in {@link #VERSION_1_12_2}. 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 ec5dc551b..cc7bedbf1 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 @@ -305,9 +305,9 @@ 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 responseCallback) { + public void deleteAttachment(Long remoteBoardId, long remoteStackId, long remoteCardId, @NonNull Attachment attachment, @NonNull ResponseCallback responseCallback) { ensureInternetConnection(); - RequestHelper.request(provider, () -> provider.getDeckAPI().deleteAttachment(remoteBoardId, remoteStackId, remoteCardId, remoteAttachmentId), responseCallback); + RequestHelper.request(provider, () -> provider.getDeckAPI().deleteAttachment(attachment.getType().getValue(), remoteBoardId, remoteStackId, remoteCardId, attachment.getId()), responseCallback); } public void restoreAttachment(Long remoteBoardId, long remoteStackId, long remoteCardId, long remoteAttachmentId, @NonNull ResponseCallback 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 1f17d2daa..710082c5d 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 @@ -161,7 +161,7 @@ public interface DeckAPI { Observable 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 deleteAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId); + Observable deleteAttachment(@Query("type") String type, @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 restoreAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId); 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 e3f84fdaf..09ad2c81b 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 @@ -104,7 +104,7 @@ public class AttachmentDataProvider extends AbstractSyncDataProvider @Override public void deleteOnServer(ServerAdapter serverAdapter, long accountId, ResponseCallback callback, Attachment entity, DataBaseAdapter dataBaseAdapter) { - serverAdapter.deleteAttachment(board.getId(), stack.getId(), card.getId(), entity.getId(), callback); + serverAdapter.deleteAttachment(board.getId(), stack.getId(), card.getId(), entity, callback); } @Override diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentViewHolder.java index 85c84dc00..dd586bd84 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentViewHolder.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentViewHolder.java @@ -18,7 +18,6 @@ import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.Attachment; import it.niedermann.nextcloud.deck.model.enums.DBStatus; -import it.niedermann.nextcloud.deck.model.enums.EAttachmentType; import it.niedermann.nextcloud.deck.ui.theme.ThemeUtils; import it.niedermann.nextcloud.deck.util.AttachmentUtil; @@ -36,15 +35,10 @@ public abstract class AttachmentViewHolder extends RecyclerView.ViewHolder { getNotSyncedYetStatusIcon().setVisibility(synced ? View.GONE : View.VISIBLE); itemView.setOnCreateContextMenuListener((menu, v, menuInfo) -> { menuInflater.inflate(R.menu.attachment_menu, menu); - if (EAttachmentType.DECK_FILE.equals(attachment.getType())) { - menu.findItem(R.id.delete).setOnMenuItemClickListener(item -> { - DeleteAttachmentDialogFragment.newInstance(attachment).show(fragmentManager, DeleteAttachmentDialogFragment.class.getCanonicalName()); - return false; - }); - menu.findItem(R.id.delete).setVisible(true); - } else { - menu.findItem(R.id.delete).setVisible(false); - } + menu.findItem(R.id.delete).setOnMenuItemClickListener(item -> { + DeleteAttachmentDialogFragment.newInstance(attachment).show(fragmentManager, DeleteAttachmentDialogFragment.class.getCanonicalName()); + return false; + }); if (attachmentUri == null || attachment.getId() == null || cardRemoteId == null) { menu.findItem(android.R.id.copyUrl).setVisible(false); } else { diff --git a/fastlane/metadata/android/en-US/changelogs/1024000.txt b/fastlane/metadata/android/en-US/changelogs/1024000.txt index b0d209ea3..fdb6e58f8 100644 --- a/fastlane/metadata/android/en-US/changelogs/1024000.txt +++ b/fastlane/metadata/android/en-US/changelogs/1024000.txt @@ -1,4 +1,5 @@ - ☑️ Support Completed / Uncompleted state (#1556) - Requires deck server ≥ 1.12.2 - 📎 Open file attachments in Nextcloud Files app (#1561) - Requires deck server ≥ 1.12.2 +- 🗑️ Allow to delete "file" attachments (#871) - ☑️ Share text as task to card description (#1558) - ☀️ Force keeping screen on while importing first account \ No newline at end of file -- cgit v1.2.3