diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-09-04 17:18:42 +0300 |
---|---|---|
committer | Niedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com> | 2020-09-04 20:03:12 +0300 |
commit | aa0998d8439576e8449e4434569600c8ebe350ee (patch) | |
tree | a70beb8178d80a8006cae078064e552face30f0e /app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments | |
parent | 6b9b4a132724a687230da866fc35296fd20bf3c6 (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 | 42 |
1 files changed, 28 insertions, 14 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 85583bd16..0073ba618 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 @@ -1,5 +1,6 @@ package it.niedermann.nextcloud.deck.ui.card.comments; +import android.annotation.SuppressLint; import android.net.Uri; import android.text.Editable; import android.text.TextWatcher; @@ -50,6 +51,7 @@ public class CardCommentsMentionProposer implements TextWatcher { syncManager = new SyncManager(editText.getContext()); avatarSize = dpToPx(mentionProposerLayout.getContext(), R.dimen.avatar_size_small); layoutParams = new LinearLayout.LayoutParams(avatarSize, avatarSize); + layoutParams.setMarginEnd(dpToPx(mentionProposerLayout.getContext(), R.dimen.spacer_1x)); } @Override @@ -57,26 +59,38 @@ public class CardCommentsMentionProposer implements TextWatcher { } + @SuppressLint("SetTextI18n") @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - Pair<String, Integer> mentionProposal = CommentsUtil.getUserNameForMentionProposal(s.toString(), editText.getSelectionStart()); + final int selectionStart = editText.getSelectionStart(); + final int selectionEnd = editText.getSelectionEnd(); + Pair<String, Integer> mentionProposal = CommentsUtil.getUserNameForMentionProposal(s.toString(), selectionStart); mentionProposerLayout.removeAllViews(); - if (mentionProposal == null || mentionProposal.first.length() == 0) { + if (mentionProposal == null || (mentionProposal.first != null && mentionProposal.first.length() == 0) || selectionStart != selectionEnd) { mentionProposerLayout.setVisibility(View.GONE); } else { - 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); + 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 + mentionProposal.first.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); - } - }); + 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); + } + }); + } mentionProposerLayout.setVisibility(View.VISIBLE); } } |