From c08868bc3cb7a70716e11936adfa36fe4e17b037 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Apr 2021 13:15:35 +0200 Subject: [PATCH 1/3] Protect call to suspend fun --- CHANGES.md | 8 +++++++- .../home/room/detail/RoomDetailViewModel.kt | 17 ++++------------- .../NotificationBroadcastReceiver.kt | 10 ++++------ 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 1652443c63..bb7668accf 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,10 @@ -Changes in Element 1.1.5 (2021-XX-XX) +Changes in Element 1.1.6 (2021-04-16) +=================================================== + +Bugfix 🐛: + - Fix crash on the timeline + +Changes in Element 1.1.5 (2021-04-15) =================================================== Bugfix 🐛: diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 6152562850..5c18bfa11b 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -178,10 +178,7 @@ class RoomDetailViewModel @AssistedInject constructor( updateShowDialerOptionState() room.getRoomSummaryLive() viewModelScope.launch { - try { - room.markAsRead(ReadService.MarkAsReadParams.READ_RECEIPT) - } catch (_: Exception) { - } + tryOrNull { room.markAsRead(ReadService.MarkAsReadParams.READ_RECEIPT) } } // Inform the SDK that the room is displayed session.onRoomDisplayed(initialState.roomId) @@ -546,10 +543,7 @@ class RoomDetailViewModel @AssistedInject constructor( if (trackUnreadMessages.getAndSet(false)) { mostRecentDisplayedEvent?.root?.eventId?.also { viewModelScope.launch { - try { - room.setReadMarker(it) - } catch (_: Exception) { - } + tryOrNull { room.setReadMarker(it) } } } mostRecentDisplayedEvent = null @@ -1254,7 +1248,7 @@ class RoomDetailViewModel @AssistedInject constructor( } bufferedMostRecentDisplayedEvent.root.eventId?.let { eventId -> viewModelScope.launch { - room.setReadReceipt(eventId) + tryOrNull { room.setReadReceipt(eventId) } } } }) @@ -1263,10 +1257,7 @@ class RoomDetailViewModel @AssistedInject constructor( private fun handleMarkAllAsRead() { viewModelScope.launch { - try { - room.markAsRead(ReadService.MarkAsReadParams.BOTH) - } catch (_: Exception) { - } + tryOrNull { room.markAsRead(ReadService.MarkAsReadParams.BOTH) } } } diff --git a/vector/src/main/java/im/vector/app/features/notifications/NotificationBroadcastReceiver.kt b/vector/src/main/java/im/vector/app/features/notifications/NotificationBroadcastReceiver.kt index 7125c22342..f265a5bd5f 100644 --- a/vector/src/main/java/im/vector/app/features/notifications/NotificationBroadcastReceiver.kt +++ b/vector/src/main/java/im/vector/app/features/notifications/NotificationBroadcastReceiver.kt @@ -25,6 +25,7 @@ import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.extensions.vectorComponent import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.room.Room import org.matrix.android.sdk.api.session.room.read.ReadService @@ -78,7 +79,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() { val room = session.getRoom(roomId) if (room != null) { GlobalScope.launch { - room.join() + tryOrNull { room.join() } } } } @@ -89,7 +90,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() { val room = session.getRoom(roomId) if (room != null) { GlobalScope.launch { - room.leave() + tryOrNull { room.leave() } } } } @@ -100,10 +101,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() { val room = session.getRoom(roomId) if (room != null) { GlobalScope.launch { - try { - room.markAsRead(ReadService.MarkAsReadParams.READ_RECEIPT) - } catch (_: Exception) { - } + tryOrNull { room.markAsRead(ReadService.MarkAsReadParams.READ_RECEIPT) } } } } From 9fc00fe6ff5245cbd967ab6a5b33b6c66ea114b0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Apr 2021 14:32:38 +0200 Subject: [PATCH 2/3] App crashes on "troubleshoot notifications" button (#3187) --- CHANGES.md | 1 + .../troubleshoot/TestPushFromPushGateway.kt | 36 +++++++++++-------- .../troubleshoot/TestAccountSettings.kt | 9 +++-- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index bb7668accf..a6221116b7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,7 @@ Changes in Element 1.1.6 (2021-04-16) Bugfix 🐛: - Fix crash on the timeline + - App crashes on "troubleshoot notifications" button (#3187) Changes in Element 1.1.5 (2021-04-15) =================================================== diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt index 015754145f..ad4b9ecb01 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt @@ -24,9 +24,11 @@ import im.vector.app.core.pushers.PushersManager import im.vector.app.core.resources.StringProvider import im.vector.app.features.settings.troubleshoot.TroubleshootTest import im.vector.app.push.fcm.FcmHelper +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.matrix.android.sdk.api.session.pushers.PushGatewayFailure import javax.inject.Inject @@ -47,22 +49,26 @@ class TestPushFromPushGateway @Inject constructor(private val context: AppCompat return } action = GlobalScope.launch { - status = runCatching { pushersManager.testPush(fcmToken) } - .fold( - { - // Wait for the push to be received - description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_waiting_for_push) - TestStatus.RUNNING - }, - { - description = if (it is PushGatewayFailure.PusherRejected) { - stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_failed) - } else { - errorFormatter.toHumanReadable(it) + val result = runCatching { pushersManager.testPush(fcmToken) } + + withContext(Dispatchers.Main) { + status = result + .fold( + { + // Wait for the push to be received + description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_waiting_for_push) + TestStatus.RUNNING + }, + { + description = if (it is PushGatewayFailure.PusherRejected) { + stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_failed) + } else { + errorFormatter.toHumanReadable(it) + } + TestStatus.FAILED } - TestStatus.FAILED - } - ) + ) + } } } diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestAccountSettings.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestAccountSettings.kt index b78dba07f5..1f9b59af54 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestAccountSettings.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestAccountSettings.kt @@ -20,8 +20,11 @@ import androidx.activity.result.ActivityResultLauncher import im.vector.app.R import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.resources.StringProvider +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.pushrules.RuleIds import org.matrix.android.sdk.api.pushrules.RuleKind import javax.inject.Inject @@ -50,10 +53,12 @@ class TestAccountSettings @Inject constructor(private val stringProvider: String if (manager?.diagStatus == TestStatus.RUNNING) return // wait before all is finished GlobalScope.launch { - runCatching { + tryOrNull { session.updatePushRuleEnableStatus(RuleKind.OVERRIDE, defaultRule, !defaultRule.enabled) } - manager?.retry(activityResultLauncher) + withContext(Dispatchers.Main) { + manager?.retry(activityResultLauncher) + } } } } From 72515ee6353427334d217f294d2837cca2d05c26 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Apr 2021 13:28:57 +0200 Subject: [PATCH 3/3] Prepare corrective release 1.1.6 --- fastlane/metadata/android/en-US/changelogs/40101060.txt | 2 ++ vector/build.gradle | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/40101060.txt diff --git a/fastlane/metadata/android/en-US/changelogs/40101060.txt b/fastlane/metadata/android/en-US/changelogs/40101060.txt new file mode 100644 index 0000000000..6d895542eb --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/40101060.txt @@ -0,0 +1,2 @@ +Main changes in this version: hot fixes for 1.1.5 +Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.1.6 \ No newline at end of file diff --git a/vector/build.gradle b/vector/build.gradle index d561382e2d..8de31e58f7 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -14,7 +14,7 @@ kapt { // Note: 2 digits max for each value ext.versionMajor = 1 ext.versionMinor = 1 -ext.versionPatch = 5 +ext.versionPatch = 6 static def getGitTimestamp() { def cmd = 'git show -s --format=%ct'