Merge branch 'release/1.4.6/master'

This commit is contained in:
SBiOSoftWhare
2021-07-16 16:59:24 +02:00
217 changed files with 2362 additions and 393 deletions
-1
View File
@@ -2,7 +2,6 @@
disabled_rules:
- trailing_whitespace
- todo
- conditional_binding_cascade
- mark
- vertical_whitespace
- syntactic_sugar
+41 -1
View File
@@ -1,3 +1,40 @@
Changes in 1.4.6 (2021-07-16)
=================================================
✨ Features
*
🙌 Improvements
* Room Notification Settings: Ability to change between "All Messages", "Mentions and Keywords" and "None". Not yet exposed in Element UI. (#4458).
* Add support for sending slow motion videos (#4483).
🐛 Bugfix
* VoIP: Do not present ended calls.
* More fixes to Main.storyboard layout on iPhone 12 Pro Max (#4527)
* Fix crash on Apple Silicon Macs.
* Media Picker: Generate video thumbnails with the correct orientation (#4515).
* Directory List (pop-up one): Fix duplicate rooms being shown (#4537).
* Use different title for scan button for self verification (#4525).
* it's easy for the back button to trigger a leftpanel reveal (#4438).
* Show / hide reset button in secrets recovery screen (#4546).
* Share Extension: Fix layout when searching (#4258).
* Timeline: Fix incorrect crop of media thumbnails (#4552).
⚠️ API Changes
*
🗣 Translations
*
🧱 Build
*
Others
* Silenced some documentation, deprecations and SwiftLint warnings.
Improvements:
* Upgrade MatrixKit version ([v0.15.4](https://github.com/matrix-org/matrix-ios-kit/releases/tag/v0.15.4)).
Changes in 1.4.5 (2021-07-07)
=================================================
@@ -15,10 +52,13 @@ Changes in 1.4.5 (2021-07-07)
🗣 Translations
*
🧱 Build
*
Others
*
Changes in 1.4.4 (2021-06-30)
=================================================
+2 -2
View File
@@ -22,8 +22,8 @@ APPLICATION_GROUP_IDENTIFIER = group.im.vector
APPLICATION_SCHEME = element
// Version
MARKETING_VERSION = 1.4.5
CURRENT_PROJECT_VERSION = 1.4.5
MARKETING_VERSION = 1.4.6
CURRENT_PROJECT_VERSION = 1.4.6
// Team
+5 -1
View File
@@ -295,6 +295,7 @@ final class BuildSettings: NSObject {
static let roomSettingsScreenShowFlairSettings: Bool = true
static let roomSettingsScreenShowAdvancedSettings: Bool = true
static let roomSettingsScreenAdvancedShowEncryptToVerifiedOption: Bool = true
static let roomSettingsScreenShowNotificationsV2: Bool = false
// MARK: - Room Member Screen
@@ -320,6 +321,9 @@ final class BuildSettings: NSObject {
static let authScreenShowForgotPassword = true
static let authScreenShowCustomServerOptions = true
// Mark: - Unified Search
// MARK: - Unified Search
static let unifiedSearchScreenShowPublicDirectory = true
// MARK: - Secrets Recovery
static let secretsRecoveryAllowReset = true
}
+1 -1
View File
@@ -11,7 +11,7 @@ use_frameworks!
# - `{ {kit spec hash} => {sdk spec hash}` to depend on specific pod options (:git => …, :podspec => …) for each repo. Used by Fastfile during CI
#
# Warning: our internal tooling depends on the name of this variable name, so be sure not to change it
$matrixKitVersion = '= 0.15.3'
$matrixKitVersion = '= 0.15.4'
# $matrixKitVersion = :local
# $matrixKitVersion = {'develop' => 'develop'}
+13 -13
View File
@@ -56,29 +56,29 @@ PODS:
- MatomoTracker (7.4.1):
- MatomoTracker/Core (= 7.4.1)
- MatomoTracker/Core (7.4.1)
- MatrixKit (0.15.3):
- MatrixKit (0.15.4):
- Down (~> 0.11.0)
- DTCoreText (~> 1.6.25)
- HPGrowingTextView (~> 1.1)
- libPhoneNumber-iOS (~> 0.9.13)
- MatrixKit/Core (= 0.15.3)
- MatrixSDK (= 0.19.3)
- MatrixKit/Core (0.15.3):
- MatrixKit/Core (= 0.15.4)
- MatrixSDK (= 0.19.4)
- MatrixKit/Core (0.15.4):
- Down (~> 0.11.0)
- DTCoreText (~> 1.6.25)
- HPGrowingTextView (~> 1.1)
- libPhoneNumber-iOS (~> 0.9.13)
- MatrixSDK (= 0.19.3)
- MatrixSDK (0.19.3):
- MatrixSDK/Core (= 0.19.3)
- MatrixSDK/Core (0.19.3):
- MatrixSDK (= 0.19.4)
- MatrixSDK (0.19.4):
- MatrixSDK/Core (= 0.19.4)
- MatrixSDK/Core (0.19.4):
- AFNetworking (~> 4.0.0)
- GZIP (~> 1.3.0)
- libbase58 (~> 0.1.4)
- OLMKit (~> 3.2.4)
- Realm (= 10.7.6)
- SwiftyBeaver (= 1.9.5)
- MatrixSDK/JingleCallStack (0.19.3):
- MatrixSDK/JingleCallStack (0.19.4):
- JitsiMeetSDK (= 3.5.0)
- MatrixSDK/Core
- OLMKit (3.2.4):
@@ -120,7 +120,7 @@ DEPENDENCIES:
- KeychainAccess (~> 4.2.2)
- KTCenterFlowLayout (~> 1.3.1)
- MatomoTracker (~> 7.4.1)
- MatrixKit (= 0.15.3)
- MatrixKit (= 0.15.4)
- MatrixSDK
- MatrixSDK/JingleCallStack
- OLMKit
@@ -196,8 +196,8 @@ SPEC CHECKSUMS:
LoggerAPI: ad9c4a6f1e32f518fdb43a1347ac14d765ab5e3d
Logging: beeb016c9c80cf77042d62e83495816847ef108b
MatomoTracker: 24a846c9d3aa76933183fe9d47fd62c9efa863fb
MatrixKit: 6cbe65db11a5450ec8cc02d51660f43b5e95a141
MatrixSDK: c15663c67bfd2991d897d973c1551ba4de900e25
MatrixKit: 477690d6dd38b1526042f8e83ff34e3db87e3a00
MatrixSDK: 0c9d1845a45d71abcfcabe82b706cadbda1297ae
OLMKit: 2d73cd67d149b5c3e3a8eb8ecae93d0b429d8a02
ReadMoreTextView: 19147adf93abce6d7271e14031a00303fe28720d
Realm: ed860452717c8db8f4bf832b6807f7f2ce708839
@@ -211,6 +211,6 @@ SPEC CHECKSUMS:
zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c
ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb
PODFILE CHECKSUM: c39d88adc5ec2df412af32b64ceb99a9a1ee92a8
PODFILE CHECKSUM: 2b61b852a5b62fbb75643a30281e362fd4566f12
COCOAPODS: 1.10.1
+4 -4
View File
@@ -151,7 +151,7 @@
<!--People View Controller-->
<scene sceneID="Qba-PP-lco">
<objects>
<viewController storyboardIdentifier="PeopleViewController" id="IGB-jr-yFz" customClass="PeopleViewController" sceneMemberID="viewController">
<viewController storyboardIdentifier="PeopleViewController" extendedLayoutIncludesOpaqueBars="YES" id="IGB-jr-yFz" customClass="PeopleViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Mhy-d3-Jh6"/>
<viewControllerLayoutGuide type="bottom" id="Hkk-qB-8tq"/>
@@ -177,7 +177,7 @@
<!--Favourites View Controller-->
<scene sceneID="z6B-k5-ano">
<objects>
<viewController storyboardIdentifier="FavouritesViewController" id="HnD-LA-psC" customClass="FavouritesViewController" sceneMemberID="viewController">
<viewController storyboardIdentifier="FavouritesViewController" extendedLayoutIncludesOpaqueBars="YES" id="HnD-LA-psC" customClass="FavouritesViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="pOc-AC-QkD"/>
<viewControllerLayoutGuide type="bottom" id="W6L-Au-CaZ"/>
@@ -463,7 +463,7 @@
<!--Rooms View Controller-->
<scene sceneID="SDg-Pp-8Uj">
<objects>
<viewController storyboardIdentifier="RoomsViewController" id="HPQ-zg-lZR" customClass="RoomsViewController" sceneMemberID="viewController">
<viewController storyboardIdentifier="RoomsViewController" extendedLayoutIncludesOpaqueBars="YES" id="HPQ-zg-lZR" customClass="RoomsViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Hkg-kw-ioH"/>
<viewControllerLayoutGuide type="bottom" id="UI8-oQ-9M9"/>
@@ -581,7 +581,7 @@
</scene>
</scenes>
<inferredMetricsTieBreakers>
<segue reference="mhb-l9-pM3"/>
<segue reference="Tfl-tq-LQp"/>
<segue reference="f5u-Y1-7nt"/>
</inferredMetricsTieBreakers>
<resources>
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "room_action_notification_muted.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "room_action_notification_muted@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "room_action_notification_muted@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "notifications.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "notifications@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "notifications@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1018 B

+13
View File
@@ -710,6 +710,7 @@ Tap the + to start adding people.";
"room_details_topic" = "Topic";
"room_details_favourite_tag" = "Favourite";
"room_details_low_priority_tag" = "Low priority";
"room_details_notifs" = "Notifications";
"room_details_mute_notifs" = "Mute notifications";
"room_details_direct_chat" = "Direct Chat";
"room_details_access_section"="Who can access this room?";
@@ -772,6 +773,17 @@ Tap the + to start adding people.";
"room_details_copy_room_address" = "Copy Room Address";
"room_details_copy_room_url" = "Copy Room URL";
// Room Notification Settings
"room_notifs_settings_notify_me_for" = "Notify me for";
"room_notifs_settings_all_messages" = "All Messages";
"room_notifs_settings_mentions_and_keywords" = "Mentions and Keywords only";
"room_notifs_settings_none" = "None";
"room_notifs_settings_done_action" = "Done";
"room_notifs_settings_cancel_action" = "Cancel";
"room_notifs_settings_manage_notifications" = "You can manage notifications in %@";
"room_notifs_settings_account_settings" = "Account settings";
"room_notifs_settings_encrypted_room_notice" = "Please note that mentions & keyword notifications are not available in encrypted rooms on mobile.";
// Group Details
"group_details_title" = "Community Details";
"group_details_home" = "Home";
@@ -1375,6 +1387,7 @@ Tap the + to start adding people.";
"key_verification_verify_qr_code_information_other_device" = "Scan the code below to verify:";
"key_verification_verify_qr_code_emoji_information" = "Verify by comparing unique emoji.";
"key_verification_verify_qr_code_scan_code_action" = "Scan their code";
"key_verification_verify_qr_code_scan_code_other_device_action" = "Scan with this device";
"key_verification_verify_qr_code_cannot_scan_action" = "Can't scan?";
"key_verification_verify_qr_code_start_emoji_action" = "Verify by emoji";
+24
View File
@@ -50,3 +50,27 @@
"SINGLE_UNREAD_IN_ROOM" = "%@にメッセージを受け取りました";
/* A single unread message */
"SINGLE_UNREAD" = "あなたはメッセージを受け取りました";
/** Key verification **/
"KEY_VERIFICATION_REQUEST_FROM_USER" = "%@は検証したい";
/* New message indicator on a room */
"MESSAGE_IN_X" = "%@ 内のメッセージ";
/* Sticker from a specific person, not referencing a room. */
"STICKER_FROM_USER" = "%@ さんからのスタンプ";
/* Message title for a specific person in a named room */
"MSG_FROM_USER_IN_ROOM_TITLE" = "%@%@ から)";
/* Group call from user, CallKit caller name */
"GROUP_CALL_FROM_USER" = "%@ (グループ通話)";
"MESSAGE_PROTECTED" = "新しいメッセージ";
/* New message indicator from a DM */
"MESSAGE_FROM_X" = "%@ からのメッセージ";
/** Notification messages **/
/* New message indicator on unknown room */
"MESSAGE" = "メッセージ";
@@ -111,3 +111,9 @@
"MSG_FROM_USER" = "%@ sendte en melding";
/* Message title for a specific person in a named room */
"MSG_FROM_USER_IN_ROOM_TITLE" = "%@ i %@";
/* Group call from user, CallKit caller name */
"GROUP_CALL_FROM_USER" = "%@ (Gruppeanrop)";
/* A user added a Jitsi call to a room */
"GROUP_CALL_STARTED" = "Gruppeanrop startet";
+68 -21
View File
@@ -479,7 +479,7 @@
"settings_discovery_error_message" = "Det oppstod en feil. Vennligst prøv igjen.";
"security_settings_crypto_sessions" = "MINE ØKTER";
"security_settings_secure_backup_setup" = "Sett opp";
"security_settings_secure_backup_delete" = "Slett";
"security_settings_secure_backup_delete" = "Slett sikkerhetskopi";
"security_settings_crosssigning_complete_security" = "Komplett sikkerhet";
"security_settings_cryptography" = "KRYPTOGRAFI";
"security_settings_complete_security_alert_title" = "Komplett sikkerhet";
@@ -513,7 +513,7 @@
"key_backup_setup_passphrase_confirm_passphrase_placeholder" = "Bekreft passordfrasen";
"key_backup_setup_passphrase_confirm_passphrase_invalid" = "Passordfrasen samsvarer ikke";
"key_backup_setup_passphrase_set_passphrase_action" = "Velg passordfrase";
"key_backup_setup_success_from_recovery_key_recovery_key_title" = "Gjenopprettingsnøkkel";
"key_backup_setup_success_from_recovery_key_recovery_key_title" = "Sikkerhetsnøkkel";
"key_backup_setup_success_from_recovery_key_make_copy_action" = "Lag en kpi";
"key_backup_setup_success_from_recovery_key_made_copy_action" = "Jeg har laget en kopi";
"key_backup_recover_from_recovery_key_recovery_key_placeholder" = "Skriv inn gjenopprettingsnøkkelen";
@@ -834,7 +834,7 @@
"settings_key_backup_info_not_valid" = "Denne økten sikkerhetskopierer ikke dine nøkler, men du har en eksisterende sikkerhetskopi du kan gjenopprette fra og legge til, for å gå videre.";
"settings_key_backup_info_valid" = "Denne økten sikkerhetskopierer dine nøkler.";
"settings_key_backup_info_version" = "Sikkerhetskopi av nøkler versjon : %@";
"settings_key_backup_info_signout_warning" = "Før du logger ut, koble denne sesjonen til sikkerhetskopi av nøkler for å unngå tap av nøkler som kanskje bare er lagret på denne enheten.";
"settings_key_backup_info_signout_warning" = "Sikkerhetskopier nøklene dine før du logger av for å unngå å miste dem.";
"settings_key_backup_info_none" = "Nøklene dine for denne sesjonen blir ikke sikkerhetskopiert.";
"settings_third_party_notices" = "Tredjepartsmerknader";
"settings_labs_e2e_encryption_prompt_message" = "Vennligst logg inn igjen for å ferdigstille oppsett av kryptering.";
@@ -864,7 +864,7 @@
"pin_protection_not_allowed_pin" = "Av sikkerhetsårsaker er denne PIN-koden ikke tilgjengelig. Prøv en annen PIN-kode";
"secrets_setup_recovery_passphrase_information" = "Skriv inn en sikkerhetsfrase bare du kjenner, brukes til å sikre hemmeligheter på serveren.";
"secrets_recovery_with_passphrase_lost_passphrase_action_part2" = "bruke gjenopprettingsnøkkelen din";
"key_backup_recover_from_passphrase_lost_passphrase_action_part2" = "bruke gjenopprettingsnøkkelen";
"key_backup_recover_from_passphrase_lost_passphrase_action_part2" = "bruk sikkerhetsnøkkelen";
"room_details_access_section_for_dm" = "Hvem har tilgang til dette?";
"identity_server_settings_place_holder" = "Legg inn en identitetsserver";
"identity_server_settings_description" = "Du bruker for øyeblikket %@ for å finne og bli funnet av dine eksisterende kontakter.";
@@ -920,13 +920,13 @@
"security_settings_crosssigning" = "KRYSS-SIGNERING";
"security_settings_backup" = "SIKKERHETSKOPI-MELDINGER";
"security_settings_secure_backup_synchronise" = "Synkroniser";
"security_settings_secure_backup_description" = "Sikre deg mot å miste tilgang til krypterte meldinger og data ved å lagre sikkerhetskopi av krypteringsnøkler på din server.";
"security_settings_secure_backup_description" = "Sikkerhetskopier krypteringsnøklene med kontodataene dine hvis du mister tilgangen til øktene dine. Nøklene dine blir sikret med en unik sikkerhetsnøkkel.";
"security_settings_secure_backup" = "SIKKERHETSKOPI";
"security_settings_crosssigning_info_trusted" = "Kryss-signering er aktivert. Du kan stole på andre brukere og dine andre økter basert på kryss-signering, men du kan ikke kryss-signere fra denne økten fordi den ikke har private nøkler for kryss-signering. Fullfør sikkerheten for denne økten.";
"security_settings_export_keys_manually" = "Eksporter nøkler manuelt";
"security_settings_crosssigning_reset" = "Tilbakestill kryss-signering";
"security_settings_crosssigning_bootstrap" = "Bootstrap kryss-signering";
"security_settings_crosssigning_info_ok" = "Kryss-signering er aktivert.";
"security_settings_crosssigning_reset" = "Nullstill";
"security_settings_crosssigning_bootstrap" = "Sett opp";
"security_settings_crosssigning_info_ok" = "Kryss-signering er klar til bruk.";
"security_settings_blacklist_unverified_devices" = "Aldri send meldinger til ikke-klarerte økter";
// AuthenticatedSessionViewControllerFactory
@@ -1052,7 +1052,7 @@
"bug_report_prompt" = "Applikasjonen krasjet sist gang. Vil du sende inn en krasj-rapport?";
"public_room_section_title" = "Offentlige rom (på %@):";
"call_no_stun_server_error_message_2" = "Alternativt kan du prøve å bruke den offentlige serveren ved %@, men denne vil være mindre pålitelig, og vil dele din IP-adresse med serveren. Du kan også administrere dette i innstillinger";
"e2e_key_backup_wrong_version" = "Det har blitt oppdaget en ny sikkerhetskopi av meldingsnøkler .\n\nHvis dette ikke ble intitiert av deg bør du endre passordfrase i innstillinger.";
"e2e_key_backup_wrong_version" = "Det har blitt oppdaget en ny sikkerhetskopi av meldingsnøkler .\n\nHvis dette ikke var deg, angir du en ny sikkerhetsfrase i Innstillinger.";
// Key backup wrong version
"e2e_key_backup_wrong_version_title" = "Ny sikkerhetskopi av nøkler";
@@ -1136,7 +1136,7 @@
"secure_key_backup_setup_intro_title" = "Sikkert lagringsområde";
"secure_key_backup_setup_intro_use_security_key_info" = "Generer en sikkerhetsnøkkel og lagre den på et trygt sted som i en passordadministrator eller en safe.";
"secure_key_backup_setup_intro_use_security_key_title" = "Bruk en sikkerhetsnøkkel";
"secure_key_backup_setup_intro_use_security_passphrase_title" = "Bruk en passordfrase";
"secure_key_backup_setup_intro_use_security_passphrase_title" = "Bruk en sikkerhetsfrase";
"key_backup_setup_intro_manual_export_action" = "Eksporter nøkler manuelt";
"key_backup_setup_intro_setup_connect_action_with_existing_backup" = "Koble denne enheten til sikkerhetskopi av meldingsnøkler";
"key_backup_setup_skip_alert_message" = "Du kan miste dine krypterte meldinger dersom du logger ut eller mister enheten.";
@@ -1154,12 +1154,12 @@
"secure_key_backup_setup_existing_backup_error_info" = "Lås den opp for å gjenbruke den på sikkert lagringsområde, eller slett den for å opprette en ny sikkerhetskopi av meldinger på sikkert lagringsområde.";
"secure_key_backup_setup_existing_backup_error_title" = "Det finnes allerede en sikkerhetskopi for meldinger";
"secure_key_backup_setup_intro_use_security_passphrase_info" = "Skriv inn en hemmelig frase bare du vet, og generer en nøkkel for sikkerhetskopiering.";
"key_backup_setup_passphrase_setup_recovery_key_info" = "Eller sikre sikkerhetskopien din med en gjenopprettingsnøkkel, og lagre den et trygt sted.";
"key_backup_setup_passphrase_info" = "Vi lagrer en kryptert kopi av nøklene dine på serveren vår. Beskytt sikkerhetskopien din med en passordfrase for å holde den sikker.\n\nFor maksimal sikkerhet bør dette være forskjellig fra kontopassordet ditt.";
"key_backup_setup_passphrase_setup_recovery_key_info" = "Eller, sikre sikkerhetskopien med en sikkerhetsnøkkel, og lagre den et trygt sted.";
"key_backup_setup_passphrase_info" = "Vi lagrer en kryptert kopi av nøklene dine på serveren vår. Beskytt sikkerhetskopien med en setning for å holde den sikker.\n\nFor maksimal sikkerhet bør dette være forskjellig fra kontopassordet ditt.";
// Passphrase
"key_backup_setup_passphrase_title" = "Gjør sikkerhetskopien din sikker med en passordfrase";
"key_backup_setup_passphrase_title" = "Sikre sikkerhetskopien din med en sikkerhetsfrase";
"key_backup_setup_intro_info" = "Meldinger i krypterte rom er sikret med ende-til-ende-kryptering. Bare du og mottakeren(e) har nøklene til å lese disse meldingene.\n\nLagre nøklene dine på et trygt sted for å unngå å miste dem.";
// MARK: Key backup recover
@@ -1168,29 +1168,29 @@
// Success from recovery key
"key_backup_setup_success_from_recovery_key_info" = "Nøklene dine blir sikkerhetskopiert.\n\nKopier denne gjenopprettingsnøkkelen og lagre den på et trygt sted.";
"key_backup_setup_success_from_passphrase_save_recovery_key_action" = "Lagre gjenopprettingsnøkkel";
"key_backup_setup_success_from_passphrase_save_recovery_key_action" = "Lagre sikkerhetsnøkkel";
// Success from passphrase
"key_backup_setup_success_from_passphrase_info" = "Nøklene dine blir sikkerhetskopiert.\n\nGjenopprettingsnøkkelen din er et sikkerhetsnett - du kan bruke den til å gjenopprette tilgangen til de krypterte meldingene dine hvis du glemmer passordfrasen.\n\nLagre gjenopprettingsnøkkelen din på en trygg måte, f.eks. ved hjelp av en passordadministrator (eller i en safe).";
"key_backup_setup_passphrase_setup_recovery_key_action" = "(Avansert) Sett opp med gjenopprettingsnøkkel";
"key_backup_recover_invalid_passphrase" = "Sikkerhetskopi kunne ikke dekrypteres med denne passordfrasen: Vennligst sjekk at du har angitt riktig passordfrase.";
"key_backup_recover_invalid_passphrase_title" = "Feil gjenopprettingsfrase";
"key_backup_recover_invalid_recovery_key" = "Sikkerhetskopi kunne ikke dekrypteres med denne nøkkelen: bekreft at du skrev inn riktig gjenopprettingsnøkkel.";
"key_backup_setup_passphrase_setup_recovery_key_action" = "(Avansert) Sett opp med sikkerhetsnøkkel";
"key_backup_recover_invalid_passphrase" = "Sikkerhetskopiering kunne ikke dekrypteres med denne setningen: bekreft at du har skrevet riktig sikkerhetsfrase.";
"key_backup_recover_invalid_passphrase_title" = "Feil sikkerhetsfrase";
"key_backup_recover_invalid_recovery_key" = "Sikkerhetskopiering kunne ikke dekrypteres med denne nøkkelen: bekreft at du har angitt riktig sikkerhetsnøkkel.";
"key_backup_recover_invalid_recovery_key_title" = "Feil i gjenopprettingsnøkkel";
// Recover from passphrase
"key_backup_recover_from_passphrase_info" = "Bruk gjenopprettingspassordet for å låse opp historikken for dine sikrede meldinger";
"key_backup_recover_from_passphrase_info" = "Bruk sikkerhetsfrasen for å låse opp den sikre meldingsloggen";
// Recover from private key
"key_backup_recover_from_private_key_info" = "Gjenoppretter sikkerhetskopi …";
"key_backup_recover_from_passphrase_lost_passphrase_action_part1" = "Kjenner du ikke gjenopprettingspassordet ditt? Du kan ";
"key_backup_recover_from_passphrase_lost_passphrase_action_part1" = "Kjenner du ikke sikkerhetsfrasen din? Du kan ";
"key_backup_recover_from_passphrase_recover_action" = "Lås opp historikk";
"key_backup_recover_from_passphrase_passphrase_placeholder" = "Skriv inn passordfrase";
// Recover from recovery key
"key_backup_recover_from_recovery_key_info" = "Bruk gjenopprettingsnøkkel for å låse opp historikken for sikrede meldinger";
"key_backup_recover_from_recovery_key_info" = "Bruk sikkerhetsnøkkelen til å låse opp den sikre meldingsloggen";
"key_backup_recover_from_passphrase_lost_passphrase_action_part3" = ".";
"sign_out_non_existing_key_backup_alert_setup_secure_backup_action" = "Begynn å bruke Sikkert lagringsområde";
"sign_out_non_existing_key_backup_alert_title" = "Du mister tilgangen til de krypterte meldingene dine hvis du logger ut nå";
@@ -1418,3 +1418,50 @@
"room_intro_cell_information_multiple_dm_sentence2" = "Bare dere er i denne samtalen, med mindre noen av dere inviterer andre til å bli med.";
"room_intro_cell_information_dm_sentence2" = "Bare dere to er i denne samtalen, ingen andre kan bli med.";
"room_intro_cell_information_dm_sentence1_part3" = ". ";
"side_menu_app_version" = "Versjon %@";
"side_menu_action_feedback" = "Tilbakemelding";
"side_menu_action_help" = "Hjelp";
"side_menu_action_settings" = "Innstillinger";
"side_menu_action_invite_friends" = "Inviter venner";
// Mark: - Side menu
"side_menu_reveal_action_accessibility_label" = "Venstre panel";
"user_avatar_view_accessibility_hint" = "Endre bruker avatar";
// Mark: - User avatar view
"user_avatar_view_accessibility_label" = "avatar";
"space_beta_announce_information" = "Plasser er en ny måte å gruppere rom og mennesker på. De er ikke på iOS ennå, men du kan bruke dem nå på nettet og på skrivebordet.";
"space_beta_announce_subtitle" = "Den nye versjonen av lokalsamfunn";
"space_beta_announce_title" = "Plasser kommer snart";
"space_beta_announce_badge" = "BETA";
"space_feature_unavailable_information" = "Plasser er en ny måte å gruppere rom og mennesker på.\n\nDe kommer snart. For nå, hvis du blir med på en annen plattform, vil du kunne få tilgang til alle rom du blir med her.";
"space_feature_unavailable_subtitle" = "Plasser er ikke på iOS ennå, men du kan bruke dem nå på nettet og på skrivebordet";
// Mark: - Spaces
"space_feature_unavailable_title" = "Plasser er ikke her ennå";
"secrets_recovery_with_key_information_unlock_secure_backup_with_key" = "Skriv inn sikkerhetsnøkkelen din for å fortsette.";
"secrets_recovery_with_key_information_unlock_secure_backup_with_phrase" = "Skriv inn sikkerhetsfrasen for å fortsette.";
// Success from secure backup
"key_backup_setup_success_from_secure_backup_info" = "Nøklene dine blir sikkerhetskopiert.";
"event_formatter_group_call_incoming" = "%@ i %@";
"event_formatter_group_call_leave" = "Forlat";
"event_formatter_group_call_join" = "Bli med";
"event_formatter_group_call" = "Gruppeanrop";
"event_formatter_call_end_call" = "Avslutt samtale";
"event_formatter_call_retry" = "Prøv på nytt";
"event_formatter_call_answer" = "Svar";
"security_settings_secure_backup_restore" = "Gjenopprett fra sikkerhetskopi";
"security_settings_secure_backup_reset" = "Nullstill";
"security_settings_secure_backup_info_valid" = "Denne økten tar sikkerhetskopi av nøklene dine.";
"security_settings_secure_backup_info_checking" = "Sjekker…";
"settings_ui_theme_picker_message_match_system_theme" = "\"Auto\" samsvarer med enhetens systemtema";
"settings_ui_theme_picker_message_invert_colours" = "\"Auto\" bruker enhetens \"Inverter farger\" innstillinger";
// Chat
"room_slide_to_end_group_call" = "Skyv for å avslutte samtalen for alle";
"room_recents_unknown_room_error_message" = "Finner ikke dette rommet. Forsikre deg om at den eksisterer";
"room_creation_dm_error" = "Vi kunne ikke opprette DM. Kontroller brukerne du vil invitere, og prøv på nytt.";
+47 -47
View File
@@ -611,7 +611,7 @@
"room_does_not_exist" = "%@ bestaat niet";
// Key backup wrong version
"e2e_key_backup_wrong_version_title" = "Nieuwe sleutelback-up";
"e2e_key_backup_wrong_version" = "Er is een nieuwe sleutelback-up voor versleutelde berichten gedetecteerd.\n\nIndien deze niet van u komt, stel dan een nieuw wachtwoord in in de instellingen.";
"e2e_key_backup_wrong_version" = "Er is een nieuwe sleutelback-up voor versleutelde berichten gedetecteerd.\n\nIndien deze niet van u komt, stel dan een nieuw veiligheidswachtwoord in in de instellingen.";
"e2e_key_backup_wrong_version_button_settings" = "Instellingen";
"e2e_key_backup_wrong_version_button_wasme" = "Ik was het";
"key_backup_setup_title" = "Sleutelback-up";
@@ -623,10 +623,10 @@
"key_backup_setup_intro_setup_action_without_existing_backup" = "Begin sleutelback-up te gebruiken";
"key_backup_setup_intro_manual_export_info" = "(Geavanceerd)";
"key_backup_setup_intro_manual_export_action" = "Sleutels handmatig exporteren";
"key_backup_setup_passphrase_title" = "Beveilig uw back-up met een wachtwoord";
"key_backup_setup_passphrase_info" = "We bewaren een versleutelde kopie van uw sleutels op onze server. Bescherm uw back-up met een wachtwoord om deze veilig te houden.\n\nVoor maximale beveiliging zou dit moeten verschillen van uw accountwachtwoord.";
"key_backup_setup_passphrase_title" = "Beveilig uw back-up met een veiligheidswachtwoord";
"key_backup_setup_passphrase_info" = "We bewaren een versleutelde kopie van uw sleutels op onze server. Bescherm uw back-up met een veiligheidswachtwoord om deze veilig te houden.\n\nVoor maximale beveiliging zou dit moeten verschillen van uw accountwachtwoord.";
"key_backup_setup_passphrase_passphrase_title" = "Invoeren";
"key_backup_setup_passphrase_passphrase_placeholder" = "Voer wachtwoord in";
"key_backup_setup_passphrase_passphrase_placeholder" = "Wachtwoord invoeren";
"key_backup_setup_passphrase_passphrase_valid" = "Top!";
"key_backup_setup_passphrase_passphrase_invalid" = "Probeer nog een woord toe te voegen";
"key_backup_setup_passphrase_confirm_passphrase_title" = "Bevestigen";
@@ -634,35 +634,35 @@
"key_backup_setup_passphrase_confirm_passphrase_valid" = "Top!";
"key_backup_setup_passphrase_confirm_passphrase_invalid" = "Wachtwoorden komen niet overeen";
"key_backup_setup_passphrase_set_passphrase_action" = "Wachtwoord instellen";
"key_backup_setup_passphrase_setup_recovery_key_info" = "Of beveilig uw back-up met een herstelsleutel, en bewaar deze op een veilige plaats.";
"key_backup_setup_passphrase_setup_recovery_key_action" = "(Geavanceerd) Instellen met herstelsleutel";
"key_backup_setup_passphrase_setup_recovery_key_info" = "Of beveilig uw back-up met een veiligheidssleutel en bewaar deze op een veilige plaats.";
"key_backup_setup_passphrase_setup_recovery_key_action" = "(Geavanceerd) Instellen met veiligheidssleutel";
"key_backup_setup_success_title" = "Klaar!";
// Success from passphrase
"key_backup_setup_success_from_passphrase_info" = "Er wordt een back-up van uw sleutels gemaakt.\n\nUw herstelsleutel is een veiligheidsnet - u kunt deze gebruiken om de toegang tot uw versleutelde berichten te herstellen als u uw wachtwoord zou vergeten.\n\nBewaar uw herstelsleutel op een heel veilig plaats, zoals een wachtwoordbeheerder (of een kluis).";
"key_backup_setup_success_from_passphrase_save_recovery_key_action" = "Herstelsleutel opslaan";
"key_backup_setup_success_from_passphrase_info" = "Er wordt een back-up van uw sleutels gemaakt.\n\nUw veiligheidssleutel is een veiligheidsnet - u kunt deze gebruiken om de toegang tot uw versleutelde berichten te herstellen als u uw wachtwoord zou vergeten.\n\nBewaar uw veiligheidssleutel op een heel veilige plaats, zoals een wachtwoordbeheerder (of een kluis).";
"key_backup_setup_success_from_passphrase_save_recovery_key_action" = "Veiligheidssleutel opslaan";
"key_backup_setup_success_from_passphrase_done_action" = "Klaar";
// Success from recovery key
"key_backup_setup_success_from_recovery_key_info" = "Er wordt een back-up van uw sleutels gemaakt.\n\nMaak een kopie van deze herstelsleutel en bewaar deze op een veilige plaats.";
"key_backup_setup_success_from_recovery_key_recovery_key_title" = "Herstelsleutel";
"key_backup_setup_success_from_recovery_key_info" = "Er wordt een back-up van uw sleutels gemaakt.\n\nMaak een kopie van deze veiligheidssleutel en bewaar deze op een veilige plaats.";
"key_backup_setup_success_from_recovery_key_recovery_key_title" = "Veiligheidssleutel";
"key_backup_setup_success_from_recovery_key_make_copy_action" = "Maak een kopie";
"key_backup_setup_success_from_recovery_key_made_copy_action" = "Ik heb een kopie gemaakt";
"key_backup_recover_title" = "Versleutelde berichten";
"key_backup_recover_invalid_passphrase_title" = "Onjuist herstelwachtwoord";
"key_backup_recover_invalid_passphrase" = "De back-up kon niet ontsleuteld worden met dit wachtwoord: controleer of u het herstelwachtwoord juist hebt ingevoerd.";
"key_backup_recover_invalid_recovery_key_title" = "Herstelsleutel komt niet overeen";
"key_backup_recover_invalid_recovery_key" = "De back-up kon niet ontsleuteld worden met deze sleutel: controleer of u de juiste herstelsleutel hebt ingevoerd.";
"key_backup_recover_from_passphrase_info" = "Gebruik uw herstelwachtwoord om uw versleutelde berichtgeschiedenis te ontgrendelen";
"key_backup_recover_invalid_passphrase_title" = "Onjuist veiligheidswachtwoord";
"key_backup_recover_invalid_passphrase" = "De back-up kon niet ontsleuteld worden met dit wachtwoord: controleer of u het veiligheidswachtwoord juist hebt ingevoerd.";
"key_backup_recover_invalid_recovery_key_title" = "Veiligheidssleutel komt niet overeen";
"key_backup_recover_invalid_recovery_key" = "De back-up kon niet ontsleuteld worden met deze sleutel: controleer of u de juiste veiligheidssleutel hebt ingevoerd.";
"key_backup_recover_from_passphrase_info" = "Gebruik uw veiligheidswachtwoord om uw versleutelde berichtengeschiedenis te ontgrendelen";
"key_backup_recover_from_passphrase_passphrase_title" = "Invoeren";
"key_backup_recover_from_passphrase_passphrase_placeholder" = "Voer wachtwoord in";
"key_backup_recover_from_passphrase_passphrase_placeholder" = "Wachtwoord invoeren";
"key_backup_recover_from_passphrase_recover_action" = "Geschiedenis ontgrendelen";
"key_backup_recover_from_passphrase_lost_passphrase_action_part1" = "Herstelwachtwoord vergeten? Dan kunt u ";
"key_backup_recover_from_passphrase_lost_passphrase_action_part2" = "uw herstelsleutel gebruiken";
"key_backup_recover_from_passphrase_lost_passphrase_action_part1" = "Veiligheidswachtwoord vergeten? Dan kunt u ";
"key_backup_recover_from_passphrase_lost_passphrase_action_part2" = "uw veiligheidssleutel gebruiken";
"key_backup_recover_from_passphrase_lost_passphrase_action_part3" = ".";
"key_backup_recover_from_recovery_key_info" = "Gebruik uw herstelsleutel om uw versleutelde berichtgeschiedenis te ontgrendelen";
"key_backup_recover_from_recovery_key_info" = "Gebruik uw veiligheidssleutel om uw versleutelde berichtengeschiedenis te ontgrendelen";
"key_backup_recover_from_recovery_key_recovery_key_title" = "Invoeren";
"key_backup_recover_from_recovery_key_recovery_key_placeholder" = "Voer herstelsleutel in";
"key_backup_recover_from_recovery_key_recovery_key_placeholder" = "Veiligheidssleutel invoeren";
"key_backup_recover_from_recovery_key_recover_action" = "Geschiedenis ontgrendelen";
"key_backup_recover_from_recovery_key_lost_recovery_key_action" = "Herstelsleutel verloren? U kunt er een nieuwe aanmaken in de instellingen.";
"key_backup_recover_from_recovery_key_lost_recovery_key_action" = "Veiligheidssleutel verloren? U kunt er een nieuwe aanmaken in de instellingen.";
"key_backup_recover_success_info" = "Back-up hersteld!";
"key_backup_recover_done_action" = "Klaar";
"key_backup_setup_banner_title" = "Verlies nooit uw versleutelde berichten";
@@ -913,7 +913,7 @@
// MARK: - Favourites
"favourites_empty_view_title" = "Favoriete gesprekken en personen";
"home_empty_view_information" = "De alles-in-één veilige chat app voor teams, vrienden en organisaties. Klik op de onderstaande + knop om gesprekken te starten met personen en groepen.";
"home_empty_view_information" = "De alles-in-één veilige chat-app voor teams, vrienden en organisaties. Druk op de + knop hieronder om personen en gesprekken toe te voegen.";
// MARK: - Home
@@ -1032,32 +1032,32 @@
"secrets_setup_recovery_key_done_action" = "Klaar";
"secrets_setup_recovery_key_export_action" = "Opslaan";
"secrets_setup_recovery_key_loading" = "Laden…";
"secrets_setup_recovery_key_information" = "Bewaar uw Herstelsleutel op een veilige plek. Het kan gebruikt worden voor het ontgrendelen van uw versleutelde berichten en data.";
"secrets_recovery_with_key_invalid_recovery_key_message" = "Verifieer dat u de juiste herstelsleutel heeft ingevoerd.";
"secrets_setup_recovery_key_information" = "Bewaar uw veiligheidssleutel op een veilige plek. Deze kan gebruikt worden om uw versleutelde berichten en data te ontsleutelen.";
"secrets_recovery_with_key_invalid_recovery_key_message" = "Verifieer dat u de juiste veiligheidssleutel heeft ingevoerd.";
"secrets_recovery_with_key_invalid_recovery_key_title" = "Geen toegang tot geheime opslag";
"secrets_recovery_with_key_recover_action" = "Gebruik sleutel";
"secrets_recovery_with_key_recovery_key_placeholder" = "Voer de herstelsleutel in";
"secrets_recovery_with_key_recovery_key_placeholder" = "Veiligheidssleutel invoeren";
"secrets_recovery_with_key_recovery_key_title" = "Invoeren";
"secrets_recovery_with_key_information_verify_device" = "Gebruik uw herstelsleutel om dit apparaat te verifiëren.";
"secrets_recovery_with_key_information_default" = "Ontvang toegang tot uw versleutelde berichtengeschiedenis en uw kruislings ondertekenen ID voor het verifiëren van andere sessie door het invoeren van uw Herstelsleutel.";
"secrets_recovery_with_key_information_verify_device" = "Gebruik uw veiligheidssleutel om dit apparaat te verifiëren.";
"secrets_recovery_with_key_information_default" = "Ontvang toegang tot uw versleutelde berichtengeschiedenis en kruislings ondertekenen voor het verifiëren van andere sessie door het invoeren van uw veiligheidssleutel.";
// Recover with key
"secrets_recovery_with_key_title" = "Herstelsleutel";
"secrets_recovery_with_passphrase_invalid_passphrase_message" = "Verifieer dat u het juiste Herstelwachtwoord heeft ingevoerd.";
"secrets_recovery_with_key_title" = "Veiligheidssleutel";
"secrets_recovery_with_passphrase_invalid_passphrase_message" = "Verifieer dat u het juiste veiligheidswachtwoord heeft ingevoerd.";
"secrets_recovery_with_passphrase_invalid_passphrase_title" = "Geen toegang tot geheime opslag";
"secrets_recovery_with_passphrase_lost_passphrase_action_part3" = ".";
"secrets_recovery_with_passphrase_lost_passphrase_action_part2" = "uw Herstelsleutel gebruiken";
"secrets_recovery_with_passphrase_lost_passphrase_action_part1" = "Herstelwachtwoord vergeten? Dan kunt u ";
"secrets_recovery_with_passphrase_recover_action" = "Gebruik Wachtwoord";
"secrets_recovery_with_passphrase_passphrase_placeholder" = "Voer uw Herstelwachtwoord in";
"secrets_recovery_with_passphrase_lost_passphrase_action_part2" = "uw veiligheidssleutel gebruiken";
"secrets_recovery_with_passphrase_lost_passphrase_action_part1" = "Veiligheidswachtwoord vergeten? Dan kunt u ";
"secrets_recovery_with_passphrase_recover_action" = "Gebruik wachtwoord";
"secrets_recovery_with_passphrase_passphrase_placeholder" = "Voer uw veiligheidswachtwoord in";
"secrets_recovery_with_passphrase_passphrase_title" = "Invoeren";
"secrets_recovery_with_passphrase_information_verify_device" = "Gebruik uw Herstelwachtwoord om dit apparaat te verifiëren.";
"secrets_recovery_with_passphrase_information_default" = "Ontvang toegang tot uw versleutelde berichtengeschiedenis en uw kruislings ondertekenen ID voor het verifiëren van andere sessies door het invoeren van uw Herstelwachtwoord.";
"secrets_recovery_with_passphrase_information_verify_device" = "Gebruik uw veiligheidswachtwoord om dit apparaat te verifiëren.";
"secrets_recovery_with_passphrase_information_default" = "Ontvang toegang tot uw versleutelde berichtengeschiedenis en kruislings ondertekenen voor het verifiëren van andere sessies door het invoeren van uw veiligheidswachtwoord.";
// Recover with passphrase
"secrets_recovery_with_passphrase_title" = "Herstelwachtwoord";
"secrets_recovery_with_passphrase_title" = "Veiligheidswachtwoord";
"secrets_recovery_reset_action_part_2" = "Alles opnieuw instellen";
// MARK: - Secrets recovery
@@ -1065,9 +1065,9 @@
"secrets_recovery_reset_action_part_1" = "Alle herstelopties vergeten of verloren? ";
"user_verification_session_details_verify_action_other_user" = "Handmatig verifiëren";
"user_verification_session_details_verify_action_current_user_manually" = "Handmatig middels een tekst";
"user_verification_session_details_verify_action_current_user" = "Interactief Verifiëren";
"user_verification_session_details_verify_action_current_user" = "Interactief verifiëren";
"user_verification_session_details_additional_information_untrusted_current_user" = "Als u zich niet heeft aangemeld bij deze sessie, is uw account wellicht geschonden.";
"user_verification_session_details_additional_information_untrusted_other_user" = "Totdat deze persoon de sessie vertrouwd zijn berichten gelabeld met een waarschuwing. Een alternatief is handmatig verifiëren.";
"user_verification_session_details_additional_information_untrusted_other_user" = "Totdat deze persoon deze sessie vertrouwd, zijn berichten gelabeld met waarschuwingen. Een andere mogelijkheid is om de persoon handmatig te verifiëren.";
"user_verification_session_details_information_untrusted_other_user" = " heeft zich in een nieuwe sessie aangemeld:";
"user_verification_session_details_information_untrusted_current_user" = "Verifieer deze sessie om het als vertrouwd te markeren en het toegang te geven tot versleutelde berichten:";
"user_verification_session_details_information_trusted_other_user_part2" = " verifieer het:";
@@ -1180,8 +1180,8 @@
"key_verification_verify_sas_title_emoji" = "Vergelijk de emoji's";
"device_verification_self_verify_wait_recover_secrets_checking_availability" = "Controleren op andere verificatie mogelijkheden...";
"device_verification_self_verify_wait_recover_secrets_additional_information" = "Wanneer u geen toegang meer heeft tot een bestaande sessie";
"device_verification_self_verify_wait_recover_secrets_with_passphrase" = "Uw Herstelwachtwoord of -sleutel gebruiken";
"device_verification_self_verify_wait_recover_secrets_without_passphrase" = "Herstelsleutel gebruiken";
"device_verification_self_verify_wait_recover_secrets_with_passphrase" = "Uw veiligheidswachtwoord of -sleutel gebruiken";
"device_verification_self_verify_wait_recover_secrets_without_passphrase" = "Veiligheidssleutel gebruiken";
"device_verification_self_verify_wait_additional_information" = "Dit werkt met Element en andere Matrix-apps die kruislings ondertekenen ondersteunen.";
"device_verification_self_verify_wait_information" = "Verifieer deze sessie vanaf een van uw andere sessies, om toegang te krijgen tot de versleutelde berichten.\n\nGebruik de laatste versie van Element op uw andere apparaten:";
"device_verification_self_verify_wait_new_sign_in_title" = "Verifieer deze login";
@@ -1266,7 +1266,7 @@
// Room widget permissions
"room_widget_permission_title" = "Widget laden";
"widget_picker_manage_integrations" = "Beheer integraties…";
"widget_integration_manager_disabled" = "U moet een integratebeheerder inschakelen in uw instellingen";
"widget_integration_manager_disabled" = "U moet integratiebeheer inschakelen in de instellingen";
"widget_menu_remove" = "Verwijderen voor iedereen";
"widget_menu_revoke_permission" = "Toegang intrekken voor mij";
"widget_menu_open_outside" = "Openen in browser";
@@ -1292,11 +1292,11 @@
"room_details_advanced_e2e_encryption_disabled_for_dm" = "Versleuteling is hier niet ingeschakeld.";
"room_details_advanced_e2e_encryption_enabled_for_dm" = "Versleuteling is hier ingeschakeld";
"room_details_advanced_room_id_for_dm" = "ID:";
"room_details_no_local_addresses_for_dm" = "Dit heeft geen lokaaladres";
"room_details_no_local_addresses_for_dm" = "Geen lokaaladres bekend";
"room_details_access_section_directory_toggle_for_dm" = "Weergeven in publieke groepsgesprekkencatalogus";
"room_details_access_section_anyone_for_dm" = "Iedereen die de koppeling kent, inclusief gasten";
"room_details_access_section_anyone_apart_from_guest_for_dm" = "Iedereen die de koppeling kent, behalve gasten";
"room_details_access_section_for_dm" = "Wie mag toegang hebben?";
"room_details_access_section_for_dm" = "Wie heeft toegang?";
"room_details_room_name_for_dm" = "Naam";
"room_details_photo_for_dm" = "Foto";
"room_details_title_for_dm" = "Details";
@@ -1343,17 +1343,17 @@
"security_settings_cryptography" = "CRYPTOGRAFIE";
"security_settings_crosssigning_complete_security" = "Beveiliging afronden";
"security_settings_crosssigning_reset" = "Reset";
"security_settings_crosssigning_bootstrap" = "Stel in";
"security_settings_crosssigning_info_ok" = "Cross-signing is klaar voor gebruik.";
"security_settings_crosssigning_bootstrap" = "Instellen";
"security_settings_crosssigning_info_ok" = "Kruiselings ondertekenen is klaar voor gebruik.";
"security_settings_crosssigning_info_trusted" = "Kruislings ondertekenen is ingeschakeld. U kunt andere personen en sessies verifiëren met kruislings ondertekenen, maar u kunt dit nog niet vanaf deze sessie doordat de versleutelingssleutel ontbreekt. Rond de beveiliging van deze sessie af.";
"security_settings_crosssigning_info_exists" = "Uw account heeft een kruislings ondertekenen ID, maar is nog niet geverifieerd door deze sessie. Rond de beveiliging van deze sessie af.";
"security_settings_crosssigning_info_not_bootstrapped" = "Kruislings ondertekenen is nog niet ingesteld.";
"security_settings_crosssigning" = "KRUISLINGS ONDERTEKENEN";
"security_settings_backup" = "BERICHTENBACK-UP";
"security_settings_secure_backup_delete" = "Verwijder backup";
"security_settings_secure_backup_delete" = "Back-up verwijderen";
"security_settings_secure_backup_synchronise" = "Synchroniseren";
"security_settings_secure_backup_setup" = "Instellen";
"security_settings_secure_backup_description" = "Waarborg uw toegang tot uw versleutelde berichten & data door de versleutelingssleutels op te slaan. Uw sleutels zullen worden beveiligd met een unieke beveiligingssleutel.";
"security_settings_secure_backup_description" = "Maak een back-up van uw versleutelingssleutel bij uw account data voor het geval u toegang verliest tot uw sessies. Uw sleutels zullen worden beveiligd met een unieke veiligheidssleutel.";
"security_settings_secure_backup" = "VEILIGE BACK-UP";
"security_settings_crypto_sessions_description_2" = "Als u deze inlog niet herkent, verander uw wachtwoord en reset uw Veilige Back-up.";
"security_settings_crypto_sessions_loading" = "Sessies laden…";
+3
View File
@@ -17,3 +17,6 @@
/* New message from a specific person, not referencing a room. Content included. */
"MSG_FROM_USER_WITH_CONTENT" = "%@: %@";
/* Group call from user, CallKit caller name */
"GROUP_CALL_FROM_USER" = "%@ (සමූහ ඇමතුම)";
+13
View File
@@ -1,3 +1,16 @@
// Titles
"title_home" = "මුල් පිටුව";
"warning" = "අවවාදයයි";
"join" = "එක්වන්න";
"save" = "සුරකින්න";
"cancel" = "අවලංගු කරන්න";
"remove" = "ඉවත් කරන්න";
"leave" = "හැරයන්න";
"start" = "අරඹන්න";
"create" = "සාදන්න";
"continue" = "ඉදිරියට";
"back" = "ආපසු";
"next" = "ඊලඟ";
"title_rooms" = "කාමර";
"title_people" = "මිනිසුන්";
"title_favourites" = "ප්‍රියතමයින්";
+1 -1
View File
@@ -19,7 +19,7 @@ import UIKit
/// Protocol describing a [Coordinator](http://khanlou.com/2015/10/coordinators-redux/).
/// Coordinators are the objects which control the navigation flow of the application.
/// It helps to isolate and reuse view controllers and pass dependencies down the navigation hierarchy.
protocol Coordinator: class {
protocol Coordinator: AnyObject {
/// Starts job of the coordinator.
func start()
+2
View File
@@ -85,6 +85,7 @@ internal enum Asset {
internal static let roomActionFavourite = ImageAsset(name: "room_action_favourite")
internal static let roomActionLeave = ImageAsset(name: "room_action_leave")
internal static let roomActionNotification = ImageAsset(name: "room_action_notification")
internal static let roomActionNotificationMuted = ImageAsset(name: "room_action_notification_muted")
internal static let roomActionPriorityHigh = ImageAsset(name: "room_action_priority_high")
internal static let roomActionPriorityLow = ImageAsset(name: "room_action_priority_low")
internal static let homeEmptyScreenArtwork = ImageAsset(name: "home_empty_screen_artwork")
@@ -144,6 +145,7 @@ internal enum Asset {
internal static let membersListIcon = ImageAsset(name: "members_list_icon")
internal static let modIcon = ImageAsset(name: "mod_icon")
internal static let moreReactions = ImageAsset(name: "more_reactions")
internal static let notifications = ImageAsset(name: "notifications")
internal static let scrollup = ImageAsset(name: "scrollup")
internal static let roomsEmptyScreenArtwork = ImageAsset(name: "rooms_empty_screen_artwork")
internal static let roomsEmptyScreenArtworkDark = ImageAsset(name: "rooms_empty_screen_artwork_dark")
+5
View File
@@ -172,6 +172,11 @@ internal enum StoryboardScene {
internal static let initialScene = InitialSceneType<Riot.RoomInfoListViewController>(storyboard: RoomInfoListViewController.self)
}
internal enum RoomNotificationSettingsViewController: StoryboardType {
internal static let storyboardName = "RoomNotificationSettingsViewController"
internal static let initialScene = InitialSceneType<Riot.RoomNotificationSettingsViewController>(storyboard: RoomNotificationSettingsViewController.self)
}
internal enum SecretsRecoveryWithKeyViewController: StoryboardType {
internal static let storyboardName = "SecretsRecoveryWithKeyViewController"
+44
View File
@@ -2014,6 +2014,10 @@ internal enum VectorL10n {
internal static var keyVerificationVerifyQrCodeScanCodeAction: String {
return VectorL10n.tr("Vector", "key_verification_verify_qr_code_scan_code_action")
}
/// Scan with this device
internal static var keyVerificationVerifyQrCodeScanCodeOtherDeviceAction: String {
return VectorL10n.tr("Vector", "key_verification_verify_qr_code_scan_code_other_device_action")
}
/// QR code has been successfully validated.
internal static var keyVerificationVerifyQrCodeScanOtherCodeSuccessMessage: String {
return VectorL10n.tr("Vector", "key_verification_verify_qr_code_scan_other_code_success_message")
@@ -2710,6 +2714,10 @@ internal enum VectorL10n {
internal static var roomDetailsNoLocalAddressesForDm: String {
return VectorL10n.tr("Vector", "room_details_no_local_addresses_for_dm")
}
/// Notifications
internal static var roomDetailsNotifs: String {
return VectorL10n.tr("Vector", "room_details_notifs")
}
/// Members
internal static var roomDetailsPeople: String {
return VectorL10n.tr("Vector", "room_details_people")
@@ -3018,6 +3026,42 @@ internal enum VectorL10n {
internal static var roomNoPrivilegesToCreateGroupCall: String {
return VectorL10n.tr("Vector", "room_no_privileges_to_create_group_call")
}
/// Account settings
internal static var roomNotifsSettingsAccountSettings: String {
return VectorL10n.tr("Vector", "room_notifs_settings_account_settings")
}
/// All Messages
internal static var roomNotifsSettingsAllMessages: String {
return VectorL10n.tr("Vector", "room_notifs_settings_all_messages")
}
/// Cancel
internal static var roomNotifsSettingsCancelAction: String {
return VectorL10n.tr("Vector", "room_notifs_settings_cancel_action")
}
/// Done
internal static var roomNotifsSettingsDoneAction: String {
return VectorL10n.tr("Vector", "room_notifs_settings_done_action")
}
/// Please note that mentions & keyword notifications are not available in encrypted rooms on mobile.
internal static var roomNotifsSettingsEncryptedRoomNotice: String {
return VectorL10n.tr("Vector", "room_notifs_settings_encrypted_room_notice")
}
/// You can manage notifications in %@
internal static func roomNotifsSettingsManageNotifications(_ p1: String) -> String {
return VectorL10n.tr("Vector", "room_notifs_settings_manage_notifications", p1)
}
/// Mentions and Keywords only
internal static var roomNotifsSettingsMentionsAndKeywords: String {
return VectorL10n.tr("Vector", "room_notifs_settings_mentions_and_keywords")
}
/// None
internal static var roomNotifsSettingsNone: String {
return VectorL10n.tr("Vector", "room_notifs_settings_none")
}
/// Notify me for
internal static var roomNotifsSettingsNotifyMeFor: String {
return VectorL10n.tr("Vector", "room_notifs_settings_notify_me_for")
}
/// Connectivity to the server has been lost.
internal static var roomOfflineNotification: String {
return VectorL10n.tr("Vector", "room_offline_notification")
+3 -1
View File
@@ -393,7 +393,9 @@ class CallPresenter: NSObject {
if let oldCallVC = self.callVCs.values.first,
self.presentedCallVC == nil,
!self.uiOperationQueue.containsPresentCallVCOperation,
!self.uiOperationQueue.containsEnterPiPOperation {
!self.uiOperationQueue.containsEnterPiPOperation,
let oldCall = oldCallVC.mxCall,
oldCall.state != .ended {
// present the call screen after dismissing this one
self.presentCallVC(oldCallVC)
}
@@ -17,7 +17,7 @@
import Foundation
@objc
protocol CallPresenterDelegate: class {
protocol CallPresenterDelegate: AnyObject {
// Call screens
func callPresenter(_ presenter: CallPresenter,
presentCallViewController viewController: UIViewController,
+1 -1
View File
@@ -23,7 +23,7 @@ import UIKit
case topLeft
}
@objc protocol PiPViewDelegate: class {
@objc protocol PiPViewDelegate: AnyObject {
@objc optional func pipView(_ view: PiPView, didMoveTo position: PiPViewPosition)
@objc optional func pipViewDidTap(_ view: PiPView)
}
+15 -1
View File
@@ -80,6 +80,7 @@ final class RiotSettings: NSObject {
static let roomMemberScreenShowIgnore = "roomMemberScreenShowIgnore"
static let unifiedSearchScreenShowPublicDirectory = "unifiedSearchScreenShowPublicDirectory"
static let hideSpaceBetaAnnounce = "hideSpaceBetaAnnounce"
static let secretsRecoveryAllowReset = "secretsRecoveryAllowReset"
}
static let shared = RiotSettings()
@@ -695,7 +696,7 @@ final class RiotSettings: NSObject {
}
}
// Mark: - Unified Search
// MARK: - Unified Search
var unifiedSearchScreenShowPublicDirectory: Bool {
get {
@@ -708,6 +709,19 @@ final class RiotSettings: NSObject {
}
}
// MARK: - Secrets Recovery
var secretsRecoveryAllowReset: Bool {
get {
guard defaults.object(forKey: UserDefaultsKeys.secretsRecoveryAllowReset) != nil else {
return BuildSettings.secretsRecoveryAllowReset
}
return defaults.bool(forKey: UserDefaultsKeys.secretsRecoveryAllowReset)
} set {
defaults.set(newValue, forKey: UserDefaultsKeys.secretsRecoveryAllowReset)
}
}
// MARK: - Beta
var hideSpaceBetaAnnounce: Bool {
+1 -1
View File
@@ -16,6 +16,6 @@
import Foundation
@objc protocol Themable: class {
@objc protocol Themable: AnyObject {
func update(theme: Theme)
}
+1 -1
View File
@@ -183,7 +183,7 @@ FOUNDATION_EXPORT NSString *const WidgetManagerErrorOpenIdTokenKey;
/**
Store the integration manager configuration for a user.
@param the integration manager configuration.
@param config the integration manager configuration.
@param userId the user id.
*/
- (void)setConfig:(WidgetManagerConfig*)config forUser:(NSString*)userId;
+8 -1
View File
@@ -76,10 +76,17 @@
Contructors.
@param roomId the id of the room.
@param emailInvitationParams, in case of an email invitation link, the query parameters extracted from the link.
@param mxSession the session to open the room preview with.
*/
- (instancetype)initWithRoomId:(NSString*)roomId andSession:(MXSession*)mxSession;
/**
Contructors.
@param roomId the id of the room.
@param emailInvitationParams in case of an email invitation link, the query parameters extracted from the link.
@param mxSession the session to open the room preview with.
*/
- (instancetype)initWithRoomId:(NSString*)roomId emailInvitationParams:(NSDictionary*)emailInvitationParams andSession:(MXSession*)mxSession;
/**
@@ -21,8 +21,12 @@ import Intents
import FLEX
#endif
/// The AppCoordinator is responsible of screen navigation and data injection at root application level. It decides if authentication or home screen should be shown and inject data needed for these flows, it changes the navigation stack on deep link, displays global warning.
/// This class should avoid to contain too many data management code not related to screen navigation logic. For example `MXSession` or push notification management should be handled in dedicated classes and report only navigation changes to the AppCoordinator.
/// The AppCoordinator is responsible of screen navigation and data injection at root application level. It decides
/// if authentication or home screen should be shown and inject data needed for these flows, it changes the navigation
/// stack on deep link, displays global warning.
/// This class should avoid to contain too many data management code not related to screen navigation logic. For example
/// `MXSession` or push notification management should be handled in dedicated classes and report only navigation
/// changes to the AppCoordinator.
final class AppCoordinator: NSObject, AppCoordinatorType {
// MARK: - Constants
@@ -83,7 +87,8 @@ final class AppCoordinator: NSObject, AppCoordinatorType {
}
func open(url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
// NOTE: As said in the Apple documentation be careful on security issues with Custom Scheme URL (see https://developer.apple.com/documentation/xcode/allowing_apps_and_websites_to_link_to_your_content/defining_a_custom_url_scheme_for_your_app)
// NOTE: As said in the Apple documentation be careful on security issues with Custom Scheme URL:
// https://developer.apple.com/documentation/xcode/allowing_apps_and_websites_to_link_to_your_content/defining_a_custom_url_scheme_for_your_app
do {
let deepLinkOption = try self.customSchemeURLParser.parse(url: url, options: options)
+2 -2
View File
@@ -173,7 +173,7 @@ UINavigationControllerDelegate
Log out all the accounts without confirmation.
Show the authentication screen on successful logout.
@param sendLogoutRequest Indicate whether send logout request to homeserver.
@param sendLogoutServerRequest Indicate whether send logout request to homeserver.
@param completion the block to execute at the end of the operation.
*/
- (void)logoutSendingRequestServer:(BOOL)sendLogoutServerRequest
@@ -183,7 +183,7 @@ UINavigationControllerDelegate
Present incoming key verification request to accept.
@param incomingKeyVerificationRequest The incoming key verification request.
@param The matrix session.
@param session The matrix session.
@return Indicate NO if the key verification screen could not be presented.
*/
- (BOOL)presentIncomingKeyVerificationRequest:(MXKeyVerificationRequest*)incomingKeyVerificationRequest
+3 -2
View File
@@ -351,6 +351,9 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
NSURL *messageSoundURL = [[NSBundle mainBundle] URLForResource:@"message" withExtension:@"caf"];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)messageSoundURL, &_messageSound);
// Set app info now as Mac (Designed for iPad) accesses it before didFinishLaunching is called
self.appInfo = AppInfo.current;
MXLogDebug(@"[AppDelegate] willFinishLaunchingWithOptions: Done");
return YES;
@@ -371,8 +374,6 @@ NSString *const AppDelegateUniversalLinkDidChangeNotification = @"AppDelegateUni
_configuration = [AppConfiguration new];
self.appInfo = AppInfo.current;
// Log app information
NSString *appDisplayName = self.appInfo.displayName;
NSString* appVersion = self.appVersion;
@@ -17,7 +17,7 @@
import UIKit
import Reusable
@objc protocol SocialLoginListViewDelegate: class {
@objc protocol SocialLoginListViewDelegate: AnyObject {
func socialLoginListView(_ socialLoginListView: SocialLoginListView, didTapSocialButtonWithIdentifier identifier: String)
}
@@ -19,7 +19,7 @@
import UIKit
import libPhoneNumber_iOS
@objc protocol DialpadViewControllerDelegate: class {
@objc protocol DialpadViewControllerDelegate: AnyObject {
@objc optional func dialpadViewControllerDidTapCall(_ viewController: DialpadViewController,
withPhoneNumber phoneNumber: String)
@objc optional func dialpadViewControllerDidTapClose(_ viewController: DialpadViewController)
@@ -18,7 +18,7 @@
import UIKit
@objc protocol CallTransferMainViewControllerDelegate: class {
@objc protocol CallTransferMainViewControllerDelegate: AnyObject {
func callTransferMainViewControllerDidComplete(_ viewController: CallTransferMainViewController,
consult: Bool,
contact: MXKContact?,
@@ -19,7 +19,7 @@
import UIKit
import Reusable
protocol CallTransferSelectContactViewControllerDelegate: class {
protocol CallTransferSelectContactViewControllerDelegate: AnyObject {
func callTransferSelectContactViewControllerDidSelectContact(_ viewController: CallTransferSelectContactViewController,
contact: MXKContact?)
}
+1 -1
View File
@@ -18,7 +18,7 @@ import Foundation
import UIKit
import AVFoundation
@objc protocol CameraPresenterDelegate: class {
@objc protocol CameraPresenterDelegate: AnyObject {
func cameraPresenter(_ presenter: CameraPresenter, didSelectImageData imageData: Data, withUTI uti: MXKUTI?)
func cameraPresenter(_ presenter: CameraPresenter, didSelectVideoAt url: URL)
func cameraPresenterDidCancel(_ cameraPresenter: CameraPresenter)
@@ -161,10 +161,15 @@
- (void)makeDirectEditedRoom:(BOOL)isDirect;
/**
Enable/disable the notifications for the selected room.
*/
Enable/disable the notifications for the selected room.
*/
- (void)muteEditedRoomNotifications:(BOOL)mute;
/**
Edit notification settings for the selected room.
*/
- (void)changeEditedRoomNotificationSettings;
/**
Show room directory.
*/
@@ -34,7 +34,7 @@
#import "Riot-Swift.h"
@interface RecentsViewController () <CreateRoomCoordinatorBridgePresenterDelegate, RoomsDirectoryCoordinatorBridgePresenterDelegate>
@interface RecentsViewController () <CreateRoomCoordinatorBridgePresenterDelegate, RoomsDirectoryCoordinatorBridgePresenterDelegate, RoomNotificationSettingsCoordinatorBridgePresenterDelegate>
{
// Tell whether a recents refresh is pending (suspended during editing mode).
BOOL isRefreshPending;
@@ -74,6 +74,8 @@
@property (nonatomic, strong) CustomSizedPresentationController *customSizedPresentationController;
@property (nonatomic, strong) RoomNotificationSettingsCoordinatorBridgePresenter *roomNotificationSettingsCoordinatorBridgePresenter;
@end
@implementation RecentsViewController
@@ -1031,12 +1033,31 @@
UIContextualAction *muteAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive
title:title
handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
[self muteEditedRoomNotifications:!isMuted];
if ([BuildSettings roomSettingsScreenShowNotificationsV2])
{
[self changeEditedRoomNotificationSettings];
}
else
{
[self muteEditedRoomNotifications:!isMuted];
}
completionHandler(YES);
}];
muteAction.backgroundColor = actionBackgroundColor;
UIImage *notificationImage = [UIImage imageNamed:@"room_action_notification"];
UIImage *notificationImage;
if([BuildSettings roomSettingsScreenShowNotificationsV2])
{
notificationImage = isMuted ? [UIImage imageNamed:@"room_action_notification_muted"] : [UIImage imageNamed:@"room_action_notification"];
}
else
{
notificationImage = [UIImage imageNamed:@"room_action_notification"];
}
notificationImage = [notificationImage vc_tintedImageUsingColor:isMuted ? unselectedColor : selectedColor];
muteAction.image = [notificationImage vc_notRenderedImage];
@@ -1298,6 +1319,23 @@
}
}
- (void)changeEditedRoomNotificationSettings
{
if (editedRoomId)
{
// Check whether the user didn't leave the room
MXRoom *room = [self.mainSession roomWithRoomId:editedRoomId];
if (room)
{
// navigate
self.roomNotificationSettingsCoordinatorBridgePresenter = [[RoomNotificationSettingsCoordinatorBridgePresenter alloc] initWithRoom:room];
self.roomNotificationSettingsCoordinatorBridgePresenter.delegate = self;
[self.roomNotificationSettingsCoordinatorBridgePresenter presentFrom:self animated:YES];
}
[self cancelEditionMode:isRefreshPending];
}
}
- (void)muteEditedRoomNotifications:(BOOL)mute
{
if (editedRoomId)
@@ -1307,27 +1345,27 @@
if (room)
{
[self startActivityIndicator];
if (mute)
{
[room mentionsOnly:^{
[self stopActivityIndicator];
// Leave editing mode
[self cancelEditionMode:isRefreshPending];
[self cancelEditionMode:self->isRefreshPending];
}];
}
else
{
[room allMessages:^{
[self stopActivityIndicator];
// Leave editing mode
[self cancelEditionMode:isRefreshPending];
[self cancelEditionMode:self->isRefreshPending];
}];
}
}
@@ -2219,4 +2257,11 @@
}
}
#pragma mark - RoomNotificationSettingsCoordinatorBridgePresenterDelegate
-(void)roomNotificationSettingsCoordinatorBridgePresenterDelegateDidComplete:(RoomNotificationSettingsCoordinatorBridgePresenter *)coordinatorBridgePresenter
{
[coordinatorBridgePresenter dismissWithAnimated:YES completion:nil];
self.roomNotificationSettingsCoordinatorBridgePresenter = nil;
}
@end
@@ -0,0 +1,39 @@
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
import Foundation
import Reusable
class TitleHeaderView: UITableViewHeaderFooterView {
@IBOutlet weak var label: UILabel!
func update(title: String) {
label.text = title.uppercased()
}
}
extension TitleHeaderView: NibReusable {}
extension TitleHeaderView: Themable {
func update(theme: Theme) {
contentView.backgroundColor = theme.headerBackgroundColor
label.textColor = theme.headerTextSecondaryColor
label.font = theme.fonts.body
}
}
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="18122" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="18093"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" id="Yhn-wn-PmC" customClass="TitleHeaderView" customModule="Riot" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="Yhn-wn-PmC" id="o2E-Jb-B0E">
<rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gq6-Mz-QTu">
<rect key="frame" x="20" y="11" width="374" height="22"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="Gq6-Mz-QTu" firstAttribute="bottom" secondItem="o2E-Jb-B0E" secondAttribute="bottomMargin" id="3FQ-Oa-GSW"/>
<constraint firstAttribute="trailingMargin" secondItem="Gq6-Mz-QTu" secondAttribute="trailing" id="NOy-36-cTp"/>
<constraint firstItem="Gq6-Mz-QTu" firstAttribute="top" secondItem="o2E-Jb-B0E" secondAttribute="topMargin" id="iyg-1J-QRk"/>
<constraint firstItem="Gq6-Mz-QTu" firstAttribute="leading" secondItem="o2E-Jb-B0E" secondAttribute="leadingMargin" id="rPi-h4-Odq"/>
</constraints>
</tableViewCellContentView>
<connections>
<outlet property="label" destination="Gq6-Mz-QTu" id="dWm-UN-U4w"/>
</connections>
<point key="canvasLocation" x="-86" y="-242"/>
</tableViewCell>
</objects>
</document>
@@ -74,7 +74,7 @@
/**
init the segmentedViewController with a list of UIViewControllers.
@param titles the section tiles
@param viewControllers the list of viewControllers to display.
@param someViewControllers the list of viewControllers to display.
@param defaultSelected index of the default selected UIViewController in the list.
*/
- (void)initWithTitles:(NSArray*)titles viewControllers:(NSArray*)someViewControllers defaultSelected:(NSUInteger)defaultSelected
@@ -18,7 +18,7 @@
import Foundation
protocol CreateRoomCoordinatorDelegate: class {
protocol CreateRoomCoordinatorDelegate: AnyObject {
func createRoomCoordinator(_ coordinator: CreateRoomCoordinatorType, didCreateNewRoom room: MXRoom)
func createRoomCoordinatorDidCancel(_ coordinator: CreateRoomCoordinatorType)
}
@@ -17,7 +17,7 @@
import UIKit
import Reusable
protocol ChooseAvatarTableViewCellDelegate: class {
protocol ChooseAvatarTableViewCellDelegate: AnyObject {
func chooseAvatarTableViewCellDidTapChooseAvatar(_ cell: ChooseAvatarTableViewCell, sourceView: UIView)
}
@@ -18,7 +18,7 @@
import Foundation
protocol EnterNewRoomDetailsCoordinatorDelegate: class {
protocol EnterNewRoomDetailsCoordinatorDelegate: AnyObject {
func enterNewRoomDetailsCoordinator(_ coordinator: EnterNewRoomDetailsCoordinatorType, didCreateNewRoom room: MXRoom)
func enterNewRoomDetailsCoordinatorDidCancel(_ coordinator: EnterNewRoomDetailsCoordinatorType)
}
@@ -18,11 +18,11 @@
import Foundation
protocol EnterNewRoomDetailsViewModelViewDelegate: class {
protocol EnterNewRoomDetailsViewModelViewDelegate: AnyObject {
func enterNewRoomDetailsViewModel(_ viewModel: EnterNewRoomDetailsViewModelType, didUpdateViewState viewSate: EnterNewRoomDetailsViewState)
}
protocol EnterNewRoomDetailsViewModelCoordinatorDelegate: class {
protocol EnterNewRoomDetailsViewModelCoordinatorDelegate: AnyObject {
func enterNewRoomDetailsViewModel(_ viewModel: EnterNewRoomDetailsViewModelType, didCreateNewRoom room: MXRoom)
func enterNewRoomDetailsViewModel(_ viewModel: EnterNewRoomDetailsViewModelType, didTapChooseAvatar sourceView: UIView)
func enterNewRoomDetailsViewModelDidCancel(_ viewModel: EnterNewRoomDetailsViewModelType)
@@ -16,7 +16,7 @@
import UIKit
@objc protocol CrossSigningSetupBannerCellDelegate: class {
@objc protocol CrossSigningSetupBannerCellDelegate: AnyObject {
func crossSigningSetupBannerCellDidTapCloseAction(_ cell: CrossSigningSetupBannerCell)
}
@@ -18,7 +18,7 @@
import Foundation
protocol CrossSigningSetupCoordinatorDelegate: class {
protocol CrossSigningSetupCoordinatorDelegate: AnyObject {
func crossSigningSetupCoordinatorDidComplete(_ coordinator: CrossSigningSetupCoordinatorType)
func crossSigningSetupCoordinatorDidCancel(_ coordinator: CrossSigningSetupCoordinatorType)
func crossSigningSetupCoordinator(_ coordinator: CrossSigningSetupCoordinatorType, didFailWithError error: Error)
@@ -16,7 +16,7 @@
import Foundation
@objc protocol GDPRConsentViewControllerDelegate: class {
@objc protocol GDPRConsentViewControllerDelegate: AnyObject {
func gdprConsentViewControllerDidConsentToGDPRWithSuccess(_ gdprConsentViewController: GDPRConsentViewController)
}
@@ -54,20 +54,20 @@
self.titleLabel.text = NSLocalizedStringFromTable(@"directory_search_results_title", @"Vector", nil);
// Do we need to display like ">20 results found" or "18 results found"?
NSString *descriptionLabel = (publicRoomsDirectoryDataSource.moreThanRoomsCount && publicRoomsDirectoryDataSource.roomsCount > 0) ? NSLocalizedStringFromTable(@"directory_search_results_more_than", @"Vector", nil) : NSLocalizedStringFromTable(@"directory_search_results", @"Vector", nil);
NSString *descriptionLabel = (publicRoomsDirectoryDataSource.searchResultsCountIsLimited && publicRoomsDirectoryDataSource.searchResultsCount > 0) ? NSLocalizedStringFromTable(@"directory_search_results_more_than", @"Vector", nil) : NSLocalizedStringFromTable(@"directory_search_results", @"Vector", nil);
self.descriptionLabel.text = [NSString stringWithFormat:descriptionLabel,
publicRoomsDirectoryDataSource.roomsCount,
publicRoomsDirectoryDataSource.searchResultsCount,
publicRoomsDirectoryDataSource.searchPattern];
}
else
{
self.titleLabel.text = NSLocalizedStringFromTable(@"directory_cell_title", @"Vector", nil);
self.descriptionLabel.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"directory_cell_description", @"Vector", nil),
publicRoomsDirectoryDataSource.roomsCount];
publicRoomsDirectoryDataSource.searchResultsCount];
}
if (publicRoomsDirectoryDataSource.roomsCount)
if (publicRoomsDirectoryDataSource.searchResultsCount)
{
self.userInteractionEnabled = YES;
self.chevronImageView.hidden = NO;
+19 -3
View File
@@ -347,7 +347,16 @@
tableViewCell.notificationsButton.tag = room.isMute || room.isMentionsOnly;
[tableViewCell.notificationsButton addTarget:self action:@selector(onNotificationsButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
tableViewCell.notificationsImageView.image = [UIImage imageNamed:@"room_action_notification"];
if ([BuildSettings roomSettingsScreenShowNotificationsV2])
{
tableViewCell.notificationsImageView.image = tableViewCell.notificationsButton.tag ? [UIImage imageNamed:@"room_action_notification_muted"] : [UIImage imageNamed:@"room_action_notification"];
}
else
{
tableViewCell.notificationsImageView.image = [UIImage imageNamed:@"room_action_notification"];
}
tableViewCell.notificationsImageView.tintColor = tableViewCell.notificationsButton.tag ? unselectedColor : selectedColor;
// Get the room tag (use only the first one).
@@ -663,8 +672,15 @@
MXRoom *room = [self.mainSession roomWithRoomId:editedRoomId];
if (room)
{
UIButton *button = (UIButton*)sender;
[self muteEditedRoomNotifications:!button.tag];
if ([BuildSettings roomSettingsScreenShowNotificationsV2])
{
[self changeEditedRoomNotificationSettings];
}
else
{
UIButton *button = (UIButton*)sender;
[self muteEditedRoomNotifications:!button.tag];
}
}
}
}
@@ -16,7 +16,7 @@
import Foundation
protocol KeyBackupRecoverCoordinatorDelegate: class {
protocol KeyBackupRecoverCoordinatorDelegate: AnyObject {
func keyBackupRecoverCoordinatorDidRecover(_ keyBackupRecoverCoordinator: KeyBackupRecoverCoordinatorType)
func keyBackupRecoverCoordinatorDidCancel(_ keyBackupRecoverCoordinator: KeyBackupRecoverCoordinatorType)
}
@@ -16,7 +16,7 @@
import Foundation
protocol KeyBackupRecoverFromPassphraseCoordinatorDelegate: class {
protocol KeyBackupRecoverFromPassphraseCoordinatorDelegate: AnyObject {
func keyBackupRecoverFromPassphraseCoordinatorDidRecover(_ keyBackupRecoverFromPassphraseCoordinator: KeyBackupRecoverFromPassphraseCoordinatorType)
func keyBackupRecoverFromPassphraseCoordinatorDoNotKnowPassphrase(_ keyBackupRecoverFromPassphraseCoordinator: KeyBackupRecoverFromPassphraseCoordinatorType)
func keyBackupRecoverFromPassphraseCoordinatorDidCancel(_ keyBackupRecoverFromPassphraseCoordinator: KeyBackupRecoverFromPassphraseCoordinatorType)
@@ -16,11 +16,11 @@
import Foundation
protocol KeyBackupRecoverFromPassphraseViewModelViewDelegate: class {
protocol KeyBackupRecoverFromPassphraseViewModelViewDelegate: AnyObject {
func keyBackupRecoverFromPassphraseViewModel(_ viewModel: KeyBackupRecoverFromPassphraseViewModelType, didUpdateViewState viewSate: KeyBackupRecoverFromPassphraseViewState)
}
protocol KeyBackupRecoverFromPassphraseViewModelCoordinatorDelegate: class {
protocol KeyBackupRecoverFromPassphraseViewModelCoordinatorDelegate: AnyObject {
func keyBackupRecoverFromPassphraseViewModelDidRecover(_ viewModel: KeyBackupRecoverFromPassphraseViewModelType)
func keyBackupRecoverFromPassphraseViewModelDidCancel(_ viewModel: KeyBackupRecoverFromPassphraseViewModelType)
func keyBackupRecoverFromPassphraseViewModelDoNotKnowPassphrase(_ viewModel: KeyBackupRecoverFromPassphraseViewModelType)
@@ -18,7 +18,7 @@
import Foundation
protocol KeyBackupRecoverFromPrivateKeyCoordinatorDelegate: class {
protocol KeyBackupRecoverFromPrivateKeyCoordinatorDelegate: AnyObject {
func keyBackupRecoverFromPrivateKeyCoordinatorDidRecover(_ coordinator: KeyBackupRecoverFromPrivateKeyCoordinatorType)
func keyBackupRecoverFromPrivateKeyCoordinatorDidPrivateKeyFail(_ coordinator: KeyBackupRecoverFromPrivateKeyCoordinatorType)
func keyBackupRecoverFromPrivateKeyCoordinatorDidCancel(_ coordinator: KeyBackupRecoverFromPrivateKeyCoordinatorType)
@@ -18,11 +18,11 @@
import Foundation
protocol KeyBackupRecoverFromPrivateKeyViewModelViewDelegate: class {
protocol KeyBackupRecoverFromPrivateKeyViewModelViewDelegate: AnyObject {
func keyBackupRecoverFromPrivateKeyViewModel(_ viewModel: KeyBackupRecoverFromPrivateKeyViewModelType, didUpdateViewState viewSate: KeyBackupRecoverFromPrivateKeyViewState)
}
protocol KeyBackupRecoverFromPrivateKeyViewModelCoordinatorDelegate: class {
protocol KeyBackupRecoverFromPrivateKeyViewModelCoordinatorDelegate: AnyObject {
func keyBackupRecoverFromPrivateKeyViewModelDidRecover(_ viewModel: KeyBackupRecoverFromPrivateKeyViewModelType)
func keyBackupRecoverFromPrivateKeyViewModelDidPrivateKeyFail(_ viewModel: KeyBackupRecoverFromPrivateKeyViewModelType)
func keyBackupRecoverFromPrivateKeyViewModelDidCancel(_ viewModel: KeyBackupRecoverFromPrivateKeyViewModelType)
@@ -16,7 +16,7 @@
import Foundation
protocol KeyBackupRecoverFromRecoveryKeyCoordinatorDelegate: class {
protocol KeyBackupRecoverFromRecoveryKeyCoordinatorDelegate: AnyObject {
func keyBackupRecoverFromPassphraseCoordinatorDidRecover(_ keyBackupRecoverFromRecoveryKeyCoordinator: KeyBackupRecoverFromRecoveryKeyCoordinatorType)
func keyBackupRecoverFromPassphraseCoordinatorDidCancel(_ keyBackupRecoverFromRecoveryKeyCoordinator: KeyBackupRecoverFromRecoveryKeyCoordinatorType)
}
@@ -16,11 +16,11 @@
import Foundation
protocol KeyBackupRecoverFromRecoveryKeyViewModelViewDelegate: class {
protocol KeyBackupRecoverFromRecoveryKeyViewModelViewDelegate: AnyObject {
func keyBackupRecoverFromPassphraseViewModel(_ viewModel: KeyBackupRecoverFromRecoveryKeyViewModelType, didUpdateViewState viewSate: KeyBackupRecoverFromRecoveryKeyViewState)
}
protocol KeyBackupRecoverFromRecoveryKeyViewModelCoordinatorDelegate: class {
protocol KeyBackupRecoverFromRecoveryKeyViewModelCoordinatorDelegate: AnyObject {
func keyBackupRecoverFromRecoveryKeyViewModelDidRecover(_ viewModel: KeyBackupRecoverFromRecoveryKeyViewModelType)
func keyBackupRecoverFromRecoveryKeyViewModelDidCancel(_ viewModel: KeyBackupRecoverFromRecoveryKeyViewModelType)
}
@@ -16,7 +16,7 @@
import UIKit
protocol KeyBackupRecoverSuccessViewControllerDelegate: class {
protocol KeyBackupRecoverSuccessViewControllerDelegate: AnyObject {
func keyBackupRecoverSuccessViewControllerDidTapDone(_ keyBackupRecoverSuccessViewController: KeyBackupRecoverSuccessViewController)
}
@@ -16,7 +16,7 @@
import UIKit
protocol KeyBackupSetupIntroViewControllerDelegate: class {
protocol KeyBackupSetupIntroViewControllerDelegate: AnyObject {
func keyBackupSetupIntroViewControllerDidTapSetupAction(_ keyBackupSetupIntroViewController: KeyBackupSetupIntroViewController)
func keyBackupSetupIntroViewControllerDidCancel(_ keyBackupSetupIntroViewController: KeyBackupSetupIntroViewController)
}
@@ -16,7 +16,7 @@
import Foundation
protocol KeyBackupSetupCoordinatorDelegate: class {
protocol KeyBackupSetupCoordinatorDelegate: AnyObject {
func keyBackupSetupCoordinatorDidCancel(_ keyBackupSetupCoordinator: KeyBackupSetupCoordinatorType)
func keyBackupSetupCoordinatorDidSetupRecoveryKey(_ keyBackupSetupCoordinator: KeyBackupSetupCoordinatorType)
}
@@ -16,7 +16,7 @@
import Foundation
protocol KeyBackupSetupPassphraseCoordinatorDelegate: class {
protocol KeyBackupSetupPassphraseCoordinatorDelegate: AnyObject {
func keyBackupSetupPassphraseCoordinator(_ keyBackupSetupPassphraseCoordinator: KeyBackupSetupPassphraseCoordinatorType, didCreateBackupFromPassphraseWithResultingRecoveryKey recoveryKey: String)
func keyBackupSetupPassphraseCoordinator(_ keyBackupSetupPassphraseCoordinator: KeyBackupSetupPassphraseCoordinatorType, didCreateBackupFromRecoveryKey recoveryKey: String)
func keyBackupSetupPassphraseCoordinatorDidCancel(_ keyBackupSetupPassphraseCoordinator: KeyBackupSetupPassphraseCoordinatorType)
@@ -16,12 +16,12 @@
import Foundation
protocol KeyBackupSetupPassphraseViewModelViewDelegate: class {
protocol KeyBackupSetupPassphraseViewModelViewDelegate: AnyObject {
func keyBackupSetupPassphraseViewModel(_ viewModel: KeyBackupSetupPassphraseViewModelType, didUpdateViewState viewSate: KeyBackupSetupPassphraseViewState)
func keyBackupSetupPassphraseViewModelShowSkipAlert(_ viewModel: KeyBackupSetupPassphraseViewModelType)
}
protocol KeyBackupSetupPassphraseViewModelCoordinatorDelegate: class {
protocol KeyBackupSetupPassphraseViewModelCoordinatorDelegate: AnyObject {
func keyBackupSetupPassphraseViewModel(_ viewModel: KeyBackupSetupPassphraseViewModelType, didCreateBackupFromPassphraseWithResultingRecoveryKey recoveryKey: String)
func keyBackupSetupPassphraseViewModel(_ viewModel: KeyBackupSetupPassphraseViewModelType, didCreateBackupFromRecoveryKey recoveryKey: String)
func keyBackupSetupPassphraseViewModelDidCancel(_ viewModel: KeyBackupSetupPassphraseViewModelType)
@@ -16,7 +16,7 @@
import UIKit
protocol KeyBackupSetupSuccessFromPassphraseViewControllerDelegate: class {
protocol KeyBackupSetupSuccessFromPassphraseViewControllerDelegate: AnyObject {
func keyBackupSetupSuccessFromPassphraseViewControllerDidTapDoneAction(_ viewController: KeyBackupSetupSuccessFromPassphraseViewController)
}
@@ -16,7 +16,7 @@
import UIKit
protocol KeyBackupSetupSuccessFromRecoveryKeyViewControllerDelegate: class {
protocol KeyBackupSetupSuccessFromRecoveryKeyViewControllerDelegate: AnyObject {
func keyBackupSetupSuccessFromRecoveryKeyViewControllerDidTapDoneAction(_ viewController: KeyBackupSetupSuccessFromRecoveryKeyViewController)
}
@@ -16,7 +16,7 @@
import UIKit
protocol KeyBackupSetupSuccessFromSecureBackupViewControllerDelegate: class {
protocol KeyBackupSetupSuccessFromSecureBackupViewControllerDelegate: AnyObject {
func keyBackupSetupSuccessFromSecureBackupViewControllerDidTapDoneAction(_ viewController: KeyBackupSetupSuccessFromSecureBackupViewController)
}
@@ -18,7 +18,7 @@
import Foundation
protocol KeyVerificationCoordinatorDelegate: class {
protocol KeyVerificationCoordinatorDelegate: AnyObject {
func keyVerificationCoordinatorDidComplete(_ coordinator: KeyVerificationCoordinatorType, otherUserId: String, otherDeviceId: String)
func keyVerificationCoordinatorDidCancel(_ coordinator: KeyVerificationCoordinatorType)
}
@@ -18,7 +18,7 @@
import Foundation
protocol KeyVerificationDataLoadingCoordinatorDelegate: class {
protocol KeyVerificationDataLoadingCoordinatorDelegate: AnyObject {
func keyVerificationDataLoadingCoordinator(_ coordinator: KeyVerificationDataLoadingCoordinatorType, didLoadUser user: MXUser, device: MXDeviceInfo)
func keyVerificationDataLoadingCoordinator(_ coordinator: KeyVerificationDataLoadingCoordinatorType, didAcceptKeyVerificationRequestWithTransaction transaction: MXKeyVerificationTransaction)
func keyVerificationDataLoadingCoordinator(_ coordinator: KeyVerificationDataLoadingCoordinatorType, didAcceptKeyVerificationRequest keyVerificationRequest: MXKeyVerificationRequest)
@@ -18,11 +18,11 @@
import Foundation
protocol KeyVerificationDataLoadingViewModelViewDelegate: class {
protocol KeyVerificationDataLoadingViewModelViewDelegate: AnyObject {
func keyVerificationDataLoadingViewModel(_ viewModel: KeyVerificationDataLoadingViewModelType, didUpdateViewState viewSate: KeyVerificationDataLoadingViewState)
}
protocol KeyVerificationDataLoadingViewModelCoordinatorDelegate: class {
protocol KeyVerificationDataLoadingViewModelCoordinatorDelegate: AnyObject {
func keyVerificationDataLoadingViewModel(_ viewModel: KeyVerificationDataLoadingViewModelType, didLoadUser user: MXUser, device: MXDeviceInfo)
func keyVerificationDataLoadingViewModel(_ viewModel: KeyVerificationDataLoadingViewModelType, didAcceptKeyVerificationWithTransaction transaction: MXKeyVerificationTransaction)
func keyVerificationDataLoadingViewModel(_ viewModel: KeyVerificationDataLoadingViewModelType, didAcceptKeyVerificationRequest keyVerificationRequest: MXKeyVerificationRequest)
@@ -18,7 +18,7 @@
import Foundation
protocol KeyVerificationScanConfirmationCoordinatorDelegate: class {
protocol KeyVerificationScanConfirmationCoordinatorDelegate: AnyObject {
func keyVerificationScanConfirmationCoordinatorDidComplete(_ coordinator: KeyVerificationScanConfirmationCoordinatorType)
func keyVerificationScanConfirmationCoordinatorDidCancel(_ coordinator: KeyVerificationScanConfirmationCoordinatorType)
}
@@ -18,11 +18,11 @@
import Foundation
protocol KeyVerificationScanConfirmationViewModelViewDelegate: class {
protocol KeyVerificationScanConfirmationViewModelViewDelegate: AnyObject {
func keyVerificationScanConfirmationViewModel(_ viewModel: KeyVerificationScanConfirmationViewModelType, didUpdateViewState viewSate: KeyVerificationScanConfirmationViewState)
}
protocol KeyVerificationScanConfirmationViewModelCoordinatorDelegate: class {
protocol KeyVerificationScanConfirmationViewModelCoordinatorDelegate: AnyObject {
func keyVerificationScanConfirmationViewModelDidComplete(_ viewModel: KeyVerificationScanConfirmationViewModelType)
func keyVerificationScanConfirmationViewModelDidCancel(_ viewModel: KeyVerificationScanConfirmationViewModelType)
}
@@ -18,7 +18,7 @@
import UIKit
protocol KeyVerificationVerifiedViewControllerDelegate: class {
protocol KeyVerificationVerifiedViewControllerDelegate: AnyObject {
func keyVerificationVerifiedViewControllerDidTapSetupAction(_ viewController: KeyVerificationVerifiedViewController)
func keyVerificationVerifiedViewControllerDidCancel(_ viewController: KeyVerificationVerifiedViewController)
}
@@ -18,7 +18,7 @@
import Foundation
protocol KeyVerificationVerifyBySASCoordinatorDelegate: class {
protocol KeyVerificationVerifyBySASCoordinatorDelegate: AnyObject {
func keyVerificationVerifyBySASCoordinatorDidComplete(_ coordinator: KeyVerificationVerifyBySASCoordinatorType)
func keyVerificationVerifyBySASCoordinatorDidCancel(_ coordinator: KeyVerificationVerifyBySASCoordinatorType)
}
@@ -18,11 +18,11 @@
import Foundation
protocol KeyVerificationVerifyBySASViewModelViewDelegate: class {
protocol KeyVerificationVerifyBySASViewModelViewDelegate: AnyObject {
func keyVerificationVerifyBySASViewModel(_ viewModel: KeyVerificationVerifyBySASViewModelType, didUpdateViewState viewSate: KeyVerificationVerifyViewState)
}
protocol KeyVerificationVerifyBySASViewModelCoordinatorDelegate: class {
protocol KeyVerificationVerifyBySASViewModelCoordinatorDelegate: AnyObject {
func keyVerificationVerifyViewModelDidComplete(_ viewModel: KeyVerificationVerifyBySASViewModelType)
func keyVerificationVerifyViewModelDidCancel(_ viewModel: KeyVerificationVerifyBySASViewModelType)
}
@@ -18,7 +18,7 @@
import Foundation
protocol KeyVerificationVerifyByScanningCoordinatorDelegate: class {
protocol KeyVerificationVerifyByScanningCoordinatorDelegate: AnyObject {
func keyVerificationVerifyByScanningCoordinatorDidCancel(_ coordinator: KeyVerificationVerifyByScanningCoordinatorType)
func keyVerificationVerifyByScanningCoordinator(_ coordinator: KeyVerificationVerifyByScanningCoordinatorType, didScanOtherQRCodeData qrCodeData: MXQRCodeData, withTransaction transaction: MXQRCodeTransaction)
func keyVerificationVerifyByScanningCoordinator(_ coordinator: KeyVerificationVerifyByScanningCoordinatorType, qrCodeDidScannedByOtherWithTransaction transaction: MXQRCodeTransaction)
@@ -143,7 +143,9 @@ final class KeyVerificationVerifyByScanningViewController: UIViewController {
self.titleLabel.text = VectorL10n.keyVerificationVerifyQrCodeTitle
self.informationLabel.text = VectorL10n.keyVerificationVerifyQrCodeInformation
self.scanCodeButton.setTitle(VectorL10n.keyVerificationVerifyQrCodeScanCodeAction, for: .normal)
// Hide until we have the type of the verification request
self.scanCodeButton.isHidden = true
self.cannotScanButton.setTitle(VectorL10n.keyVerificationVerifyQrCodeCannotScanAction, for: .normal)
}
@@ -157,8 +159,8 @@ final class KeyVerificationVerifyByScanningViewController: UIViewController {
self.render(error: error)
case .scannedCodeValidated(let isValid):
self.renderScannedCode(valid: isValid)
case .cancelled(let reason):
self.renderCancelled(reason: reason)
case .cancelled(let reason, let verificationKind):
self.renderCancelled(reason: reason, verificationKind: verificationKind)
case .cancelledByMe(let reason):
self.renderCancelledByMe(reason: reason)
}
@@ -195,10 +197,13 @@ final class KeyVerificationVerifyByScanningViewController: UIViewController {
switch viewData.verificationKind {
case .user:
informationText = VectorL10n.keyVerificationVerifyQrCodeInformation
self.scanCodeButton.setTitle(VectorL10n.keyVerificationVerifyQrCodeScanCodeAction, for: .normal)
default:
informationText = VectorL10n.keyVerificationVerifyQrCodeInformationOtherDevice
self.scanCodeButton.setTitle(VectorL10n.keyVerificationVerifyQrCodeScanCodeOtherDeviceAction, for: .normal)
}
self.scanCodeButton.isHidden = false
self.informationLabel.text = informationText
}
}
@@ -231,12 +236,21 @@ final class KeyVerificationVerifyByScanningViewController: UIViewController {
}
}
private func renderCancelled(reason: MXTransactionCancelCode) {
private func renderCancelled(reason: MXTransactionCancelCode,
verificationKind: KeyVerificationKind) {
self.activityPresenter.removeCurrentActivityIndicator(animated: true)
self.stopQRCodeScanningIfPresented()
self.errorPresenter.presentError(from: self.alertPresentingViewController, title: "", message: VectorL10n.deviceVerificationCancelled, animated: true) {
// if we're verifying with someone else, let the user know they cancelled.
// if we're verifying our own device, assume the user probably knows since it was them who
// cancelled on their other device
if verificationKind == .user {
self.errorPresenter.presentError(from: self.alertPresentingViewController, title: "", message: VectorL10n.deviceVerificationCancelled, animated: true) {
self.dismissQRCodeScanningIfPresented(animated: false)
self.viewModel.process(viewAction: .cancel)
}
} else {
self.dismissQRCodeScanningIfPresented(animated: false)
self.viewModel.process(viewAction: .cancel)
}
@@ -225,7 +225,7 @@ final class KeyVerificationVerifyByScanningViewModel: KeyVerificationVerifyBySca
return
}
self.unregisterTransactionDidStateChangeNotification()
self.update(viewState: .cancelled(reason))
self.update(viewState: .cancelled(cancelCode: reason, verificationKind: verificationKind))
case MXSASTransactionStateCancelledByMe:
guard let reason = transaction.reasonCancelCode else {
return
@@ -251,7 +251,7 @@ final class KeyVerificationVerifyByScanningViewModel: KeyVerificationVerifyBySca
return
}
self.unregisterTransactionDidStateChangeNotification()
self.update(viewState: .cancelled(reason))
self.update(viewState: .cancelled(cancelCode: reason, verificationKind: verificationKind))
case .cancelledByMe:
guard let reason = transaction.reasonCancelCode else {
return
@@ -18,11 +18,11 @@
import Foundation
protocol KeyVerificationVerifyByScanningViewModelViewDelegate: class {
protocol KeyVerificationVerifyByScanningViewModelViewDelegate: AnyObject {
func keyVerificationVerifyByScanningViewModel(_ viewModel: KeyVerificationVerifyByScanningViewModelType, didUpdateViewState viewSate: KeyVerificationVerifyByScanningViewState)
}
protocol KeyVerificationVerifyByScanningViewModelCoordinatorDelegate: class {
protocol KeyVerificationVerifyByScanningViewModelCoordinatorDelegate: AnyObject {
func keyVerificationVerifyByScanningViewModelDidCancel(_ viewModel: KeyVerificationVerifyByScanningViewModelType)
func keyVerificationVerifyByScanningViewModel(_ viewModel: KeyVerificationVerifyByScanningViewModelType, didScanOtherQRCodeData qrCodeData: MXQRCodeData, withTransaction transaction: MXQRCodeTransaction)
@@ -29,7 +29,7 @@ enum KeyVerificationVerifyByScanningViewState {
case loading
case loaded(viewData: KeyVerificationVerifyByScanningViewData)
case scannedCodeValidated(isValid: Bool)
case cancelled(MXTransactionCancelCode)
case cancelled(cancelCode: MXTransactionCancelCode, verificationKind: KeyVerificationKind)
case cancelledByMe(MXTransactionCancelCode)
case error(Error)
}
@@ -18,7 +18,7 @@
import Foundation
protocol DeviceVerificationIncomingCoordinatorDelegate: class {
protocol DeviceVerificationIncomingCoordinatorDelegate: AnyObject {
func deviceVerificationIncomingCoordinator(_ coordinator: DeviceVerificationIncomingCoordinatorType, didAcceptTransaction message: MXSASTransaction)
func deviceVerificationIncomingCoordinatorDidCancel(_ coordinator: DeviceVerificationIncomingCoordinatorType)
}
@@ -18,11 +18,11 @@
import Foundation
protocol DeviceVerificationIncomingViewModelViewDelegate: class {
protocol DeviceVerificationIncomingViewModelViewDelegate: AnyObject {
func deviceVerificationIncomingViewModel(_ viewModel: DeviceVerificationIncomingViewModelType, didUpdateViewState viewSate: DeviceVerificationIncomingViewState)
}
protocol DeviceVerificationIncomingViewModelCoordinatorDelegate: class {
protocol DeviceVerificationIncomingViewModelCoordinatorDelegate: AnyObject {
func deviceVerificationIncomingViewModel(_ viewModel: DeviceVerificationIncomingViewModelType, didAcceptTransaction transaction: MXSASTransaction)
func deviceVerificationIncomingViewModelDidCancel(_ viewModel: DeviceVerificationIncomingViewModelType)
}
@@ -18,7 +18,7 @@
import Foundation
protocol KeyVerificationManuallyVerifyCoordinatorDelegate: class {
protocol KeyVerificationManuallyVerifyCoordinatorDelegate: AnyObject {
func keyVerificationManuallyVerifyCoordinator(_ coordinator: KeyVerificationManuallyVerifyCoordinatorType, didVerifiedDeviceWithId deviceId: String, of userId: String)
func keyVerificationManuallyVerifyCoordinatorDidCancel(_ coordinator: KeyVerificationManuallyVerifyCoordinatorType)
}
@@ -18,11 +18,11 @@
import Foundation
protocol KeyVerificationManuallyVerifyViewModelViewDelegate: class {
protocol KeyVerificationManuallyVerifyViewModelViewDelegate: AnyObject {
func keyVerificationManuallyVerifyViewModel(_ viewModel: KeyVerificationManuallyVerifyViewModelType, didUpdateViewState viewSate: KeyVerificationManuallyVerifyViewState)
}
protocol KeyVerificationManuallyVerifyViewModelCoordinatorDelegate: class {
protocol KeyVerificationManuallyVerifyViewModelCoordinatorDelegate: AnyObject {
func keyVerificationManuallyVerifyViewModel(_ viewModel: KeyVerificationManuallyVerifyViewModelType, didVerifiedDeviceWithId deviceId: String, of userId: String)
func keyVerificationManuallyVerifyViewModelDidCancel(_ viewModel: KeyVerificationManuallyVerifyViewModelType)
}
@@ -18,7 +18,7 @@
import Foundation
protocol KeyVerificationSelfVerifyStartCoordinatorDelegate: class {
protocol KeyVerificationSelfVerifyStartCoordinatorDelegate: AnyObject {
func keyVerificationSelfVerifyStartCoordinator(_ coordinator: KeyVerificationSelfVerifyStartCoordinatorType, otherDidAcceptRequest request: MXKeyVerificationRequest)
@@ -18,11 +18,11 @@
import Foundation
protocol KeyVerificationSelfVerifyStartViewModelViewDelegate: class {
protocol KeyVerificationSelfVerifyStartViewModelViewDelegate: AnyObject {
func keyVerificationSelfVerifyStartViewModel(_ viewModel: KeyVerificationSelfVerifyStartViewModelType, didUpdateViewState viewSate: KeyVerificationSelfVerifyStartViewState)
}
protocol KeyVerificationSelfVerifyStartViewModelCoordinatorDelegate: class {
protocol KeyVerificationSelfVerifyStartViewModelCoordinatorDelegate: AnyObject {
func keyVerificationSelfVerifyStartViewModel(_ viewModel: KeyVerificationSelfVerifyStartViewModelType, otherDidAcceptRequest request: MXKeyVerificationRequest)
func keyVerificationSelfVerifyStartViewModelDidCancel(_ viewModel: KeyVerificationSelfVerifyStartViewModelType)
}
@@ -18,7 +18,7 @@
import Foundation
protocol KeyVerificationSelfVerifyWaitCoordinatorDelegate: class {
protocol KeyVerificationSelfVerifyWaitCoordinatorDelegate: AnyObject {
func keyVerificationSelfVerifyWaitCoordinator(_ coordinator: KeyVerificationSelfVerifyWaitCoordinatorType, didAcceptKeyVerificationRequest keyVerificationRequest: MXKeyVerificationRequest)
func keyVerificationSelfVerifyWaitCoordinator(_ coordinator: KeyVerificationSelfVerifyWaitCoordinatorType, didAcceptIncomingSASTransaction incomingSASTransaction: MXIncomingSASTransaction)
func keyVerificationSelfVerifyWaitCoordinatorDidCancel(_ coordinator: KeyVerificationSelfVerifyWaitCoordinatorType)
@@ -18,11 +18,11 @@
import Foundation
protocol KeyVerificationSelfVerifyWaitViewModelViewDelegate: class {
protocol KeyVerificationSelfVerifyWaitViewModelViewDelegate: AnyObject {
func keyVerificationSelfVerifyWaitViewModel(_ viewModel: KeyVerificationSelfVerifyWaitViewModelType, didUpdateViewState viewSate: KeyVerificationSelfVerifyWaitViewState)
}
protocol KeyVerificationSelfVerifyWaitViewModelCoordinatorDelegate: class {
protocol KeyVerificationSelfVerifyWaitViewModelCoordinatorDelegate: AnyObject {
func keyVerificationSelfVerifyWaitViewModel(_ viewModel: KeyVerificationSelfVerifyWaitViewModelType, didAcceptKeyVerificationRequest keyVerificationRequest: MXKeyVerificationRequest)
func keyVerificationSelfVerifyWaitViewModel(_ viewModel: KeyVerificationSelfVerifyWaitViewModelType, didAcceptIncomingSASTransaction incomingSASTransaction: MXIncomingSASTransaction)
func keyVerificationSelfVerifyWaitViewModelDidCancel(_ viewModel: KeyVerificationSelfVerifyWaitViewModelType)
@@ -18,7 +18,7 @@
import Foundation
protocol DeviceVerificationStartCoordinatorDelegate: class {
protocol DeviceVerificationStartCoordinatorDelegate: AnyObject {
func deviceVerificationStartCoordinator(_ coordinator: DeviceVerificationStartCoordinatorType, didCompleteWithOutgoingTransaction transaction: MXSASTransaction)
func deviceVerificationStartCoordinator(_ coordinator: DeviceVerificationStartCoordinatorType, didTransactionCancelled transaction: MXSASTransaction)
@@ -18,11 +18,11 @@
import Foundation
protocol DeviceVerificationStartViewModelViewDelegate: class {
protocol DeviceVerificationStartViewModelViewDelegate: AnyObject {
func deviceVerificationStartViewModel(_ viewModel: DeviceVerificationStartViewModelType, didUpdateViewState viewSate: DeviceVerificationStartViewState)
}
protocol DeviceVerificationStartViewModelCoordinatorDelegate: class {
protocol DeviceVerificationStartViewModelCoordinatorDelegate: AnyObject {
func deviceVerificationStartViewModelDidUseLegacyVerification(_ viewModel: DeviceVerificationStartViewModelType)
func deviceVerificationStartViewModel(_ viewModel: DeviceVerificationStartViewModelType, didCompleteWithOutgoingTransaction transaction: MXSASTransaction)
@@ -18,7 +18,7 @@
import Foundation
protocol UserVerificationSessionStatusCoordinatorDelegate: class {
protocol UserVerificationSessionStatusCoordinatorDelegate: AnyObject {
func userVerificationSessionStatusCoordinator(_ coordinator: UserVerificationSessionStatusCoordinatorType, wantsToVerifyDeviceWithId deviceId: String, for userId: String)
func userVerificationSessionStatusCoordinator(_ coordinator: UserVerificationSessionStatusCoordinatorType, wantsToManuallyVerifyDeviceWithId deviceId: String, for userId: String)
func userVerificationSessionStatusCoordinatorDidClose(_ coordinator: UserVerificationSessionStatusCoordinatorType)
@@ -18,11 +18,11 @@
import Foundation
protocol UserVerificationSessionStatusViewModelViewDelegate: class {
protocol UserVerificationSessionStatusViewModelViewDelegate: AnyObject {
func userVerificationSessionStatusViewModel(_ viewModel: UserVerificationSessionStatusViewModelType, didUpdateViewState viewSate: UserVerificationSessionStatusViewState)
}
protocol UserVerificationSessionStatusViewModelCoordinatorDelegate: class {
protocol UserVerificationSessionStatusViewModelCoordinatorDelegate: AnyObject {
func userVerificationSessionStatusViewModel(_ viewModel: UserVerificationSessionStatusViewModelType, wantsToVerifyDeviceWithId deviceId: String, for userId: String)
func userVerificationSessionStatusViewModel(_ viewModel: UserVerificationSessionStatusViewModelType, wantsToManuallyVerifyDeviceWithId deviceId: String, for userId: String)
func userVerificationSessionStatusViewModelDidClose(_ viewModel: UserVerificationSessionStatusViewModelType)
@@ -18,7 +18,7 @@
import Foundation
protocol UserVerificationSessionsStatusCoordinatorDelegate: class {
protocol UserVerificationSessionsStatusCoordinatorDelegate: AnyObject {
func userVerificationSessionsStatusCoordinatorDidClose(_ coordinator: UserVerificationSessionsStatusCoordinatorType)
func userVerificationSessionsStatusCoordinator(_ coordinator: UserVerificationSessionsStatusCoordinatorType, didSelectDeviceWithId deviceId: String, for userId: String)
}
@@ -18,11 +18,11 @@
import Foundation
protocol UserVerificationSessionsStatusViewModelViewDelegate: class {
protocol UserVerificationSessionsStatusViewModelViewDelegate: AnyObject {
func userVerificationSessionsStatusViewModel(_ viewModel: UserVerificationSessionsStatusViewModelType, didUpdateViewState viewSate: UserVerificationSessionsStatusViewState)
}
protocol UserVerificationSessionsStatusViewModelCoordinatorDelegate: class {
protocol UserVerificationSessionsStatusViewModelCoordinatorDelegate: AnyObject {
func userVerificationSessionsStatusViewModel(_ viewModel: UserVerificationSessionsStatusViewModelType, didSelectDeviceWithId deviceId: String, for userId: String)
func userVerificationSessionsStatusViewModelDidClose(_ viewModel: UserVerificationSessionsStatusViewModelType)
}
@@ -18,7 +18,7 @@
import Foundation
protocol UserVerificationStartCoordinatorDelegate: class {
protocol UserVerificationStartCoordinatorDelegate: AnyObject {
func userVerificationStartCoordinator(_ coordinator: UserVerificationStartCoordinatorType, otherDidAcceptRequest request: MXKeyVerificationRequest)
@@ -18,11 +18,11 @@
import Foundation
protocol UserVerificationStartViewModelViewDelegate: class {
protocol UserVerificationStartViewModelViewDelegate: AnyObject {
func userVerificationStartViewModel(_ viewModel: UserVerificationStartViewModelType, didUpdateViewState viewSate: UserVerificationStartViewState)
}
protocol UserVerificationStartViewModelCoordinatorDelegate: class {
protocol UserVerificationStartViewModelCoordinatorDelegate: AnyObject {
func userVerificationStartViewModel(_ viewModel: UserVerificationStartViewModelType, otherDidAcceptRequest request: MXKeyVerificationRequest)
@@ -18,7 +18,7 @@
import Foundation
protocol UserVerificationCoordinatorDelegate: class {
protocol UserVerificationCoordinatorDelegate: AnyObject {
func userVerificationCoordinatorDidComplete(_ coordinator: UserVerificationCoordinatorType)
}

Some files were not shown because too many files have changed in this diff Show More