From 7b84ec77fdcd3b286bfe707f19e35d4ccee24faf Mon Sep 17 00:00:00 2001
From: Agnieszka C <85929121+Aga-C@users.noreply.github.com>
Date: Fri, 3 Sep 2021 19:00:23 +0200
Subject: [PATCH 01/10] Added SMS drafts support (#83)
---
.../smsmessenger/activities/ThreadActivity.kt | 14 +++++
.../adapters/ConversationsAdapter.kt | 9 +++-
.../smsmessenger/extensions/Context.kt | 52 +++++++++++++++++++
app/src/main/res/layout/item_conversation.xml | 16 +++++-
4 files changed, 89 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 f235f327..5b7af23a 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt
@@ -108,11 +108,25 @@ class ThreadActivity : SimpleActivity() {
override fun onResume() {
super.onResume()
+
+ val smsDraft = getSmsDraft(threadId)
+ if (smsDraft != null) {
+ thread_type_message.setText(smsDraft)
+ }
isActivityVisible = true
}
override fun onPause() {
super.onPause()
+
+ if (thread_type_message.value != "" && attachmentUris.isEmpty()) {
+ saveSmsDraft(thread_type_message.value, threadId)
+ } else {
+ deleteSmsDraft(threadId)
+ }
+
+ bus?.post(Events.RefreshMessages())
+
isActivityVisible = false
}
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 c895ea85..40ad72d8 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
@@ -23,6 +23,7 @@ import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.smsmessenger.R
import com.simplemobiletools.smsmessenger.activities.SimpleActivity
import com.simplemobiletools.smsmessenger.extensions.deleteConversation
+import com.simplemobiletools.smsmessenger.extensions.getSmsDraft
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
import com.simplemobiletools.smsmessenger.models.Conversation
import kotlinx.android.synthetic.main.item_conversation.view.*
@@ -220,6 +221,8 @@ class ConversationsAdapter(
private fun setupView(view: View, conversation: Conversation) {
view.apply {
+ val smsDraft = context.getSmsDraft(conversation.threadId)
+
conversation_frame.isSelected = selectedKeys.contains(conversation.hashCode())
conversation_address.apply {
@@ -228,10 +231,14 @@ class ConversationsAdapter(
}
conversation_body_short.apply {
- text = conversation.snippet
+ text = smsDraft ?: conversation.snippet
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.9f)
}
+ draft_indicator.apply {
+ visibility = if (smsDraft != null) View.VISIBLE else View.GONE
+ }
+
conversation_date.apply {
text = conversation.date.formatDateOrTime(context, true, false)
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.8f)
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 cb55e7c8..9d00d0cd 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt
@@ -764,3 +764,55 @@ fun Context.getLockScreenVisibilityText(type: Int) = getString(
else -> R.string.nothing
}
)
+
+fun Context.getSmsDraft(threadId: Long): String? {
+ val uri = Sms.Draft.CONTENT_URI
+ val projection = arrayOf(Sms.BODY)
+ val selection = "${Sms.THREAD_ID} = ?"
+ val selectionArgs = arrayOf(threadId.toString())
+
+ try {
+ val cursor = contentResolver.query(uri, projection, selection, selectionArgs, null)
+ cursor.use {
+ if (cursor?.moveToFirst() == true) {
+ return cursor.getString(0)
+ }
+ }
+ } catch (e: Exception) {
+ }
+
+ return null
+}
+
+fun Context.saveSmsDraft(body: String, threadId: Long) {
+ val uri = Sms.Draft.CONTENT_URI
+ val contentValues = ContentValues().apply {
+ put(Sms.BODY, body)
+ put(Sms.DATE, System.currentTimeMillis().toString())
+ put(Sms.TYPE, Sms.MESSAGE_TYPE_DRAFT)
+ put(Sms.THREAD_ID, threadId)
+ }
+
+ try {
+ contentResolver.insert(uri, contentValues)
+ } catch (e: Exception) {
+ }
+}
+
+fun Context.deleteSmsDraft(threadId: Long) {
+ val lookupUri = Sms.Draft.CONTENT_URI
+ val lookupProjection = arrayOf(Sms._ID)
+ val lookupSelection = "${Sms.THREAD_ID} = ?"
+ val lookupSelectionArgs = arrayOf(threadId.toString())
+ try {
+ val cursor = contentResolver.query(lookupUri, lookupProjection, lookupSelection, lookupSelectionArgs, null)
+ cursor.use {
+ if (cursor?.moveToFirst() == true) {
+ val draftId = cursor.getLong(0)
+ val uri = Uri.withAppendedPath(Sms.CONTENT_URI, "/${draftId}")
+ contentResolver.delete(uri, null, null)
+ }
+ }
+ } catch (e: Exception) {
+ }
+}
diff --git a/app/src/main/res/layout/item_conversation.xml b/app/src/main/res/layout/item_conversation.xml
index 5fce6297..6cde1caa 100644
--- a/app/src/main/res/layout/item_conversation.xml
+++ b/app/src/main/res/layout/item_conversation.xml
@@ -37,12 +37,26 @@
android:textSize="@dimen/big_text_size"
tools:text="John" />
+
+
Date: Sun, 5 Sep 2021 18:15:37 +0200
Subject: [PATCH 02/10] Now the conversation can be marked as read from the
main message cab
---
.../adapters/ConversationsAdapter.kt | 20 +++++++++++++++++++
app/src/main/res/menu/cab_conversations.xml | 4 ++++
2 files changed, 24 insertions(+)
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 c895ea85..475d4ee0 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
@@ -23,6 +23,7 @@ import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.smsmessenger.R
import com.simplemobiletools.smsmessenger.activities.SimpleActivity
import com.simplemobiletools.smsmessenger.extensions.deleteConversation
+import com.simplemobiletools.smsmessenger.extensions.markThreadMessagesRead
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
import com.simplemobiletools.smsmessenger.models.Conversation
import kotlinx.android.synthetic.main.item_conversation.view.*
@@ -60,6 +61,7 @@ class ConversationsAdapter(
R.id.cab_copy_number -> copyNumberToClipboard()
R.id.cab_delete -> askConfirmDelete()
R.id.cab_select_all -> selectAll()
+ R.id.cab_mark_as_read -> markAsRead()
}
}
@@ -184,6 +186,24 @@ class ConversationsAdapter(
}
}
+ private fun markAsRead(){
+ if (selectedKeys.isEmpty()) {
+ return
+ }
+ val conversationsMarkedAsRead = conversations.filter { selectedKeys.contains(it.hashCode()) } as ArrayList
+
+ ensureBackgroundThread {
+ conversationsMarkedAsRead.forEach {
+ activity.markThreadMessagesRead(it.threadId)
+ }
+ activity.runOnUiThread {
+ refreshMessages()
+ finishActMode()
+ }
+ }
+
+ }
+
private fun addNumberToContact() {
val conversation = getSelectedItems().firstOrNull() ?: return
Intent().apply {
diff --git a/app/src/main/res/menu/cab_conversations.xml b/app/src/main/res/menu/cab_conversations.xml
index 2be314f3..0f3acb38 100644
--- a/app/src/main/res/menu/cab_conversations.xml
+++ b/app/src/main/res/menu/cab_conversations.xml
@@ -29,4 +29,8 @@
android:id="@+id/cab_select_all"
android:title="@string/select_all"
app:showAsAction="never" />
+
From 1a5f055cd9edf6bc6bac0c3ec5646860e0f4fb31 Mon Sep 17 00:00:00 2001
From: AlbertoPellitteri
Date: Sun, 5 Sep 2021 18:38:35 +0200
Subject: [PATCH 03/10] small performance improvement
---
.../smsmessenger/adapters/ConversationsAdapter.kt | 4 ++--
1 file changed, 2 insertions(+), 2 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 475d4ee0..252f61da 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
@@ -5,6 +5,7 @@ import android.content.Intent
import android.graphics.Typeface
import android.net.Uri
import android.text.TextUtils
+import android.util.Log
import android.util.TypedValue
import android.view.Menu
import android.view.View
@@ -191,9 +192,8 @@ class ConversationsAdapter(
return
}
val conversationsMarkedAsRead = conversations.filter { selectedKeys.contains(it.hashCode()) } as ArrayList
-
ensureBackgroundThread {
- conversationsMarkedAsRead.forEach {
+ conversationsMarkedAsRead.filter{el -> !el.read}.forEach {
activity.markThreadMessagesRead(it.threadId)
}
activity.runOnUiThread {
From 8ce253b95703dea8652cfe9aca18663ab149b27c Mon Sep 17 00:00:00 2001
From: AlbertoPellitteri
Date: Mon, 6 Sep 2021 22:51:37 +0200
Subject: [PATCH 04/10] Remove unused import
---
.../smsmessenger/adapters/ConversationsAdapter.kt | 1 -
1 file changed, 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 252f61da..600b6a7a 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
@@ -5,7 +5,6 @@ import android.content.Intent
import android.graphics.Typeface
import android.net.Uri
import android.text.TextUtils
-import android.util.Log
import android.util.TypedValue
import android.view.Menu
import android.view.View
From f9a71c0e0b03b48bffe4cb6e0aab2d02bef51513 Mon Sep 17 00:00:00 2001
From: Tibor Kaputa
Date: Wed, 8 Sep 2021 15:18:03 +0200
Subject: [PATCH 05/10] keep Select All as the last cab item
---
app/src/main/res/menu/cab_conversations.xml | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/app/src/main/res/menu/cab_conversations.xml b/app/src/main/res/menu/cab_conversations.xml
index 0f3acb38..b1afe973 100644
--- a/app/src/main/res/menu/cab_conversations.xml
+++ b/app/src/main/res/menu/cab_conversations.xml
@@ -25,12 +25,16 @@
android:id="@+id/cab_copy_number"
android:title="@string/copy_number_to_clipboard"
app:showAsAction="never" />
-
+
+
From e28b8ddae0dae9ba0b217ab4a1db971c5f6c61f5 Mon Sep 17 00:00:00 2001
From: Tibor Kaputa
Date: Wed, 8 Sep 2021 15:18:24 +0200
Subject: [PATCH 06/10] Update ConversationsAdapter.kt
---
.../adapters/ConversationsAdapter.kt | 21 ++++++++++++++++---
1 file changed, 18 insertions(+), 3 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 600b6a7a..c13136fe 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
@@ -24,6 +24,7 @@ import com.simplemobiletools.smsmessenger.R
import com.simplemobiletools.smsmessenger.activities.SimpleActivity
import com.simplemobiletools.smsmessenger.extensions.deleteConversation
import com.simplemobiletools.smsmessenger.extensions.markThreadMessagesRead
+import com.simplemobiletools.smsmessenger.extensions.markThreadMessagesUnread
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
import com.simplemobiletools.smsmessenger.models.Conversation
import kotlinx.android.synthetic.main.item_conversation.view.*
@@ -61,6 +62,7 @@ class ConversationsAdapter(
R.id.cab_copy_number -> copyNumberToClipboard()
R.id.cab_delete -> askConfirmDelete()
R.id.cab_select_all -> selectAll()
+ R.id.cab_mark_as_unread -> markAsUnread()
R.id.cab_mark_as_read -> markAsRead()
}
}
@@ -186,21 +188,34 @@ class ConversationsAdapter(
}
}
- private fun markAsRead(){
+ private fun markAsRead() {
if (selectedKeys.isEmpty()) {
return
}
- val conversationsMarkedAsRead = conversations.filter { selectedKeys.contains(it.hashCode()) } as ArrayList
+
+ val conversationsMarkedAsRead = conversations.filter { selectedKeys.contains(it.hashCode()) } as ArrayList
ensureBackgroundThread {
- conversationsMarkedAsRead.filter{el -> !el.read}.forEach {
+ conversationsMarkedAsRead.filter { conversation -> !conversation.read }.forEach {
activity.markThreadMessagesRead(it.threadId)
}
+
activity.runOnUiThread {
refreshMessages()
finishActMode()
}
}
+ }
+ private fun markAsUnread() {
+ if (selectedKeys.isEmpty()) {
+ return
+ }
+ val conversationsMarkedAsUnread = conversations.filter { selectedKeys.contains(it.hashCode()) } as ArrayList
+ ensureBackgroundThread {
+ conversationsMarkedAsUnread.filter { conversation -> conversation.read }.forEach {
+ activity.markThreadMessagesUnread(it.threadId)
+ }
+ }
}
private fun addNumberToContact() {
From 8ffc176d316d0f56e75bf4c9896ca221ecd17ba1 Mon Sep 17 00:00:00 2001
From: Tibor Kaputa
Date: Wed, 8 Sep 2021 15:18:57 +0200
Subject: [PATCH 07/10] Update ConversationsAdapter.kt
---
.../smsmessenger/adapters/ConversationsAdapter.kt | 1 +
1 file changed, 1 insertion(+)
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 c13136fe..7914adb3 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
@@ -210,6 +210,7 @@ class ConversationsAdapter(
if (selectedKeys.isEmpty()) {
return
}
+
val conversationsMarkedAsUnread = conversations.filter { selectedKeys.contains(it.hashCode()) } as ArrayList
ensureBackgroundThread {
conversationsMarkedAsUnread.filter { conversation -> conversation.read }.forEach {
From 14ea068f73d33c93814ab671c9d7234d822c6b4c Mon Sep 17 00:00:00 2001
From: Tibor Kaputa
Date: Wed, 8 Sep 2021 15:20:31 +0200
Subject: [PATCH 08/10] Update ConversationsAdapter.kt
---
.../smsmessenger/adapters/ConversationsAdapter.kt | 4 ++--
1 file changed, 2 insertions(+), 2 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 7914adb3..09e75004 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
@@ -61,9 +61,9 @@ class ConversationsAdapter(
R.id.cab_dial_number -> dialNumber()
R.id.cab_copy_number -> copyNumberToClipboard()
R.id.cab_delete -> askConfirmDelete()
- R.id.cab_select_all -> selectAll()
- R.id.cab_mark_as_unread -> markAsUnread()
R.id.cab_mark_as_read -> markAsRead()
+ R.id.cab_mark_as_unread -> markAsUnread()
+ R.id.cab_select_all -> selectAll()
}
}
From 327b7f673ac1d4d9ad20e30fdfb78e2088e6e049 Mon Sep 17 00:00:00 2001
From: Tibor Kaputa
Date: Wed, 8 Sep 2021 20:00:28 +0200
Subject: [PATCH 09/10] fixing a compile error + some renaming
---
.../smsmessenger/extensions/Context.kt | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 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 6415e79d..fbe15066 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt
@@ -35,9 +35,9 @@ import com.simplemobiletools.smsmessenger.interfaces.MessagesDao
import com.simplemobiletools.smsmessenger.models.*
import com.simplemobiletools.smsmessenger.receivers.DirectReplyReceiver
import com.simplemobiletools.smsmessenger.receivers.MarkAsReadReceiver
+import me.leolin.shortcutbadger.ShortcutBadger
import java.util.*
import kotlin.collections.ArrayList
-import me.leolin.shortcutbadger.ShortcutBadger
val Context.config: Config get() = Config.newInstance(applicationContext)
@@ -800,19 +800,20 @@ fun Context.saveSmsDraft(body: String, threadId: Long) {
}
fun Context.deleteSmsDraft(threadId: Long) {
- val lookupUri = Sms.Draft.CONTENT_URI
- val lookupProjection = arrayOf(Sms._ID)
- val lookupSelection = "${Sms.THREAD_ID} = ?"
- val lookupSelectionArgs = arrayOf(threadId.toString())
+ val uri = Sms.Draft.CONTENT_URI
+ val projection = arrayOf(Sms._ID)
+ val selection = "${Sms.THREAD_ID} = ?"
+ val selectionArgs = arrayOf(threadId.toString())
try {
- val cursor = contentResolver.query(lookupUri, lookupProjection, lookupSelection, lookupSelectionArgs, null)
+ val cursor = contentResolver.query(uri, projection, selection, selectionArgs, null)
cursor.use {
if (cursor?.moveToFirst() == true) {
val draftId = cursor.getLong(0)
- val uri = Uri.withAppendedPath(Sms.CONTENT_URI, "/${draftId}")
- contentResolver.delete(uri, null, null)
+ val draftUri = Uri.withAppendedPath(Sms.CONTENT_URI, "/${draftId}")
+ contentResolver.delete(draftUri, null, null)
}
}
+ } catch (e: Exception) {
}
}
From aa71a39f1bf928eb002e890a8e45d8f6eee33bec Mon Sep 17 00:00:00 2001
From: Tibor Kaputa
Date: Wed, 8 Sep 2021 20:03:35 +0200
Subject: [PATCH 10/10] minor code cleanup + color customization fix
---
.../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 13994142..2990622a 100644
--- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt
@@ -257,6 +257,8 @@ class ConversationsAdapter(
private fun setupView(view: View, conversation: Conversation) {
view.apply {
val smsDraft = context.getSmsDraft(conversation.threadId)
+ draft_indicator.beVisibleIf(smsDraft != null)
+ draft_indicator.setTextColor(adjustedPrimaryColor)
conversation_frame.isSelected = selectedKeys.contains(conversation.hashCode())
@@ -270,10 +272,6 @@ class ConversationsAdapter(
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.9f)
}
- draft_indicator.apply {
- visibility = if (smsDraft != null) View.VISIBLE else View.GONE
- }
-
conversation_date.apply {
text = conversation.date.formatDateOrTime(context, true, false)
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.8f)