Skip to content

Commit 0cc5800

Browse files
authored
Merge pull request #3786 from deltachat/adb/improve-reactions-dialog
allow to react with same emoji as others
2 parents bd3c4f9 + 005cf83 commit 0cc5800

File tree

4 files changed

+59
-1
lines changed

4 files changed

+59
-1
lines changed

src/main/java/org/thoughtcrime/securesms/reactions/ReactionRecipientItem.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44
import android.util.AttributeSet;
5+
import android.view.View;
56
import android.widget.LinearLayout;
67
import android.widget.TextView;
78

@@ -23,6 +24,7 @@ public class ReactionRecipientItem extends LinearLayout {
2324
private TextView reactionView;
2425

2526
private int contactId;
27+
private String reaction;
2628

2729
public ReactionRecipientItem(Context context) {
2830
super(context);
@@ -44,6 +46,7 @@ protected void onFinishInflate() {
4446

4547
public void bind(@NonNull GlideRequests glideRequests, int contactId, String reaction) {
4648
this.contactId = contactId;
49+
this.reaction = reaction;
4750
DcContact dcContact = DcHelper.getContext(getContext()).getContact(contactId);
4851
Recipient recipient = new Recipient(getContext(), dcContact);
4952
this.contactPhotoImage.setAvatar(glideRequests, recipient, false);
@@ -58,4 +61,12 @@ public void unbind(GlideRequests glideRequests) {
5861
public int getContactId() {
5962
return contactId;
6063
}
64+
65+
public String getReaction() {
66+
return reaction;
67+
}
68+
69+
public View getReactionView() {
70+
return reactionView;
71+
}
6172
}

src/main/java/org/thoughtcrime/securesms/reactions/ReactionRecipientsAdapter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ public static class ReactionViewHolder extends ViewHolder {
4747
clickListener.onItemClick(getView());
4848
}
4949
});
50+
((ReactionRecipientItem) itemView).getReactionView().setOnClickListener(view -> {
51+
if (clickListener != null) {
52+
clickListener.onReactionClick(getView());
53+
}
54+
});
5055
}
5156

5257
public ReactionRecipientItem getView() {
@@ -93,6 +98,7 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i)
9398

9499
public interface ItemClickListener {
95100
void onItemClick(ReactionRecipientItem item);
101+
void onReactionClick(ReactionRecipientItem item);
96102
}
97103

98104
public void changeData(ArrayList<Pair<Integer, String>> contactsReactions) {

src/main/java/org/thoughtcrime/securesms/reactions/ReactionsDetailsFragment.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.b44t.messenger.DcContext;
1818
import com.b44t.messenger.DcEvent;
1919
import com.b44t.messenger.rpc.Reactions;
20+
import com.b44t.messenger.rpc.Rpc;
2021
import com.b44t.messenger.rpc.RpcException;
2122

2223
import org.thoughtcrime.securesms.ProfileActivity;
@@ -114,6 +115,39 @@ private void openConversation(int contactId) {
114115
requireContext().startActivity(intent);
115116
}
116117

118+
private String getSelfReaction(Rpc rpc, int accId) {
119+
String result = null;
120+
try {
121+
final Reactions reactions = rpc.getMsgReactions(accId, msgId);
122+
if (reactions != null) {
123+
final Map<Integer, String[]> reactionsByContact = reactions.getReactionsByContact();
124+
final String [] selfReactions = reactionsByContact.get(DcContact.DC_CONTACT_ID_SELF);
125+
if (selfReactions != null && selfReactions.length > 0) {
126+
result = selfReactions[0];
127+
}
128+
}
129+
} catch(RpcException e) {
130+
e.printStackTrace();
131+
}
132+
return result;
133+
}
134+
135+
private void sendReaction(final String reaction) {
136+
Rpc rpc = DcHelper.getRpc(requireActivity());
137+
DcContext dcContext = DcHelper.getContext(requireActivity());
138+
int accId = dcContext.getAccountId();
139+
140+
try {
141+
if (reaction == null || reaction.equals(getSelfReaction(rpc, accId))) {
142+
rpc.sendReaction(accId, msgId, "");
143+
} else {
144+
rpc.sendReaction(accId, msgId, reaction);
145+
}
146+
} catch(Exception e) {
147+
e.printStackTrace();
148+
}
149+
}
150+
117151
private class ListClickListener implements ReactionRecipientsAdapter.ItemClickListener {
118152

119153
@Override
@@ -124,6 +158,12 @@ public void onItemClick(ReactionRecipientItem item) {
124158
openConversation(contactId);
125159
}
126160
}
161+
162+
@Override
163+
public void onReactionClick(ReactionRecipientItem item) {
164+
sendReaction(item.getReaction());
165+
ReactionsDetailsFragment.this.dismiss();
166+
}
127167
}
128168

129169
}

src/main/res/layout/reaction_recipient_item.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,9 @@
5050

5151
<androidx.appcompat.widget.AppCompatTextView
5252
android:id="@+id/reaction"
53+
style="@style/ButtonSecondary"
5354
android:layout_width="wrap_content"
54-
android:layout_height="wrap_content"
55+
android:layout_height="40dp"
5556
android:gravity="center"
5657
android:textSize="22dp"
5758
android:fontFamily="sans-serif"

0 commit comments

Comments
 (0)