Add option to send long messages as MMS

Closes #1104
This commit is contained in:
Moez Bhatti
2019-12-28 01:00:56 -05:00
parent 2aa2f2ccc0
commit d1bbe2c3cd
8 changed files with 36 additions and 1 deletions
@@ -302,13 +302,20 @@ class MessageRepositoryImpl @Inject constructor(
else -> prefs.signature.get()
}
val smsManager = subId.takeIf { it != -1 }
?.let(SmsManagerFactory::createSmsManager)
?: SmsManager.getDefault()
// We only care about stripping SMS
val strippedBody = when (prefs.unicode.get()) {
true -> StripAccents.stripAccents(signedBody)
false -> signedBody
}
if (addresses.size == 1 && attachments.isEmpty()) { // SMS
val parts = smsManager.divideMessage(strippedBody).orEmpty()
val forceMms = prefs.longAsMms.get() && parts.size > 1
if (addresses.size == 1 && attachments.isEmpty() && !forceMms) { // SMS
if (delay > 0) { // With delay
val sendTime = System.currentTimeMillis() + delay
val message = insertSentSms(subId, threadId, addresses.first(), strippedBody, sendTime)
@@ -109,6 +109,7 @@ class Preferences @Inject constructor(
val signature = rxPrefs.getString("signature", "")
val unicode = rxPrefs.getBoolean("unicode", false)
val mobileOnly = rxPrefs.getBoolean("mobileOnly", false)
val longAsMms = rxPrefs.getBoolean("longAsMms", false)
val mmsSize = rxPrefs.getInteger("mmsSize", 300)
val logging = rxPrefs.getBoolean("logging", false)
@@ -168,6 +168,7 @@ class SettingsController : QkController<SettingsView, SettingsState, SettingsPre
unicode.checkbox.isChecked = state.stripUnicodeEnabled
mobileOnly.checkbox.isChecked = state.mobileOnly
longAsMms.checkbox.isChecked = state.longAsMms
mmsSize.summary = state.maxMmsSizeSummary
mmsSizeDialog.adapter.selectedItem = state.maxMmsSizeId
@@ -112,6 +112,9 @@ class SettingsPresenter @Inject constructor(
disposables += prefs.mobileOnly.asObservable()
.subscribe { enabled -> newState { copy(mobileOnly = enabled) } }
disposables += prefs.longAsMms.asObservable()
.subscribe { enabled -> newState { copy(longAsMms = enabled) } }
val mmsSizeLabels = context.resources.getStringArray(R.array.mms_sizes)
val mmsSizeIds = context.resources.getIntArray(R.array.mms_sizes_ids)
disposables += prefs.mmsSize.asObservable()
@@ -175,6 +178,8 @@ class SettingsPresenter @Inject constructor(
R.id.mobileOnly -> prefs.mobileOnly.set(!prefs.mobileOnly.get())
R.id.longAsMms -> prefs.longAsMms.set(!prefs.longAsMms.get())
R.id.mmsSize -> view.showMmsSizePicker()
R.id.sync -> syncMessages.execute(Unit)
@@ -41,6 +41,7 @@ data class SettingsState(
val splitSmsEnabled: Boolean = false,
val stripUnicodeEnabled: Boolean = false,
val mobileOnly: Boolean = false,
val longAsMms: Boolean = false,
val maxMmsSizeSummary: String = "100KB",
val maxMmsSizeId: Int = 100,
val syncProgress: SyncRepository.SyncProgress = SyncRepository.SyncProgress.Idle
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M20,2L4,2c-1.1,0 -1.99,0.9 -1.99,2L2,22l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM18,14L6,14v-2h12v2zM18,11L6,11L6,9h12v2zM18,8L6,8L6,6h12v2z"/>
</vector>
@@ -177,6 +177,15 @@
app:title="@string/settings_mobile_title"
app:widget="@layout/settings_switch_widget" />
<com.moez.QKSMS.common.widget.PreferenceView
android:id="@+id/longAsMms"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_message_black_24dp"
app:summary="@string/settings_long_as_mms_summary"
app:title="@string/settings_long_as_mms_title"
app:widget="@layout/settings_switch_widget" />
<com.moez.QKSMS.common.widget.PreferenceView
android:id="@+id/mmsSize"
android:layout_width="match_parent"
@@ -255,6 +255,8 @@
<string name="settings_unicode_summary">Remove accents from characters in outgoing SMS messages</string>
<string name="settings_mobile_title">Mobile numbers only</string>
<string name="settings_mobile_summary">When composing a message, only show mobile numbers</string>
<string name="settings_long_as_mms_title">Send long messages as MMS</string>
<string name="settings_long_as_mms_summary">If your longer text messages are failing to send, or sending in the wrong order, you can send them as MMS messages instead. Additional charges may apply</string>
<string name="settings_mms_size_title">Auto-compress MMS attachments</string>
<string name="settings_sync_title">Sync messages</string>
<string name="settings_sync_summary">Re-sync your messages with the native Android SMS database</string>