diff --git a/res/drawable-mdpi/reaction_scrubber_angry_48.webp b/res/drawable-mdpi/reaction_scrubber_angry_48.webp
new file mode 100644
index 0000000000..a3982e3b0f
Binary files /dev/null and b/res/drawable-mdpi/reaction_scrubber_angry_48.webp differ
diff --git a/res/drawable-mdpi/reaction_scrubber_dislike_48.webp b/res/drawable-mdpi/reaction_scrubber_dislike_48.webp
new file mode 100644
index 0000000000..9874306653
Binary files /dev/null and b/res/drawable-mdpi/reaction_scrubber_dislike_48.webp differ
diff --git a/res/drawable-mdpi/reaction_scrubber_haha_48.webp b/res/drawable-mdpi/reaction_scrubber_haha_48.webp
new file mode 100644
index 0000000000..b935b7a1ab
Binary files /dev/null and b/res/drawable-mdpi/reaction_scrubber_haha_48.webp differ
diff --git a/res/drawable-mdpi/reaction_scrubber_like_48.webp b/res/drawable-mdpi/reaction_scrubber_like_48.webp
new file mode 100644
index 0000000000..31ce2ae4f1
Binary files /dev/null and b/res/drawable-mdpi/reaction_scrubber_like_48.webp differ
diff --git a/res/drawable-mdpi/reaction_scrubber_love_48.webp b/res/drawable-mdpi/reaction_scrubber_love_48.webp
new file mode 100644
index 0000000000..8711d7628a
Binary files /dev/null and b/res/drawable-mdpi/reaction_scrubber_love_48.webp differ
diff --git a/res/drawable-mdpi/reaction_scrubber_sad_48.webp b/res/drawable-mdpi/reaction_scrubber_sad_48.webp
new file mode 100644
index 0000000000..a259b431aa
Binary files /dev/null and b/res/drawable-mdpi/reaction_scrubber_sad_48.webp differ
diff --git a/res/drawable-mdpi/reaction_scrubber_wow_48.webp b/res/drawable-mdpi/reaction_scrubber_wow_48.webp
new file mode 100644
index 0000000000..f2a5e54b60
Binary files /dev/null and b/res/drawable-mdpi/reaction_scrubber_wow_48.webp differ
diff --git a/res/drawable-xhdpi/reaction_scrubber_angry_48.webp b/res/drawable-xhdpi/reaction_scrubber_angry_48.webp
new file mode 100644
index 0000000000..6040982388
Binary files /dev/null and b/res/drawable-xhdpi/reaction_scrubber_angry_48.webp differ
diff --git a/res/drawable-xhdpi/reaction_scrubber_dislike_48.webp b/res/drawable-xhdpi/reaction_scrubber_dislike_48.webp
new file mode 100644
index 0000000000..989dceb244
Binary files /dev/null and b/res/drawable-xhdpi/reaction_scrubber_dislike_48.webp differ
diff --git a/res/drawable-xhdpi/reaction_scrubber_haha_48.webp b/res/drawable-xhdpi/reaction_scrubber_haha_48.webp
new file mode 100644
index 0000000000..d6021256b1
Binary files /dev/null and b/res/drawable-xhdpi/reaction_scrubber_haha_48.webp differ
diff --git a/res/drawable-xhdpi/reaction_scrubber_like_48.webp b/res/drawable-xhdpi/reaction_scrubber_like_48.webp
new file mode 100644
index 0000000000..75eadbcecc
Binary files /dev/null and b/res/drawable-xhdpi/reaction_scrubber_like_48.webp differ
diff --git a/res/drawable-xhdpi/reaction_scrubber_love_48.webp b/res/drawable-xhdpi/reaction_scrubber_love_48.webp
new file mode 100644
index 0000000000..bfe2f6dfbb
Binary files /dev/null and b/res/drawable-xhdpi/reaction_scrubber_love_48.webp differ
diff --git a/res/drawable-xhdpi/reaction_scrubber_sad_48.webp b/res/drawable-xhdpi/reaction_scrubber_sad_48.webp
new file mode 100644
index 0000000000..249ff57626
Binary files /dev/null and b/res/drawable-xhdpi/reaction_scrubber_sad_48.webp differ
diff --git a/res/drawable-xhdpi/reaction_scrubber_wow_48.webp b/res/drawable-xhdpi/reaction_scrubber_wow_48.webp
new file mode 100644
index 0000000000..d0f49e0aac
Binary files /dev/null and b/res/drawable-xhdpi/reaction_scrubber_wow_48.webp differ
diff --git a/res/drawable-xxhdpi/reaction_scrubber_angry_48.webp b/res/drawable-xxhdpi/reaction_scrubber_angry_48.webp
new file mode 100644
index 0000000000..849a3fa39a
Binary files /dev/null and b/res/drawable-xxhdpi/reaction_scrubber_angry_48.webp differ
diff --git a/res/drawable-xxhdpi/reaction_scrubber_dislike_48.webp b/res/drawable-xxhdpi/reaction_scrubber_dislike_48.webp
new file mode 100644
index 0000000000..2eac134d20
Binary files /dev/null and b/res/drawable-xxhdpi/reaction_scrubber_dislike_48.webp differ
diff --git a/res/drawable-xxhdpi/reaction_scrubber_haha_48.webp b/res/drawable-xxhdpi/reaction_scrubber_haha_48.webp
new file mode 100644
index 0000000000..1c084eb9e4
Binary files /dev/null and b/res/drawable-xxhdpi/reaction_scrubber_haha_48.webp differ
diff --git a/res/drawable-xxhdpi/reaction_scrubber_like_48.webp b/res/drawable-xxhdpi/reaction_scrubber_like_48.webp
new file mode 100644
index 0000000000..4883a86302
Binary files /dev/null and b/res/drawable-xxhdpi/reaction_scrubber_like_48.webp differ
diff --git a/res/drawable-xxhdpi/reaction_scrubber_love_48.webp b/res/drawable-xxhdpi/reaction_scrubber_love_48.webp
new file mode 100644
index 0000000000..5b7f268f0a
Binary files /dev/null and b/res/drawable-xxhdpi/reaction_scrubber_love_48.webp differ
diff --git a/res/drawable-xxhdpi/reaction_scrubber_sad_48.webp b/res/drawable-xxhdpi/reaction_scrubber_sad_48.webp
new file mode 100644
index 0000000000..af7e6f6dfe
Binary files /dev/null and b/res/drawable-xxhdpi/reaction_scrubber_sad_48.webp differ
diff --git a/res/drawable-xxhdpi/reaction_scrubber_wow_48.webp b/res/drawable-xxhdpi/reaction_scrubber_wow_48.webp
new file mode 100644
index 0000000000..a994666ca2
Binary files /dev/null and b/res/drawable-xxhdpi/reaction_scrubber_wow_48.webp differ
diff --git a/res/drawable-xxxhdpi/reaction_scrubber_angry_48.webp b/res/drawable-xxxhdpi/reaction_scrubber_angry_48.webp
new file mode 100644
index 0000000000..d57b985f33
Binary files /dev/null and b/res/drawable-xxxhdpi/reaction_scrubber_angry_48.webp differ
diff --git a/res/drawable-xxxhdpi/reaction_scrubber_dislike_48.webp b/res/drawable-xxxhdpi/reaction_scrubber_dislike_48.webp
new file mode 100644
index 0000000000..10510812ec
Binary files /dev/null and b/res/drawable-xxxhdpi/reaction_scrubber_dislike_48.webp differ
diff --git a/res/drawable-xxxhdpi/reaction_scrubber_haha_48.webp b/res/drawable-xxxhdpi/reaction_scrubber_haha_48.webp
new file mode 100644
index 0000000000..b2d7dcc15f
Binary files /dev/null and b/res/drawable-xxxhdpi/reaction_scrubber_haha_48.webp differ
diff --git a/res/drawable-xxxhdpi/reaction_scrubber_like_48.webp b/res/drawable-xxxhdpi/reaction_scrubber_like_48.webp
new file mode 100644
index 0000000000..e5898a40eb
Binary files /dev/null and b/res/drawable-xxxhdpi/reaction_scrubber_like_48.webp differ
diff --git a/res/drawable-xxxhdpi/reaction_scrubber_love_48.webp b/res/drawable-xxxhdpi/reaction_scrubber_love_48.webp
new file mode 100644
index 0000000000..89b950eab6
Binary files /dev/null and b/res/drawable-xxxhdpi/reaction_scrubber_love_48.webp differ
diff --git a/res/drawable-xxxhdpi/reaction_scrubber_sad_48.webp b/res/drawable-xxxhdpi/reaction_scrubber_sad_48.webp
new file mode 100644
index 0000000000..927773e9b7
Binary files /dev/null and b/res/drawable-xxxhdpi/reaction_scrubber_sad_48.webp differ
diff --git a/res/drawable-xxxhdpi/reaction_scrubber_wow_48.webp b/res/drawable-xxxhdpi/reaction_scrubber_wow_48.webp
new file mode 100644
index 0000000000..7e0f196ec6
Binary files /dev/null and b/res/drawable-xxxhdpi/reaction_scrubber_wow_48.webp differ
diff --git a/res/layout/conversation_reaction_scrubber.xml b/res/layout/conversation_reaction_scrubber.xml
index c51790b39c..0ff109e562 100644
--- a/res/layout/conversation_reaction_scrubber.xml
+++ b/res/layout/conversation_reaction_scrubber.xml
@@ -1,6 +1,5 @@
-
@@ -49,103 +49,103 @@
app:layout_constraintRight_toRightOf="@id/reaction_3"
app:layout_constraintTop_toTopOf="parent" />
-
+ app:layout_constraintTop_toTopOf="parent"
+ tools:alpha="1"
+ tools:translationY="0dp" />
-
+ app:layout_constraintTop_toTopOf="parent"
+ tools:alpha="1"
+ tools:translationY="0dp" />
-
+ app:layout_constraintTop_toTopOf="parent"
+ tools:alpha="1"
+ tools:translationY="0dp" />
-
+ app:layout_constraintTop_toTopOf="parent"
+ tools:alpha="1"
+ tools:translationY="0dp" />
-
+ app:layout_constraintTop_toTopOf="parent"
+ tools:alpha="1"
+ tools:translationY="0dp" />
-
+ app:layout_constraintTop_toTopOf="parent"
+ tools:alpha="1"
+ tools:translationY="0dp" />
-
+ app:layout_constraintTop_toTopOf="parent"
+ tools:alpha="1"
+ tools:translationY="0dp" />
\ No newline at end of file
diff --git a/res/values-v21/themes.xml b/res/values-v21/themes.xml
index f518104d93..8d88bda096 100644
--- a/res/values-v21/themes.xml
+++ b/res/values-v21/themes.xml
@@ -35,4 +35,15 @@
- @color/media_preview_bar_background
+
+
+
+
diff --git a/res/values-v23/themes.xml b/res/values-v23/themes.xml
index 786e49e3f5..a709ccac0f 100644
--- a/res/values-v23/themes.xml
+++ b/res/values-v23/themes.xml
@@ -33,4 +33,18 @@
- false
- @color/core_grey_95
+
+
+
+
+
diff --git a/res/values-v27/themes.xml b/res/values-v27/themes.xml
index ccd08f8b31..649e743ebb 100644
--- a/res/values-v27/themes.xml
+++ b/res/values-v27/themes.xml
@@ -42,4 +42,20 @@
- @color/core_grey_95
- false
+
+
+
+
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index be8511ab2a..e4d7a4d05d 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -70,10 +70,9 @@
8dp
1dp
- 28dp
-
25dp
0dp
+ 320dp
20dp
28dp
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 640bf789cf..4ff503e925 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -689,4 +689,12 @@
- false
+
+
+
+
diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java b/src/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java
index 504e7ceb6b..6a85d8821e 100644
--- a/src/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java
+++ b/src/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java
@@ -7,7 +7,10 @@ import android.content.Context;
import android.graphics.PointF;
import android.graphics.Rect;
import android.os.Build;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
import android.util.AttributeSet;
+import android.view.HapticFeedbackConstants;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
@@ -36,6 +39,8 @@ import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.database.model.ReactionRecord;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.MessageRecordUtil;
+import org.thoughtcrime.securesms.util.ServiceUtil;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.ThemeUtil;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil;
@@ -77,6 +82,7 @@ public final class ConversationReactionOverlay extends RelativeLayout {
private float distanceFromTouchDownPointToBottomOfScrubberDeadZone;
private int scrubberDistanceFromTouchDown;
private int scrubberHeight;
+ private int scrubberWidth;
private int halfActionBarHeight;
private int selectedVerticalTranslation;
private int scrubberHorizontalMargin;
@@ -111,11 +117,8 @@ public final class ConversationReactionOverlay extends RelativeLayout {
toolbar.setNavigationOnClickListener(view -> hide());
emojiViews = Stream.of(ReactionEmoji.values())
- .map(e -> {
- EmojiTextView view = findViewById(e.viewId);
- view.setText(e.emoji);
- return view;
- }).toArray(View[]::new);
+ .map(e -> findViewById(e.viewId))
+ .toArray(View[]::new);
distanceFromTouchDownPointToTopOfScrubberDeadZone = getResources().getDimensionPixelSize(R.dimen.conversation_reaction_scrub_deadzone_distance_from_touch_top);
distanceFromTouchDownPointToBottomOfScrubberDeadZone = getResources().getDimensionPixelSize(R.dimen.conversation_reaction_scrub_deadzone_distance_from_touch_bottom);
@@ -124,6 +127,7 @@ public final class ConversationReactionOverlay extends RelativeLayout {
statusBarHeight = ViewUtil.getStatusBarHeight(this);
scrubberDistanceFromTouchDown = getResources().getDimensionPixelOffset(R.dimen.conversation_reaction_scrubber_distance);
scrubberHeight = getResources().getDimensionPixelOffset(R.dimen.conversation_reaction_scrubber_height);
+ scrubberWidth = getResources().getDimensionPixelOffset(R.dimen.reaction_scrubber_width);
halfActionBarHeight = (int) ThemeUtil.getThemedDimen(getContext(), R.attr.actionBarSize) / 2;
selectedVerticalTranslation = getResources().getDimensionPixelOffset(R.dimen.conversation_reaction_scrub_vertical_translation);
scrubberHorizontalMargin = getResources().getDimensionPixelOffset(R.dimen.conversation_reaction_scrub_horizontal_margin);
@@ -149,7 +153,7 @@ public final class ConversationReactionOverlay extends RelativeLayout {
final float scrubberTranslationY = Math.max(-scrubberDistanceFromTouchDown + halfActionBarHeight,
lastSeenDownPoint.y - scrubberHeight - scrubberDistanceFromTouchDown);
- final float halfWidth = foregroundView.getWidth() / 2f + scrubberHorizontalMargin;
+ final float halfWidth = scrubberWidth / 2f + scrubberHorizontalMargin;
final float screenWidth = getResources().getDisplayMetrics().widthPixels;
final float scrubberTranslationX = Util.clamp(lastSeenDownPoint.x - halfWidth,
scrubberHorizontalMargin,
@@ -202,6 +206,19 @@ public final class ConversationReactionOverlay extends RelativeLayout {
return messageRecord;
}
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ super.onLayout(changed, l, t, r, b);
+
+ backgroundView.getGlobalVisibleRect(emojiStripViewBounds);
+ emojiViews[0].getGlobalVisibleRect(emojiViewGlobalRect);
+ emojiStripViewBounds.left = emojiViewGlobalRect.left;
+ emojiViews[emojiViews.length - 1].getGlobalVisibleRect(emojiViewGlobalRect);
+ emojiStripViewBounds.right = emojiViewGlobalRect.right;
+
+ segmentSize = emojiStripViewBounds.width() / (float) emojiViews.length;
+ }
+
public boolean applyTouchEvent(@NonNull MotionEvent motionEvent) {
if (!isShowing()) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
@@ -215,14 +232,6 @@ public final class ConversationReactionOverlay extends RelativeLayout {
}
if (overlayState == OverlayState.UNINITAILIZED) {
- backgroundView.getGlobalVisibleRect(emojiStripViewBounds);
- emojiViews[0].getGlobalVisibleRect(emojiViewGlobalRect);
- emojiStripViewBounds.left = emojiViewGlobalRect.left;
- emojiViews[emojiViews.length - 1].getGlobalVisibleRect(emojiViewGlobalRect);
- emojiStripViewBounds.right = emojiViewGlobalRect.right;
-
- segmentSize = emojiStripViewBounds.width() / (float) emojiViews.length;
-
downIsOurs = false;
deadzoneTouchPoint.set(motionEvent.getRawX(), motionEvent.getRawY());
@@ -345,6 +354,7 @@ public final class ConversationReactionOverlay extends RelativeLayout {
}
private void growView(@NonNull View view) {
+ view.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP);
view.animate()
.scaleY(1.5f)
.scaleX(1.5f)
@@ -486,7 +496,7 @@ public final class ConversationReactionOverlay extends RelativeLayout {
hideAnimatorSet.addListener(new AnimationCompleteListener() {
@Override
public void onAnimationEnd(Animator animation) {
- setVisibility(View.INVISIBLE);
+ setVisibility(View.GONE);
}
});
diff --git a/src/org/thoughtcrime/securesms/jobs/ReactionSendJob.java b/src/org/thoughtcrime/securesms/jobs/ReactionSendJob.java
index a2baa39492..e986da9ac3 100644
--- a/src/org/thoughtcrime/securesms/jobs/ReactionSendJob.java
+++ b/src/org/thoughtcrime/securesms/jobs/ReactionSendJob.java
@@ -11,17 +11,12 @@ import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase;
import org.thoughtcrime.securesms.database.NoSuchMessageException;
-import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.database.model.MessageRecord;
-import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.database.model.ReactionRecord;
-import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.jobmanager.Data;
import org.thoughtcrime.securesms.jobmanager.Job;
-import org.thoughtcrime.securesms.jobmanager.JobManager;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.RecipientUtil;
@@ -37,8 +32,6 @@ import org.whispersystems.signalservice.api.messages.SignalServiceGroup;
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -84,7 +77,7 @@ public class ReactionSendJob extends BaseJob {
}
List recipients = conversationRecipient.isGroup() ? Stream.of(conversationRecipient.getParticipants()).map(Recipient::getId).toList()
- : Arrays.asList(conversationRecipient.getId());
+ : Stream.of(conversationRecipient.getId()).toList();
recipients.remove(Recipient.self().getId());
diff --git a/src/org/thoughtcrime/securesms/reactions/ReactionsBottomSheetDialogFragment.java b/src/org/thoughtcrime/securesms/reactions/ReactionsBottomSheetDialogFragment.java
index 61d8b1bdb9..4314e69e9c 100644
--- a/src/org/thoughtcrime/securesms/reactions/ReactionsBottomSheetDialogFragment.java
+++ b/src/org/thoughtcrime/securesms/reactions/ReactionsBottomSheetDialogFragment.java
@@ -15,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import org.thoughtcrime.securesms.R;
+import org.thoughtcrime.securesms.util.ThemeUtil;
public final class ReactionsBottomSheetDialogFragment extends BottomSheetDialogFragment {
@@ -41,6 +42,18 @@ public final class ReactionsBottomSheetDialogFragment extends BottomSheetDialogF
return fragment;
}
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+
+ if (ThemeUtil.isDarkTheme(requireContext())) {
+ setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_Design_BottomSheetDialog_Fixed);
+ } else {
+ setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_Design_Light_BottomSheetDialog_Fixed);
+ }
+
+ super.onCreate(savedInstanceState);
+ }
+
@Override
public @Nullable View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,