diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-09-04 20:02:55 +0300 |
---|---|---|
committer | Niedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com> | 2020-09-04 20:03:12 +0300 |
commit | 617acd70446dfd5e9e251b0db85a1918f48269a9 (patch) | |
tree | 29c9cfed7af069c1b36c5b2a43a7cecda21b38ff /app/src | |
parent | 81ca46c05ccbf0950a447300e08b4191e78230fd (diff) |
#673 💬 Allow mention users in the comments
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src')
4 files changed, 50 insertions, 21 deletions
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 300d50c73..af1c24c2d 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 @@ -116,7 +116,7 @@ public class CardCommentsFragment extends BrandedFragment implements CommentEdit } return true; }); - binding.message.addTextChangedListener(new CardCommentsMentionProposer(getViewLifecycleOwner(), mainViewModel.getAccount(), mainViewModel.getBoardId(), binding.message, binding.mentionProposer)); + binding.message.addTextChangedListener(new CardCommentsMentionProposer(getViewLifecycleOwner(), mainViewModel.getAccount(), mainViewModel.getBoardId(), binding.message, binding.mentionProposerWrapper, binding.mentionProposer)); } else { binding.addCommentLayout.setVisibility(GONE); } 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 853bcfe71..4d47be2f9 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 @@ -43,21 +43,24 @@ public class CardCommentsMentionProposer implements TextWatcher { @NonNull private final EditText editText; @NonNull - private final LinearLayout mentionProposerLayout; + private final LinearLayout mentionProposer; + @NonNull + private final LinearLayout mentionProposerWrapper; @NonNull private final List<User> users = new ArrayList<>(); - public CardCommentsMentionProposer(@NonNull LifecycleOwner owner, @NonNull Account account, long boardLocalId, @NonNull EditText editText, @NonNull LinearLayout avatarProposerLayout) { + public CardCommentsMentionProposer(@NonNull LifecycleOwner owner, @NonNull Account account, long boardLocalId, @NonNull EditText editText, LinearLayout mentionProposerWrapper, @NonNull LinearLayout avatarProposer) { this.owner = owner; this.account = account; this.boardLocalId = boardLocalId; this.editText = editText; - this.mentionProposerLayout = avatarProposerLayout; + this.mentionProposerWrapper = mentionProposerWrapper; + this.mentionProposer = avatarProposer; syncManager = new SyncManager(editText.getContext()); - avatarSize = dpToPx(mentionProposerLayout.getContext(), R.dimen.avatar_size_small); + avatarSize = dpToPx(mentionProposer.getContext(), R.dimen.avatar_size_small); layoutParams = new LinearLayout.LayoutParams(avatarSize, avatarSize); - layoutParams.setMarginEnd(dpToPx(mentionProposerLayout.getContext(), R.dimen.spacer_1x)); + layoutParams.setMarginEnd(dpToPx(mentionProposer.getContext(), R.dimen.spacer_1x)); } @Override @@ -71,20 +74,20 @@ public class CardCommentsMentionProposer implements TextWatcher { final int selectionEnd = editText.getSelectionEnd(); 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); + mentionProposer.removeAllViews(); + mentionProposerWrapper.setVisibility(View.GONE); this.users.clear(); } else { if (mentionProposal.first != null && mentionProposal.second != null) { observeOnce(syncManager.searchUserByUidOrDisplayName(account.getId(), boardLocalId, -1L, mentionProposal.first), owner, (users) -> { if (!users.equals(this.users)) { - mentionProposerLayout.removeAllViews(); + mentionProposer.removeAllViews(); for (User user : users) { - final ImageView avatar = new ImageView(mentionProposerLayout.getContext()); + final ImageView avatar = new ImageView(mentionProposer.getContext()); avatar.setLayoutParams(layoutParams); updateListenerOfView(avatar, s, mentionProposal, user); - mentionProposerLayout.addView(avatar); + mentionProposer.addView(avatar); Glide.with(avatar.getContext()) .load(account.getUrl() + "/index.php/avatar/" + Uri.encode(user.getUid()) + "/" + avatarSize) @@ -97,16 +100,16 @@ public class CardCommentsMentionProposer implements TextWatcher { } else { int i = 0; for (User user : users) { - updateListenerOfView(mentionProposerLayout.getChildAt(i), s, mentionProposal, user); + updateListenerOfView(mentionProposer.getChildAt(i), s, mentionProposal, user); i++; } } }); } else { this.users.clear(); - mentionProposerLayout.removeAllViews(); + mentionProposer.removeAllViews(); } - mentionProposerLayout.setVisibility(View.VISIBLE); + mentionProposerWrapper.setVisibility(View.VISIBLE); } } @@ -119,7 +122,7 @@ public class CardCommentsMentionProposer implements TextWatcher { s.subSequence(mentionProposal.second + mentionProposal.first.length(), s.length()) ); editText.setSelection(mentionProposal.second + user.getUid().length()); - mentionProposerLayout.setVisibility(View.GONE); + mentionProposerWrapper.setVisibility(View.GONE); }); } diff --git a/app/src/main/res/drawable/ic_baseline_mention_24.xml b/app/src/main/res/drawable/ic_baseline_mention_24.xml new file mode 100644 index 000000000..32c6f57e9 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_mention_24.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#757575" + android:viewportHeight="24" android:viewportWidth="24" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10h5v-2h-5c-4.34,0 -8,-3.66 -8,-8s3.66,-8 8,-8 8,3.66 8,8v1.43c0,0.79 -0.71,1.57 -1.5,1.57s-1.5,-0.78 -1.5,-1.57L17,12c0,-2.76 -2.24,-5 -5,-5s-5,2.24 -5,5 2.24,5 5,5c1.38,0 2.64,-0.56 3.54,-1.47 0.65,0.89 1.77,1.47 2.96,1.47 1.97,0 3.5,-1.6 3.5,-3.57L22,12c0,-5.52 -4.48,-10 -10,-10zM12,15c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3z"/> +</vector> diff --git a/app/src/main/res/layout/fragment_card_edit_tab_comments.xml b/app/src/main/res/layout/fragment_card_edit_tab_comments.xml index 7cd8668e9..cc5fa77b7 100644 --- a/app/src/main/res/layout/fragment_card_edit_tab_comments.xml +++ b/app/src/main/res/layout/fragment_card_edit_tab_comments.xml @@ -72,16 +72,37 @@ app:srcCompat="@drawable/ic_close_circle_grey600" /> </LinearLayout> + <LinearLayout - android:id="@+id/mention_proposer" + android:id="@+id/mentionProposerWrapper" android:layout_width="match_parent" - android:layout_height="50dp" + android:layout_height="wrap_content" android:gravity="center_vertical" - android:orientation="horizontal" - android:paddingStart="80dp" - android:paddingEnd="80dp" + android:paddingStart="@dimen/spacer_2x" + android:paddingTop="@dimen/spacer_1x" + android:paddingEnd="@dimen/spacer_2x" + android:paddingBottom="@dimen/spacer_1x" android:visibility="gone" - tools:visibility="visible" /> + tools:visibility="visible"> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/spacer_1x" + android:layout_marginEnd="@dimen/spacer_1x" + android:contentDescription="@string/simple_reply" + android:padding="@dimen/spacer_1x" + app:srcCompat="@drawable/ic_baseline_mention_24" /> + + <LinearLayout + android:id="@+id/mention_proposer" + android:layout_width="match_parent" + android:layout_height="@dimen/avatar_size_small" + android:layout_marginStart="@dimen/spacer_1x" + android:layout_marginEnd="@dimen/spacer_1x" + android:gravity="center_vertical" + android:orientation="horizontal" /> + </LinearLayout> <LinearLayout android:layout_width="match_parent" |