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/app/build.gradle b/app/build.gradle
index 7be53d19..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")
}
@@ -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'
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 @@
+
+
+
+
+
+
blockNumber()
R.id.delete -> askConfirmDelete()
R.id.manage_people -> managePeople()
+ R.id.mark_as_unread -> markAsUnread()
else -> return super.onOptionsItemSelected(item)
}
return true
@@ -392,8 +393,24 @@ class ThreadActivity : SimpleActivity() {
showSelectedContacts()
}
+ private fun markAsUnread() {
+ ensureBackgroundThread {
+ conversationsDB.markUnread(threadId.toLong())
+ 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()
@@ -402,7 +419,6 @@ class ThreadActivity : SimpleActivity() {
subscriptionIdToSimId[subscriptionInfo.subscriptionId] = "${index + 1}"
}
- val items = ArrayList()
var prevDateTime = 0
var hadUnreadItems = false
messages.forEach {
@@ -597,6 +613,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/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..a1d0a118 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
@@ -10,9 +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.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
@@ -28,6 +27,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)
@@ -133,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)
@@ -173,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()
@@ -186,9 +192,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 * 0.9f)
+ }
+
+ 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..aa4cec77 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,18 +182,25 @@ class ThreadAdapter(activity: SimpleActivity, var messages: 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)
}
@@ -497,29 +498,60 @@ fun Context.markMessageRead(id: Int, isMMS: Boolean) {
contentResolver.update(uri, contentValues, selection, selectionArgs)
}
+fun Context.markThreadMessagesRead(threadId: Int) {
+ arrayOf(Sms.CONTENT_URI, Mms.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)
+ }
+}
+
+fun Context.markThreadMessagesUnread(threadId: Int) {
+ arrayOf(Sms.CONTENT_URI, Mms.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()) {
- Threads.getOrCreateThreadId(this, address)
+ try {
+ Threads.getOrCreateThreadId(this, address)
+ } catch (e: Exception) {
+ 0L
+ }
} else {
- 0
+ 0L
}
}
@SuppressLint("NewApi")
fun Context.getThreadId(addresses: Set): Long {
return if (isMarshmallowPlus()) {
- Threads.getOrCreateThreadId(this, addresses)
+ try {
+ Threads.getOrCreateThreadId(this, addresses)
+ } catch (e: Exception) {
+ 0L
+ }
} else {
- 0
+ 0L
}
}
@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"
if (isOreoPlus()) {
val audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
@@ -529,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)
@@ -548,16 +580,34 @@ 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)
+ 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))
@@ -568,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)
- notificationManager.notify(messageId, builder.build())
+ 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 8620bfa8..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,11 +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 MESSAGE_ID = "message_id"
-const val MESSAGE_IS_MMS = "message_is_mms"
+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/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/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())
+ }
+ }
+}
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 {
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index 667c07cf..618b9b70 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -117,5 +117,37 @@
app:switchPadding="@dimen/medium_margin" />
+
+
+
+
+
+
+
+
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"
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" />
+
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..34d570c0 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
+ Beantwoorden
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
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