diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-09-04 17:51:06 +0300 |
---|---|---|
committer | Niedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com> | 2020-09-04 20:03:12 +0300 |
commit | 0d28414839faf029d45b9afed207895311bc979a (patch) | |
tree | 8201732970c1525a8f2efadd72b8cb059f5cf895 /app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments | |
parent | 6d599f1582621dba9a48da6b47a3fdc164d39985 (diff) |
#673 💬 Allow mention users in the comments
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments')
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsMentionProposer.java | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsMentionProposer.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsMentionProposer.java index ed90b7b90..25f1abd52 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsMentionProposer.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsMentionProposer.java @@ -16,13 +16,16 @@ import androidx.lifecycle.LifecycleOwner; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; +import java.util.ArrayList; +import java.util.List; + import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.model.Account; 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.LiveDataHelper; import it.niedermann.nextcloud.deck.ui.card.comments.util.CommentsUtil; +import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; import static it.niedermann.nextcloud.deck.util.DimensionUtil.dpToPx; public class CardCommentsMentionProposer implements TextWatcher { @@ -42,6 +45,9 @@ public class CardCommentsMentionProposer implements TextWatcher { @NonNull private final LinearLayout mentionProposerLayout; + @NonNull + private final List<User> users = new ArrayList<>(); + public CardCommentsMentionProposer(@NonNull LifecycleOwner owner, @NonNull Account account, long boardLocalId, @NonNull EditText editText, @NonNull LinearLayout avatarProposerLayout) { this.owner = owner; this.account = account; @@ -64,32 +70,43 @@ public class CardCommentsMentionProposer implements TextWatcher { public void onTextChanged(CharSequence s, int start, int before, int count) { final int selectionStart = editText.getSelectionStart(); final int selectionEnd = editText.getSelectionEnd(); - Pair<String, Integer> mentionProposal = CommentsUtil.getUserNameForMentionProposal(s.toString(), selectionStart); - mentionProposerLayout.removeAllViews(); + final Pair<String, Integer> mentionProposal = CommentsUtil.getUserNameForMentionProposal(s.toString(), selectionStart); if (mentionProposal == null || (mentionProposal.first != null && mentionProposal.first.length() == 0) || selectionStart != selectionEnd) { + mentionProposerLayout.removeAllViews(); mentionProposerLayout.setVisibility(View.GONE); + this.users.clear(); } else { if (mentionProposal.first != null && mentionProposal.second != null) { - LiveDataHelper.observeOnce(syncManager.searchUserByUidOrDisplayName(account.getId(), boardLocalId, -1L, mentionProposal.first), owner, (users) -> { - for (User user : users) { - final ImageView avatar = new ImageView(mentionProposerLayout.getContext()); - avatar.setLayoutParams(layoutParams); - mentionProposerLayout.addView(avatar); - avatar.setOnClickListener((c) -> { - editText.setText(s.subSequence(0, mentionProposal.second).toString() + - user.getUid() + - s.subSequence(mentionProposal.second + mentionProposal.first.length(), s.length()).toString()); - editText.setSelection(mentionProposal.second + user.getUid().length()); - mentionProposerLayout.setVisibility(View.GONE); - }); - - Glide.with(avatar.getContext()) - .load(account.getUrl() + "/index.php/avatar/" + Uri.encode(user.getUid()) + "/" + avatarSize) - .error(R.drawable.ic_person_grey600_24dp) - .apply(RequestOptions.circleCropTransform()) - .into(avatar); + observeOnce(syncManager.searchUserByUidOrDisplayName(account.getId(), boardLocalId, -1L, mentionProposal.first), owner, (users) -> { + if (!users.equals(this.users)) { + mentionProposerLayout.removeAllViews(); + for (User user : users) { + final ImageView avatar = new ImageView(mentionProposerLayout.getContext()); + avatar.setLayoutParams(layoutParams); + avatar.setOnClickListener((c) -> { + editText.setText( + s.subSequence(0, mentionProposal.second) + + user.getUid() + + s.subSequence(mentionProposal.second + mentionProposal.first.length(), s.length()) + ); + editText.setSelection(mentionProposal.second + user.getUid().length()); + mentionProposerLayout.setVisibility(View.GONE); + }); + mentionProposerLayout.addView(avatar); + + Glide.with(avatar.getContext()) + .load(account.getUrl() + "/index.php/avatar/" + Uri.encode(user.getUid()) + "/" + avatarSize) + .error(R.drawable.ic_person_grey600_24dp) + .apply(RequestOptions.circleCropTransform()) + .into(avatar); + } + this.users.clear(); + this.users.addAll(users); } }); + } else { + this.users.clear(); + mentionProposerLayout.removeAllViews(); } mentionProposerLayout.setVisibility(View.VISIBLE); } |