From 277c17de83bf3fe96e030bdfec422d34f52f4403 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Mon, 28 Feb 2022 11:59:51 -0500 Subject: [PATCH] Fix reactions vibrating in release notes channel. --- .../app/internal/InternalSettingsFragment.kt | 11 ++++- .../internal/InternalSettingsRepository.kt | 44 +++++++++++++++++++ .../app/internal/InternalSettingsViewModel.kt | 4 ++ .../ConversationReactionOverlay.java | 4 ++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 62 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt index e98a377540..4ca580b668 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsFragment.kt @@ -352,6 +352,13 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter sectionHeaderPref(R.string.preferences__internal_release_channel) + clickPref( + title = DSLSettingsText.from(R.string.preferences__internal_release_channel_set_last_version), + onClick = { + SignalStore.releaseChannelValues().highestVersionNoteReceived = max(SignalStore.releaseChannelValues().highestVersionNoteReceived - 10, 0) + } + ) + clickPref( title = DSLSettingsText.from(R.string.preferences__internal_fetch_release_channel), onClick = { @@ -361,9 +368,9 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter ) clickPref( - title = DSLSettingsText.from(R.string.preferences__internal_release_channel_set_last_version), + title = DSLSettingsText.from(R.string.preferences__internal_add_sample_note), onClick = { - SignalStore.releaseChannelValues().highestVersionNoteReceived = max(SignalStore.releaseChannelValues().highestVersionNoteReceived - 10, 0) + viewModel.addSampleReleaseNote() } ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsRepository.kt index 200822e16d..08c25daa8b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsRepository.kt @@ -2,7 +2,17 @@ package org.thoughtcrime.securesms.components.settings.app.internal import android.content.Context import org.signal.core.util.concurrent.SignalExecutors +import org.thoughtcrime.securesms.database.MessageDatabase +import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.database.model.addStyle +import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.emoji.EmojiFiles +import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob +import org.thoughtcrime.securesms.jobs.CreateReleaseChannelJob +import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.releasechannel.ReleaseChannel class InternalSettingsRepository(context: Context) { @@ -13,4 +23,38 @@ class InternalSettingsRepository(context: Context) { consumer(EmojiFiles.Version.readVersion(context)) } } + + fun addSampleReleaseNote() { + SignalExecutors.UNBOUNDED.execute { + ApplicationDependencies.getJobManager().runSynchronously(CreateReleaseChannelJob.create(), 5000) + + val title = "Release Note Title" + val bodyText = "Release note body. Aren't I awesome?" + val body = "$title\n\n$bodyText" + val bodyRangeList = BodyRangeList.newBuilder() + .addStyle(BodyRangeList.BodyRange.Style.BOLD, 0, title.length) + + val recipientId = SignalStore.releaseChannelValues().releaseChannelRecipientId!! + val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(Recipient.resolved(recipientId)) + + val insertResult: MessageDatabase.InsertResult? = ReleaseChannel.insertAnnouncement( + recipientId = recipientId, + body = body, + threadId = threadId, + messageRanges = bodyRangeList.build(), + image = "https://via.placeholder.com/720x480", + imageWidth = 720, + imageHeight = 480 + ) + + SignalDatabase.sms.insertBoostRequestMessage(recipientId, threadId) + + if (insertResult != null) { + SignalDatabase.attachments.getAttachmentsForMessage(insertResult.messageId) + .forEach { ApplicationDependencies.getJobManager().add(AttachmentDownloadJob(insertResult.messageId, it.attachmentId, false)) } + + ApplicationDependencies.getMessageNotifier().updateNotification(context, insertResult.threadId) + } + } + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt index 56e69af03f..da05e05e1c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsViewModel.kt @@ -102,6 +102,10 @@ class InternalSettingsViewModel(private val repository: InternalSettingsReposito store.update { getState().copy(disableStories = newState) } } + fun addSampleReleaseNote() { + repository.addSampleReleaseNote() + } + private fun refresh() { store.update { getState().copy(emojiVersion = it.emojiVersion) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java index d2f83e0b63..b655ab0451 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java @@ -642,6 +642,10 @@ public final class ConversationReactionOverlay extends FrameLayout { private int getSelectedIndexViaMotionEvent(@NonNull MotionEvent motionEvent, @NonNull Boundary boundary) { int selected = -1; + if (backgroundView.getVisibility() != View.VISIBLE) { + return selected; + } + for (int i = 0; i < emojiViews.length; i++) { final float emojiLeft = (segmentSize * i) + emojiStripViewBounds.left; horizontalEmojiBoundary.update(emojiLeft, emojiLeft + segmentSize); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index debc9d4800..ba6f9996d9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2678,6 +2678,7 @@ Release channel Fetch release channel Set last version seen back 10 versions + Add sample note Disable stories