That fuck shit the fascists are using
1package org.tm.archive.conversation;
2
3import android.app.Activity;
4import android.graphics.PointF;
5import android.view.MotionEvent;
6
7import androidx.annotation.NonNull;
8
9import org.tm.archive.database.model.MessageRecord;
10import org.tm.archive.recipients.Recipient;
11import org.tm.archive.util.views.Stub;
12
13/**
14 * Delegate class that mimics the ConversationReactionOverlay public API
15 *
16 * This allows us to properly stub out the ConversationReactionOverlay View class while still
17 * respecting listeners and other positional information that can be set BEFORE we want to actually
18 * resolve the view.
19 */
20public final class ConversationReactionDelegate {
21
22 private final Stub<ConversationReactionOverlay> overlayStub;
23 private final PointF lastSeenDownPoint = new PointF();
24
25 private ConversationReactionOverlay.OnReactionSelectedListener onReactionSelectedListener;
26 private ConversationReactionOverlay.OnActionSelectedListener onActionSelectedListener;
27 private ConversationReactionOverlay.OnHideListener onHideListener;
28
29 public ConversationReactionDelegate(@NonNull Stub<ConversationReactionOverlay> overlayStub) {
30 this.overlayStub = overlayStub;
31 }
32
33 public boolean isShowing() {
34 return overlayStub.resolved() && overlayStub.get().isShowing();
35 }
36
37 public void show(@NonNull Activity activity,
38 @NonNull Recipient conversationRecipient,
39 @NonNull ConversationMessage conversationMessage,
40 boolean isNonAdminInAnnouncementGroup,
41 @NonNull SelectedConversationModel selectedConversationModel)
42 {
43 resolveOverlay().show(activity, conversationRecipient, conversationMessage, lastSeenDownPoint, isNonAdminInAnnouncementGroup, selectedConversationModel);
44 }
45
46 public void hide() {
47 overlayStub.get().hide();
48 }
49
50 public void hideForReactWithAny() {
51 overlayStub.get().hideForReactWithAny();
52 }
53
54 public void setOnReactionSelectedListener(@NonNull ConversationReactionOverlay.OnReactionSelectedListener onReactionSelectedListener) {
55 this.onReactionSelectedListener = onReactionSelectedListener;
56
57 if (overlayStub.resolved()) {
58 overlayStub.get().setOnReactionSelectedListener(onReactionSelectedListener);
59 }
60 }
61
62 public void setOnActionSelectedListener(@NonNull ConversationReactionOverlay.OnActionSelectedListener onActionSelectedListener) {
63 this.onActionSelectedListener = onActionSelectedListener;
64
65 if (overlayStub.resolved()) {
66 overlayStub.get().setOnActionSelectedListener(onActionSelectedListener);
67 }
68 }
69
70 public void setOnHideListener(@NonNull ConversationReactionOverlay.OnHideListener onHideListener) {
71 this.onHideListener = onHideListener;
72
73 if (overlayStub.resolved()) {
74 overlayStub.get().setOnHideListener(onHideListener);
75 }
76 }
77
78 public @NonNull MessageRecord getMessageRecord() {
79 if (!overlayStub.resolved()) {
80 throw new IllegalStateException("Cannot call getMessageRecord right now.");
81 }
82
83 return overlayStub.get().getMessageRecord();
84 }
85
86 public boolean applyTouchEvent(@NonNull MotionEvent motionEvent) {
87 if (!overlayStub.resolved() || !overlayStub.get().isShowing()) {
88 if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
89 lastSeenDownPoint.set(motionEvent.getX(), motionEvent.getY());
90 }
91 return false;
92 } else {
93 return overlayStub.get().applyTouchEvent(motionEvent);
94 }
95 }
96
97 private @NonNull ConversationReactionOverlay resolveOverlay() {
98 ConversationReactionOverlay overlay = overlayStub.get();
99 overlay.requestFitSystemWindows();
100
101 overlay.setOnHideListener(onHideListener);
102 overlay.setOnActionSelectedListener(onActionSelectedListener);
103 overlay.setOnReactionSelectedListener(onReactionSelectedListener);
104
105 return overlay;
106 }
107}