From cee5564f395f91e44da1286e7f3cc4d748e869e7 Mon Sep 17 00:00:00 2001 From: Dariusz Olszewski Date: Sat, 14 May 2022 23:42:20 +0200 Subject: [PATCH 1/3] Reply from notification - initial error handling Signed-off-by: Dariusz Olszewski --- .../talk/receivers/DirectReplyReceiver.kt | 33 ++++++++++++++++--- app/src/main/res/values/strings.xml | 1 + 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt b/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt index 95e81a1e8..3b9e5153f 100644 --- a/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt +++ b/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt @@ -26,12 +26,15 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.os.Build +import android.text.Html +import android.util.Log import androidx.annotation.RequiresApi import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.app.Person import androidx.core.app.RemoteInput import autodagger.AutoInjector +import com.nextcloud.talk.R import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.models.database.UserEntity @@ -103,9 +106,10 @@ class DirectReplyReceiver : BroadcastReceiver() { confirmReplySent() } + @RequiresApi(Build.VERSION_CODES.N) override fun onError(e: Throwable) { - // TODO - inform the user that sending of the reply failed - // unused atm + Log.e(TAG, "Failed to send reply", e) + informReplyFailed() } override fun onComplete() { @@ -114,6 +118,23 @@ class DirectReplyReceiver : BroadcastReceiver() { }) } + @RequiresApi(Build.VERSION_CODES.N) + private fun confirmReplySent() { + appendMessageToNotification(replyMessage!!) + } + + @RequiresApi(Build.VERSION_CODES.N) + private fun informReplyFailed() { + val errorMessage = + Html.fromHtml( + "" + + context.resources.getString(R.string.nc_message_failed_to_send) + + "", + Html.FROM_HTML_MODE_COMPACT + ) + appendMessageToNotification(errorMessage) + } + @RequiresApi(Build.VERSION_CODES.N) private fun findActiveNotification(notificationId: Int): Notification? { val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager @@ -121,7 +142,7 @@ class DirectReplyReceiver : BroadcastReceiver() { } @RequiresApi(Build.VERSION_CODES.N) - private fun confirmReplySent() { + private fun appendMessageToNotification(reply: CharSequence) { // Implementation inspired by the SO question and article below: // https://stackoverflow.com/questions/51549456/android-o-notification-for-direct-reply-message // https://medium.com/@sidorovroman3/android-how-to-use-messagingstyle-for-notifications-without-caching-messages-c414ef2b816c @@ -145,7 +166,7 @@ class DirectReplyReceiver : BroadcastReceiver() { .setName(currentUser.displayName) .setIcon(NotificationUtils.loadAvatarSync(avatarUrl)) .build() - val message = NotificationCompat.MessagingStyle.Message(replyMessage, System.currentTimeMillis(), me) + val message = NotificationCompat.MessagingStyle.Message(reply, System.currentTimeMillis(), me) previousStyle?.addMessage(message) // Set the updated style @@ -154,4 +175,8 @@ class DirectReplyReceiver : BroadcastReceiver() { // Update the active notification. NotificationManagerCompat.from(context).notify(systemNotificationId!!, previousBuilder.build()) } + + companion object { + const val TAG = "DirectReplyReceiver" + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a6d4d94ba..a5cb32f38 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -325,6 +325,7 @@ You: %1$s Message read Message sent + Failed to send message Remote audio off Add attachment From fcf21180088e725735db7abb7d36def42eb0e6fb Mon Sep 17 00:00:00 2001 From: Dariusz Olszewski Date: Mon, 16 May 2022 22:52:37 +0200 Subject: [PATCH 2/3] Implemented suggested design changes - first attempt Signed-off-by: Dariusz Olszewski --- .../talk/receivers/DirectReplyReceiver.kt | 15 +++++++-------- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt b/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt index 3b9e5153f..0eb78d2cc 100644 --- a/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt +++ b/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt @@ -26,7 +26,8 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.os.Build -import android.text.Html +import android.text.SpannableStringBuilder +import android.text.style.ForegroundColorSpan import android.util.Log import androidx.annotation.RequiresApi import androidx.core.app.NotificationCompat @@ -125,13 +126,11 @@ class DirectReplyReceiver : BroadcastReceiver() { @RequiresApi(Build.VERSION_CODES.N) private fun informReplyFailed() { - val errorMessage = - Html.fromHtml( - "" + - context.resources.getString(R.string.nc_message_failed_to_send) + - "", - Html.FROM_HTML_MODE_COMPACT - ) + val errorColor = ForegroundColorSpan(context.resources.getColor(R.color.medium_emphasis_text, context.theme)) + val errorMessageHeader = context.resources.getString(R.string.nc_message_failed_to_send) + val errorMessage = SpannableStringBuilder() + .append("$errorMessageHeader\n$replyMessage", errorColor, 0) + // .append("\n$replyMessage") appendMessageToNotification(errorMessage) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a5cb32f38..946e04356 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -325,7 +325,7 @@ You: %1$s Message read Message sent - Failed to send message + Failed to send message: Remote audio off Add attachment From d9b60eb8be2425d0f7d066738581016099368eb7 Mon Sep 17 00:00:00 2001 From: Dariusz Olszewski Date: Mon, 16 May 2022 23:01:35 +0200 Subject: [PATCH 3/3] ktlint Signed-off-by: Dariusz Olszewski --- .../java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt b/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt index 0eb78d2cc..aa19adec1 100644 --- a/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt +++ b/app/src/main/java/com/nextcloud/talk/receivers/DirectReplyReceiver.kt @@ -128,9 +128,7 @@ class DirectReplyReceiver : BroadcastReceiver() { private fun informReplyFailed() { val errorColor = ForegroundColorSpan(context.resources.getColor(R.color.medium_emphasis_text, context.theme)) val errorMessageHeader = context.resources.getString(R.string.nc_message_failed_to_send) - val errorMessage = SpannableStringBuilder() - .append("$errorMessageHeader\n$replyMessage", errorColor, 0) - // .append("\n$replyMessage") + val errorMessage = SpannableStringBuilder().append("$errorMessageHeader\n$replyMessage", errorColor, 0) appendMessageToNotification(errorMessage) }