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:
authorStefan Niedermann <info@niedermann.it>2020-09-04 17:51:06 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2020-09-04 20:03:12 +0300
commit0d28414839faf029d45b9afed207895311bc979a (patch)
tree8201732970c1525a8f2efadd72b8cb059f5cf895 /app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments
parent6d599f1582621dba9a48da6b47a3fdc164d39985 (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.java59
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);
}