From bca346ec2fd3c468f4f12cd7294c209b2874a831 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 7 Mar 2024 10:38:33 -0500 Subject: [PATCH] Improve copy for unregistered users. --- .../securesms/conversation/v2/ConversationFragment.kt | 2 +- .../securesms/conversation/v2/ConversationViewModel.kt | 3 ++- .../securesms/conversation/v2/DisabledInputView.kt | 6 ++++-- .../securesms/conversation/v2/InputReadyState.kt | 3 ++- .../org/thoughtcrime/securesms/database/MessageTable.kt | 7 +++++++ .../messagerequests/MessageRequestRepository.java | 4 ++++ app/src/main/res/values/strings.xml | 2 ++ 7 files changed, 22 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index 01ac0b3502..5b0d001b43 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -1145,7 +1145,7 @@ class ConversationFragment : inputReadyState.isRequestingMember == true -> disabledInputView.showAsRequestingMember() inputReadyState.isAnnouncementGroup == true && inputReadyState.isAdmin == false -> disabledInputView.showAsAnnouncementGroupAdminsOnly() inputReadyState.conversationRecipient.isReleaseNotes -> disabledInputView.showAsReleaseNotesChannel(inputReadyState.conversationRecipient) - inputReadyState.shouldShowInviteToSignal() -> disabledInputView.showAsInviteToSignal(requireContext(), inputReadyState.conversationRecipient) + inputReadyState.shouldShowInviteToSignal() -> disabledInputView.showAsInviteToSignal(requireContext(), inputReadyState.conversationRecipient, inputReadyState.threadContainsSms) else -> inputDisabled = false } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt index 4832fe438b..0814eba5ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt @@ -238,7 +238,8 @@ class ConversationViewModel( messageRequestState = messageRequestRepository.getMessageRequestState(recipient, threadId), groupRecord = groupRecord.orNull(), isClientExpired = SignalStore.misc().isClientDeprecated, - isUnauthorized = TextSecurePreferences.isUnauthorizedReceived(ApplicationDependencies.getApplication()) + isUnauthorized = TextSecurePreferences.isUnauthorizedReceived(ApplicationDependencies.getApplication()), + threadContainsSms = !recipient.isRegistered && !recipient.isPushGroup && !recipient.isSelf && messageRequestRepository.threadContainsSms(threadId) ) }.doOnNext { hasMessageRequestStateSubject.onNext(it.messageRequestState) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt index bee0670845..3decd680f6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/DisabledInputView.kt @@ -127,15 +127,17 @@ class DisabledInputView @JvmOverloads constructor( ) } - fun showAsInviteToSignal(context: Context, recipient: Recipient) { + fun showAsInviteToSignal(context: Context, recipient: Recipient, threadContainsSms: Boolean) { inviteToSignal = show( existingView = inviteToSignal, create = { inflater.inflate(R.layout.conversation_activity_sms_export_stub, this, false) }, bind = { findViewById(R.id.export_sms_message).text = if (recipient.isMmsGroup) { context.getString(R.string.ConversationActivity__sms_messaging_is_no_longer_supported) - } else { + } else if (threadContainsSms) { context.getString(R.string.ConversationActivity__sms_messaging_is_no_longer_supported_in_signal_invite_s_to_to_signal_to_keep_the_conversation_here, recipient.getDisplayName(context)) + } else { + context.getString(R.string.ConversationActivity__this_person_is_no_longer_using_signal) } findViewById(R.id.export_sms_button).apply { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt index 678629a799..0a33ed79e8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt @@ -18,7 +18,8 @@ class InputReadyState( val messageRequestState: MessageRequestState, val groupRecord: GroupRecord?, val isClientExpired: Boolean, - val isUnauthorized: Boolean + val isUnauthorized: Boolean, + val threadContainsSms: Boolean ) { private val selfMemberLevel: GroupTable.MemberLevel? = groupRecord?.memberLevel(Recipient.self()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt index 67e04562e4..bfb52cfafb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -4861,6 +4861,13 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat return type } + fun threadContainsSms(threadId: Long): Boolean { + return readableDatabase + .exists(TABLE_NAME) + .where(getInsecureMessageClause(threadId)) + .run() + } + protected enum class ReceiptType(val columnName: String, val groupStatus: Int) { READ(HAS_READ_RECEIPT, GroupReceiptTable.STATUS_READ), DELIVERY(HAS_DELIVERY_RECEIPT, GroupReceiptTable.STATUS_DELIVERED), diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java index 55c1b6d82d..d95e62adbb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java @@ -150,6 +150,10 @@ public final class MessageRequestRepository { } } + public boolean threadContainsSms(long threadId) { + return SignalDatabase.messages().threadContainsSms(threadId); + } + private boolean reportedAsSpam(long threadId) { return SignalDatabase.messages().hasReportSpamMessage(threadId) || SignalDatabase.messages().getOutgoingSecureMessageCount(threadId) > 0; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 84d8d99f84..c5ca62a92e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -426,6 +426,8 @@ SMS messaging is no longer supported in Signal. SMS messaging is no longer supported in Signal. Invite %1$s to Signal to keep the conversation here. + + This person is no longer using Signal. Invite them to Signal to keep the conversation here. Invite to Signal