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 09e75004..2990622a 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.extensions.markThreadMessagesRead
import com.simplemobiletools.smsmessenger.extensions.markThreadMessagesUnread
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
@@ -255,6 +256,10 @@ 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())
conversation_address.apply {
@@ -263,7 +268,7 @@ class ConversationsAdapter(
}
conversation_body_short.apply {
- text = conversation.snippet
+ text = smsDraft ?: conversation.snippet
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.9f)
}
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 36fda74c..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)
@@ -765,6 +765,58 @@ fun Context.getLockScreenVisibilityText(type: Int) = getString(
}
)
+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 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(uri, projection, selection, selectionArgs, null)
+ cursor.use {
+ if (cursor?.moveToFirst() == true) {
+ val draftId = cursor.getLong(0)
+ val draftUri = Uri.withAppendedPath(Sms.CONTENT_URI, "/${draftId}")
+ contentResolver.delete(draftUri, null, null)
+ }
+ }
+ } catch (e: Exception) {
+ }
+}
+
fun Context.updateLastConversationMessage(threadId: Long) {
val uri = Threads.CONTENT_URI
val selection = "${Threads._ID} = ?"
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" />
+
+