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

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/card')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java117
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java11
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java66
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java9
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CommentsViewModel.java37
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourceAdapter.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourceViewHolder.java10
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java2
11 files changed, 173 insertions, 115 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java
index ecb06c7a8..87140e544 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAdapter.java
@@ -33,6 +33,7 @@ import it.niedermann.nextcloud.deck.model.Stack;
import it.niedermann.nextcloud.deck.model.full.FullCard;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData;
+import it.niedermann.nextcloud.deck.ui.MainViewModel;
import it.niedermann.nextcloud.deck.ui.branding.Branded;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment;
import it.niedermann.nextcloud.deck.ui.movecard.MoveCardDialogFragment;
@@ -46,16 +47,10 @@ public class CardAdapter extends RecyclerView.Adapter<AbstractCardViewHolder> im
private final boolean compactMode;
@NonNull
- protected final SyncManager syncManager;
+ protected final MainViewModel mainViewModel;
@NonNull
protected final FragmentManager fragmentManager;
- @NonNull
- protected final Account account;
- @Nullable
- protected final Long boardRemoteId;
- private final long boardLocalId;
private final long stackId;
- protected final boolean hasEditPermission;
@NonNull
private final Context context;
@Nullable
@@ -69,20 +64,16 @@ public class CardAdapter extends RecyclerView.Adapter<AbstractCardViewHolder> im
@ColorInt
protected int mainColor;
@StringRes
- private int shareLinkRes;
+ private final int shareLinkRes;
- public CardAdapter(@NonNull Context context, @NonNull FragmentManager fragmentManager, @NonNull Account account, long boardLocalId, @Nullable Long boardRemoteId, long stackId, boolean hasEditPermission, @NonNull SyncManager syncManager, @NonNull LifecycleOwner lifecycleOwner, @Nullable SelectCardListener selectCardListener) {
+ public CardAdapter(@NonNull Context context, @NonNull FragmentManager fragmentManager, long stackId, @NonNull MainViewModel mainViewModel, @NonNull LifecycleOwner lifecycleOwner, @Nullable SelectCardListener selectCardListener) {
this.context = context;
this.counterMaxValue = context.getString(R.string.counter_max_value);
this.fragmentManager = fragmentManager;
this.lifecycleOwner = lifecycleOwner;
- this.account = account;
- this.shareLinkRes = account.getServerDeckVersionAsObject().getShareLinkResource();
- this.boardLocalId = boardLocalId;
- this.boardRemoteId = boardRemoteId;
+ this.shareLinkRes = mainViewModel.getCurrentAccount().getServerDeckVersionAsObject().getShareLinkResource();
this.stackId = stackId;
- this.hasEditPermission = hasEditPermission;
- this.syncManager = syncManager;
+ this.mainViewModel = mainViewModel;
this.selectCardListener = selectCardListener;
this.mainColor = ContextCompat.getColor(context, R.color.defaultBrand);
this.compactMode = getDefaultSharedPreferences(context).getBoolean(context.getString(R.string.pref_key_compact), false);
@@ -97,15 +88,12 @@ public class CardAdapter extends RecyclerView.Adapter<AbstractCardViewHolder> im
@NonNull
@Override
public AbstractCardViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
- switch (viewType) {
- case R.layout.item_card_compact:
- return new CompactCardViewHolder(ItemCardCompactBinding.inflate(LayoutInflater.from(viewGroup.getContext()), viewGroup, false));
- case R.layout.item_card_default_only_title:
- return new DefaultCardOnlyTitleViewHolder(ItemCardDefaultOnlyTitleBinding.inflate(LayoutInflater.from(viewGroup.getContext()), viewGroup, false));
- case R.layout.item_card_default:
- default:
- return new DefaultCardViewHolder(ItemCardDefaultBinding.inflate(LayoutInflater.from(viewGroup.getContext()), viewGroup, false));
+ if (viewType == R.layout.item_card_compact) {
+ return new CompactCardViewHolder(ItemCardCompactBinding.inflate(LayoutInflater.from(viewGroup.getContext()), viewGroup, false));
+ } else if (viewType == R.layout.item_card_default_only_title) {
+ return new DefaultCardOnlyTitleViewHolder(ItemCardDefaultOnlyTitleBinding.inflate(LayoutInflater.from(viewGroup.getContext()), viewGroup, false));
}
+ return new DefaultCardViewHolder(ItemCardDefaultBinding.inflate(LayoutInflater.from(viewGroup.getContext()), viewGroup, false));
}
@Override
@@ -127,12 +115,12 @@ public class CardAdapter extends RecyclerView.Adapter<AbstractCardViewHolder> im
@Override
public void onBindViewHolder(@NonNull AbstractCardViewHolder viewHolder, int position) {
@NonNull FullCard fullCard = cardList.get(position);
- viewHolder.bind(fullCard, account, boardRemoteId, hasEditPermission, R.menu.card_menu, this, counterMaxValue, mainColor);
+ viewHolder.bind(fullCard, mainViewModel.getCurrentAccount(), mainViewModel.getCurrentBoardRemoteId(), mainViewModel.currentBoardHasEditPermission(), R.menu.card_menu, this, counterMaxValue, mainColor);
// Only enable details view if there is no one waiting for selecting a card.
viewHolder.bindCardClickListener((v) -> {
if (selectCardListener == null) {
- context.startActivity(EditActivity.createEditCardIntent(context, account, boardLocalId, fullCard.getLocalId()));
+ context.startActivity(EditActivity.createEditCardIntent(context, mainViewModel.getCurrentAccount(), mainViewModel.getCurrentBoardLocalId(), fullCard.getLocalId()));
} else {
selectCardListener.onCardSelected(fullCard);
}
@@ -194,47 +182,44 @@ public class CardAdapter extends RecyclerView.Adapter<AbstractCardViewHolder> im
@Override
public boolean onCardOptionsItemSelected(@NonNull MenuItem menuItem, @NonNull FullCard fullCard) {
- switch (menuItem.getItemId()) {
- case R.id.share_link: {
- Intent shareIntent = new Intent()
- .setAction(Intent.ACTION_SEND)
- .setType(TEXT_PLAIN)
- .putExtra(Intent.EXTRA_SUBJECT, fullCard.getCard().getTitle())
- .putExtra(Intent.EXTRA_TITLE, fullCard.getCard().getTitle())
- .putExtra(Intent.EXTRA_TEXT, account.getUrl() + context.getString(shareLinkRes, boardRemoteId, fullCard.getCard().getId()));
- context.startActivity(Intent.createChooser(shareIntent, fullCard.getCard().getTitle()));
- }
- case R.id.action_card_assign: {
- new Thread(() -> syncManager.assignUserToCard(syncManager.getUserByUidDirectly(fullCard.getCard().getAccountId(), account.getUserName()), fullCard.getCard())).start();
- return true;
- }
- case R.id.action_card_unassign: {
- new Thread(() -> syncManager.unassignUserFromCard(syncManager.getUserByUidDirectly(fullCard.getCard().getAccountId(), account.getUserName()), fullCard.getCard())).start();
- return true;
- }
- case R.id.action_card_move: {
- DeckLog.verbose("[Move card] Launch move dialog for " + Card.class.getSimpleName() + " \"" + fullCard.getCard().getTitle() + "\" (#" + fullCard.getLocalId() + ") from " + Stack.class.getSimpleName() + " #" + +stackId);
- MoveCardDialogFragment.newInstance(fullCard.getAccountId(), boardLocalId, fullCard.getCard().getTitle(), fullCard.getLocalId()).show(fragmentManager, MoveCardDialogFragment.class.getSimpleName());
- return true;
- }
- case R.id.action_card_archive: {
- final WrappedLiveData<FullCard> archiveLiveData = syncManager.archiveCard(fullCard);
- observeOnce(archiveLiveData, lifecycleOwner, (v) -> {
- if (archiveLiveData.hasError()) {
- ExceptionDialogFragment.newInstance(archiveLiveData.getError(), account).show(fragmentManager, ExceptionDialogFragment.class.getSimpleName());
- }
- });
- return true;
- }
- case R.id.action_card_delete: {
- final WrappedLiveData<Void> deleteLiveData = syncManager.deleteCard(fullCard.getCard());
- observeOnce(deleteLiveData, lifecycleOwner, (v) -> {
- if (deleteLiveData.hasError() && !SyncManager.ignoreExceptionOnVoidError(deleteLiveData.getError())) {
- ExceptionDialogFragment.newInstance(deleteLiveData.getError(), account).show(fragmentManager, ExceptionDialogFragment.class.getSimpleName());
- }
- });
- return true;
- }
+ int itemId = menuItem.getItemId();
+ final Account account = mainViewModel.getCurrentAccount();
+ if (itemId == R.id.share_link) {
+ Intent shareIntent = new Intent()
+ .setAction(Intent.ACTION_SEND)
+ .setType(TEXT_PLAIN)
+ .putExtra(Intent.EXTRA_SUBJECT, fullCard.getCard().getTitle())
+ .putExtra(Intent.EXTRA_TITLE, fullCard.getCard().getTitle())
+ .putExtra(Intent.EXTRA_TEXT, account.getUrl() + context.getString(shareLinkRes, mainViewModel.getCurrentBoardRemoteId(), fullCard.getCard().getId()));
+ context.startActivity(Intent.createChooser(shareIntent, fullCard.getCard().getTitle()));
+ new Thread(() -> mainViewModel.assignUserToCard(mainViewModel.getUserByUidDirectly(fullCard.getCard().getAccountId(), account.getUserName()), fullCard.getCard())).start();
+ return true;
+ } else if (itemId == R.id.action_card_assign) {
+ new Thread(() -> mainViewModel.assignUserToCard(mainViewModel.getUserByUidDirectly(fullCard.getCard().getAccountId(), account.getUserName()), fullCard.getCard())).start();
+ return true;
+ } else if (itemId == R.id.action_card_unassign) {
+ new Thread(() -> mainViewModel.unassignUserFromCard(mainViewModel.getUserByUidDirectly(fullCard.getCard().getAccountId(), account.getUserName()), fullCard.getCard())).start();
+ return true;
+ } else if (itemId == R.id.action_card_move) {
+ DeckLog.verbose("[Move card] Launch move dialog for " + Card.class.getSimpleName() + " \"" + fullCard.getCard().getTitle() + "\" (#" + fullCard.getLocalId() + ") from " + Stack.class.getSimpleName() + " #" + +stackId);
+ MoveCardDialogFragment.newInstance(fullCard.getAccountId(), mainViewModel.getCurrentBoardLocalId(), fullCard.getCard().getTitle(), fullCard.getLocalId()).show(fragmentManager, MoveCardDialogFragment.class.getSimpleName());
+ return true;
+ } else if (itemId == R.id.action_card_archive) {
+ final WrappedLiveData<FullCard> archiveLiveData = mainViewModel.archiveCard(fullCard);
+ observeOnce(archiveLiveData, lifecycleOwner, (v) -> {
+ if (archiveLiveData.hasError()) {
+ ExceptionDialogFragment.newInstance(archiveLiveData.getError(), account).show(fragmentManager, ExceptionDialogFragment.class.getSimpleName());
+ }
+ });
+ return true;
+ } else if (itemId == R.id.action_card_delete) {
+ final WrappedLiveData<Void> deleteLiveData = mainViewModel.deleteCard(fullCard.getCard());
+ observeOnce(deleteLiveData, lifecycleOwner, (v) -> {
+ if (deleteLiveData.hasError() && !SyncManager.ignoreExceptionOnVoidError(deleteLiveData.getError())) {
+ ExceptionDialogFragment.newInstance(deleteLiveData.getError(), account).show(fragmentManager, ExceptionDialogFragment.class.getSimpleName());
+ }
+ });
+ return true;
}
return true;
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java
index fcc9d24e6..2e1ff5e06 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java
@@ -26,7 +26,6 @@ import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.ActivityEditBinding;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.full.FullCard;
-import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.ui.branding.BrandedActivity;
import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
@@ -45,7 +44,6 @@ public class EditActivity extends BrandedActivity {
private ActivityEditBinding binding;
private EditCardViewModel viewModel;
- private SyncManager syncManager;
private static final int[] tabTitles = new int[]{
R.string.card_edit_details,
@@ -116,11 +114,10 @@ public class EditActivity extends BrandedActivity {
throw new IllegalArgumentException(BUNDLE_KEY_ACCOUNT + " must not be null.");
}
viewModel.setAccount(account);
- syncManager = new SyncManager(this, viewModel.getAccount().getName());
final long boardId = args.getLong(BUNDLE_KEY_BOARD_ID);
- observeOnce(syncManager.getFullBoardById(account.getId(), boardId), EditActivity.this, (fullBoard -> {
+ observeOnce(viewModel.getFullBoardById(account.getId(), boardId), EditActivity.this, (fullBoard -> {
applyBrand(fullBoard.getBoard().getColor());
viewModel.setCanEdit(fullBoard.getBoard().isPermissionEdit());
invalidateOptionsMenu();
@@ -138,7 +135,7 @@ public class EditActivity extends BrandedActivity {
setupViewPager();
setupTitle();
} else {
- observeOnce(syncManager.getFullCardWithProjectsByLocalId(account.getId(), cardId), EditActivity.this, (fullCard) -> {
+ observeOnce(viewModel.getFullCardWithProjectsByLocalId(account.getId(), cardId), EditActivity.this, (fullCard) -> {
if (fullCard == null) {
new BrandedAlertDialogBuilder(this)
.setTitle(R.string.card_not_found)
@@ -199,9 +196,9 @@ public class EditActivity extends BrandedActivity {
.show();
} else {
if (viewModel.isCreateMode()) {
- observeOnce(syncManager.createFullCard(viewModel.getAccount().getId(), viewModel.getBoardId(), viewModel.getFullCard().getCard().getStackId(), viewModel.getFullCard()), EditActivity.this, (card) -> runnable.run());
+ observeOnce(viewModel.createFullCard(viewModel.getAccount().getId(), viewModel.getBoardId(), viewModel.getFullCard().getCard().getStackId(), viewModel.getFullCard()), EditActivity.this, (card) -> runnable.run());
} else {
- observeOnce(syncManager.updateCard(viewModel.getFullCard()), EditActivity.this, (card) -> runnable.run());
+ observeOnce(viewModel.updateCard(viewModel.getFullCard()), EditActivity.this, (card) -> runnable.run());
}
}
}
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 62fe6785f..c754d0800 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
@@ -1,18 +1,32 @@
package it.niedermann.nextcloud.deck.ui.card;
+import android.app.Application;
+
import androidx.annotation.NonNull;
-import androidx.lifecycle.ViewModel;
+import androidx.lifecycle.AndroidViewModel;
+import androidx.lifecycle.LiveData;
+import java.io.File;
import java.util.ArrayList;
+import java.util.List;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.model.Account;
+import it.niedermann.nextcloud.deck.model.Attachment;
+import it.niedermann.nextcloud.deck.model.Board;
import it.niedermann.nextcloud.deck.model.Card;
+import it.niedermann.nextcloud.deck.model.Label;
+import it.niedermann.nextcloud.deck.model.full.FullBoard;
+import it.niedermann.nextcloud.deck.model.full.FullCard;
import it.niedermann.nextcloud.deck.model.full.FullCardWithProjects;
+import it.niedermann.nextcloud.deck.model.ocs.Activity;
+import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
+import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData;
@SuppressWarnings("WeakerAccess")
-public class EditCardViewModel extends ViewModel {
+public class EditCardViewModel extends AndroidViewModel {
+ private SyncManager syncManager;
private Account account;
private long boardId;
private FullCardWithProjects originalCard;
@@ -23,6 +37,11 @@ public class EditCardViewModel extends ViewModel {
private boolean canEdit = false;
private boolean createMode = false;
+ public EditCardViewModel(@NonNull Application application) {
+ super(application);
+ this.syncManager = new SyncManager(application);
+ }
+
/**
* Stores a deep copy of the given fullCard to be able to compare the state at every time in #{@link EditCardViewModel#hasChanges()}
*
@@ -55,11 +74,12 @@ public class EditCardViewModel extends ViewModel {
public void setAccount(@NonNull Account account) {
this.account = account;
+ this.syncManager = new SyncManager(getApplication(), account.getName());
hasCommentsAbility = account.getServerDeckVersionAsObject().supportsComments();
}
public boolean hasChanges() {
- if(fullCard == null) {
+ if (fullCard == null) {
DeckLog.info("Can not check for changes because fullCard is null → assuming no changes have been made yet.");
return false;
}
@@ -105,4 +125,44 @@ public class EditCardViewModel extends ViewModel {
public long getBoardId() {
return boardId;
}
+
+ public LiveData<FullBoard> getFullBoardById(Long accountId, Long localId) {
+ return syncManager.getFullBoardById(accountId, localId);
+ }
+
+ public WrappedLiveData<Label> createLabel(long accountId, Label label, long localBoardId) {
+ return syncManager.createLabel(accountId, label, localBoardId);
+ }
+
+ public LiveData<FullCardWithProjects> getFullCardWithProjectsByLocalId(long accountId, long cardLocalId) {
+ return syncManager.getFullCardWithProjectsByLocalId(accountId, cardLocalId);
+ }
+
+ public WrappedLiveData<FullCard> createFullCard(long accountId, long localBoardId, long localStackId, @NonNull FullCard card) {
+ return syncManager.createFullCard(accountId, localBoardId, localStackId, card);
+ }
+
+ public WrappedLiveData<FullCard> updateCard(@NonNull FullCard card) {
+ return syncManager.updateCard(card);
+ }
+
+ public LiveData<List<Activity>> syncActivitiesForCard(@NonNull Card card) {
+ return syncManager.syncActivitiesForCard(card);
+ }
+
+ public WrappedLiveData<Attachment> addAttachmentToCard(long accountId, long localCardId, @NonNull String mimeType, @NonNull File file) {
+ return syncManager.addAttachmentToCard(accountId, localCardId, mimeType, file);
+ }
+
+ public WrappedLiveData<Void> deleteAttachmentOfCard(long accountId, long localCardId, long localAttachmentId) {
+ return syncManager.deleteAttachmentOfCard(accountId, localCardId, localAttachmentId);
+ }
+
+ public LiveData<Card> getCardByRemoteID(long accountId, long remoteId) {
+ return syncManager.getCardByRemoteID(accountId, remoteId);
+ }
+
+ public LiveData<Board> getBoardByRemoteId(long accountId, long remoteId) {
+ return syncManager.getBoardByRemoteId(accountId, remoteId);
+ }
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java
index 08d960257..f95eea89f 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/activities/CardActivityFragment.java
@@ -8,11 +8,9 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
-import androidx.recyclerview.widget.RecyclerView;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.databinding.FragmentCardEditTabActivitiesBinding;
-import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel;
public class CardActivityFragment extends Fragment {
@@ -39,17 +37,14 @@ public class CardActivityFragment extends Fragment {
}
if (!viewModel.isCreateMode()) {
- final SyncManager syncManager = new SyncManager(requireContext());
-
- syncManager.syncActivitiesForCard(viewModel.getFullCard().getCard()).observe(getViewLifecycleOwner(), (activities -> {
+ viewModel.syncActivitiesForCard(viewModel.getFullCard().getCard()).observe(getViewLifecycleOwner(), (activities -> {
if (activities == null || activities.size() == 0) {
binding.emptyContentView.setVisibility(View.VISIBLE);
binding.activitiesList.setVisibility(View.GONE);
} else {
binding.emptyContentView.setVisibility(View.GONE);
binding.activitiesList.setVisibility(View.VISIBLE);
- RecyclerView.Adapter adapter = new CardActivityAdapter(activities, requireActivity().getMenuInflater());
- binding.activitiesList.setAdapter(adapter);
+ binding.activitiesList.setAdapter(new CardActivityAdapter(activities, requireActivity().getMenuInflater()));
}
}));
} else {
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 81a166cb6..07e8d39dd 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
@@ -104,7 +104,6 @@ public class CardAttachmentsFragment extends BrandedFragment implements Attachme
@ColorInt
private int primaryColor;
- private SyncManager syncManager;
private CardAttachmentAdapter adapter;
private AbstractPickerAdapter<?> pickerAdapter;
@@ -146,7 +145,6 @@ public class CardAttachmentsFragment extends BrandedFragment implements Attachme
return binding.getRoot();
}
- syncManager = new SyncManager(requireContext());
adapter = new CardAttachmentAdapter(
getChildFragmentManager(),
requireActivity().getMenuInflater(),
@@ -436,7 +434,7 @@ public class CardAttachmentsFragment extends BrandedFragment implements Attachme
editViewModel.getFullCard().getAttachments().add(0, a);
adapter.addAttachment(a);
if (!editViewModel.isCreateMode()) {
- WrappedLiveData<Attachment> liveData = syncManager.addAttachmentToCard(editViewModel.getAccount().getId(), editViewModel.getFullCard().getLocalId(), a.getMimetype(), fileToUpload);
+ WrappedLiveData<Attachment> liveData = editViewModel.addAttachmentToCard(editViewModel.getAccount().getId(), editViewModel.getFullCard().getLocalId(), a.getMimetype(), fileToUpload);
observeOnce(liveData, getViewLifecycleOwner(), (next) -> {
if (liveData.hasError()) {
Throwable t = liveData.getError();
@@ -500,7 +498,7 @@ public class CardAttachmentsFragment extends BrandedFragment implements Attachme
adapter.removeAttachment(attachment);
editViewModel.getFullCard().getAttachments().remove(attachment);
if (!editViewModel.isCreateMode() && attachment.getLocalId() != null) {
- final WrappedLiveData<Void> deleteLiveData = syncManager.deleteAttachmentOfCard(editViewModel.getAccount().getId(), editViewModel.getFullCard().getLocalId(), attachment.getLocalId());
+ final WrappedLiveData<Void> deleteLiveData = editViewModel.deleteAttachmentOfCard(editViewModel.getAccount().getId(), editViewModel.getFullCard().getLocalId(), attachment.getLocalId());
observeOnce(deleteLiveData, this, (next) -> {
if (deleteLiveData.hasError() && !SyncManager.ignoreExceptionOnVoidError(deleteLiveData.getError())) {
ExceptionDialogFragment.newInstance(deleteLiveData.getError(), editViewModel.getAccount()).show(getChildFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
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 7f90e575a..3fd536aa6 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
@@ -41,7 +41,6 @@ public class CardCommentsFragment extends BrandedFragment implements CommentEdit
private FragmentCardEditTabCommentsBinding binding;
private EditCardViewModel mainViewModel;
private CommentsViewModel commentsViewModel;
- private SyncManager syncManager;
private CardCommentsAdapter adapter;
public static Fragment newInstance() {
@@ -71,7 +70,6 @@ public class CardCommentsFragment extends BrandedFragment implements CommentEdit
commentsViewModel = new ViewModelProvider(this).get(CommentsViewModel.class);
- syncManager = new SyncManager(requireActivity());
adapter = new CardCommentsAdapter(requireContext(), mainViewModel.getAccount(), requireActivity().getMenuInflater(), this, this, getChildFragmentManager());
binding.comments.setAdapter(adapter);
@@ -85,7 +83,7 @@ public class CardCommentsFragment extends BrandedFragment implements CommentEdit
setupMentions(mainViewModel.getAccount(), comment.getComment().getMentions(), binding.replyCommentText);
}
});
- syncManager.getFullCommentsForLocalCardId(mainViewModel.getFullCard().getLocalId()).observe(getViewLifecycleOwner(),
+ commentsViewModel.getFullCommentsForLocalCardId(mainViewModel.getFullCard().getLocalId()).observe(getViewLifecycleOwner(),
(comments) -> {
if (comments != null && comments.size() > 0) {
binding.emptyContentView.setVisibility(GONE);
@@ -109,7 +107,7 @@ public class CardCommentsFragment extends BrandedFragment implements CommentEdit
comment.setParentId(parent.getId());
commentsViewModel.setReplyToComment(null);
}
- syncManager.addCommentToCard(mainViewModel.getAccount().getId(), mainViewModel.getFullCard().getLocalId(), comment);
+ commentsViewModel.addCommentToCard(mainViewModel.getAccount().getId(), mainViewModel.getFullCard().getLocalId(), comment);
}
binding.message.setText(null);
});
@@ -137,12 +135,12 @@ public class CardCommentsFragment extends BrandedFragment implements CommentEdit
@Override
public void onCommentEdited(Long id, String comment) {
- syncManager.updateComment(mainViewModel.getAccount().getId(), mainViewModel.getFullCard().getLocalId(), id, comment);
+ commentsViewModel.updateComment(mainViewModel.getAccount().getId(), mainViewModel.getFullCard().getLocalId(), id, comment);
}
@Override
public void onCommentDeleted(Long localId) {
- final WrappedLiveData<Void> deleteLiveData = syncManager.deleteComment(mainViewModel.getAccount().getId(), mainViewModel.getFullCard().getLocalId(), localId);
+ final WrappedLiveData<Void> deleteLiveData = commentsViewModel.deleteComment(mainViewModel.getAccount().getId(), mainViewModel.getFullCard().getLocalId(), localId);
observeOnce(deleteLiveData, this, (next) -> {
if (deleteLiveData.hasError() && !SyncManager.ignoreExceptionOnVoidError(deleteLiveData.getError())) {
ExceptionDialogFragment.newInstance(deleteLiveData.getError(), mainViewModel.getAccount()).show(getChildFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
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 f7fd247a9..dada94d5b 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
@@ -1,15 +1,30 @@
package it.niedermann.nextcloud.deck.ui.card.comments;
+import android.app.Application;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
-import androidx.lifecycle.ViewModel;
+import java.util.List;
+
+import it.niedermann.nextcloud.deck.model.ocs.comment.DeckComment;
import it.niedermann.nextcloud.deck.model.ocs.comment.full.FullDeckComment;
+import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
+import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData;
@SuppressWarnings("WeakerAccess")
-public class CommentsViewModel extends ViewModel {
+public class CommentsViewModel extends AndroidViewModel {
- private MutableLiveData<FullDeckComment> replyToComment = new MutableLiveData<>();
+ private final SyncManager syncManager;
+
+ private final MutableLiveData<FullDeckComment> replyToComment = new MutableLiveData<>();
+
+ public CommentsViewModel(@NonNull Application application) {
+ super(application);
+ this.syncManager = new SyncManager(application);
+ }
public void setReplyToComment(FullDeckComment replyToComment) {
this.replyToComment.postValue(replyToComment);
@@ -18,4 +33,20 @@ public class CommentsViewModel extends ViewModel {
public LiveData<FullDeckComment> getReplyToComment() {
return this.replyToComment;
}
+
+ public LiveData<List<FullDeckComment>> getFullCommentsForLocalCardId(long localCardId) {
+ return syncManager.getFullCommentsForLocalCardId(localCardId);
+ }
+
+ public void addCommentToCard(long accountId, long cardId, @NonNull DeckComment comment) {
+ syncManager.addCommentToCard(accountId, cardId, comment);
+ }
+
+ public void updateComment(long accountId, long localCardId, long localCommentId, String comment) {
+ syncManager.updateComment(accountId, localCardId, localCommentId, comment);
+ }
+
+ public WrappedLiveData<Void> deleteComment(long accountId, long localCardId, long localCommentId) {
+ return syncManager.deleteComment(accountId, localCardId, localCommentId);
+ }
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
index 70689f1f7..2c697de08 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java
@@ -46,7 +46,6 @@ import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.FragmentCardEditTabDetailsBinding;
import it.niedermann.nextcloud.deck.model.Label;
import it.niedermann.nextcloud.deck.model.User;
-import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData;
import it.niedermann.nextcloud.deck.ui.branding.BrandedDatePickerDialog;
import it.niedermann.nextcloud.deck.ui.branding.BrandedFragment;
@@ -69,7 +68,6 @@ public class CardDetailsFragment extends BrandedFragment implements OnDateSetLis
private FragmentCardEditTabDetailsBinding binding;
private EditCardViewModel viewModel;
- private SyncManager syncManager;
private AssigneeAdapter adapter;
private final DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
private final DateTimeFormatter timeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
@@ -94,7 +92,6 @@ public class CardDetailsFragment extends BrandedFragment implements OnDateSetLis
ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentCardEditTabDetailsBinding.inflate(inflater, container, false);
-
viewModel = new ViewModelProvider(activity).get(EditCardViewModel.class);
// This might be a zombie fragment with an empty EditCardViewModel after Android killed the activity (but not the fragment instance
@@ -104,10 +101,7 @@ public class CardDetailsFragment extends BrandedFragment implements OnDateSetLis
return binding.getRoot();
}
- syncManager = new SyncManager(requireContext());
-
- @Px
- final int avatarSize = DimensionUtil.INSTANCE.dpToPx(requireContext(), R.dimen.avatar_size);
+ @Px final int avatarSize = DimensionUtil.INSTANCE.dpToPx(requireContext(), R.dimen.avatar_size);
final LinearLayout.LayoutParams avatarLayoutParams = new LinearLayout.LayoutParams(avatarSize, avatarSize);
avatarLayoutParams.setMargins(0, 0, DimensionUtil.INSTANCE.dpToPx(requireContext(), R.dimen.spacer_1x), 0);
@@ -239,7 +233,7 @@ public class CardDetailsFragment extends BrandedFragment implements OnDateSetLis
newLabel.setBoardId(boardId);
newLabel.setTitle(((LabelAutoCompleteAdapter) binding.labels.getAdapter()).getLastFilterText());
newLabel.setLocalId(null);
- WrappedLiveData<Label> createLabelLiveData = syncManager.createLabel(accountId, newLabel, boardId);
+ WrappedLiveData<Label> createLabelLiveData = viewModel.createLabel(accountId, newLabel, boardId);
observeOnce(createLabelLiveData, CardDetailsFragment.this, createdLabel -> {
if (createLabelLiveData.hasError()) {
DeckLog.logError(createLabelLiveData.getError());
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourceAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourceAdapter.java
index b6747a11c..4c95574c3 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourceAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourceAdapter.java
@@ -11,20 +11,20 @@ import java.util.ArrayList;
import java.util.List;
import it.niedermann.nextcloud.deck.databinding.ItemProjectResourceBinding;
-import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.ocs.projects.OcsProjectResource;
+import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel;
public class CardProjectResourceAdapter extends RecyclerView.Adapter<CardProjectResourceViewHolder> {
@NonNull
- private final Account account;
+ private final EditCardViewModel viewModel;
@NonNull
private final List<OcsProjectResource> resources;
@NonNull
private final LifecycleOwner owner;
- public CardProjectResourceAdapter(@NonNull Account account, @NonNull List<OcsProjectResource> resources, @NonNull LifecycleOwner owner) {
- this.account = account;
+ public CardProjectResourceAdapter(@NonNull EditCardViewModel viewModel, @NonNull List<OcsProjectResource> resources, @NonNull LifecycleOwner owner) {
+ this.viewModel = viewModel;
this.resources = new ArrayList<>(resources.size());
this.resources.addAll(resources);
this.owner = owner;
@@ -44,7 +44,7 @@ public class CardProjectResourceAdapter extends RecyclerView.Adapter<CardProject
@Override
public void onBindViewHolder(@NonNull CardProjectResourceViewHolder holder, int position) {
- holder.bind(account, resources.get(position), owner);
+ holder.bind(viewModel, resources.get(position), owner);
}
@Override
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourceViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourceViewHolder.java
index d599ad5b5..272945e45 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourceViewHolder.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourceViewHolder.java
@@ -13,8 +13,8 @@ import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.ItemProjectResourceBinding;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.ocs.projects.OcsProjectResource;
-import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.ui.card.EditActivity;
+import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel;
import it.niedermann.nextcloud.deck.util.ProjectUtil;
import static android.view.View.GONE;
@@ -30,12 +30,12 @@ public class CardProjectResourceViewHolder extends RecyclerView.ViewHolder {
this.binding = binding;
}
- public void bind(@NonNull Account account, @NonNull OcsProjectResource resource, @NonNull LifecycleOwner owner) {
+ public void bind(@NonNull EditCardViewModel viewModel, @NonNull OcsProjectResource resource, @NonNull LifecycleOwner owner) {
+ final Account account = viewModel.getAccount();
final Resources resources = itemView.getResources();
binding.name.setText(resource.getName());
final @Nullable String link = resource.getLink();
binding.type.setVisibility(VISIBLE);
- final SyncManager syncManager = new SyncManager(itemView.getContext());
if (resource.getType() != null) {
switch (resource.getType()) {
case "deck": {
@@ -49,9 +49,9 @@ public class CardProjectResourceViewHolder extends RecyclerView.ViewHolder {
try {
long[] ids = ProjectUtil.extractBoardIdAndCardIdFromUrl(link);
if (ids.length == 2) {
- syncManager.getCardByRemoteID(account.getId(), ids[1]).observe(owner, (fullCard) -> {
+ viewModel.getCardByRemoteID(account.getId(), ids[1]).observe(owner, (fullCard) -> {
if (fullCard != null) {
- syncManager.getBoardByRemoteId(account.getId(), ids[0]).observe(owner, (board) -> {
+ viewModel.getBoardByRemoteId(account.getId(), ids[0]).observe(owner, (board) -> {
if (board != null) {
binding.getRoot().setOnClickListener((v) -> itemView.getContext().startActivity(EditActivity.createEditCardIntent(itemView.getContext(), account, board.getLocalId(), fullCard.getLocalId())));
} else {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java
index 9dc056634..46195b309 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java
@@ -62,7 +62,7 @@ public class CardProjectResourcesDialog extends BrandedDialogFragment {
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
- final CardProjectResourceAdapter adapter = new CardProjectResourceAdapter(viewModel.getAccount(), resources, requireActivity());
+ final CardProjectResourceAdapter adapter = new CardProjectResourceAdapter(viewModel, resources, requireActivity());
binding.getRoot().setAdapter(adapter);
super.onActivityCreated(savedInstanceState);
}