From db3b0b794a7ba403f1dc6f5b98bc9a1437319cce Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Jun 2020 20:17:14 +0200 Subject: [PATCH 01/19] update commons to 5.29.7 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 7be53d19..a89aea0c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.28.25' + implementation 'com.simplemobiletools:commons:5.29.7' implementation 'org.greenrobot:eventbus:3.2.0' implementation 'com.klinkerapps:android-smsmms:5.2.6' implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a' From 9641eed138999258168368f3020f709612cfbdc9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Jun 2020 20:25:58 +0200 Subject: [PATCH 02/19] fix #48, no not show incoming message notifications at currently open thread --- .../simplemobiletools/smsmessenger/activities/ThreadActivity.kt | 1 + .../com/simplemobiletools/smsmessenger/extensions/Context.kt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) 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 83773bd2..eb13d1d8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -597,6 +597,7 @@ class ThreadActivity : SimpleActivity() { @Subscribe(threadMode = ThreadMode.ASYNC) fun refreshMessages(event: Events.RefreshMessages) { + notificationManager.cancel(threadId) messages = getMessages(threadId) setupAdapter() } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index 8e89f984..efc28f6a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -570,5 +570,5 @@ fun Context.showReceivedMessageNotification(address: String, body: String, threa .addAction(R.drawable.ic_check_vector, getString(R.string.mark_as_read), markAsReadPendingIntent) .setChannelId(channelId) - notificationManager.notify(messageId, builder.build()) + notificationManager.notify(threadID, builder.build()) } From 05c84e498cdf228f62d4a75ea5727263f4e788f4 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Jun 2020 20:28:39 +0200 Subject: [PATCH 03/19] catch exceptions thrown at fetching new thread IDs --- .../smsmessenger/extensions/Context.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index efc28f6a..b9808d92 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -500,7 +500,11 @@ fun Context.markMessageRead(id: Int, isMMS: Boolean) { @SuppressLint("NewApi") fun Context.getThreadId(address: String): Long { return if (isMarshmallowPlus()) { - Threads.getOrCreateThreadId(this, address) + try { + Threads.getOrCreateThreadId(this, address) + } catch (e: Exception) { + 0 + } } else { 0 } @@ -509,7 +513,11 @@ fun Context.getThreadId(address: String): Long { @SuppressLint("NewApi") fun Context.getThreadId(addresses: Set): Long { return if (isMarshmallowPlus()) { - Threads.getOrCreateThreadId(this, addresses) + try { + Threads.getOrCreateThreadId(this, addresses) + } catch (e: Exception) { + 0 + } } else { 0 } From 26951cc97998edda19848bf26bad736e43464ab9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Jun 2020 21:08:40 +0200 Subject: [PATCH 04/19] make sure getThreadId returns a Long --- .../simplemobiletools/smsmessenger/extensions/Context.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index b9808d92..3e992fb5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -503,10 +503,10 @@ fun Context.getThreadId(address: String): Long { try { Threads.getOrCreateThreadId(this, address) } catch (e: Exception) { - 0 + 0L } } else { - 0 + 0L } } @@ -516,10 +516,10 @@ fun Context.getThreadId(addresses: Set): Long { try { Threads.getOrCreateThreadId(this, addresses) } catch (e: Exception) { - 0 + 0L } } else { - 0 + 0L } } From a85eb77d3137ae285751e191f90ca0ad7d7bd994 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Jun 2020 21:45:17 +0200 Subject: [PATCH 05/19] fix #47, mark the whole conversation as read with Mark as Read at notification --- .../smsmessenger/extensions/Context.kt | 20 +++++++++++++++---- .../smsmessenger/helpers/Constants.kt | 2 -- .../receivers/MarkAsReadReceiver.kt | 13 ++++-------- .../smsmessenger/receivers/MmsReceiver.kt | 2 +- .../smsmessenger/receivers/SmsReceiver.kt | 4 ++-- 5 files changed, 23 insertions(+), 18 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index 3e992fb5..d534d4c4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -23,7 +23,9 @@ import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.activities.ThreadActivity import com.simplemobiletools.smsmessenger.databases.MessagesDatabase -import com.simplemobiletools.smsmessenger.helpers.* +import com.simplemobiletools.smsmessenger.helpers.Config +import com.simplemobiletools.smsmessenger.helpers.MARK_AS_READ +import com.simplemobiletools.smsmessenger.helpers.THREAD_ID import com.simplemobiletools.smsmessenger.interfaces.ConversationsDao import com.simplemobiletools.smsmessenger.models.* import com.simplemobiletools.smsmessenger.receivers.MarkAsReadReceiver @@ -497,6 +499,18 @@ fun Context.markMessageRead(id: Int, isMMS: Boolean) { contentResolver.update(uri, contentValues, selection, selectionArgs) } +fun Context.markThreadMessagesRead(threadId: Int) { + arrayOf(Mms.CONTENT_URI, Sms.CONTENT_URI).forEach { uri -> + val contentValues = ContentValues().apply { + put(Sms.READ, 1) + put(Sms.SEEN, 1) + } + val selection = "${Sms.THREAD_ID} = ?" + val selectionArgs = arrayOf(threadId.toString()) + contentResolver.update(uri, contentValues, selection, selectionArgs) + } +} + @SuppressLint("NewApi") fun Context.getThreadId(address: String): Long { return if (isMarshmallowPlus()) { @@ -524,7 +538,7 @@ fun Context.getThreadId(addresses: Set): Long { } @SuppressLint("NewApi") -fun Context.showReceivedMessageNotification(address: String, body: String, threadID: Int, bitmap: Bitmap?, messageId: Int, isMMS: Boolean) { +fun Context.showReceivedMessageNotification(address: String, body: String, threadID: Int, bitmap: Bitmap?) { val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) val channelId = "simple_sms_messenger" @@ -556,8 +570,6 @@ fun Context.showReceivedMessageNotification(address: String, body: String, threa val markAsReadIntent = Intent(this, MarkAsReadReceiver::class.java).apply { action = MARK_AS_READ - putExtra(MESSAGE_ID, messageId) - putExtra(MESSAGE_IS_MMS, isMMS) putExtra(THREAD_ID, threadID) } val markAsReadPendingIntent = PendingIntent.getBroadcast(this, 0, markAsReadIntent, PendingIntent.FLAG_CANCEL_CURRENT) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt index 8620bfa8..d3cf7cd1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt @@ -13,8 +13,6 @@ const val USE_SIM_ID_PREFIX = "use_sim_id_" private const val PATH = "com.simplemobiletools.smsmessenger.action." const val MARK_AS_READ = PATH + "mark_as_read" -const val MESSAGE_ID = "message_id" -const val MESSAGE_IS_MMS = "message_is_mms" // view types for the thread list view const val THREAD_DATE_TIME = 1 diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MarkAsReadReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MarkAsReadReceiver.kt index 6dc79f93..be4c48e5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MarkAsReadReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MarkAsReadReceiver.kt @@ -6,23 +6,18 @@ import android.content.Intent import com.simplemobiletools.commons.extensions.notificationManager import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.smsmessenger.extensions.conversationsDB -import com.simplemobiletools.smsmessenger.extensions.markMessageRead +import com.simplemobiletools.smsmessenger.extensions.markThreadMessagesRead import com.simplemobiletools.smsmessenger.helpers.MARK_AS_READ -import com.simplemobiletools.smsmessenger.helpers.MESSAGE_ID -import com.simplemobiletools.smsmessenger.helpers.MESSAGE_IS_MMS import com.simplemobiletools.smsmessenger.helpers.THREAD_ID class MarkAsReadReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { when (intent.action) { MARK_AS_READ -> { - val messageId = intent.getIntExtra(MESSAGE_ID, 0) - context.notificationManager.cancel(messageId) + val threadId = intent.getIntExtra(THREAD_ID, 0) + context.notificationManager.cancel(threadId) ensureBackgroundThread { - val isMMS = intent.getBooleanExtra(MESSAGE_IS_MMS, false) - context.markMessageRead(messageId, isMMS) - - val threadId = intent.getIntExtra(THREAD_ID, 0) + context.markThreadMessagesRead(threadId) context.conversationsDB.markRead(threadId.toLong()) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsReceiver.kt index 9cdb9a1a..b098bb99 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsReceiver.kt @@ -33,7 +33,7 @@ class MmsReceiver : com.klinker.android.send_message.MmsReceivedReceiver() { null } - context.showReceivedMessageNotification(address, mms.body, mms.thread, glideBitmap, mms.id, true) + context.showReceivedMessageNotification(address, mms.body, mms.thread, glideBitmap) val conversation = context.getConversations(mms.thread.toLong()).firstOrNull() ?: return@ensureBackgroundThread context.conversationsDB.insertOrUpdate(conversation) } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt index a57e042a..28daec33 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt @@ -30,8 +30,8 @@ class SmsReceiver : BroadcastReceiver() { } if (!context.isNumberBlocked(address)) { - val messageId = context.insertNewSMS(address, subject, body, date, read, threadId, type, subscriptionId) - context.showReceivedMessageNotification(address, body, threadId.toInt(), null, messageId, false) + context.insertNewSMS(address, subject, body, date, read, threadId, type, subscriptionId) + context.showReceivedMessageNotification(address, body, threadId.toInt(), null) refreshMessages() ensureBackgroundThread { From ea16415503b7d7ce10dde7f87308fe988f4b9b58 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Jun 2020 22:28:32 +0200 Subject: [PATCH 06/19] allow customizing the text size --- .../activities/SettingsActivity.kt | 21 +++++++++++- .../smsmessenger/adapters/ContactsAdapter.kt | 17 +++++++--- .../adapters/ConversationsAdapter.kt | 20 ++++++++++-- .../smsmessenger/adapters/ThreadAdapter.kt | 13 ++++++-- app/src/main/res/layout/activity_settings.xml | 32 +++++++++++++++++++ 5 files changed, 92 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt index 885e3f69..c9a3d38d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt @@ -7,8 +7,10 @@ import android.os.Bundle import android.view.Menu import com.simplemobiletools.commons.activities.ManageBlockedNumbersActivity import com.simplemobiletools.commons.dialogs.ChangeDateTimeFormatDialog +import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.isNougatPlus +import com.simplemobiletools.commons.helpers.* +import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.extensions.config import com.simplemobiletools.smsmessenger.helpers.refreshMessages @@ -31,6 +33,7 @@ class SettingsActivity : SimpleActivity() { setupUseEnglish() setupManageBlockedNumbers() setupChangeDateTimeFormat() + setupFontSize() updateTextColors(settings_scrollview) if (blockedNumbersAtPause != -1 && blockedNumbersAtPause != getBlockedNumbers().hashCode()) { @@ -87,4 +90,20 @@ class SettingsActivity : SimpleActivity() { } } } + + private fun setupFontSize() { + settings_font_size.text = getFontSizeText() + settings_font_size_holder.setOnClickListener { + val items = arrayListOf( + RadioItem(FONT_SIZE_SMALL, getString(R.string.small)), + RadioItem(FONT_SIZE_MEDIUM, getString(R.string.medium)), + RadioItem(FONT_SIZE_LARGE, getString(R.string.large)), + RadioItem(FONT_SIZE_EXTRA_LARGE, getString(R.string.extra_large))) + + RadioGroupDialog(this@SettingsActivity, items, config.fontSize) { + config.fontSize = it as Int + settings_font_size.text = getFontSizeText() + } + } + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ContactsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ContactsAdapter.kt index c08be665..a7ed2248 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ContactsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ContactsAdapter.kt @@ -1,5 +1,6 @@ package com.simplemobiletools.smsmessenger.adapters +import android.util.TypedValue import android.view.Menu import android.view.View import android.view.ViewGroup @@ -7,6 +8,7 @@ import android.widget.ImageView import android.widget.TextView import com.bumptech.glide.Glide import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter +import com.simplemobiletools.commons.extensions.getTextSize import com.simplemobiletools.commons.helpers.SimpleContactsHelper import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.commons.views.FastScroller @@ -17,6 +19,7 @@ import java.util.* class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList, recyclerView: MyRecyclerView, fastScroller: FastScroller?, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) { + private var fontSize = activity.getTextSize() override fun getActionMenuId() = 0 @@ -57,11 +60,17 @@ class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList(R.id.item_contact_name).text = contact.name - findViewById(R.id.item_contact_name).setTextColor(textColor) + findViewById(R.id.item_contact_name).apply { + text = contact.name + setTextColor(textColor) + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 1.2f) + } - findViewById(R.id.item_contact_number).text = contact.phoneNumber - findViewById(R.id.item_contact_number).setTextColor(textColor) + findViewById(R.id.item_contact_number).apply { + text = contact.phoneNumber + setTextColor(textColor) + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize) + } SimpleContactsHelper(context).loadContactImage(contact.photoUri, findViewById(R.id.item_contact_image), contact.name) } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt index 4d294124..442aabba 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt @@ -3,6 +3,7 @@ package com.simplemobiletools.smsmessenger.adapters import android.content.Intent import android.graphics.Typeface import android.text.TextUtils +import android.util.TypedValue import android.view.Menu import android.view.View import android.view.ViewGroup @@ -12,6 +13,7 @@ import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.extensions.addBlockedNumber import com.simplemobiletools.commons.extensions.formatDateOrTime +import com.simplemobiletools.commons.extensions.getTextSize import com.simplemobiletools.commons.extensions.toast import com.simplemobiletools.commons.helpers.KEY_PHONE import com.simplemobiletools.commons.helpers.SimpleContactsHelper @@ -28,6 +30,7 @@ import kotlinx.android.synthetic.main.item_conversation.view.* class ConversationsAdapter(activity: SimpleActivity, var conversations: ArrayList, recyclerView: MyRecyclerView, fastScroller: FastScroller, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) { + private var fontSize = activity.getTextSize() init { setupDragListener(true) @@ -186,9 +189,20 @@ class ConversationsAdapter(activity: SimpleActivity, var conversations: ArrayLis view.apply { conversation_frame.isSelected = selectedKeys.contains(conversation.thread_id) - conversation_address.text = conversation.title - conversation_body_short.text = conversation.snippet - conversation_date.text = conversation.date.formatDateOrTime(context, true) + conversation_address.apply { + text = conversation.title + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 1.2f) + } + + conversation_body_short.apply { + text = conversation.snippet + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize) + } + + conversation_date.apply { + text = conversation.date.formatDateOrTime(context, true) + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.8f) + } if (conversation.read) { conversation_address.setTypeface(null, Typeface.NORMAL) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt index 337452f9..a01ac1c3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.graphics.drawable.Drawable import android.net.Uri import android.telephony.SubscriptionManager +import android.util.TypedValue import android.view.Menu import android.view.View import android.view.ViewGroup @@ -42,8 +43,8 @@ import kotlinx.android.synthetic.main.item_thread_date_time.view.* class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList, recyclerView: MyRecyclerView, fastScroller: FastScroller, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) { - private val roundedCornersRadius = resources.getDimension(R.dimen.normal_margin).toInt() + private var fontSize = activity.getTextSize() @SuppressLint("MissingPermission") private val hasMultipleSIMCards = SubscriptionManager.from(activity).activeSubscriptionInfoList?.size ?: 0 > 1 @@ -181,7 +182,10 @@ class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList + + + + + + + + From 6efc41f9bbf922019b99d9cd2282d9a32c13923f Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Jun 2020 22:32:17 +0200 Subject: [PATCH 07/19] use a bit smaller text at the main screens message preview --- .../smsmessenger/adapters/ConversationsAdapter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt index 442aabba..5857cb53 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt @@ -196,7 +196,7 @@ class ConversationsAdapter(activity: SimpleActivity, var conversations: ArrayLis conversation_body_short.apply { text = conversation.snippet - setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize) + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.9f) } conversation_date.apply { From 21891ff6778e6f2f15c38958a1b853cda8efdc56 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Jun 2020 22:37:54 +0200 Subject: [PATCH 08/19] fix #12, make urls and emails clickable at messages --- app/src/main/res/layout/item_received_message.xml | 1 + app/src/main/res/layout/item_sent_message.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/app/src/main/res/layout/item_received_message.xml b/app/src/main/res/layout/item_received_message.xml index 7ea3c0ed..7d476239 100644 --- a/app/src/main/res/layout/item_received_message.xml +++ b/app/src/main/res/layout/item_received_message.xml @@ -53,6 +53,7 @@ android:layout_height="wrap_content" android:layout_below="@+id/thread_mesage_attachments_holder" android:layout_toEndOf="@+id/thread_message_sender_photo" + android:autoLink="email|web" android:background="@drawable/item_received_background" android:padding="@dimen/normal_margin" android:textSize="@dimen/normal_text_size" diff --git a/app/src/main/res/layout/item_sent_message.xml b/app/src/main/res/layout/item_sent_message.xml index 24e8af73..0a420c0c 100644 --- a/app/src/main/res/layout/item_sent_message.xml +++ b/app/src/main/res/layout/item_sent_message.xml @@ -43,6 +43,7 @@ android:layout_height="wrap_content" android:layout_below="@+id/thread_mesage_attachments_holder" android:layout_alignParentEnd="true" + android:autoLink="email|web" android:background="@drawable/item_sent_background" android:padding="@dimen/normal_margin" android:textSize="@dimen/normal_text_size" From 22b6040a86cf9f3450437689cf022acaafd1e171 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 18 Jun 2020 11:14:51 +0200 Subject: [PATCH 09/19] add a Mark as Unread menu item at the thread screen --- .../smsmessenger/activities/ThreadActivity.kt | 11 +++++++++++ .../smsmessenger/extensions/Context.kt | 12 ++++++++++++ .../smsmessenger/interfaces/ConversationsDao.kt | 3 +++ app/src/main/res/menu/menu_thread.xml | 4 ++++ 4 files changed, 30 insertions(+) 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 eb13d1d8..5199c936 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -199,6 +199,7 @@ class ThreadActivity : SimpleActivity() { R.id.block_number -> blockNumber() R.id.delete -> askConfirmDelete() R.id.manage_people -> managePeople() + R.id.mark_as_unread -> markAsUnread() else -> return super.onOptionsItemSelected(item) } return true @@ -392,6 +393,16 @@ class ThreadActivity : SimpleActivity() { showSelectedContacts() } + private fun markAsUnread() { + ensureBackgroundThread { + conversationsDB.markUnread(threadId.toLong()) + markThreadMessagesUnread(threadId) + runOnUiThread { + finish() + } + } + } + @SuppressLint("MissingPermission") private fun getThreadItems(): ArrayList { messages.sortBy { it.date } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index d534d4c4..6631484e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -511,6 +511,18 @@ fun Context.markThreadMessagesRead(threadId: Int) { } } +fun Context.markThreadMessagesUnread(threadId: Int) { + arrayOf(Mms.CONTENT_URI, Sms.CONTENT_URI).forEach { uri -> + val contentValues = ContentValues().apply { + put(Sms.READ, 0) + put(Sms.SEEN, 0) + } + val selection = "${Sms.THREAD_ID} = ?" + val selectionArgs = arrayOf(threadId.toString()) + contentResolver.update(uri, contentValues, selection, selectionArgs) + } +} + @SuppressLint("NewApi") fun Context.getThreadId(address: String): Long { return if (isMarshmallowPlus()) { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt index 422245ce..72d69763 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt @@ -17,6 +17,9 @@ interface ConversationsDao { @Query("UPDATE conversations SET read = 1 WHERE thread_id = :threadId") fun markRead(threadId: Long) + @Query("UPDATE conversations SET read = 0 WHERE thread_id = :threadId") + fun markUnread(threadId: Long) + @Query("DELETE FROM conversations WHERE id = :id") fun delete(id: Long) diff --git a/app/src/main/res/menu/menu_thread.xml b/app/src/main/res/menu/menu_thread.xml index 4787cb75..2a1ecf93 100644 --- a/app/src/main/res/menu/menu_thread.xml +++ b/app/src/main/res/menu/menu_thread.xml @@ -16,4 +16,8 @@ android:icon="@drawable/ic_block_vector" android:title="@string/block_number" app:showAsAction="never" /> + From 838db92fee29356a374efa9d36f88ea0ac54ccb0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 18 Jun 2020 11:27:46 +0200 Subject: [PATCH 10/19] refresh SMS read status first, then MMS --- .../com/simplemobiletools/smsmessenger/extensions/Context.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index 6631484e..d74a661c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -500,7 +500,7 @@ fun Context.markMessageRead(id: Int, isMMS: Boolean) { } fun Context.markThreadMessagesRead(threadId: Int) { - arrayOf(Mms.CONTENT_URI, Sms.CONTENT_URI).forEach { uri -> + arrayOf(Sms.CONTENT_URI, Mms.CONTENT_URI).forEach { uri -> val contentValues = ContentValues().apply { put(Sms.READ, 1) put(Sms.SEEN, 1) @@ -512,7 +512,7 @@ fun Context.markThreadMessagesRead(threadId: Int) { } fun Context.markThreadMessagesUnread(threadId: Int) { - arrayOf(Mms.CONTENT_URI, Sms.CONTENT_URI).forEach { uri -> + arrayOf(Sms.CONTENT_URI, Mms.CONTENT_URI).forEach { uri -> val contentValues = ContentValues().apply { put(Sms.READ, 0) put(Sms.SEEN, 0) From 3c1458b9041112ae7aff234e510e0f56d65590cf Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 18 Jun 2020 11:38:27 +0200 Subject: [PATCH 11/19] fix a glitch at marking a conversation unread --- .../smsmessenger/activities/ThreadActivity.kt | 7 ++++++- .../simplemobiletools/smsmessenger/extensions/Context.kt | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) 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 5199c936..01179818 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -399,12 +399,18 @@ class ThreadActivity : SimpleActivity() { markThreadMessagesUnread(threadId) runOnUiThread { finish() + bus?.post(Events.RefreshMessages()) } } } @SuppressLint("MissingPermission") private fun getThreadItems(): ArrayList { + val items = ArrayList() + if (isFinishing) { + return items + } + messages.sortBy { it.date } val subscriptionIdToSimId = HashMap() @@ -413,7 +419,6 @@ class ThreadActivity : SimpleActivity() { subscriptionIdToSimId[subscriptionInfo.subscriptionId] = "${index + 1}" } - val items = ArrayList() var prevDateTime = 0 var hadUnreadItems = false messages.forEach { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index d74a661c..a133177e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -229,7 +229,6 @@ fun Context.getConversations(threadId: Long? = null): ArrayList { val isGroupConversation = phoneNumbers.size > 1 val read = cursor.getIntValue(Threads.READ) == 1 val conversation = Conversation(null, id, snippet, date.toInt(), read, title, photoUri, isGroupConversation, phoneNumbers.first()) - conversations.add(conversation) } From 33f7bafbcad17c1ded7a3dcf2892fa97e93225b1 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 18 Jun 2020 13:56:12 +0200 Subject: [PATCH 12/19] adding a new string for Reply --- app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-el/strings.xml | 143 +++++++++++++------------ app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-lt/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-pt/strings.xml | 3 +- app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-sk/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 9 files changed, 81 insertions(+), 72 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ccd4a4c8..02e10fe5 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -7,6 +7,7 @@ Anhang keine gespeicherten Chats gefunden einen neuen Chat beginnen + Reply neuer Chat diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index a10ddb94..b3c2dff0 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -1,72 +1,73 @@ - - Απλός SMS Messenger - SMS Messenger - Πληκτρολογήστε ένα μήνυμα… - Το μήνυμα δεν έχει σταλεί. - Προσθήκη ατόμου - Συνημμένο - Δεν βρέθηκαν αποθηκευμένες συνομιλίες - Έναρξη συνομιλίας - - - Νέα συνομιλία - Προσθήκη επαφής ή αριθμού… - Προτάσεις - - - Ελήφθη SMS - Νέο μήνυμα - Σήμανση ως αναγνωσμένου + + Απλός SMS Messenger + SMS Messenger + Πληκτρολογήστε ένα μήνυμα… + Το μήνυμα δεν έχει σταλεί. + Προσθήκη ατόμου + Συνημμένο + Δεν βρέθηκαν αποθηκευμένες συνομιλίες + Έναρξη συνομιλίας + Reply + + + Νέα συνομιλία + Προσθήκη επαφής ή αριθμού… + Προτάσεις + + + Ελήφθη SMS + Νέο μήνυμα + Σήμανση ως αναγνωσμένου Mark as Unread - - - Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα μηνύματα αυτής της συνομιλίας; - - - - %d συνομιλία - %d συνομιλίες - - - - - %d μήνυμα - %d μηνύματα - - - - Γιατί η εφαρμογή απαιτεί πρόσβαση στο Internet; - Δυστυχώς, απαιτείται για την αποστολή συνημμένων MMS. Το να μην είμαστε σε θέση να στείλουμε MMS θα αποτελούσε πραγματικά τεράστιο μειονέκτημα σε σύγκριση με άλλες εφαρμογές, επομένως αποφασίσαμε να ακολουθήσουμε αυτόν τον δρόμο. - Ωστόσο, όπως συνήθως, δεν υπάρχουν καθόλου διαφημίσεις, παρακολούθηση ή αναλύσεις, το διαδίκτυο χρησιμοποιείται μόνο για την αποστολή MMS. - - - - Απλός SMS Messenger - Εύκολη διαχείριση μηνυμάτων - - Ένας εύκολος και γρήγορος τρόπος διαχείρισης SMS και MMS χωρίς διαφημίσεις. - - Ένας εξαιρετικός τρόπος για να μείνετε σε επαφή με τους συγγενείς σας, στέλνοντας μηνύματα SMS και MMS. Η εφαρμογή χειρίζεται σωστά και την ομαδική ανταλλαγή μηνυμάτων, όπως και τον αποκλεισμό αριθμών από Android 7+. - - Προσφέρει πολλές μορφές ημερομηνίας για να διαλέξετε, ώστε να αισθάνεστε άνετα να τις χρησιμοποιήσετε. Μπορείτε επίσης να κάνετε εναλλαγή μεταξύ 12 και 24 ωρών. - - Έχει πραγματικά πολύ μικρό μέγεθος εφαρμογής σε σύγκριση με τον ανταγωνισμό, καθιστώντας την πραγματικά γρήγορη στη λήψη της. - - Διατίθεται με σχεδίαση υλικού και σκούρο θέμα από προεπιλογή, παρέχει εξαιρετική εμπειρία χρήστη για εύκολη χρήση. Η έλλειψη πρόσβασης στο διαδίκτυο σάς παρέχει περισσότερο απόρρητο, ασφάλεια και σταθερότητα από ό,τι άλλες εφαρμογές. - - Δεν περιέχει διαφημίσεις ή περιττά δικαιώματα. Είναι πλήρως ανοιχτού κώδικα, παρέχει προσαρμόσιμα χρώματα. - - Δείτε την πλήρη σειρά Simple Tools here: - https://www.simplemobiletools.com - - Facebook: - https://www.facebook.com/simplemobiletools - - Reddit: - https://www.reddit.com/r/SimpleMobileTools - - - - \ No newline at end of file + + + Είστε βέβαιοι ότι θέλετε να διαγράψετε όλα τα μηνύματα αυτής της συνομιλίας; + + + + %d συνομιλία + %d συνομιλίες + + + + + %d μήνυμα + %d μηνύματα + + + + Γιατί η εφαρμογή απαιτεί πρόσβαση στο Internet; + Δυστυχώς, απαιτείται για την αποστολή συνημμένων MMS. Το να μην είμαστε σε θέση να στείλουμε MMS θα αποτελούσε πραγματικά τεράστιο μειονέκτημα σε σύγκριση με άλλες εφαρμογές, επομένως αποφασίσαμε να ακολουθήσουμε αυτόν τον δρόμο. + Ωστόσο, όπως συνήθως, δεν υπάρχουν καθόλου διαφημίσεις, παρακολούθηση ή αναλύσεις, το διαδίκτυο χρησιμοποιείται μόνο για την αποστολή MMS. + + + + Απλός SMS Messenger - Εύκολη διαχείριση μηνυμάτων + + Ένας εύκολος και γρήγορος τρόπος διαχείρισης SMS και MMS χωρίς διαφημίσεις. + + Ένας εξαιρετικός τρόπος για να μείνετε σε επαφή με τους συγγενείς σας, στέλνοντας μηνύματα SMS και MMS. Η εφαρμογή χειρίζεται σωστά και την ομαδική ανταλλαγή μηνυμάτων, όπως και τον αποκλεισμό αριθμών από Android 7+. + + Προσφέρει πολλές μορφές ημερομηνίας για να διαλέξετε, ώστε να αισθάνεστε άνετα να τις χρησιμοποιήσετε. Μπορείτε επίσης να κάνετε εναλλαγή μεταξύ 12 και 24 ωρών. + + Έχει πραγματικά πολύ μικρό μέγεθος εφαρμογής σε σύγκριση με τον ανταγωνισμό, καθιστώντας την πραγματικά γρήγορη στη λήψη της. + + Διατίθεται με σχεδίαση υλικού και σκούρο θέμα από προεπιλογή, παρέχει εξαιρετική εμπειρία χρήστη για εύκολη χρήση. Η έλλειψη πρόσβασης στο διαδίκτυο σάς παρέχει περισσότερο απόρρητο, ασφάλεια και σταθερότητα από ό,τι άλλες εφαρμογές. + + Δεν περιέχει διαφημίσεις ή περιττά δικαιώματα. Είναι πλήρως ανοιχτού κώδικα, παρέχει προσαρμόσιμα χρώματα. + + Δείτε την πλήρη σειρά Simple Tools here: + https://www.simplemobiletools.com + + Facebook: + https://www.facebook.com/simplemobiletools + + Reddit: + https://www.reddit.com/r/SimpleMobileTools + + + + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ea852951..627cd749 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -7,6 +7,7 @@ Archivo adjunto No se han encontrado conversaciones Inicia una conversación + Reply Nueva conversación diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 492e988f..d56da48b 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -7,6 +7,7 @@ Priedas Nebuvo rasta išsaugotų pokalbių Pradėtipokalbį + Reply Naujas pokalbis diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index ef0e03e4..76af0feb 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -7,6 +7,7 @@ Bijlage Geen opgeslagen berichten gevonden Een gesprek starten + Reply Nieuw gesprek diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index c1f5c471..1e8cd40f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -7,8 +7,9 @@ Anexo Não foram encontradas conversas Iniciar uma conversa + Reply - + Nova conversa Adicionar contacto ou número… Sugestões diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 17f57e40..11e1729b 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -7,6 +7,7 @@ Вложение Нет сохранённых переписок Начать переписку + Reply Новая переписка diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index cdbef4e7..5964e8b0 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -7,6 +7,7 @@ Príloha Nenašli sa žiadne uložené konverzácie Začať konverzáciu + Odpovedať Nová konverzácia diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 35038243..81ac90b0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,6 +7,7 @@ Attachment No stored conversations have been found Start a conversation + Reply New conversation From b6b06b90ec8fdbf1792d3be328049ccc4ecbd603 Mon Sep 17 00:00:00 2001 From: Guillaume Date: Thu, 18 Jun 2020 14:31:44 +0200 Subject: [PATCH 13/19] Dutch --- app/src/main/res/values-nl/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 76af0feb..34d570c0 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -7,7 +7,7 @@ Bijlage Geen opgeslagen berichten gevonden Een gesprek starten - Reply + Beantwoorden Nieuw gesprek From f4da76a0104fb4b1f46173d9f06aff68f9bebab9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 18 Jun 2020 18:12:45 +0200 Subject: [PATCH 14/19] fix #21, allow replying directly from the top notification --- app/src/main/AndroidManifest.xml | 9 ++++ .../smsmessenger/extensions/Context.kt | 37 +++++++++++--- .../smsmessenger/helpers/Constants.kt | 2 + .../receivers/DirectReplyReceiver.kt | 51 +++++++++++++++++++ 4 files changed, 92 insertions(+), 7 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/DirectReplyReceiver.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4c0108ca..814fde4a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -163,6 +163,15 @@ + + + + + + ): Long { fun Context.showReceivedMessageNotification(address: String, body: String, threadID: Int, bitmap: Bitmap?) { val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) - val channelId = "simple_sms_messenger" if (isOreoPlus()) { val audioAttributes = AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_NOTIFICATION) @@ -562,7 +561,7 @@ fun Context.showReceivedMessageNotification(address: String, body: String, threa val name = getString(R.string.channel_received_sms) val importance = NotificationManager.IMPORTANCE_HIGH - NotificationChannel(channelId, name, importance).apply { + NotificationChannel(NOTIFICATION_CHANNEL, name, importance).apply { setBypassDnd(false) enableLights(true) setSound(soundUri, audioAttributes) @@ -583,12 +582,32 @@ fun Context.showReceivedMessageNotification(address: String, body: String, threa action = MARK_AS_READ putExtra(THREAD_ID, threadID) } + val markAsReadPendingIntent = PendingIntent.getBroadcast(this, 0, markAsReadIntent, PendingIntent.FLAG_CANCEL_CURRENT) + var replyAction: NotificationCompat.Action? = null + + if (isNougatPlus()) { + val replyLabel = getString(R.string.reply) + val remoteInput = RemoteInput.Builder(REPLY) + .setLabel(replyLabel) + .build() + + val replyIntent = Intent(this, DirectReplyReceiver::class.java).apply { + putExtra(THREAD_ID, threadID) + putExtra(THREAD_NUMBER, address) + } + + val replyPendingIntent = PendingIntent.getBroadcast(applicationContext, threadID, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT) + replyAction = NotificationCompat.Action.Builder(R.drawable.ic_send_vector, replyLabel, replyPendingIntent) + .addRemoteInput(remoteInput) + .build() + } val largeIcon = bitmap ?: SimpleContactsHelper(this).getContactLetterIcon(sender) - val builder = NotificationCompat.Builder(this, channelId) + val builder = NotificationCompat.Builder(this, NOTIFICATION_CHANNEL) .setContentTitle(sender) .setContentText(body) + .setColor(config.primaryColor) .setSmallIcon(R.drawable.ic_messenger) .setLargeIcon(largeIcon) .setStyle(NotificationCompat.BigTextStyle().setSummaryText(summaryText).bigText(body)) @@ -599,7 +618,11 @@ fun Context.showReceivedMessageNotification(address: String, body: String, threa .setAutoCancel(true) .setSound(soundUri, AudioManager.STREAM_NOTIFICATION) .addAction(R.drawable.ic_check_vector, getString(R.string.mark_as_read), markAsReadPendingIntent) - .setChannelId(channelId) + .setChannelId(NOTIFICATION_CHANNEL) + + if (replyAction != null) { + builder.addAction(replyAction) + } notificationManager.notify(threadID, builder.build()) } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt index d3cf7cd1..e6b48d46 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt @@ -10,9 +10,11 @@ const val THREAD_NUMBER = "thread_number" const val THREAD_ATTACHMENT_URI = "thread_attachment_uri" const val THREAD_ATTACHMENT_URIS = "thread_attachment_uris" const val USE_SIM_ID_PREFIX = "use_sim_id_" +const val NOTIFICATION_CHANNEL = "simple_sms_messenger" private const val PATH = "com.simplemobiletools.smsmessenger.action." const val MARK_AS_READ = PATH + "mark_as_read" +const val REPLY = PATH + "reply" // view types for the thread list view const val THREAD_DATE_TIME = 1 diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/DirectReplyReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/DirectReplyReceiver.kt new file mode 100644 index 00000000..be837509 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/DirectReplyReceiver.kt @@ -0,0 +1,51 @@ +package com.simplemobiletools.smsmessenger.receivers + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import androidx.core.app.NotificationCompat +import androidx.core.app.RemoteInput +import com.klinker.android.send_message.Settings +import com.klinker.android.send_message.Transaction +import com.simplemobiletools.commons.extensions.notificationManager +import com.simplemobiletools.commons.extensions.showErrorToast +import com.simplemobiletools.commons.helpers.ensureBackgroundThread +import com.simplemobiletools.smsmessenger.R +import com.simplemobiletools.smsmessenger.extensions.conversationsDB +import com.simplemobiletools.smsmessenger.extensions.markThreadMessagesRead +import com.simplemobiletools.smsmessenger.helpers.NOTIFICATION_CHANNEL +import com.simplemobiletools.smsmessenger.helpers.REPLY +import com.simplemobiletools.smsmessenger.helpers.THREAD_ID +import com.simplemobiletools.smsmessenger.helpers.THREAD_NUMBER + +class DirectReplyReceiver : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + val address = intent.getStringExtra(THREAD_NUMBER) + val threadId = intent.getIntExtra(THREAD_ID, 0) + val msg = RemoteInput.getResultsFromIntent(intent).getCharSequence(REPLY).toString() + + val settings = Settings() + settings.useSystemSending = true + + val transaction = Transaction(context, settings) + val message = com.klinker.android.send_message.Message(msg, address) + + try { + transaction.sendNewMessage(message, threadId.toLong()) + } catch (e: Exception) { + context.showErrorToast(e) + } + + val repliedNotification = NotificationCompat.Builder(context, NOTIFICATION_CHANNEL) + .setSmallIcon(R.drawable.ic_messenger) + .setContentText(msg) + .build() + + context.notificationManager.notify(threadId, repliedNotification) + + ensureBackgroundThread { + context.markThreadMessagesRead(threadId) + context.conversationsDB.markRead(threadId.toLong()) + } + } +} From 6d0dd67af3836331bbfaf2ba5343c8c247f7e804 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 18 Jun 2020 18:45:38 +0200 Subject: [PATCH 15/19] fix #23, remove a messages notification if the thread is deleted --- .../smsmessenger/adapters/ConversationsAdapter.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt index 5857cb53..89039aaf 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt @@ -11,10 +11,7 @@ import android.widget.TextView import com.bumptech.glide.Glide import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.dialogs.ConfirmationDialog -import com.simplemobiletools.commons.extensions.addBlockedNumber -import com.simplemobiletools.commons.extensions.formatDateOrTime -import com.simplemobiletools.commons.extensions.getTextSize -import com.simplemobiletools.commons.extensions.toast +import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.KEY_PHONE import com.simplemobiletools.commons.helpers.SimpleContactsHelper import com.simplemobiletools.commons.helpers.ensureBackgroundThread @@ -136,6 +133,7 @@ class ConversationsAdapter(activity: SimpleActivity, var conversations: ArrayLis val positions = getSelectedItemPositions() conversationsToRemove.forEach { activity.deleteConversation(it.thread_id) + activity.notificationManager.cancel(it.thread_id) } conversations.removeAll(conversationsToRemove) From 880dd7bf2747cf16a242aa5d4b3fbf779acf0768 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 18 Jun 2020 19:23:43 +0200 Subject: [PATCH 16/19] properly update the font size without restarting the app --- .../smsmessenger/activities/MainActivity.kt | 6 ++++++ .../smsmessenger/adapters/ConversationsAdapter.kt | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt index 68842dfc..091eb54f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -35,6 +35,7 @@ class MainActivity : SimpleActivity() { private val MAKE_DEFAULT_APP_REQUEST = 1 private var storedTextColor = 0 + private var storedFontSize = 0 private var bus: EventBus? = null @SuppressLint("InlinedApi") @@ -77,6 +78,10 @@ class MainActivity : SimpleActivity() { (conversations_list.adapter as? ConversationsAdapter)?.updateTextColor(config.textColor) } + if (storedFontSize != config.fontSize) { + (conversations_list.adapter as? ConversationsAdapter)?.updateFontSize() + } + updateTextColors(main_coordinator) no_conversations_placeholder_2.setTextColor(getAdjustedPrimaryColor()) no_conversations_placeholder_2.underlineText() @@ -120,6 +125,7 @@ class MainActivity : SimpleActivity() { private fun storeStateVariables() { storedTextColor = config.textColor + storedFontSize = config.fontSize } // while SEND_SMS and READ_SMS permissions are mandatory, READ_CONTACTS is optional. If we don't have it, we just won't be able to show the contact name in some cases diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt index 89039aaf..a1d0a118 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt @@ -174,6 +174,11 @@ class ConversationsAdapter(activity: SimpleActivity, var conversations: ArrayLis } } + fun updateFontSize() { + fontSize = activity.getTextSize() + notifyDataSetChanged() + } + fun updateConversations(newConversations: ArrayList) { val oldHashCode = conversations.hashCode() val newHashCode = newConversations.hashCode() From 05c6dd7a05410f2e3dff0097a8c4d474935061b4 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 18 Jun 2020 21:58:28 +0200 Subject: [PATCH 17/19] use casual text color at sent message links --- .../smsmessenger/adapters/ThreadAdapter.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt index a01ac1c3..aa4cec77 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -191,12 +191,16 @@ class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList Date: Thu, 18 Jun 2020 22:06:41 +0200 Subject: [PATCH 18/19] update version to 5.3.0 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a89aea0c..5cbaaebf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ android { applicationId "com.simplemobiletools.smsmessenger" minSdkVersion 22 targetSdkVersion 29 - versionCode 9 - versionName "5.2.0" + versionCode 10 + versionName "5.3.0" setProperty("archivesBaseName", "sms-messenger") } From e0f7bfd7e86fa9e92a40702f2ea651d2cdffcfad Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 18 Jun 2020 22:06:48 +0200 Subject: [PATCH 19/19] updating changelog --- CHANGELOG.md | 9 +++++++++ fastlane/metadata/android/en-US/changelogs/10.txt | 5 +++++ 2 files changed, 14 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/10.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 3036521f..279108c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ Changelog ========== +Version 5.3.0 *(2020-06-18)* +---------------------------- + + * Allow changing the text size + * Allow replying to incoming messages directly from the notification on Android 7+ + * Make emails and urls clickable at messages + * Allow marking conversations as Unread + * Many other UX, stability and translation improvements + Version 5.2.0 *(2020-05-30)* ---------------------------- diff --git a/fastlane/metadata/android/en-US/changelogs/10.txt b/fastlane/metadata/android/en-US/changelogs/10.txt new file mode 100644 index 00000000..4ff699a4 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/10.txt @@ -0,0 +1,5 @@ + * Allow changing the text size + * Allow replying to incoming messages directly from the notification on Android 7+ + * Make emails and urls clickable at messages + * Allow marking conversations as Unread + * Many other UX, stability and translation improvements