From f0c3333a723a0f2e36965a56e46ecce95936355d Mon Sep 17 00:00:00 2001 From: Naveen Date: Fri, 6 Jan 2023 18:30:19 +0530 Subject: [PATCH] Disable replying to non-numeric short codes Also, break down large thread layout file --- .../smsmessenger/activities/ThreadActivity.kt | 39 ++- .../dialogs/InvalidNumberDialog.kt | 21 ++ .../smsmessenger/messaging/Messaging.kt | 13 + app/src/main/res/layout/activity_thread.xml | 223 ++---------------- .../main/res/layout/dialog_invalid_number.xml | 11 + .../layout/layout_invalid_short_code_info.xml | 36 +++ .../layout_thread_send_message_holder.xml | 209 ++++++++++++++++ 7 files changed, 340 insertions(+), 212 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/InvalidNumberDialog.kt create mode 100644 app/src/main/res/layout/dialog_invalid_number.xml create mode 100644 app/src/main/res/layout/layout_invalid_short_code_info.xml create mode 100644 app/src/main/res/layout/layout_thread_send_message_holder.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index bb1f8504..6fc6c5b5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -51,19 +51,19 @@ import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.adapters.AttachmentsAdapter import com.simplemobiletools.smsmessenger.adapters.AutoCompleteTextViewAdapter import com.simplemobiletools.smsmessenger.adapters.ThreadAdapter +import com.simplemobiletools.smsmessenger.dialogs.InvalidNumberDialog import com.simplemobiletools.smsmessenger.dialogs.RenameConversationDialog import com.simplemobiletools.smsmessenger.dialogs.ScheduleMessageDialog import com.simplemobiletools.smsmessenger.extensions.* import com.simplemobiletools.smsmessenger.helpers.* -import com.simplemobiletools.smsmessenger.messaging.cancelScheduleSendPendingIntent -import com.simplemobiletools.smsmessenger.messaging.isLongMmsMessage -import com.simplemobiletools.smsmessenger.messaging.scheduleMessage -import com.simplemobiletools.smsmessenger.messaging.sendMessageCompat +import com.simplemobiletools.smsmessenger.messaging.* import com.simplemobiletools.smsmessenger.models.* import com.simplemobiletools.smsmessenger.models.ThreadItem.* import kotlinx.android.synthetic.main.activity_thread.* import kotlinx.android.synthetic.main.item_selected_contact.view.* import kotlinx.android.synthetic.main.layout_attachment_picker.* +import kotlinx.android.synthetic.main.layout_invalid_short_code_info.* +import kotlinx.android.synthetic.main.layout_thread_send_message_holder.* import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -180,6 +180,7 @@ class ThreadActivity : SimpleActivity() { } thread_send_message_holder.setBackgroundColor(bottomBarColor) + reply_disabled_info_holder.setBackgroundColor(bottomBarColor) updateNavigationBarColor(bottomBarColor) } @@ -218,7 +219,8 @@ class ThreadActivity : SimpleActivity() { findItem(R.id.conversation_details).isVisible = participants.size > 1 && conversation != null findItem(R.id.block_number).title = addLockedLabelIfNeeded(R.string.block_number) findItem(R.id.block_number).isVisible = isNougatPlus() - findItem(R.id.dial_number).isVisible = participants.size == 1 + findItem(R.id.dial_number).isVisible = participants.size == 1 && !isSpecialNumber() + findItem(R.id.manage_people).isVisible = !isSpecialNumber() findItem(R.id.mark_as_unread).isVisible = threadItems.isNotEmpty() // allow saving number in cases when we dont have it stored yet and it is a casual readable number @@ -674,6 +676,33 @@ class ThreadActivity : SimpleActivity() { } else { messages.first().participants } + maybeDisableShortCodeReply() + } + } + + private fun isSpecialNumber(): Boolean { + val addresses = participants.getAddresses() + return addresses.any { isShortCodeWithLetters(it) } + } + + private fun maybeDisableShortCodeReply() { + if (isSpecialNumber()) { + thread_send_message_holder.beGone() + reply_disabled_info_holder.beVisible() + val textColor = getProperTextColor() + reply_disabled_text.setTextColor(textColor) + reply_disabled_info.apply { + applyColorFilter(textColor) + setOnClickListener { + InvalidNumberDialog( + activity = this@ThreadActivity, + text = getString(R.string.invalid_short_code_desc) + ) + } + if (isOreoPlus()) { + tooltipText = getString(R.string.more_info) + } + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/InvalidNumberDialog.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/InvalidNumberDialog.kt new file mode 100644 index 00000000..ee49c311 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/InvalidNumberDialog.kt @@ -0,0 +1,21 @@ +package com.simplemobiletools.smsmessenger.dialogs + +import com.simplemobiletools.commons.activities.BaseSimpleActivity +import com.simplemobiletools.commons.extensions.getAlertDialogBuilder +import com.simplemobiletools.commons.extensions.setupDialogStuff +import com.simplemobiletools.smsmessenger.R +import kotlinx.android.synthetic.main.dialog_invalid_number.view.* + +class InvalidNumberDialog(val activity: BaseSimpleActivity, val text: String) { + init { + val view = activity.layoutInflater.inflate(R.layout.dialog_invalid_number, null).apply { + dialog_invalid_number_desc.text = text + } + + activity.getAlertDialogBuilder() + .setPositiveButton(R.string.ok) { _, _ -> { } } + .apply { + activity.setupDialogStuff(view, this) + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/messaging/Messaging.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/messaging/Messaging.kt index fda9210b..efd65efb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/messaging/Messaging.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/messaging/Messaging.kt @@ -59,3 +59,16 @@ fun Context.sendMessageCompat(text: String, addresses: List, subId: Int? } } +/** + * Check if a given "address" is a short code. + * There's not much info available on these special numbers, even the wikipedia page (https://en.wikipedia.org/wiki/Short_code) + * contains outdated information regarding max number of digits. The exact parameters for short codes can vary by country and by carrier. + * + * This function returns true if the [address] length is less than or equal to [maxLength] and contains at least one letter. + */ +fun isShortCodeWithLetters(address: String, maxLength: Int = 10): Boolean { + if (address.length > maxLength) { + return false + } + return address.any { it.isLetter() } +} diff --git a/app/src/main/res/layout/activity_thread.xml b/app/src/main/res/layout/activity_thread.xml index 9329a50e..fcc3fb2d 100644 --- a/app/src/main/res/layout/activity_thread.xml +++ b/app/src/main/res/layout/activity_thread.xml @@ -102,7 +102,7 @@ android:id="@+id/thread_messages_fastscroller" android:layout_width="match_parent" android:layout_height="0dp" - app:layout_constraintBottom_toTopOf="@id/thread_send_message_holder" + app:layout_constraintBottom_toTopOf="@id/reply_disabled_info_holder" app:layout_constraintTop_toBottomOf="@id/thread_add_contacts" app:supportSwipeToRefresh="true"> @@ -112,7 +112,7 @@ android:layout_height="match_parent" android:clipToPadding="false" android:overScrollMode="ifContentScrolls" - android:paddingBottom="@dimen/small_margin" + android:paddingBottom="@dimen/medium_margin" android:scrollbars="none" app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" app:stackFromEnd="true" @@ -121,215 +121,24 @@ - + + + app:layout_constraintStart_toStartOf="parent" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/dialog_invalid_number.xml b/app/src/main/res/layout/dialog_invalid_number.xml new file mode 100644 index 00000000..d8b208ea --- /dev/null +++ b/app/src/main/res/layout/dialog_invalid_number.xml @@ -0,0 +1,11 @@ + + diff --git a/app/src/main/res/layout/layout_invalid_short_code_info.xml b/app/src/main/res/layout/layout_invalid_short_code_info.xml new file mode 100644 index 00000000..08b4eb3a --- /dev/null +++ b/app/src/main/res/layout/layout_invalid_short_code_info.xml @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/app/src/main/res/layout/layout_thread_send_message_holder.xml b/app/src/main/res/layout/layout_thread_send_message_holder.xml new file mode 100644 index 00000000..4138565a --- /dev/null +++ b/app/src/main/res/layout/layout_thread_send_message_holder.xml @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +