Implement group story notifications.

This commit is contained in:
Alex Hart
2022-05-12 15:37:28 -03:00
committed by Cody Henthorne
parent 01543dd52b
commit a03c49e12c
66 changed files with 865 additions and 473 deletions

View File

@@ -141,6 +141,7 @@ import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.TextSlide;
import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile;
import org.thoughtcrime.securesms.notifications.v2.ConversationId;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter;
import org.thoughtcrime.securesms.providers.BlobProvider;
@@ -157,6 +158,7 @@ import org.thoughtcrime.securesms.sms.MessageSender;
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
import org.thoughtcrime.securesms.stickers.StickerLocator;
import org.thoughtcrime.securesms.stickers.StickerPackPreviewActivity;
import org.thoughtcrime.securesms.stories.StoryViewerArgs;
import org.thoughtcrime.securesms.stories.viewer.StoryViewerActivity;
import org.thoughtcrime.securesms.util.CachedInflater;
import org.thoughtcrime.securesms.util.CommunicationActions;
@@ -670,7 +672,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
this.recipient = Recipient.live(conversationViewModel.getArgs().getRecipientId());
this.threadId = conversationViewModel.getArgs().getThreadId();
this.markReadHelper = new MarkReadHelper(threadId, requireContext(), getViewLifecycleOwner());
this.markReadHelper = new MarkReadHelper(ConversationId.forConversation(threadId), requireContext(), getViewLifecycleOwner());
conversationViewModel.onConversationDataAvailable(recipient.getId(), threadId, startingPosition);
messageCountsViewModel.setThreadId(threadId);
@@ -917,7 +919,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
snapToTopDataObserver.requestScrollPosition(0);
conversationViewModel.onConversationDataAvailable(recipient.getId(), threadId, -1);
messageCountsViewModel.setThreadId(threadId);
markReadHelper = new MarkReadHelper(threadId, requireContext(), getViewLifecycleOwner());
markReadHelper = new MarkReadHelper(ConversationId.forConversation(threadId), requireContext(), getViewLifecycleOwner());
initializeListAdapter();
initializeTypingObserver();
}
@@ -1628,15 +1630,9 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
if (messageRecord.getParentStoryId() != null) {
startActivity(StoryViewerActivity.createIntent(
requireContext(),
messageRecord.getQuote().getAuthor(),
messageRecord.getParentStoryId().asMessageId().getId(),
Recipient.resolved(messageRecord.getQuote().getAuthor()).shouldHideStory(),
null,
null,
null,
Collections.emptyList()
));
new StoryViewerArgs.Builder(messageRecord.getQuote().getAuthor(), Recipient.resolved(messageRecord.getQuote().getAuthor()).shouldHideStory())
.withStoryId(messageRecord.getParentStoryId().asMessageId().getId())
.build()));
return;
}

View File

@@ -240,7 +240,7 @@ import org.thoughtcrime.securesms.mms.SlideFactory.MediaType;
import org.thoughtcrime.securesms.mms.StickerSlide;
import org.thoughtcrime.securesms.mms.VideoSlide;
import org.thoughtcrime.securesms.notifications.NotificationChannels;
import org.thoughtcrime.securesms.notifications.v2.NotificationThread;
import org.thoughtcrime.securesms.notifications.v2.ConversationId;
import org.thoughtcrime.securesms.payments.CanNotSendPaymentDialog;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.profiles.spoofing.ReviewBannerView;
@@ -267,6 +267,7 @@ import org.thoughtcrime.securesms.stickers.StickerLocator;
import org.thoughtcrime.securesms.stickers.StickerManagementActivity;
import org.thoughtcrime.securesms.stickers.StickerPackInstallEvent;
import org.thoughtcrime.securesms.stickers.StickerSearchRepository;
import org.thoughtcrime.securesms.stories.StoryViewerArgs;
import org.thoughtcrime.securesms.stories.viewer.StoryViewerActivity;
import org.thoughtcrime.securesms.util.AsynchronousCallback;
import org.thoughtcrime.securesms.util.Base64;
@@ -885,7 +886,7 @@ public class ConversationParentFragment extends Fragment
private void setVisibleThread(long threadId) {
if (!isInBubble()) {
// TODO [alex] LargeScreenSupport -- Inform MainActivityViewModel that the conversation was opened.
ApplicationDependencies.getMessageNotifier().setVisibleThread(NotificationThread.forConversation(threadId));
ApplicationDependencies.getMessageNotifier().setVisibleThread(ConversationId.forConversation(threadId));
}
}
@@ -1249,7 +1250,10 @@ public class ConversationParentFragment extends Fragment
}
private void handleStoryRingClick() {
startActivity(StoryViewerActivity.createIntent(requireContext(), recipient.getId(), -1L, recipient.get().shouldHideStory(), null, null, null, Collections.emptyList()));
startActivity(StoryViewerActivity.createIntent(
requireContext(),
new StoryViewerArgs.Builder(recipient.getId(), recipient.get().shouldHideStory())
.build()));
}
private void handleConversationSettings() {

View File

@@ -13,26 +13,27 @@ import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.notifications.MarkReadReceiver;
import org.thoughtcrime.securesms.notifications.v2.ConversationId;
import org.thoughtcrime.securesms.util.Debouncer;
import org.thoughtcrime.securesms.util.concurrent.SerialMonoLifoExecutor;
import java.util.List;
import java.util.concurrent.Executor;
class MarkReadHelper {
public class MarkReadHelper {
private static final String TAG = Log.tag(MarkReadHelper.class);
private static final long DEBOUNCE_TIMEOUT = 100;
private static final Executor EXECUTOR = new SerialMonoLifoExecutor(SignalExecutors.BOUNDED);
private final long threadId;
private final ConversationId conversationId;
private final Context context;
private final LifecycleOwner lifecycleOwner;
private final Debouncer debouncer = new Debouncer(DEBOUNCE_TIMEOUT);
private long latestTimestamp;
private final LifecycleOwner lifecycleOwner;
private final Debouncer debouncer = new Debouncer(DEBOUNCE_TIMEOUT);
private long latestTimestamp;
MarkReadHelper(long threadId, @NonNull Context context, @NonNull LifecycleOwner lifecycleOwner) {
this.threadId = threadId;
public MarkReadHelper(@NonNull ConversationId conversationId, @NonNull Context context, @NonNull LifecycleOwner lifecycleOwner) {
this.conversationId = conversationId;
this.context = context.getApplicationContext();
this.lifecycleOwner = lifecycleOwner;
}
@@ -47,7 +48,7 @@ class MarkReadHelper {
debouncer.publish(() -> {
EXECUTOR.execute(() -> {
ThreadDatabase threadDatabase = SignalDatabase.threads();
List<MessageDatabase.MarkedMessageInfo> infos = threadDatabase.setReadSince(threadId, false, timestamp);
List<MessageDatabase.MarkedMessageInfo> infos = threadDatabase.setReadSince(conversationId, false, timestamp);
Log.d(TAG, "Marking " + infos.size() + " messages as read.");