Change summary
src/main/AndroidManifest.xml | 1
src/main/java/eu/siacs/conversations/ui/AddReactionActivity.java | 63 ++
src/main/java/eu/siacs/conversations/ui/XmppActivity.java | 8
src/main/res/layout/activity_add_reaction.xml | 25
src/main/res/layout/dialog_add_reaction.xml | 31
src/main/res/values/strings.xml | 2
6 files changed, 121 insertions(+), 9 deletions(-)
Detailed changes
@@ -354,6 +354,7 @@
<activity
android:name=".ui.MediaBrowserActivity"
android:label="@string/media_browser" />
+ <activity android:name=".ui.AddReactionActivity" />
<provider
android:name="androidx.core.content.FileProvider"
@@ -0,0 +1,63 @@
+package eu.siacs.conversations.ui;
+
+import android.os.Bundle;
+import android.widget.Toast;
+
+import androidx.databinding.DataBindingUtil;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableSet;
+
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.databinding.ActivityAddReactionBinding;
+
+public class AddReactionActivity extends XmppActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ final ActivityAddReactionBinding binding =
+ DataBindingUtil.setContentView(this, R.layout.activity_add_reaction);
+ Activities.setStatusAndNavigationBarColors(this, binding.getRoot());
+
+ setSupportActionBar(binding.toolbar);
+ binding.toolbar.setNavigationIcon(R.drawable.ic_clear_24dp);
+ binding.toolbar.setNavigationOnClickListener(v -> finish());
+ setTitle(R.string.add_reaction_title);
+ binding.emojiPicker.setOnEmojiPickedListener(
+ emojiViewItem -> addReaction(emojiViewItem.getEmoji()));
+ }
+
+ private void addReaction(final String emoji) {
+ final var intent = getIntent();
+ final var conversation = intent == null ? null : intent.getStringExtra("conversation");
+ final var message = intent == null ? null : intent.getStringExtra("message");
+ if (Strings.isNullOrEmpty(conversation) || Strings.isNullOrEmpty(message)) {
+ Toast.makeText(this, R.string.could_not_add_reaction, Toast.LENGTH_LONG).show();
+ return;
+ }
+ final var c = xmppConnectionService.findConversationByUuid(conversation);
+ final var m = c == null ? null : c.findMessageWithUuid(message);
+ if (m == null) {
+ Toast.makeText(this, R.string.could_not_add_reaction, Toast.LENGTH_LONG).show();
+ return;
+ }
+ final var aggregated = m.getAggregatedReactions();
+ if (aggregated.ourReactions.contains(emoji)) {
+ xmppConnectionService.sendReactions(m, aggregated.ourReactions);
+ } else {
+ final ImmutableSet.Builder<String> reactionBuilder = new ImmutableSet.Builder<>();
+ reactionBuilder.addAll(aggregated.ourReactions);
+ reactionBuilder.add(emoji);
+ xmppConnectionService.sendReactions(m, reactionBuilder.build());
+ }
+ finish();
+ }
+
+ @Override
+ protected void refreshUiReal() {}
+
+ @Override
+ protected void onBackendConnected() {}
+}
@@ -326,6 +326,14 @@ public abstract class XmppActivity extends ActionBarActivity {
dialog.dismiss();
});
}
+ viewBinding.more.setOnClickListener(
+ v -> {
+ dialog.dismiss();
+ final var intent = new Intent(this, AddReactionActivity.class);
+ intent.putExtra("conversation", message.getConversation().getUuid());
+ intent.putExtra("message", message.getUuid());
+ startActivity(intent);
+ });
dialog.show();
}
@@ -0,0 +1,25 @@
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <com.google.android.material.appbar.AppBarLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <com.google.android.material.appbar.MaterialToolbar
+ android:id="@+id/toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?attr/actionBarSize" />
+
+ </com.google.android.material.appbar.AppBarLayout>
+
+ <androidx.emoji2.emojipicker.EmojiPickerView
+ android:id="@+id/emoji_picker"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+ </LinearLayout>
+</layout>
@@ -1,18 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
-<layout xmlns:android="http://schemas.android.com/apk/res/android">
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout
android:layout_width="wrap_content"
- android:layout_height="match_parent">
+ android:layout_height="wrap_content"
+ android:padding="?dialogPreferredPadding">
- <com.google.android.material.button.MaterialButtonGroup
- android:layout_centerInParent="true"
+ <com.google.android.material.button.MaterialButtonGroup
+ android:id="@+id/emojis"
+
+ style="@style/Widget.Material3.MaterialButtonGroup.Connected"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerHorizontal="true" />
+
+ <Button
+ android:id="@+id/more"
+ style="?attr/materialIconButtonFilledStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/emojis"
+ android:layout_centerHorizontal="true"
+ android:layout_marginTop="8dp"
+ android:contentDescription="@string/more_reactions"
+ app:icon="@drawable/ic_more_horiz_24dp" />
- android:id="@+id/emojis"
- style="@style/Widget.Material3.MaterialButtonGroup.Connected"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="?dialogPreferredPadding" />
</RelativeLayout>
</layout>
@@ -1084,4 +1084,6 @@
<string name="server_info_login_mechanism">Login mechanism</string>
<string name="could_not_add_reaction">Could not add reaction</string>
<string name="add_reaction">Add reactionβ¦</string>
+ <string name="add_reaction_title">Add reaction</string>
+ <string name="more_reactions">More reactions</string>
</resources>