For synapse instances which have activated and configured the email account validity module, an error code (ORG_MATRIX_EXPIRED_ACCOUNT) is triggered for any request authenticated by the user's access token which is expired.
This change only add the error code in the matrix SDK but does not handle it for now in the client side.
More documentation can be found in the dedicated Synapse plugin module repository: https://github.com/matrix-org/synapse-email-account-validity
java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA
at android.media.MediaMetadataRetriever._setDataSource(MediaMetadataRetriever.java)
at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:306)
at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:327)
at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:376)
at org.matrix.android.sdk.internal.session.room.send.LocalEchoEventFactory.createVideoEvent
at org.matrix.android.sdk.internal.session.room.send.LocalEchoEventFactory.createMediaEvent
at org.matrix.android.sdk.internal.session.room.send.DefaultSendService.sendMedia(DefaultSendService.kt:253)
at org.matrix.android.sdk.internal.session.room.send.DefaultSendService.sendMedias(DefaultSendService.kt:240)
at org.matrix.android.sdk.internal.session.room.DefaultRoom.sendMedias
at im.vector.app.features.home.room.detail.RoomDetailViewModel.handleSendMedia(RoomDetailViewModel.kt:1158)
at im.vector.app.features.home.room.detail.RoomDetailViewModel.handle(RoomDetailViewModel.kt:298)
at im.vector.app.features.home.room.detail.RoomDetailFragment$contentAttachmentActivityResultLauncher$1.invoke(RoomDetailFragment.kt:1161)
at im.vector.app.features.home.room.detail.RoomDetailFragment$contentAttachmentActivityResultLauncher$1.invoke(RoomDetailFragment.kt:1156)
at im.vector.app.core.extensions.FragmentKt.registerStartForActivityResult$lambda-0
at im.vector.app.core.extensions.FragmentKt.lambda$6uyRKSScfR1yqThCkGUu8777SL8
at im.vector.app.core.extensions.-$$Lambda$FragmentKt$6uyRKSScfR1yqThCkGUu8777SL8.onActivityResult(lambda:0)
at androidx.activity.result.ActivityResultRegistry$1.onStateChanged(ActivityResultRegistry.java:148)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:265)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:307)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)
at androidx.fragment.app.Fragment.performStart(Fragment.java:3026)
at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:589)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:300)
at androidx.fragment.app.FragmentStore.moveToExpectedState
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128)
at androidx.fragment.app.FragmentManager.dispatchStart
at androidx.fragment.app.FragmentController.dispatchStart
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:510)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:246)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1455)
at android.app.Activity.performStart(Activity.java:8076)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3653)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2203)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7822)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Change-Id: Ib909abe6468703452d53e760bde414e81a8876e3
Removing devices in foreach resulted in an exception, thus the device
did not get properly removed, which resulted in following issues:
- In the room settings, members would show with unverified devices,
where devices were actually logged out
- Sending encrypted messages to contacts who logged out a device did
lead to a "Message failed to send" with Retry button showing
E/ /Tag: ## CRYPTO | refreshOutdatedDeviceLists() : ERROR updating device keys for users [@redacted:somematrixserver.com]
java.util.NoSuchElementException: Cannot access index 10 when size is 9. Remember to check hasNext() before using next().
at io.realm.RealmList$RealmItr.next(RealmList.java:9)
at org.matrix.android.sdk.internal.crypto.store.db.RealmCryptoStore$storeUserDevices$1.invoke(RealmCryptoStore.kt:41)
at org.matrix.android.sdk.internal.crypto.store.db.RealmCryptoStore$storeUserDevices$1.invoke(RealmCryptoStore.kt:1)
at org.matrix.android.sdk.internal.crypto.store.db.-$$Lambda$HelperKt$XtYpPdQTMtzbOWZdtlMV_aWM9XY.execute(lambda:2)
at io.realm.Realm.executeTransaction(Realm.java:9)
at org.matrix.android.sdk.api.MatrixCallback$DefaultImpls.doRealmTransaction(MatrixCallback.kt:2)
at org.matrix.android.sdk.internal.crypto.store.db.RealmCryptoStore.storeUserDevices(RealmCryptoStore.kt:1)
at org.matrix.android.sdk.internal.crypto.DeviceListManager.doKeyDownloadForUsers(DeviceListManager.kt:120)
at org.matrix.android.sdk.internal.crypto.DeviceListManager$doKeyDownloadForUsers$1.invokeSuspend(DeviceListManager.kt:1)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:3)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:18)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.os.HandlerThread.run(HandlerThread.java:67)
Change-Id: Icd3e21f15c6672673fec58e0fc617fa8c57ba18e
When an user has been invited by email to a DM, account data entry was stuck on the user email after the user account creation.
When the user has joined element, an event m.room.member is triggered for each room attached to the user, containing a third party invite with the user matrix id. We use this event to update the user account with the matrix id.
The sync response can omit the field device_one_time_keys_count.signed_curve25519 and the SDK was waiting to know this value to upload the OTK.
Now the SDK uploads the OTK when it uploads the device keys.
Verification flows have something called a transaction id. This is a
client-set custom ID that identifies the flow and is established by the
first message that gets sent out. This transaction ID needs to be kept the
same and be part of all events that are sent during the verification flow.
To-device requests have something called a transaction id. This is a
client-set custom ID that identifies a given request. It is used to
ensure idempotency of requests, i.e. retrying to send a request won't
result in two events being sent as long as the transaction id is kept
the same.
This patch removes usage of the first type of transaction ID for the
second use-case.
This closes: #3589.
Previously, when a download was aborted (e.g. due to a bad internet
connection), a partly downloaded file was remaining in cache, which
would then be delivered upon later requests.
This can lead e.g. to chats where images aren't loading.
To avoid this, first download files to a temporary file that is not the
final cache file, and only rename/move it on finish.
Note that if you already have broken downloads, you still need to clear
cache once to get rid of them after this commit, but it should not
occur anymore afterwards.
Previously, when a download was aborted (e.g. due to a bad internet
connection), a partly downloaded file was remaining in cache, which
would then be delivered upon later requests.
This can lead e.g. to chats where images aren't loading.
To avoid this, first download files to a temporary file that is not the
final cache file, and only rename/move it on finish.
Note that if you already have broken downloads, you still need to clear
cache once to get rid of them after this commit, but it should not
occur anymore afterwards.
Change-Id: Ic4fb58853f04f8239c639814031e9ef00c091995
* develop: (286 commits)
Fix crash after video call
Fix issue on button styles
Clean after benoits review
Fix warning about implicit type, introduced in Kotlin 1.5.20. "Returning type parameter has been inferred to Nothing implicitly. Please specify type arguments explicitly to hide this warning. Nothing can produce an exception at runtime."
Bump kotlin_version from 1.5.10 to 1.5.20
Bump libphonenumber from 8.12.25 to 8.12.26
Fix call invite processed after call is ended because of fastlane mode.
Jump to unread: removes unnecessary check which can cause scroll issue
Jump to unread: avoid blink when jumping
Clean after Benoits review
Delete unused drawable to avoid conflict on develop
Jump to unread: add towncrier file.
Read marker: fix some issues with jump to unread visibility.
Stop using ProgressDialog, there is a theme issue with it. It's not maintain by Google since it's deprecated. Force usage of MaterialAlertDialogBuilder to have the same UI effect. We sometimes need to block the UI :/
Reordering
Add text style for dialogs
Colored dialog button is now handled by the theme
Update theme for material dialog and create a destructive variant
Reorder buttons
Update doc
...
# Conflicts:
# library/ui-styles/src/main/res/values/theme_dark.xml
# library/ui-styles/src/main/res/values/theme_light.xml
# vector/build.gradle
# vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt
# vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt
# vector/src/main/java/im/vector/app/features/home/room/detail/composer/TextComposerView.kt
# vector/src/main/res/values/strings.xml
Thread: main, Exception: java.lang.IllegalArgumentException: Configurations cannot be different if used to open the same file. The most likely cause is that equals() and hashCode() are not overridden in the migration class: org.matrix.android.sdk.internal.database.RealmSessionStoreMigration
Sometimes, the chat list would jump without the user scrolling:
- During intial loading of a room content, i.e. when it is expected
that the list stays scrolled to bottom
- During loading of messages after jumping to a linked message
With this commit, the target event is repeatedly scrolled to upon list
changes until the users scroll themselves, to avoid above scenarios.
Change-Id: Iabbe76832e7e68686431b0baed9356c88eb50901