Rename Sign Out to Remove Device + Update SDK 26.03.18 (#5280)

* update the sdk

* updated preview tests

# Conflicts:
#	ElementX/Sources/Screens/Timeline/View/Style/TimelineItemSendInfoLabel.swift
#	ElementX/Sources/Screens/Timeline/View/TimelineItemViews/LiveLocationRoomTimelineView.swift

* update sdk to 26.03.18 + regenerated preview tests after sign out copy change

* updated UI tests

* pr suggestions
This commit is contained in:
Mauro
2026-03-18 17:34:45 +01:00
committed by GitHub
parent 860a7de35e
commit dfee18e511
104 changed files with 386 additions and 426 deletions
+38 -24
View File
@@ -346,9 +346,9 @@ internal enum L10n {
internal static var actionShow: String { return L10n.tr("Localizable", "action_show") }
/// Sign in again
internal static var actionSignInAgain: String { return L10n.tr("Localizable", "action_sign_in_again") }
/// Sign out
/// Remove this device
internal static var actionSignout: String { return L10n.tr("Localizable", "action_signout") }
/// Sign out anyway
/// Remove this device anyway
internal static var actionSignoutAnyway: String { return L10n.tr("Localizable", "action_signout_anyway") }
/// Skip
internal static var actionSkip: String { return L10n.tr("Localizable", "action_skip") }
@@ -362,6 +362,8 @@ internal enum L10n {
internal static var actionStartVerification: String { return L10n.tr("Localizable", "action_start_verification") }
/// Tap to load map
internal static var actionStaticMapLoad: String { return L10n.tr("Localizable", "action_static_map_load") }
/// Stop
internal static var actionStop: String { return L10n.tr("Localizable", "action_stop") }
/// Take photo
internal static var actionTakePhoto: String { return L10n.tr("Localizable", "action_take_photo") }
/// Tap for options
@@ -422,6 +424,8 @@ internal enum L10n {
internal static var commonAnImage: String { return L10n.tr("Localizable", "common_an_image") }
/// Analytics
internal static var commonAnalytics: String { return L10n.tr("Localizable", "common_analytics") }
/// Syncing notifications...
internal static var commonAndroidFetchingNotificationsTitle: String { return L10n.tr("Localizable", "common_android_fetching_notifications_title") }
/// You left the room
internal static var commonAndroidShortcutsRemoveReasonLeftRoom: String { return L10n.tr("Localizable", "common_android_shortcuts_remove_reason_left_room") }
/// You were logged out of the session
@@ -496,6 +500,10 @@ internal enum L10n {
internal static var commonEncryption: String { return L10n.tr("Localizable", "common_encryption") }
/// Encryption enabled
internal static var commonEncryptionEnabled: String { return L10n.tr("Localizable", "common_encryption_enabled") }
/// Ends %1$@
internal static func commonEndsInTimeIos(_ p1: Any) -> String {
return L10n.tr("Localizable", "common_ends_in_time_ios", String(describing: p1))
}
/// Enter your PIN
internal static var commonEnterYourPin: String { return L10n.tr("Localizable", "common_enter_your_pin") }
/// Error
@@ -542,6 +550,10 @@ internal enum L10n {
internal static var commonLinkCopiedToClipboard: String { return L10n.tr("Localizable", "common_link_copied_to_clipboard") }
/// Link new device
internal static var commonLinkNewDevice: String { return L10n.tr("Localizable", "common_link_new_device") }
/// Live location
internal static var commonLiveLocation: String { return L10n.tr("Localizable", "common_live_location") }
/// Live location ended
internal static var commonLiveLocationEnded: String { return L10n.tr("Localizable", "common_live_location_ended") }
/// Loading…
internal static var commonLoading: String { return L10n.tr("Localizable", "common_loading") }
/// Loading more…
@@ -720,11 +732,13 @@ internal enum L10n {
internal static var commonShareSpace: String { return L10n.tr("Localizable", "common_share_space") }
/// New members see history
internal static var commonSharedHistory: String { return L10n.tr("Localizable", "common_shared_history") }
/// Shared live location
internal static var commonSharedLiveLocation: String { return L10n.tr("Localizable", "common_shared_live_location") }
/// Shared location
internal static var commonSharedLocation: String { return L10n.tr("Localizable", "common_shared_location") }
/// Shared space
internal static var commonSharedSpace: String { return L10n.tr("Localizable", "common_shared_space") }
/// Signing out
/// Removing device
internal static var commonSigningOut: String { return L10n.tr("Localizable", "common_signing_out") }
/// Something went wrong
internal static var commonSomethingWentWrong: String { return L10n.tr("Localizable", "common_something_went_wrong") }
@@ -822,6 +836,8 @@ internal enum L10n {
internal static var commonWaiting: String { return L10n.tr("Localizable", "common_waiting") }
/// Waiting for this message
internal static var commonWaitingForDecryptionKey: String { return L10n.tr("Localizable", "common_waiting_for_decryption_key") }
/// Waiting for live location…
internal static var commonWaitingLiveLocation: String { return L10n.tr("Localizable", "common_waiting_live_location") }
/// Anyone can see history
internal static var commonWorldReadableHistory: String { return L10n.tr("Localizable", "common_world_readable_history") }
/// You
@@ -1390,7 +1406,7 @@ internal enum L10n {
internal static var screenAppLockSetupPinMismatchDialogTitle: String { return L10n.tr("Localizable", "screen_app_lock_setup_pin_mismatch_dialog_title") }
/// You’ll need to re-login and create a new PIN to proceed
internal static var screenAppLockSignoutAlertMessage: String { return L10n.tr("Localizable", "screen_app_lock_signout_alert_message") }
/// You are being signed out
/// This device is being removed
internal static var screenAppLockSignoutAlertTitle: String { return L10n.tr("Localizable", "screen_app_lock_signout_alert_title") }
/// Plural format key: "%#@COUNT@"
internal static func screenAppLockSubtitle(_ p1: Int) -> String {
@@ -1573,10 +1589,8 @@ internal enum L10n {
internal static var screenChatBackupRecoveryActionConfirmDescription: String { return L10n.tr("Localizable", "screen_chat_backup_recovery_action_confirm_description") }
/// Get recovery key
internal static var screenChatBackupRecoveryActionSetup: String { return L10n.tr("Localizable", "screen_chat_backup_recovery_action_setup") }
/// Get access to your encrypted messages if you lose all your devices or are signed out of %1$@ everywhere.
internal static func screenChatBackupRecoveryActionSetupDescription(_ p1: Any) -> String {
return L10n.tr("Localizable", "screen_chat_backup_recovery_action_setup_description", String(describing: p1))
}
/// Your chats are automatically backed up with end-to-end encryption. To restore this backup and retain your digital identity when you lose access to all your devices, you will need your recovery key.
internal static var screenChatBackupRecoveryActionSetupDescription: String { return L10n.tr("Localizable", "screen_chat_backup_recovery_action_setup_description") }
/// Create account
internal static var screenCreateAccountTitle: String { return L10n.tr("Localizable", "screen_create_account_title") }
/// Open %1$@ in a desktop device
@@ -1902,11 +1916,11 @@ internal enum L10n {
internal static var screenJoinRoomTitleKnock: String { return L10n.tr("Localizable", "screen_join_room_title_knock") }
/// Preview is not available
internal static var screenJoinRoomTitleNoPreview: String { return L10n.tr("Localizable", "screen_join_room_title_no_preview") }
/// Turn off
/// Delete
internal static var screenKeyBackupDisableConfirmationActionTurnOff: String { return L10n.tr("Localizable", "screen_key_backup_disable_confirmation_action_turn_off") }
/// You will lose your encrypted messages if you are signed out of all devices.
/// You will lose your encrypted chat history and need to reset your digital identity if you remove all your devices.
internal static var screenKeyBackupDisableConfirmationDescription: String { return L10n.tr("Localizable", "screen_key_backup_disable_confirmation_description") }
/// Are you sure you want to turn off backup?
/// Are you sure you want to delete key storage?
internal static var screenKeyBackupDisableConfirmationTitle: String { return L10n.tr("Localizable", "screen_key_backup_disable_confirmation_title") }
/// Deleting key storage will remove your digital identity and message keys from the server and turn off the following security features:
internal static var screenKeyBackupDisableDescription: String { return L10n.tr("Localizable", "screen_key_backup_disable_description") }
@@ -3187,35 +3201,35 @@ internal enum L10n {
}
/// You’re signed out
internal static var screenSignedOutTitle: String { return L10n.tr("Localizable", "screen_signed_out_title") }
/// Are you sure you want to sign out?
/// Are you sure you want to remove this device?
internal static var screenSignoutConfirmationDialogContent: String { return L10n.tr("Localizable", "screen_signout_confirmation_dialog_content") }
/// Sign out
/// Remove this device
internal static var screenSignoutConfirmationDialogSubmit: String { return L10n.tr("Localizable", "screen_signout_confirmation_dialog_submit") }
/// Sign out
/// Remove this device
internal static var screenSignoutConfirmationDialogTitle: String { return L10n.tr("Localizable", "screen_signout_confirmation_dialog_title") }
/// Signing out…
/// Removing device…
internal static var screenSignoutInProgressDialogContent: String { return L10n.tr("Localizable", "screen_signout_in_progress_dialog_content") }
/// You are about to sign out of your last session. If you sign out now, you will lose access to your encrypted messages.
/// This is your only device. If you remove it you’ll need a recovery key in order to confirm your digital identity and restore your encrypted chats the next time you sign in.
internal static var screenSignoutKeyBackupDisabledSubtitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_disabled_subtitle") }
/// You have turned off backup
/// You’re about to lose access to your encrypted chats
internal static var screenSignoutKeyBackupDisabledTitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_disabled_title") }
/// Your keys were still being backed up when you went offline. Reconnect so that your keys can be backed up before signing out.
/// Your keys were still being backed up when you went offline. Reconnect so that your keys can be backed up before you remove this device.
internal static var screenSignoutKeyBackupOfflineSubtitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_offline_subtitle") }
/// Your keys are still being backed up
internal static var screenSignoutKeyBackupOfflineTitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_offline_title") }
/// Please wait for this to complete before signing out.
/// Please wait for this to complete before removing this device.
internal static var screenSignoutKeyBackupOngoingSubtitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_ongoing_subtitle") }
/// Your keys are still being backed up
internal static var screenSignoutKeyBackupOngoingTitle: String { return L10n.tr("Localizable", "screen_signout_key_backup_ongoing_title") }
/// Sign out
/// Remove this device
internal static var screenSignoutPreferenceItem: String { return L10n.tr("Localizable", "screen_signout_preference_item") }
/// You are about to sign out of your last session. If you sign out now, you'll lose access to your encrypted messages.
/// This is your only device. If you remove it you’ll need a recovery key in order to confirm your digital identity and restore your encrypted chats the next time you sign in.
internal static var screenSignoutRecoveryDisabledSubtitle: String { return L10n.tr("Localizable", "screen_signout_recovery_disabled_subtitle") }
/// Recovery not set up
/// You’re about to lose access to your encrypted chats
internal static var screenSignoutRecoveryDisabledTitle: String { return L10n.tr("Localizable", "screen_signout_recovery_disabled_title") }
/// You are about to sign out of your last session. If you sign out now, you might lose access to your encrypted messages.
/// This is your only device. If you remove it you’ll need a recovery key in order to confirm your digital identity and restore your encrypted chats the next time you sign in.
internal static var screenSignoutSaveRecoveryKeySubtitle: String { return L10n.tr("Localizable", "screen_signout_save_recovery_key_subtitle") }
/// Have you saved your recovery key?
/// Make sure you have access to your recovery key before removing this device
internal static var screenSignoutSaveRecoveryKeyTitle: String { return L10n.tr("Localizable", "screen_signout_save_recovery_key_title") }
/// Room
internal static var screenSpaceAddRoomAction: String { return L10n.tr("Localizable", "screen_space_add_room_action") }
@@ -85,4 +85,14 @@ extension ProcessInfo {
false
#endif
}
var platform: String {
if #available(iOS 26.1, *), ProcessInfo.processInfo.isiOSAppOnVision {
"visionOS"
} else if ProcessInfo.processInfo.isiOSAppOnMac {
"macOS"
} else {
"iOS"
}
}
}
+6 -1
View File
@@ -37,6 +37,11 @@ enum Tracing {
// Log everything on integration tests to check whether
// the logs contain any sensitive data. See `integration-tests.yml`
let level: LogLevel = ProcessInfo.isRunningIntegrationTests ? .trace : logLevel
let sentryConfig = sentryURL.map { url in
SentryConfig(dsn: url.absoluteString,
appVersion: InfoPlistReader.app.bundleShortVersionString,
appPlatform: ProcessInfo.processInfo.platform)
}
return .init(logLevel: level.rustLogLevel,
traceLogPacks: traceLogPacks.map(\.rustLogPack),
@@ -48,7 +53,7 @@ enum Tracing {
// Total compressed size needs to be under CloudFlare's max request size of 50Mb
maxTotalSizeBytes: 100 * 1024 * 1024, // 100Mb
maxAgeSeconds: 7 * 24 * 60 * 60), // One week
sentryDsn: sentryURL?.absoluteString)
sentryConfig: sentryConfig)
}
/// A list of all log file URLs, sorted chronologically.
@@ -281,6 +281,8 @@ private extension HumanQrLoginError {
.qrCodeError(.slidingSyncNotAvailable)
case .OtherDeviceNotSignedIn:
.qrCodeError(.deviceNotSignedIn)
case .UnsupportedQrCodeType:
.qrCodeError(.invalidQRCode)
case .Unknown, .OidcMetadataInvalid, .CheckCodeAlreadySent, .CheckCodeCannotBeSent:
.qrCodeError(.unknown)
}
@@ -201,6 +201,8 @@ private extension QRCodeLoginError {
.cancelled
case .OtherDeviceAlreadySignedIn:
.deviceAlreadySignedIn
case .UnsupportedQrCodeType:
.invalidQRCode
case .Unknown, .MissingSecretsBackup, .DeviceIdAlreadyInUse:
.unknown
}
@@ -62,6 +62,9 @@ struct RoomEventStringBuilder {
return prefix(errorMessage, with: displayName, isOutgoing: isOutgoing)
case .other:
return nil // We shouldn't receive these without asking for custom event types.
case .liveLocation:
// TODO: Implement
return nil
}
case .failedToParseMessageLike, .failedToParseState:
return prefix(L10n.commonUnsupportedEvent, with: displayName, isOutgoing: isOutgoing)
@@ -86,9 +89,6 @@ struct RoomEventStringBuilder {
return prefix(L10n.commonUnsupportedCall, with: displayName, isOutgoing: isOutgoing)
case .rtcNotification:
return prefix(L10n.commonCallStarted, with: displayName, isOutgoing: isOutgoing)
case .liveLocation:
// TODO: Implement
return nil
}
}
@@ -90,12 +90,11 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
self.roomList = roomList
do {
listUpdatesSubscriptionResult = roomList.entriesWithDynamicAdaptersWith(pageSize: UInt32(roomListPageSize),
enableLatestEventSorter: true,
listener: SDKListener { [weak self] updates in
guard let self else { return }
diffsPublisher.send(updates)
})
listUpdatesSubscriptionResult = roomList.entriesWithDynamicAdapters(pageSize: UInt32(roomListPageSize),
listener: SDKListener { [weak self] updates in
guard let self else { return }
diffsPublisher.send(updates)
})
// Forces the listener above to be called with the current state
setFilter(.all(filters: []))
@@ -43,6 +43,9 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
return buildEncryptedTimelineItem(eventItemProxy, messageLikeContent, encryptedMessage, isOutgoing)
case .other:
return nil // We shouldn't receive these without asking for custom event types.
case .liveLocation:
// TODO: Implement
return nil
}
case .failedToParseMessageLike(let eventType, let error):
return buildUnsupportedTimelineItem(eventItemProxy, eventType, error, isOutgoing)
@@ -69,9 +72,6 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
return buildCallInviteTimelineItem(for: eventItemProxy)
case .rtcNotification:
return buildCallNotificationTimelineItem(for: eventItemProxy)
case .liveLocation:
// TODO: Implement
return nil
}
}