mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-29 07:42:40 +00:00
Merge branch 'develop' into element_3579
This commit is contained in:
commit
50eca8d3e4
36 changed files with 487 additions and 369 deletions
57
CHANGES.rst
57
CHANGES.rst
|
@ -1,12 +1,66 @@
|
|||
Changes to be released in next version
|
||||
=================================================
|
||||
|
||||
✨ Features
|
||||
*
|
||||
|
||||
🙌 Improvements
|
||||
*
|
||||
|
||||
🐛 Bugfix
|
||||
*
|
||||
|
||||
⚠️ API Changes
|
||||
*
|
||||
|
||||
🗣 Translations
|
||||
*
|
||||
|
||||
🧱 Build
|
||||
*
|
||||
|
||||
Others
|
||||
*
|
||||
|
||||
Changes in 1.0.16 (2020-10-13)
|
||||
=================================================
|
||||
|
||||
✨ Features
|
||||
*
|
||||
|
||||
🙌 Improvements
|
||||
* Self-verification: Update complete security screen wording (#3743).
|
||||
|
||||
🐛 Bugfix
|
||||
*
|
||||
|
||||
⚠️ API Changes
|
||||
*
|
||||
|
||||
🗣 Translations
|
||||
*
|
||||
|
||||
🧱 Build
|
||||
*
|
||||
|
||||
Others
|
||||
*
|
||||
|
||||
Improvements:
|
||||
* Upgrade MatrixKit version ([v0.12.24](https://github.com/matrix-org/matrix-ios-kit/releases/tag/v0.12.24)).
|
||||
|
||||
Changes in 1.0.15 (2020-10-09)
|
||||
=================================================
|
||||
|
||||
✨ Features
|
||||
*
|
||||
|
||||
🙌 Improvements
|
||||
* Room: Make topic links tappable (#3713).
|
||||
* Room: Add more to long room topics (#3715).
|
||||
* Security screens: Update automatically shields when the trust changes.
|
||||
* Room: Add floating action button to invite members.
|
||||
* Pasteboard: Use MXKPasteboardManager.pasteboard on copy operations (#3732).
|
||||
|
||||
🐛 Bugfix
|
||||
* Push: Check crypto has keys to decrypt an event before decryption attempt, avoid sync loops on failure.
|
||||
|
@ -23,6 +77,9 @@ Changes to be released in next version
|
|||
Others
|
||||
*
|
||||
|
||||
Improvements:
|
||||
* Upgrade MatrixKit version ([v0.12.23](https://github.com/matrix-org/matrix-ios-kit/releases/tag/v0.12.23)).
|
||||
|
||||
Changes in 1.0.14 (2020-10-02)
|
||||
=================================================
|
||||
|
||||
|
|
2
Podfile
2
Podfile
|
@ -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.12.22'
|
||||
$matrixKitVersion = '0.12.24'
|
||||
# $matrixKitVersion = :local
|
||||
# $matrixKitVersion = {'develop' => 'develop'}
|
||||
|
||||
|
|
47
Podfile.lock
47
Podfile.lock
|
@ -16,6 +16,7 @@ PODS:
|
|||
- AFNetworking/NSURLSession
|
||||
- cmark (0.24.1)
|
||||
- DGCollectionViewLeftAlignFlowLayout (1.0.4)
|
||||
- Down (0.9.3)
|
||||
- DTCoreText (1.6.25):
|
||||
- DTCoreText/Core (= 1.6.25)
|
||||
- DTFoundation/Core (~> 1.7.5)
|
||||
|
@ -52,44 +53,45 @@ PODS:
|
|||
- MatomoTracker (7.2.1):
|
||||
- MatomoTracker/Core (= 7.2.1)
|
||||
- MatomoTracker/Core (7.2.1)
|
||||
- MatrixKit (0.12.22):
|
||||
- cmark (~> 0.24.1)
|
||||
- MatrixKit (0.12.24):
|
||||
- Down (~> 0.9.3)
|
||||
- DTCoreText (~> 1.6.23)
|
||||
- HPGrowingTextView (~> 1.1)
|
||||
- libPhoneNumber-iOS (~> 0.9.13)
|
||||
- MatrixKit/Core (= 0.12.22)
|
||||
- MatrixSDK (= 0.16.16)
|
||||
- MatrixKit/AppExtension (0.12.22):
|
||||
- cmark (~> 0.24.1)
|
||||
- MatrixKit/Core (= 0.12.24)
|
||||
- MatrixSDK (= 0.16.18)
|
||||
- MatrixKit/AppExtension (0.12.24):
|
||||
- Down (~> 0.9.3)
|
||||
- DTCoreText (~> 1.6.23)
|
||||
- DTCoreText/Extension
|
||||
- HPGrowingTextView (~> 1.1)
|
||||
- libPhoneNumber-iOS (~> 0.9.13)
|
||||
- MatrixSDK (= 0.16.16)
|
||||
- MatrixKit/Core (0.12.22):
|
||||
- cmark (~> 0.24.1)
|
||||
- MatrixSDK (= 0.16.18)
|
||||
- MatrixKit/Core (0.12.24):
|
||||
- Down (~> 0.9.3)
|
||||
- DTCoreText (~> 1.6.23)
|
||||
- HPGrowingTextView (~> 1.1)
|
||||
- libPhoneNumber-iOS (~> 0.9.13)
|
||||
- MatrixSDK (= 0.16.16)
|
||||
- MatrixSDK (0.16.16):
|
||||
- MatrixSDK/Core (= 0.16.16)
|
||||
- MatrixSDK/Core (0.16.16):
|
||||
- MatrixSDK (= 0.16.18)
|
||||
- MatrixSDK (0.16.18):
|
||||
- MatrixSDK/Core (= 0.16.18)
|
||||
- MatrixSDK/Core (0.16.18):
|
||||
- AFNetworking (~> 4.0.0)
|
||||
- GZIP (~> 1.2.2)
|
||||
- libbase58 (~> 0.1.4)
|
||||
- OLMKit (~> 3.1.0)
|
||||
- Realm (~> 4.4.0)
|
||||
- MatrixSDK/JingleCallStack (0.16.16):
|
||||
- MatrixSDK/JingleCallStack (0.16.18):
|
||||
- JitsiMeetSDK (~> 2.8.1)
|
||||
- MatrixSDK/Core
|
||||
- MatrixSDK/SwiftSupport (0.16.16):
|
||||
- MatrixSDK/SwiftSupport (0.16.18):
|
||||
- MatrixSDK/Core
|
||||
- OLMKit (3.1.0):
|
||||
- OLMKit/olmc (= 3.1.0)
|
||||
- OLMKit/olmcpp (= 3.1.0)
|
||||
- OLMKit/olmc (3.1.0)
|
||||
- OLMKit/olmcpp (3.1.0)
|
||||
- ReadMoreTextView (3.0.1)
|
||||
- Realm (4.4.1):
|
||||
- Realm/Headers (= 4.4.1)
|
||||
- Realm/Headers (4.4.1)
|
||||
|
@ -114,12 +116,13 @@ DEPENDENCIES:
|
|||
- KeychainAccess (~> 4.2)
|
||||
- KTCenterFlowLayout (~> 1.3.1)
|
||||
- MatomoTracker (~> 7.2.0)
|
||||
- MatrixKit (= 0.12.22)
|
||||
- MatrixKit/AppExtension (= 0.12.22)
|
||||
- MatrixKit (= 0.12.24)
|
||||
- MatrixKit/AppExtension (= 0.12.24)
|
||||
- MatrixSDK
|
||||
- MatrixSDK/JingleCallStack
|
||||
- MatrixSDK/SwiftSupport
|
||||
- OLMKit
|
||||
- ReadMoreTextView (~> 3.0.1)
|
||||
- Reusable (~> 4.1)
|
||||
- SwiftGen (~> 6.1)
|
||||
- SwiftLint (~> 0.36.0)
|
||||
|
@ -131,6 +134,7 @@ SPEC REPOS:
|
|||
- AFNetworking
|
||||
- cmark
|
||||
- DGCollectionViewLeftAlignFlowLayout
|
||||
- Down
|
||||
- DTCoreText
|
||||
- DTFoundation
|
||||
- FlowCommoniOS
|
||||
|
@ -146,6 +150,7 @@ SPEC REPOS:
|
|||
- MatrixKit
|
||||
- MatrixSDK
|
||||
- OLMKit
|
||||
- ReadMoreTextView
|
||||
- Realm
|
||||
- Reusable
|
||||
- SwiftGen
|
||||
|
@ -157,6 +162,7 @@ SPEC CHECKSUMS:
|
|||
AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce
|
||||
cmark: 1d9ad0375e3b9fa281732e992467903606015520
|
||||
DGCollectionViewLeftAlignFlowLayout: a0fa58797373ded039cafba8133e79373d048399
|
||||
Down: 4553b984236807e384fa0ef7c7e360ef9f7c425d
|
||||
DTCoreText: e92f4cf6b36d9d71ce4436d12cf089d74ab0596b
|
||||
DTFoundation: 767ca882209ef4d5132ec7e702526d5ed5bb71a2
|
||||
FlowCommoniOS: 1647a1775b988f5d97202f635bcbcbce4f4c46a1
|
||||
|
@ -169,9 +175,10 @@ SPEC CHECKSUMS:
|
|||
libbase58: 7c040313537b8c44b6e2d15586af8e21f7354efd
|
||||
libPhoneNumber-iOS: 0a32a9525cf8744fe02c5206eb30d571e38f7d75
|
||||
MatomoTracker: 246b6b0693cf39b356134dec7561f719d3538b96
|
||||
MatrixKit: 4bb9215ce31b3fa5604c9c862783fbb5fbd549c9
|
||||
MatrixSDK: 12259762d604dd351313e4d9e65cc48e16377247
|
||||
MatrixKit: f7fd6a0f152aa1c0b71457c512025bb202343cba
|
||||
MatrixSDK: 7bdaee197004919ae34670d5ba043d5bff95e4df
|
||||
OLMKit: 4ee0159d63feeb86d836fdcfefe418e163511639
|
||||
ReadMoreTextView: 19147adf93abce6d7271e14031a00303fe28720d
|
||||
Realm: 4eb04d7487bd43c0581256f40b424eafb711deff
|
||||
Reusable: 53a9acf5c536f229b31b5865782414b508252ddb
|
||||
SwiftGen: 62e69d127507be1538d4263e137b2290cd6ab272
|
||||
|
@ -179,6 +186,6 @@ SPEC CHECKSUMS:
|
|||
zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c
|
||||
ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb
|
||||
|
||||
PODFILE CHECKSUM: afd7bcb0438772ab41f407ed18c47cb052e95bff
|
||||
PODFILE CHECKSUM: 67035ff6c96ebee323589c4919aff428e315d5de
|
||||
|
||||
COCOAPODS: 1.9.3
|
||||
|
|
|
@ -7277,7 +7277,7 @@
|
|||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1.0.15;
|
||||
CURRENT_PROJECT_VERSION = 1.0.17;
|
||||
DEFINES_MODULE = YES;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
|
@ -7297,7 +7297,7 @@
|
|||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
MARKETING_VERSION = 1.0.15;
|
||||
MARKETING_VERSION = 1.0.17;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
|
@ -7336,7 +7336,7 @@
|
|||
CODE_SIGN_IDENTITY = "iPhone Distribution";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
CURRENT_PROJECT_VERSION = 1.0.15;
|
||||
CURRENT_PROJECT_VERSION = 1.0.17;
|
||||
DEFINES_MODULE = YES;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
|
@ -7349,7 +7349,7 @@
|
|||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
MARKETING_VERSION = 1.0.15;
|
||||
MARKETING_VERSION = 1.0.17;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
|
|
23
Riot/Assets/Images.xcassets/Room/add_member_floating_action.imageset/Contents.json
vendored
Normal file
23
Riot/Assets/Images.xcassets/Room/add_member_floating_action.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "FAB.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "FAB@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "FAB@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Riot/Assets/Images.xcassets/Room/add_member_floating_action.imageset/FAB.png
vendored
Normal file
BIN
Riot/Assets/Images.xcassets/Room/add_member_floating_action.imageset/FAB.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
Riot/Assets/Images.xcassets/Room/add_member_floating_action.imageset/FAB@2x.png
vendored
Normal file
BIN
Riot/Assets/Images.xcassets/Room/add_member_floating_action.imageset/FAB@2x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
BIN
Riot/Assets/Images.xcassets/Room/add_member_floating_action.imageset/FAB@3x.png
vendored
Normal file
BIN
Riot/Assets/Images.xcassets/Room/add_member_floating_action.imageset/FAB@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
|
@ -1,5 +1,5 @@
|
|||
/* New message from a specific person, not referencing a room */
|
||||
"MSG_FROM_USER" = "Missatge de %@";
|
||||
"MSG_FROM_USER" = "%@ ha enviat un missatge";
|
||||
/* New message from a specific person in a named room */
|
||||
"MSG_FROM_USER_IN_ROOM" = "%@ publicat a %@";
|
||||
/* New message from a specific person, not referencing a room. Content included. */
|
||||
|
@ -11,7 +11,7 @@
|
|||
/* New action message from a specific person in a named room. */
|
||||
"ACTION_FROM_USER_IN_ROOM" = "%@: * %@ %@";
|
||||
/* New action message from a specific person, not referencing a room. */
|
||||
"IMAGE_FROM_USER" = "%@ t'ha enviat una foto %@";
|
||||
"IMAGE_FROM_USER" = "%@ ha enviat una foto %@";
|
||||
/* New action message from a specific person in a named room. */
|
||||
"IMAGE_FROM_USER_IN_ROOM" = "%@ ha publicat una foto %@ a %@";
|
||||
/* Multiple unread messages in a room */
|
||||
|
@ -50,3 +50,14 @@
|
|||
"SINGLE_UNREAD_IN_ROOM" = "Has rebut un missatge a %@";
|
||||
/* A single unread message */
|
||||
"SINGLE_UNREAD" = "Has rebut un missatge";
|
||||
/* Message title for a specific person in a named room */
|
||||
"MSG_FROM_USER_IN_ROOM_TITLE" = "%@ a %@";
|
||||
/* Sticker from a specific person, not referencing a room. */
|
||||
"STICKER_FROM_USER" = "%@ t’ha enviat una enganxina";
|
||||
/* New message indicator on unknown room */
|
||||
"MESSAGE" = "Missatge";
|
||||
/* New message indicator from a DM */
|
||||
"MESSAGE_FROM_X" = "Missatge de %@";
|
||||
/* New message indicator on a room */
|
||||
"MESSAGE_IN_X" = "Missatge a %@";
|
||||
"KEY_VERIFICATION_REQUEST_FROM_USER" = "%@ vol verificar";
|
||||
|
|
|
@ -552,3 +552,18 @@
|
|||
// Re-request confirmation dialog
|
||||
"rerequest_keys_alert_title" = "Sol·licitud enviada";
|
||||
"rerequest_keys_alert_message" = "Inicia Element en un altre dispositiu que pugui desxifrar el missatge per que pugui enviar les claus a aquest dispositiu.";
|
||||
// String for App Store
|
||||
"store_short_description" = "Xat/VoIP segur i descentralitzat";
|
||||
"close" = "Tanca";
|
||||
"skip" = "Salta";
|
||||
"joined" = "Unit";
|
||||
"switch" = "Canvia";
|
||||
"more" = "Més";
|
||||
// Accessibility
|
||||
"accessibility_checkbox_label" = "casella de selecció";
|
||||
// MARK: Clients
|
||||
"client_desktop_name" = "Element Escriptori";
|
||||
"client_web_name" = "Element Web";
|
||||
"client_ios_name" = "Element iOS";
|
||||
"client_android_name" = "Element Android";
|
||||
"auth_login_single_sign_on" = "Inicia sessió amb inici senzill";
|
||||
|
|
|
@ -1187,7 +1187,7 @@
|
|||
"pin_protection_choose_pin_welcome_after_login" = "Willkommen zurück.";
|
||||
"pin_protection_choose_pin_welcome_after_register" = "Willkommen.";
|
||||
"pin_protection_not_allowed_pin" = "Aus Sicherheitsgründen ist diese PIN nicht verfügbar. Bitte versuche es mit einer anderen PIN";
|
||||
"pin_protection_explanatory" = "PINs helfen dein Profil, deine Nachrichten und Kontakte so zu sichern, dass nur du Zugriff auf sie hast.";
|
||||
"pin_protection_explanatory" = "Das Einrichten einer PIN schützt Daten wie Nachrichten und Kontakten so, dass nur du Zugriff auf sie hast, indem du die PIN beim Starten der App eingibst.";
|
||||
"searchable_directory_create_new_room" = "Erstelle einen neuen Raum";
|
||||
"searchable_directory_x_network" = "%@ Netzwerk";
|
||||
"searchable_directory_search_placeholder" = "Name oder ID";
|
||||
|
@ -1210,3 +1210,20 @@
|
|||
"room_info_list_one_member" = "1 Mitglied";
|
||||
"room_info_list_several_members" = "%@ Mitglieder";
|
||||
"room_info_list_section_other" = "Sonstige";
|
||||
"room_participants_leave_prompt_title_for_dm" = "Verlassen";
|
||||
"room_participants_filter_room_members_for_dm" = "Mitglieder filtern";
|
||||
"room_participants_security_information_room_not_encrypted_for_dm" = "Die Nachrichten hier sind nicht Ende-zu-Ende verschlüsselt.";
|
||||
"room_participants_leave_prompt_msg_for_dm" = "Bist du sicher, dass du die Konversation verlassen möchtest?";
|
||||
"room_participants_security_information_room_encrypted_for_dm" = "Nachrichten hier sind Ende-zu-Ende verschlüsselt.\n\nDeine Nachrichten sind mit digitalen Schlüsseln gesichert, nur du und der/die Empfänger!n haben die einzigen Schlüssel, um jene zu entsperren.";
|
||||
"room_details_title_for_dm" = "Details";
|
||||
"room_details_photo_for_dm" = "Bild";
|
||||
"room_details_room_name_for_dm" = "Name";
|
||||
"room_details_access_section_for_dm" = "Wer hat Zugriff hierauf?";
|
||||
"room_details_access_section_anyone_apart_from_guest_for_dm" = "Alle, die den Link kennen (ausgenommen Gäste)";
|
||||
"room_details_access_section_anyone_for_dm" = "Alle, die den Link kennen (auch Gäste)";
|
||||
"room_details_access_section_directory_toggle_for_dm" = "Im Raum-Verzeichnis auflisten";
|
||||
"room_details_no_local_addresses_for_dm" = "Keine lokalen Adressen vorhanden";
|
||||
"room_details_advanced_room_id_for_dm" = "ID:";
|
||||
"room_details_advanced_e2e_encryption_enabled_for_dm" = "Verschlüsselung ist hier aktiviert";
|
||||
"room_details_advanced_e2e_encryption_disabled_for_dm" = "Verschlüsselung ist hier nicht aktiviert.";
|
||||
"pin_protection_kick_user_alert_message" = "Zu viele Fehler. Du wurdest ausgeloggt";
|
||||
|
|
|
@ -67,12 +67,6 @@
|
|||
// Accessibility
|
||||
"accessibility_checkbox_label" = "checkbox";
|
||||
|
||||
// MARK: Clients
|
||||
"client_desktop_name" = "Element Desktop";
|
||||
"client_web_name" = "Element Web";
|
||||
"client_ios_name" = "Element iOS";
|
||||
"client_android_name" = "Element Android";
|
||||
|
||||
// Authentication
|
||||
"auth_login" = "Log in";
|
||||
"auth_register" = "Register";
|
||||
|
@ -1137,7 +1131,7 @@
|
|||
"device_verification_self_verify_wait_title" = "Complete security";
|
||||
"device_verification_self_verify_wait_new_sign_in_title" = "Verify this login";
|
||||
"device_verification_self_verify_wait_information" = "Verify this session from one of your other sessions, granting it access to encrypted messages.\n\nUse the latest Element on your other devices:";
|
||||
"device_verification_self_verify_wait_additional_information" = "or another cross-signing capable Matrix client";
|
||||
"device_verification_self_verify_wait_additional_information" = "This works with Element and other cross-signing capable Matrix cients.";
|
||||
"device_verification_self_verify_wait_recover_secrets_without_passphrase" = "Use Recovery Key";
|
||||
"device_verification_self_verify_wait_recover_secrets_with_passphrase" = "Use Recovery Passphrase or Key";
|
||||
"device_verification_self_verify_wait_recover_secrets_additional_information" = "If you can't accessing an existing session";
|
||||
|
|
|
@ -1147,7 +1147,7 @@
|
|||
"pin_protection_choose_pin_welcome_after_login" = "Tere tulemast tagasi.";
|
||||
"pin_protection_choose_pin_welcome_after_register" = "Tere tulemast.";
|
||||
"pin_protection_not_allowed_pin" = "Turvapõhjustel seda PIN-kooi ei saa kasutada. Palun vali mõnu muu PIN-kood";
|
||||
"pin_protection_explanatory" = "PIN-kood aitab tagada, et vaid sina ise pääsed ligi oma profiilile, sõnumitele ja kontaktidele.";
|
||||
"pin_protection_explanatory" = "PIN-koodi seadistamine aitab tagada, et vaid sina ise pääsed ligi oma profiilile, sõnumitele ja kontaktidele, kui sisestad PIN-koodi rakenduse käivitamisel.";
|
||||
"searchable_directory_create_new_room" = "Loo uus jututuba";
|
||||
"searchable_directory_x_network" = "%@ võrk";
|
||||
"searchable_directory_search_placeholder" = "Nimi või Matrix'i tunnus";
|
||||
|
@ -1170,3 +1170,20 @@
|
|||
"room_info_list_one_member" = "1 liige";
|
||||
"room_info_list_several_members" = "%@ liiget";
|
||||
"room_info_list_section_other" = "Muud";
|
||||
"room_participants_leave_prompt_title_for_dm" = "Lahku";
|
||||
"room_participants_leave_prompt_msg_for_dm" = "Kas oled kindel, et soovid lahkuda jututoast?";
|
||||
"room_participants_filter_room_members_for_dm" = "Filtreeri jututoa liikmeid";
|
||||
"room_participants_security_information_room_not_encrypted_for_dm" = "See jututuba ei ole läbivalt krüptitud.";
|
||||
"room_participants_security_information_room_encrypted_for_dm" = "Sõnumid siin jututoas kasutavad läbivat krüptimist. \n \nSinu sõnumid on turvatud ning ainult sinul ja saaja(te)l on unikaalsed võtmed selliste sõnumite lugemiseks.";
|
||||
"room_details_title_for_dm" = "Jututoa üksikasjad";
|
||||
"room_details_photo_for_dm" = "Jututoa foto";
|
||||
"room_details_room_name_for_dm" = "Nimi";
|
||||
"room_details_access_section_for_dm" = "Kes pääsevad ligi siia jututuppa?";
|
||||
"room_details_access_section_anyone_apart_from_guest_for_dm" = "Kõik, kes teavad jututoa viidet, välja arvatud külalised";
|
||||
"room_details_access_section_anyone_for_dm" = "Kõik, kes teavad jututoa viidet, kaasa arvatud külalised";
|
||||
"room_details_access_section_directory_toggle_for_dm" = "Näita seda jututuba jututubade kataloogis";
|
||||
"room_details_no_local_addresses_for_dm" = "Sellel jututoal puuduvad kohalikud aadressid";
|
||||
"room_details_advanced_room_id_for_dm" = "Jututoa tunnus:";
|
||||
"room_details_advanced_e2e_encryption_enabled_for_dm" = "Krüptimine on selles jututoas kasutusel";
|
||||
"room_details_advanced_e2e_encryption_disabled_for_dm" = "Krüptimine ei ole selles jututoas kasutusel.";
|
||||
"pin_protection_kick_user_alert_message" = "Liiga palju vigu PIN-koodi sisestamisel ning sa oled nüüd välja logitud";
|
||||
|
|
|
@ -353,7 +353,7 @@
|
|||
"settings_crypto_blacklist_unverified_devices" = "Csak ellenőrzött munkameneteknek titkosít";
|
||||
"settings_deactivate_my_account" = "Felhasználói fiókom felfüggesztése";
|
||||
"room_details_people" = "Tagok";
|
||||
"room_details_files" = "Fájlok";
|
||||
"room_details_files" = "Feltöltések";
|
||||
"room_details_settings" = "Beállítások";
|
||||
"room_details_photo" = "Szoba képe";
|
||||
"room_details_room_name" = "Szoba neve";
|
||||
|
@ -1174,7 +1174,7 @@
|
|||
"external_link_confirmation_title" = "Ezt a hivatkozást ellenőrizd le még egyszer";
|
||||
"external_link_confirmation_message" = "%@ hivatkozás egy másik oldalra visz: %@ \n \nFolytatod?";
|
||||
"major_update_information" = "Izgatottan jelentjük, hogy megváltoztattuk a nevünket! Az alkalmazásod friss és be vagy jelentkezve a fiókodba.";
|
||||
"pin_protection_choose_pin" = "A biztonság érdekében válassz egy PIN kódot";
|
||||
"pin_protection_choose_pin" = "A biztonság érdekében adj meg egy PIN kódot";
|
||||
"pin_protection_confirm_pin" = "Erősítsd meg a PIN kódot";
|
||||
"pin_protection_confirm_pin_to_disable" = "A PIN letiltásához írd be a PIN kódot";
|
||||
"pin_protection_enter_pin" = "Add meg a PIN kódot";
|
||||
|
@ -1205,3 +1205,48 @@
|
|||
"biometrics_cant_unlocked_alert_message_retry" = "Újra";
|
||||
"biometrics_desetup_subtitle" = " ";
|
||||
"device_verification_self_verify_wait_recover_secrets_checking_availability" = "További hitelesítési lehetőségek keresése …";
|
||||
"joined" = "Csatlakozott";
|
||||
"switch" = "Cserél";
|
||||
"more" = "További";
|
||||
"room_participants_leave_prompt_title_for_dm" = "Elhagy";
|
||||
"room_participants_leave_prompt_msg_for_dm" = "Biztos, hogy ki akarsz lépni?";
|
||||
"room_participants_filter_room_members_for_dm" = "Tagok szűrése";
|
||||
"room_participants_security_information_room_not_encrypted_for_dm" = "Itt az üzenetek nincsenek végponttól végpontig titkosítva.";
|
||||
"room_participants_security_information_room_encrypted_for_dm" = "Itt az üzenetek végponttól végpontig titkosítva vannak. \n \nAz üzeneteidet titkosítással vannak biztosítva és csak neked és a címzetteknek van meg a kulcs hozzá.";
|
||||
"room_details_title_for_dm" = "Részletek";
|
||||
"room_details_photo_for_dm" = "Fotó";
|
||||
"room_details_room_name_for_dm" = "Név";
|
||||
"room_details_access_section_for_dm" = "Ki tud hozzáférni ehhez?";
|
||||
"room_details_access_section_anyone_apart_from_guest_for_dm" = "Bárki aki ismeri a linket, a vendégeket leszámítva";
|
||||
"room_details_access_section_anyone_for_dm" = "Bárki aki ismeri a linket, beleszámítva a vendégek";
|
||||
"room_details_access_section_directory_toggle_for_dm" = "Megjelenik a szobák listájában";
|
||||
"room_details_no_local_addresses_for_dm" = "Ennek nincs helyi címe";
|
||||
"room_details_advanced_room_id_for_dm" = "Azon.:";
|
||||
"room_details_advanced_e2e_encryption_enabled_for_dm" = "A titkosítás bekapcsolva";
|
||||
"room_details_advanced_e2e_encryption_disabled_for_dm" = "Itt a titkosítás nincs bekapcsolva.";
|
||||
"pin_protection_choose_pin_welcome_after_login" = "Üdv újra.";
|
||||
"pin_protection_choose_pin_welcome_after_register" = "Üdv!";
|
||||
"pin_protection_not_allowed_pin" = "Ez a PIN biztonsági okokból nem használható. Kérlek adj meg egy másik PIN-t";
|
||||
"pin_protection_explanatory" = "A PIN beállításával védheted az olyan dolgokat, mint pl. üzenetek és névjegyek, hogy csak te férhessél hozzájuk az alkalmazás indulásakor megadott PIN kóddal.";
|
||||
"pin_protection_kick_user_alert_message" = "Túl sok a hiba, ki lettél jelentkeztetve";
|
||||
"searchable_directory_create_new_room" = "Új szoba készítése";
|
||||
"searchable_directory_x_network" = "%@ hálózat";
|
||||
"searchable_directory_search_placeholder" = "Név vagy azon.";
|
||||
"create_room_title" = "Új szoba";
|
||||
"create_room_section_header_name" = "Szoba neve";
|
||||
"create_room_placeholder_name" = "Név";
|
||||
"create_room_section_header_topic" = "Szoba témája (nem kötelező)";
|
||||
"create_room_placeholder_topic" = "Téma";
|
||||
"create_room_section_header_encryption" = "Szoba titkosítása";
|
||||
"create_room_enable_encryption" = "Titkosítás engedélyezése";
|
||||
"create_room_section_footer_encryption" = "A titkosítást ezután nem lehet kikapcsolni.";
|
||||
"create_room_section_header_type" = "Szoba típusa";
|
||||
"create_room_type_private" = "Privát szoba";
|
||||
"create_room_type_public" = "Nyilvános szoba";
|
||||
"create_room_section_footer_type" = "Emberek csak meghívóval csatlakozhatnak a privát szobához.";
|
||||
"create_room_show_in_directory" = "A szoba megjelenítése a listában";
|
||||
"create_room_section_header_address" = "Szoba címe";
|
||||
"create_room_placeholder_address" = "#testroom:matrix.org";
|
||||
"room_info_list_one_member" = "1 tag";
|
||||
"room_info_list_several_members" = "%@ tag";
|
||||
"room_info_list_section_other" = "Más";
|
||||
|
|
|
@ -1181,7 +1181,7 @@
|
|||
"pin_protection_choose_pin_welcome_after_login" = "Bentornato/a.";
|
||||
"pin_protection_choose_pin_welcome_after_register" = "Benvenuti.";
|
||||
"pin_protection_not_allowed_pin" = "Per motivi di sicurezza, questo PIN non è disponibile. Provane un altro";
|
||||
"pin_protection_explanatory" = "I PIN aiutano a tenere sicuri il tuo profilo, i messaggi e i contatti, in modo che solo tu possa vederli.";
|
||||
"pin_protection_explanatory" = "L'impostazione di un PIN ti permette di proteggere dati come messaggi e contatti, in modo che solo tu possa vederli inserendo il PIN all'apertura dell'app.";
|
||||
"searchable_directory_create_new_room" = "Crea una nuova stanza";
|
||||
"searchable_directory_x_network" = "Rete %@";
|
||||
"searchable_directory_search_placeholder" = "Nome o ID";
|
||||
|
@ -1204,3 +1204,20 @@
|
|||
"room_info_list_one_member" = "1 membro";
|
||||
"room_info_list_several_members" = "%@ membri";
|
||||
"room_info_list_section_other" = "Altro";
|
||||
"room_participants_leave_prompt_title_for_dm" = "Esci";
|
||||
"room_participants_leave_prompt_msg_for_dm" = "Vuoi veramente uscire?";
|
||||
"room_participants_filter_room_members_for_dm" = "Filtra membri";
|
||||
"room_participants_security_information_room_not_encrypted_for_dm" = "I messaggi qui non sono cifrati end-to-end.";
|
||||
"room_participants_security_information_room_encrypted_for_dm" = "I messaggi qui sono cifrati end-to-end. \n \nI tuoi messaggi sono protetti con lucchetti e solo tu e il destinatario avete le chiavi univoche per sbloccarli.";
|
||||
"room_details_title_for_dm" = "Dettagli";
|
||||
"room_details_photo_for_dm" = "Foto";
|
||||
"room_details_room_name_for_dm" = "Nome";
|
||||
"room_details_access_section_for_dm" = "Chi può accedervi?";
|
||||
"room_details_access_section_anyone_apart_from_guest_for_dm" = "Chiunque conosca il link, eccetto gli ospiti";
|
||||
"room_details_access_section_anyone_for_dm" = "Chiunque conosca il link, compresi gli ospiti";
|
||||
"room_details_access_section_directory_toggle_for_dm" = "Mostra nell'elenco delle stanze";
|
||||
"room_details_no_local_addresses_for_dm" = "Non ha indirizzi locali";
|
||||
"room_details_advanced_room_id_for_dm" = "ID:";
|
||||
"room_details_advanced_e2e_encryption_enabled_for_dm" = "La crittografia è attiva";
|
||||
"room_details_advanced_e2e_encryption_disabled_for_dm" = "La crittografia non è attiva.";
|
||||
"pin_protection_kick_user_alert_message" = "Troppi errori, sei stato disconnesso";
|
||||
|
|
|
@ -55,3 +55,9 @@
|
|||
/* Incoming named video conference invite from a specific person */
|
||||
"VIDEO_CONF_NAMED_FROM_USER" = "Grupowe połączenie wideo z %@: '%@'";
|
||||
"KEY_VERIFICATION_REQUEST_FROM_USER" = "%@ wymaga weryfikacji";
|
||||
/* New message indicator on unknown room */
|
||||
"MESSAGE" = "Wiadomość";
|
||||
/* New message indicator from a DM */
|
||||
"MESSAGE_FROM_X" = "Wiadomość od %@";
|
||||
/* New message indicator on a room */
|
||||
"MESSAGE_IN_X" = "Wiadomość w %@";
|
||||
|
|
|
@ -1192,7 +1192,7 @@
|
|||
"pin_protection_choose_pin_welcome_after_login" = "С возвращением.";
|
||||
"pin_protection_choose_pin_welcome_after_register" = "Добро пожаловать.";
|
||||
"pin_protection_not_allowed_pin" = "По соображениям безопасности этот PIN-код недоступен. Пожалуйста, попробуйте другой PIN-код";
|
||||
"pin_protection_explanatory" = "PIN-коды помогают защитить ваш профиль, сообщения и контакты, поэтому только вы можете получить к ним доступ.";
|
||||
"pin_protection_explanatory" = "Установка PIN-кода позволяет защитить такие данные, как сообщения и контакты, поэтому только вы можете получить к ним доступ, введя PIN-код в начале приложения.";
|
||||
"searchable_directory_create_new_room" = "Создать новую комнату";
|
||||
"searchable_directory_x_network" = "%@ Сеть";
|
||||
"searchable_directory_search_placeholder" = "Имя или ID";
|
||||
|
@ -1231,3 +1231,4 @@
|
|||
"room_details_advanced_room_id_for_dm" = "ID:";
|
||||
"room_details_advanced_e2e_encryption_enabled_for_dm" = "Шифрование включено";
|
||||
"room_details_advanced_e2e_encryption_disabled_for_dm" = "Шифрование не включено.";
|
||||
"pin_protection_kick_user_alert_message" = "Слишком много ошибок, вы вышли из системы";
|
||||
|
|
|
@ -1193,7 +1193,7 @@
|
|||
"pin_protection_choose_pin_welcome_after_login" = "Mirë se u kthyet.";
|
||||
"pin_protection_choose_pin_welcome_after_register" = "Mirë se vini.";
|
||||
"pin_protection_not_allowed_pin" = "Për arsye sigurie, ky PIN s’është i passhëm. Ju lutemi, provoni një PIN tjetër";
|
||||
"pin_protection_explanatory" = "PIN-et ndihmojnë për të mbajtur të siguruar profilin, mesazhet dhe kontaktet tuaja, që kështu të mund t’i përdorni.";
|
||||
"pin_protection_explanatory" = "Ujdisja e një PIN-it ju lejon të mbroni të dhëna të tilla si, mesazhe dhe kontakte, që kështu të mund t’i përdorni duke dhënë PIN-in gjatë nisjes së aplikacionit.";
|
||||
"searchable_directory_create_new_room" = "Krijoni një dhomë të re";
|
||||
"searchable_directory_x_network" = "Rrjet %@";
|
||||
"searchable_directory_search_placeholder" = "Emër ose ID";
|
||||
|
@ -1216,3 +1216,20 @@
|
|||
"room_info_list_one_member" = "1 anëtar";
|
||||
"room_info_list_several_members" = "%@ anëtarë";
|
||||
"room_info_list_section_other" = "Tjetër";
|
||||
"room_participants_leave_prompt_title_for_dm" = "Ikni";
|
||||
"room_participants_leave_prompt_msg_for_dm" = "Jeni i sigurt se doni të ikni?";
|
||||
"room_participants_filter_room_members_for_dm" = "Filtroni anëtarë";
|
||||
"room_participants_security_information_room_not_encrypted_for_dm" = "Mesazhet këtu s’janë të fshehtëzuar skaj-më-skaj.";
|
||||
"room_participants_security_information_room_encrypted_for_dm" = "Mesazhet këtu janë të fshehtëzuar skaj-më-skaj.\n\nMesazhet tuaj janë të siguruar me kyçe dhe vetëm ju dhe marrësi keni kyçet unikë për shkyçjen e tyre.";
|
||||
"room_details_title_for_dm" = "Hollësi";
|
||||
"room_details_photo_for_dm" = "Foto";
|
||||
"room_details_room_name_for_dm" = "Emër";
|
||||
"room_details_access_section_for_dm" = "Kush mund të përdorë këtë?";
|
||||
"room_details_access_section_anyone_apart_from_guest_for_dm" = "Cilido që njeh lidhjen, hiq vizitorë";
|
||||
"room_details_access_section_anyone_for_dm" = "Cilido që njeh lidhjen, përfshi vizitorë";
|
||||
"room_details_access_section_directory_toggle_for_dm" = "Paraqit ç’ka lista e dhomave";
|
||||
"room_details_no_local_addresses_for_dm" = "Kjo s’ka adresa vendore";
|
||||
"room_details_advanced_room_id_for_dm" = "ID:";
|
||||
"room_details_advanced_e2e_encryption_enabled_for_dm" = "Këtu fshehtëzimi është i aktivizuar";
|
||||
"room_details_advanced_e2e_encryption_disabled_for_dm" = "Këtu fshehtëzimi s’është i aktivizuar.";
|
||||
"pin_protection_kick_user_alert_message" = "Shumë gabime, u bë nxjerrja juaj jashtë";
|
||||
|
|
|
@ -462,7 +462,7 @@
|
|||
"identity_server_settings_alert_no_terms_title" = "Identitetsservern har inga användarvillkor";
|
||||
"identity_server_settings_alert_change_title" = "Byt identitetsserver";
|
||||
"room_details_people" = "Medlemmar";
|
||||
"room_details_files" = "Filer";
|
||||
"room_details_files" = "Uppladdningar";
|
||||
"room_details_settings" = "Inställningar";
|
||||
"room_details_room_name" = "Rumsnamn";
|
||||
"room_details_topic" = "Ämne";
|
||||
|
@ -1111,7 +1111,7 @@
|
|||
"major_update_information" = "Vi är glada att meddela att vi har bytt namn! Din app är uppdaterad och du är inloggad på ditt konto.";
|
||||
"major_update_learn_more_action" = "Lär dig mer";
|
||||
"major_update_done_action" = "Förstått";
|
||||
"pin_protection_choose_pin" = "Väl en PIN-kod för säkerhet";
|
||||
"pin_protection_choose_pin" = "Skapa en PIN-kod för säkerhet";
|
||||
"pin_protection_confirm_pin" = "Bekräfta din PIN-kod";
|
||||
"pin_protection_confirm_pin_to_disable" = "Bekräfta PIN-kod för att inaktivera PIN-kod";
|
||||
"pin_protection_enter_pin" = "Ange din PIN-kod";
|
||||
|
@ -1140,3 +1140,49 @@
|
|||
"biometrics_cant_unlocked_alert_message_x" = "För att låsa upp, använd %@ eller logga in igen och aktivera %@ igen";
|
||||
"biometrics_cant_unlocked_alert_message_login" = "Logga in igen";
|
||||
"biometrics_cant_unlocked_alert_message_retry" = "Försök igen";
|
||||
"joined" = "Gått med";
|
||||
"switch" = "Byt";
|
||||
"more" = "Mer";
|
||||
"room_participants_leave_prompt_title_for_dm" = "Lämna";
|
||||
"room_participants_leave_prompt_msg_for_dm" = "Är du säker på att du vill lämna?";
|
||||
"room_participants_filter_room_members_for_dm" = "Filtrera medlemmar";
|
||||
"room_participants_security_information_room_not_encrypted_for_dm" = "Meddelanden här är inte totalsträckskrypterade.";
|
||||
"room_participants_security_information_room_encrypted_for_dm" = "Meddelanden här är totalsträckskrypterade.\n\nDina meddelanden är säkrade med lås och endast du och mottagaren har de unika nycklarna för att låsa upp dem.";
|
||||
"room_details_title_for_dm" = "Detaljer";
|
||||
"room_details_photo_for_dm" = "Bild";
|
||||
"room_details_room_name_for_dm" = "Namn";
|
||||
"room_details_access_section_for_dm" = "Vem kan komma åt detta?";
|
||||
"room_details_access_section_anyone_apart_from_guest_for_dm" = "Alla som har länken, förutom gäster";
|
||||
"room_details_access_section_anyone_for_dm" = "Alla som har länken, inklusive gäster";
|
||||
"room_details_access_section_directory_toggle_for_dm" = "Lista i rumskatalogen";
|
||||
"room_details_no_local_addresses_for_dm" = "Detta har inga lokala adresser";
|
||||
"room_details_advanced_room_id_for_dm" = "ID:";
|
||||
"room_details_advanced_e2e_encryption_enabled_for_dm" = "Kryptering är aktiverad här";
|
||||
"room_details_advanced_e2e_encryption_disabled_for_dm" = "Kryptering är inte aktiverad här.";
|
||||
"device_verification_self_verify_wait_recover_secrets_checking_availability" = "Letar efter andra verifieringsfunktioner…";
|
||||
"pin_protection_choose_pin_welcome_after_login" = "Välkommen tillbaka.";
|
||||
"pin_protection_choose_pin_welcome_after_register" = "Välkommen.";
|
||||
"pin_protection_not_allowed_pin" = "Av säkerhetsskäl är den här PIN-koden inte tillgänglig. Vänligen pröva en annan PIN-kod";
|
||||
"pin_protection_explanatory" = "Att ställa in en PIN-kod låter dig skydda data som meddelanden och kontakter så att endast du kan komma åt dem genom att slå in koden när du startar appen.";
|
||||
"pin_protection_kick_user_alert_message" = "För många fel, du har loggats ut";
|
||||
"searchable_directory_create_new_room" = "Skapa ett nytt rum";
|
||||
"searchable_directory_x_network" = "%@-nätverk";
|
||||
"searchable_directory_search_placeholder" = "Namn eller ID";
|
||||
"create_room_title" = "Nytt rum";
|
||||
"create_room_section_header_name" = "Rumsnamn";
|
||||
"create_room_placeholder_name" = "Namn";
|
||||
"create_room_section_header_topic" = "Rumsämne (valfritt)";
|
||||
"create_room_placeholder_topic" = "Ämne";
|
||||
"create_room_section_header_encryption" = "Rumskryptering";
|
||||
"create_room_enable_encryption" = "Aktivera kryptering";
|
||||
"create_room_section_footer_encryption" = "Kryptering kan inte inaktiveras igen.";
|
||||
"create_room_section_header_type" = "Rumstyp";
|
||||
"create_room_type_private" = "Privat rum";
|
||||
"create_room_type_public" = "Offentligt rum";
|
||||
"create_room_section_footer_type" = "Personer kan endast gå med i ett privat rum om de bjuds in.";
|
||||
"create_room_show_in_directory" = "Visa rummet i katalogen";
|
||||
"create_room_section_header_address" = "Rumsadress";
|
||||
"create_room_placeholder_address" = "#testrum:matrix.org";
|
||||
"room_info_list_one_member" = "1 medlem";
|
||||
"room_info_list_several_members" = "%@ medlemmar";
|
||||
"room_info_list_section_other" = "Andra";
|
||||
|
|
|
@ -18,6 +18,12 @@ import UIKit
|
|||
|
||||
extension UIViewController {
|
||||
|
||||
private enum UIViewControllerConstants {
|
||||
static let fabButtonSize = CGSize(width: 78, height: 78)
|
||||
static let fabButtonTrailingMargin: CGFloat = 0
|
||||
static let fabButtonBottomMargin: CGFloat = 9
|
||||
}
|
||||
|
||||
/// Remove back bar button title when pushing a view controller.
|
||||
/// This method should be called on the previous controller in UINavigationController stack.
|
||||
@objc func vc_removeBackTitle() {
|
||||
|
@ -61,4 +67,40 @@ extension UIViewController {
|
|||
func vc_removeFromParent() {
|
||||
self.vc_removeChildViewController(viewController: self)
|
||||
}
|
||||
|
||||
/// Adds a floating action button to the bottom-right of the page.
|
||||
/// - Parameters:
|
||||
/// - image: Image to be showed in fab
|
||||
/// - target: target of the button
|
||||
/// - action: action of the button
|
||||
/// - Returns: The FAB view
|
||||
@discardableResult
|
||||
@objc func vc_addFAB(withImage image: UIImage,
|
||||
target: Any?,
|
||||
action: Selector?) -> UIImageView {
|
||||
|
||||
let fabImageView = UIImageView(image: image)
|
||||
fabImageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
fabImageView.backgroundColor = .clear
|
||||
fabImageView.contentMode = .center
|
||||
fabImageView.layer.shadowOpacity = 0.3
|
||||
fabImageView.layer.shadowOffset = CGSize(width: 0, height: 3)
|
||||
fabImageView.isUserInteractionEnabled = true
|
||||
|
||||
self.view.addSubview(fabImageView)
|
||||
|
||||
fabImageView.widthAnchor.constraint(equalToConstant: UIViewControllerConstants.fabButtonSize.width).isActive = true
|
||||
fabImageView.heightAnchor.constraint(equalToConstant: UIViewControllerConstants.fabButtonSize.height).isActive = true
|
||||
fabImageView.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor,
|
||||
constant: UIViewControllerConstants.fabButtonTrailingMargin).isActive = true
|
||||
self.view.safeAreaLayoutGuide.bottomAnchor.constraint(equalTo: fabImageView.bottomAnchor,
|
||||
constant: UIViewControllerConstants.fabButtonBottomMargin).isActive = true
|
||||
|
||||
let tapGestureRecognizer = UITapGestureRecognizer(target: target, action: action)
|
||||
tapGestureRecognizer.numberOfTouchesRequired = 1
|
||||
tapGestureRecognizer.numberOfTapsRequired = 1
|
||||
fabImageView.addGestureRecognizer(tapGestureRecognizer)
|
||||
|
||||
return fabImageView
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,6 +87,7 @@ internal enum Asset {
|
|||
internal static let uploadIcon = ImageAsset(name: "upload_icon")
|
||||
internal static let voiceCallHangonIcon = ImageAsset(name: "voice_call_hangon_icon")
|
||||
internal static let voiceCallHangupIcon = ImageAsset(name: "voice_call_hangup_icon")
|
||||
internal static let addMemberFloatingAction = ImageAsset(name: "add_member_floating_action")
|
||||
internal static let addParticipant = ImageAsset(name: "add_participant")
|
||||
internal static let detailsIcon = ImageAsset(name: "details_icon")
|
||||
internal static let editIcon = ImageAsset(name: "edit_icon")
|
||||
|
|
|
@ -470,22 +470,6 @@ internal enum VectorL10n {
|
|||
internal static var cancel: String {
|
||||
return VectorL10n.tr("Vector", "cancel")
|
||||
}
|
||||
/// Element Android
|
||||
internal static var clientAndroidName: String {
|
||||
return VectorL10n.tr("Vector", "client_android_name")
|
||||
}
|
||||
/// Element Desktop
|
||||
internal static var clientDesktopName: String {
|
||||
return VectorL10n.tr("Vector", "client_desktop_name")
|
||||
}
|
||||
/// Element iOS
|
||||
internal static var clientIosName: String {
|
||||
return VectorL10n.tr("Vector", "client_ios_name")
|
||||
}
|
||||
/// Element Web
|
||||
internal static var clientWebName: String {
|
||||
return VectorL10n.tr("Vector", "client_web_name")
|
||||
}
|
||||
/// Close
|
||||
internal static var close: String {
|
||||
return VectorL10n.tr("Vector", "close")
|
||||
|
@ -966,7 +950,7 @@ internal enum VectorL10n {
|
|||
internal static var deviceVerificationSelfVerifyStartWaiting: String {
|
||||
return VectorL10n.tr("Vector", "device_verification_self_verify_start_waiting")
|
||||
}
|
||||
/// or another cross-signing capable Matrix client
|
||||
/// This works with Element and other cross-signing capable Matrix cients.
|
||||
internal static var deviceVerificationSelfVerifyWaitAdditionalInformation: String {
|
||||
return VectorL10n.tr("Vector", "device_verification_self_verify_wait_additional_information")
|
||||
}
|
||||
|
|
|
@ -233,7 +233,7 @@ static RageShakeManager* sharedInstance = nil;
|
|||
UIGraphicsEndImageContext();
|
||||
|
||||
// the image is copied in the clipboard
|
||||
[UIPasteboard generalPasteboard].image = image;
|
||||
MXKPasteboardManager.shared.pasteboard.image = image;
|
||||
|
||||
return image;
|
||||
}
|
||||
|
|
|
@ -119,10 +119,6 @@
|
|||
- (void)cancelEditionMode:(BOOL)forceRefresh;
|
||||
|
||||
#pragma mark - Room handling
|
||||
/**
|
||||
Add the (+) button at the right bottom corner of the view.
|
||||
*/
|
||||
- (void)addPlusButton;
|
||||
|
||||
/**
|
||||
Action triggered when the user taps on the (+) button.
|
||||
|
|
|
@ -1606,36 +1606,6 @@
|
|||
|
||||
#pragma mark - Room handling
|
||||
|
||||
- (void)addPlusButton
|
||||
{
|
||||
// Add room options button
|
||||
plusButtonImageView = [[UIImageView alloc] init];
|
||||
[plusButtonImageView setTranslatesAutoresizingMaskIntoConstraints:NO];
|
||||
[self.view addSubview:plusButtonImageView];
|
||||
|
||||
plusButtonImageView.backgroundColor = [UIColor clearColor];
|
||||
plusButtonImageView.contentMode = UIViewContentModeCenter;
|
||||
plusButtonImageView.image = [UIImage imageNamed:@"plus_floating_action"];
|
||||
plusButtonImageView.layer.shadowOpacity = 0.3;
|
||||
plusButtonImageView.layer.shadowOffset = CGSizeMake(0, 3);
|
||||
|
||||
CGFloat side = 78.0f;
|
||||
[plusButtonImageView.widthAnchor constraintEqualToConstant:side].active = YES;
|
||||
[plusButtonImageView.heightAnchor constraintEqualToConstant:side].active = YES;
|
||||
|
||||
// align to safe area
|
||||
[plusButtonImageView.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor].active = YES;
|
||||
[self.view.safeAreaLayoutGuide.bottomAnchor constraintEqualToAnchor:plusButtonImageView.bottomAnchor constant:9].active = YES;
|
||||
|
||||
plusButtonImageView.userInteractionEnabled = YES;
|
||||
|
||||
// Handle tap gesture
|
||||
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onPlusButtonPressed)];
|
||||
[tap setNumberOfTouchesRequired:1];
|
||||
[tap setNumberOfTapsRequired:1];
|
||||
[plusButtonImageView addGestureRecognizer:tap];
|
||||
}
|
||||
|
||||
- (void)onPlusButtonPressed
|
||||
{
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
|
|
@ -102,7 +102,9 @@
|
|||
self.groupsSearchBar.placeholder = NSLocalizedStringFromTable(@"search_default_placeholder", @"Vector", nil);
|
||||
|
||||
// @TODO: Add programmatically the (+) button.
|
||||
//[self addPlusButton];
|
||||
// plusButtonImageView = [self vc_addFABWithImage:[UIImage imageNamed:@"plus_floating_action"]
|
||||
// target:self
|
||||
// action:@selector(onPlusButtonPressed)];
|
||||
|
||||
// Observe user interface theme change.
|
||||
kThemeServiceDidChangeThemeNotificationObserver = [[NSNotificationCenter defaultCenter] addObserverForName:kThemeServiceDidChangeThemeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) {
|
||||
|
@ -549,63 +551,6 @@
|
|||
|
||||
#pragma mark - Room handling
|
||||
|
||||
- (void)addPlusButton
|
||||
{
|
||||
// Add room options button
|
||||
plusButtonImageView = [[UIImageView alloc] init];
|
||||
[plusButtonImageView setTranslatesAutoresizingMaskIntoConstraints:NO];
|
||||
[self.view addSubview:plusButtonImageView];
|
||||
|
||||
plusButtonImageView.backgroundColor = [UIColor clearColor];
|
||||
plusButtonImageView.contentMode = UIViewContentModeCenter;
|
||||
plusButtonImageView.image = [UIImage imageNamed:@"plus_floating_action"];
|
||||
plusButtonImageView.layer.shadowOpacity = 0.3;
|
||||
plusButtonImageView.layer.shadowOffset = CGSizeMake(0, 3);
|
||||
|
||||
CGFloat side = 78.0f;
|
||||
NSLayoutConstraint* widthConstraint = [NSLayoutConstraint constraintWithItem:plusButtonImageView
|
||||
attribute:NSLayoutAttributeWidth
|
||||
relatedBy:NSLayoutRelationEqual
|
||||
toItem:nil
|
||||
attribute:NSLayoutAttributeNotAnAttribute
|
||||
multiplier:1
|
||||
constant:side];
|
||||
|
||||
NSLayoutConstraint* heightConstraint = [NSLayoutConstraint constraintWithItem:plusButtonImageView
|
||||
attribute:NSLayoutAttributeHeight
|
||||
relatedBy:NSLayoutRelationEqual
|
||||
toItem:nil
|
||||
attribute:NSLayoutAttributeNotAnAttribute
|
||||
multiplier:1
|
||||
constant:side];
|
||||
|
||||
NSLayoutConstraint* trailingConstraint = [NSLayoutConstraint constraintWithItem:plusButtonImageView
|
||||
attribute:NSLayoutAttributeTrailing
|
||||
relatedBy:NSLayoutRelationEqual
|
||||
toItem:self.view
|
||||
attribute:NSLayoutAttributeTrailing
|
||||
multiplier:1
|
||||
constant:0];
|
||||
|
||||
NSLayoutConstraint* bottomConstraint = [NSLayoutConstraint constraintWithItem:self.bottomLayoutGuide
|
||||
attribute:NSLayoutAttributeTop
|
||||
relatedBy:NSLayoutRelationEqual
|
||||
toItem:plusButtonImageView
|
||||
attribute:NSLayoutAttributeBottom
|
||||
multiplier:1
|
||||
constant:9];
|
||||
|
||||
[NSLayoutConstraint activateConstraints:@[widthConstraint, heightConstraint, trailingConstraint, bottomConstraint]];
|
||||
|
||||
plusButtonImageView.userInteractionEnabled = YES;
|
||||
|
||||
// Handle tap gesture
|
||||
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onPlusButtonPressed)];
|
||||
[tap setNumberOfTouchesRequired:1];
|
||||
[tap setNumberOfTapsRequired:1];
|
||||
[plusButtonImageView addGestureRecognizer:tap];
|
||||
}
|
||||
|
||||
- (void)onPlusButtonPressed
|
||||
{
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
|
|
@ -73,7 +73,9 @@
|
|||
self.recentsTableView.tag = RecentsDataSourceModeHome;
|
||||
|
||||
// Add the (+) button programmatically
|
||||
[self addPlusButton];
|
||||
plusButtonImageView = [self vc_addFABWithImage:[UIImage imageNamed:@"plus_floating_action"]
|
||||
target:self
|
||||
action:@selector(onPlusButtonPressed)];
|
||||
|
||||
// Register table view cell used for rooms collection.
|
||||
[self.recentsTableView registerClass:TableViewCellWithCollectionView.class forCellReuseIdentifier:TableViewCellWithCollectionView.defaultReuseIdentifier];
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="79A-qb-tmk">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16097.3" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="79A-qb-tmk">
|
||||
<device id="retina4_7" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
|
@ -20,13 +20,13 @@
|
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tIM-sl-gwE">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="527"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="518.5"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IlB-Ch-LEo">
|
||||
<rect key="frame" x="27.5" y="0.0" width="320" height="527"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="518.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="d5Y-pj-XsI">
|
||||
<rect key="frame" x="20" y="20" width="280" height="84"/>
|
||||
<rect key="frame" x="20" y="20" width="335" height="84"/>
|
||||
<string key="text">Verify this session from one of your others sessions, granting it access to encrypted messages.
|
||||
|
||||
Use the latest Riot on your other devices:</string>
|
||||
|
@ -35,10 +35,10 @@ Use the latest Riot on your other devices:</string>
|
|||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="ANK-XS-dY7">
|
||||
<rect key="frame" x="0.0" y="144" width="320" height="95.5"/>
|
||||
<rect key="frame" x="27.5" y="144" width="320" height="48"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="14" translatesAutoresizingMaskIntoConstraints="NO" id="3at-ql-vhb">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="95.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="48"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="monitor" translatesAutoresizingMaskIntoConstraints="NO" id="nrB-Kj-4zE">
|
||||
<rect key="frame" x="56" y="0.0" width="48" height="48"/>
|
||||
|
@ -47,18 +47,10 @@ Use the latest Riot on your other devices:</string>
|
|||
<constraint firstAttribute="width" secondItem="nrB-Kj-4zE" secondAttribute="height" multiplier="1:1" id="TOT-bj-1W4"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iBP-FF-AYM">
|
||||
<rect key="frame" x="38.5" y="62" width="83" height="33.5"/>
|
||||
<string key="text">Riot Web
|
||||
Riot Desktop</string>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="14" translatesAutoresizingMaskIntoConstraints="NO" id="coY-7W-lY7">
|
||||
<rect key="frame" x="160" y="0.0" width="160" height="95.5"/>
|
||||
<rect key="frame" x="160" y="0.0" width="160" height="48"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="smartphone" translatesAutoresizingMaskIntoConstraints="NO" id="P0P-X4-uSQ">
|
||||
<rect key="frame" x="56" y="0.0" width="48" height="48"/>
|
||||
|
@ -67,14 +59,6 @@ Riot Desktop</string>
|
|||
<constraint firstAttribute="width" secondItem="P0P-X4-uSQ" secondAttribute="height" multiplier="1:1" id="AZP-GN-y8E"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gLH-sE-KCq">
|
||||
<rect key="frame" x="22.5" y="62" width="115" height="33.5"/>
|
||||
<string key="text">Riot iOS
|
||||
Riot X for Android</string>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
</stackView>
|
||||
</subviews>
|
||||
|
@ -82,26 +66,26 @@ Riot X for Android</string>
|
|||
<constraint firstAttribute="width" constant="320" id="TyM-5Y-YSw"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="or another cross-signing capable Matrix client" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rFM-AQ-wAB">
|
||||
<rect key="frame" x="20" y="259.5" width="280" height="14.5"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
|
||||
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="This works with Element and other cross-signing capable Matrix cients." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LnW-1H-Ltq">
|
||||
<rect key="frame" x="20" y="232" width="335" height="33.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="8oJ-o6-DLK">
|
||||
<rect key="frame" x="20" y="294" width="280" height="233"/>
|
||||
<rect key="frame" x="20" y="285.5" width="335" height="233"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dXT-cL-ukJ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="280" height="114.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="335" height="114.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Checking for other verification capabilities ..." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="A4x-sK-d5C">
|
||||
<rect key="frame" x="20" y="10" width="240" height="38.5"/>
|
||||
<rect key="frame" x="20" y="10" width="295" height="38.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<activityIndicatorView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" style="medium" translatesAutoresizingMaskIntoConstraints="NO" id="esP-Lt-anU">
|
||||
<rect key="frame" x="0.0" y="64.5" width="280" height="20"/>
|
||||
<rect key="frame" x="0.0" y="64.5" width="335" height="20"/>
|
||||
</activityIndicatorView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
|
@ -116,10 +100,10 @@ Riot X for Android</string>
|
|||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nf8-Ye-b9r">
|
||||
<rect key="frame" x="0.0" y="114.5" width="280" height="118.5"/>
|
||||
<rect key="frame" x="0.0" y="114.5" width="335" height="118.5"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OEt-k0-vgM" customClass="RoundedButton" customModule="Riot" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="10" width="280" height="44"/>
|
||||
<rect key="frame" x="0.0" y="10" width="335" height="44"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="44" id="7ws-Nc-I7y"/>
|
||||
</constraints>
|
||||
|
@ -132,7 +116,7 @@ Riot X for Android</string>
|
|||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="If you can't accessing an existing session" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Ou-cM-K9C">
|
||||
<rect key="frame" x="20" y="64" width="240" height="24.5"/>
|
||||
<rect key="frame" x="20" y="64" width="295" height="24.5"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
|
||||
<color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
|
@ -161,16 +145,16 @@ Riot X for Android</string>
|
|||
<constraint firstAttribute="height" priority="250" id="72E-My-WHK"/>
|
||||
<constraint firstItem="ANK-XS-dY7" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="IlB-Ch-LEo" secondAttribute="leading" id="9BR-a1-3By"/>
|
||||
<constraint firstAttribute="bottom" secondItem="8oJ-o6-DLK" secondAttribute="bottom" id="CB2-Nd-n2g"/>
|
||||
<constraint firstItem="rFM-AQ-wAB" firstAttribute="top" secondItem="ANK-XS-dY7" secondAttribute="bottom" constant="20" id="Goe-Tt-Jbm"/>
|
||||
<constraint firstItem="LnW-1H-Ltq" firstAttribute="top" secondItem="ANK-XS-dY7" secondAttribute="bottom" constant="40" id="Mph-SR-U7u"/>
|
||||
<constraint firstAttribute="trailing" secondItem="LnW-1H-Ltq" secondAttribute="trailing" constant="20" id="NZH-JW-JVA"/>
|
||||
<constraint firstItem="d5Y-pj-XsI" firstAttribute="leading" secondItem="IlB-Ch-LEo" secondAttribute="leading" constant="20" id="Okc-DX-xdE"/>
|
||||
<constraint firstItem="d5Y-pj-XsI" firstAttribute="top" secondItem="IlB-Ch-LEo" secondAttribute="top" constant="20" id="Pkt-ox-zZs"/>
|
||||
<constraint firstItem="rFM-AQ-wAB" firstAttribute="leading" secondItem="IlB-Ch-LEo" secondAttribute="leading" constant="20" id="PtP-G3-lC6"/>
|
||||
<constraint firstAttribute="trailing" secondItem="rFM-AQ-wAB" secondAttribute="trailing" constant="20" id="Q78-Oe-Lh2"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="ANK-XS-dY7" secondAttribute="trailing" id="RQI-kF-Z1h"/>
|
||||
<constraint firstItem="8oJ-o6-DLK" firstAttribute="leading" secondItem="IlB-Ch-LEo" secondAttribute="leading" constant="20" id="RtP-rm-bjH"/>
|
||||
<constraint firstItem="8oJ-o6-DLK" firstAttribute="top" secondItem="rFM-AQ-wAB" secondAttribute="bottom" constant="20" id="dvv-3U-uH4"/>
|
||||
<constraint firstItem="LnW-1H-Ltq" firstAttribute="leading" secondItem="IlB-Ch-LEo" secondAttribute="leading" constant="20" id="VOi-rz-Qf1"/>
|
||||
<constraint firstItem="ANK-XS-dY7" firstAttribute="top" secondItem="d5Y-pj-XsI" secondAttribute="bottom" constant="40" id="gnp-AK-DYa"/>
|
||||
<constraint firstItem="ANK-XS-dY7" firstAttribute="centerX" secondItem="IlB-Ch-LEo" secondAttribute="centerX" id="nEo-IT-GtP"/>
|
||||
<constraint firstItem="8oJ-o6-DLK" firstAttribute="top" secondItem="LnW-1H-Ltq" secondAttribute="bottom" constant="20" id="tLd-x1-rOB"/>
|
||||
<constraint firstAttribute="trailing" secondItem="8oJ-o6-DLK" secondAttribute="trailing" constant="20" id="vev-7p-7ua"/>
|
||||
</constraints>
|
||||
</view>
|
||||
|
@ -204,12 +188,10 @@ Riot X for Android</string>
|
|||
<viewLayoutGuide key="safeArea" id="GnW-bb-rsL"/>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="additionalInformationLabel" destination="rFM-AQ-wAB" id="TDZ-Xd-gP1"/>
|
||||
<outlet property="additionalInformationLabel" destination="LnW-1H-Ltq" id="TJS-GC-ABf"/>
|
||||
<outlet property="desktopClientImageView" destination="nrB-Kj-4zE" id="yl0-Ju-luK"/>
|
||||
<outlet property="desktopClientLabel" destination="iBP-FF-AYM" id="6N0-AJ-rIX"/>
|
||||
<outlet property="informationLabel" destination="d5Y-pj-XsI" id="TMb-bc-58a"/>
|
||||
<outlet property="mobileClientImageView" destination="P0P-X4-uSQ" id="WtT-ix-yq8"/>
|
||||
<outlet property="mobileClientLabel" destination="gLH-sE-KCq" id="jQ0-7U-mr8"/>
|
||||
<outlet property="recoverSecretsAdditionalInformationLabel" destination="4Ou-cM-K9C" id="80N-lF-x2L"/>
|
||||
<outlet property="recoverSecretsAvailabilityActivityIndicatorView" destination="esP-Lt-anU" id="4jv-GA-Hm9"/>
|
||||
<outlet property="recoverSecretsAvailabilityLoadingContainerView" destination="dXT-cL-ukJ" id="rBM-Hj-c3o"/>
|
||||
|
|
|
@ -33,10 +33,7 @@ final class KeyVerificationSelfVerifyWaitViewController: UIViewController {
|
|||
@IBOutlet private weak var informationLabel: UILabel!
|
||||
|
||||
@IBOutlet private weak var desktopClientImageView: UIImageView!
|
||||
@IBOutlet private weak var desktopClientLabel: UILabel!
|
||||
|
||||
@IBOutlet private weak var mobileClientImageView: UIImageView!
|
||||
@IBOutlet private weak var mobileClientLabel: UILabel!
|
||||
|
||||
@IBOutlet private weak var additionalInformationLabel: UILabel!
|
||||
|
||||
|
@ -99,11 +96,9 @@ final class KeyVerificationSelfVerifyWaitViewController: UIViewController {
|
|||
}
|
||||
|
||||
self.informationLabel.textColor = theme.textPrimaryColor
|
||||
self.desktopClientLabel.textColor = theme.textPrimaryColor
|
||||
self.desktopClientImageView.tintColor = theme.tintColor
|
||||
self.mobileClientLabel.textColor = theme.textPrimaryColor
|
||||
self.mobileClientImageView.tintColor = theme.tintColor
|
||||
self.additionalInformationLabel.textColor = theme.textSecondaryColor
|
||||
self.additionalInformationLabel.textColor = theme.textPrimaryColor
|
||||
self.recoverSecretsAvailabilityLoadingLabel.textColor = theme.textSecondaryColor
|
||||
self.recoverSecretsAvailabilityActivityIndicatorView.color = theme.tintColor
|
||||
}
|
||||
|
@ -129,9 +124,6 @@ final class KeyVerificationSelfVerifyWaitViewController: UIViewController {
|
|||
self.title = VectorL10n.deviceVerificationSelfVerifyWaitTitle
|
||||
|
||||
self.informationLabel.text = VectorL10n.deviceVerificationSelfVerifyWaitInformation
|
||||
self.desktopClientLabel.vc_setText("\(VectorL10n.clientWebName)\n\(VectorL10n.clientDesktopName)", withLineSpacing: Constants.clientNamesLineSpacing, alignement: .center)
|
||||
self.mobileClientLabel.vc_setText("\(VectorL10n.clientIosName)\n\(VectorL10n.clientAndroidName)",
|
||||
withLineSpacing: Constants.clientNamesLineSpacing, alignement: .center)
|
||||
|
||||
self.desktopClientImageView.image = Asset.Images.monitor.image.withRenderingMode(.alwaysTemplate)
|
||||
self.mobileClientImageView.image = Asset.Images.smartphone.image.withRenderingMode(.alwaysTemplate)
|
||||
|
|
|
@ -66,10 +66,9 @@
|
|||
self.recentsTableView.tag = RecentsDataSourceModePeople;
|
||||
|
||||
// Add the (+) button programmatically
|
||||
[self addPlusButton];
|
||||
|
||||
// Apply tintColor on the (+) button
|
||||
plusButtonImageView.image = [UIImage imageNamed:@"people_floating_action"];
|
||||
plusButtonImageView = [self vc_addFABWithImage:[UIImage imageNamed:@"people_floating_action"]
|
||||
target:self
|
||||
action:@selector(onPlusButtonPressed)];
|
||||
|
||||
// Register table view cell for contacts.
|
||||
[self.recentsTableView registerClass:ContactTableViewCell.class forCellReuseIdentifier:ContactTableViewCell.defaultReuseIdentifier];
|
||||
|
|
|
@ -51,13 +51,6 @@
|
|||
RoomMemberDetailsViewController *memberDetailsViewController;
|
||||
ContactsTableViewController *contactsPickerViewController;
|
||||
|
||||
// Display a gradient view above the screen.
|
||||
CAGradientLayer* tableViewMaskLayer;
|
||||
|
||||
// Display a button to invite new member.
|
||||
UIImageView* addParticipantButtonImageView;
|
||||
NSLayoutConstraint *addParticipantButtonImageViewBottomConstraint;
|
||||
|
||||
UIAlertController *currentAlert;
|
||||
|
||||
// Observe kThemeServiceDidChangeThemeNotification to handle user interface theme change.
|
||||
|
@ -141,8 +134,12 @@
|
|||
|
||||
[self.tableView registerClass:ContactTableViewCell.class forCellReuseIdentifier:@"ParticipantTableViewCellId"];
|
||||
|
||||
// Add room creation button programmatically
|
||||
[self addAddParticipantButton];
|
||||
|
||||
|
||||
// Add invite members button programmatically
|
||||
[self vc_addFABWithImage:[UIImage imageNamed:@"add_member_floating_action"]
|
||||
target:self
|
||||
action:@selector(onAddParticipantButtonPressed)];
|
||||
|
||||
// Observe user interface theme change.
|
||||
kThemeServiceDidChangeThemeNotificationObserver = [[NSNotificationCenter defaultCenter] addObserverForName:kThemeServiceDidChangeThemeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) {
|
||||
|
@ -168,15 +165,6 @@
|
|||
self.view.backgroundColor = self.tableView.backgroundColor;
|
||||
self.tableView.separatorColor = ThemeService.shared.theme.lineBreakColor;
|
||||
|
||||
// Update the gradient view above the screen
|
||||
CGFloat white = 1.0;
|
||||
[ThemeService.shared.theme.backgroundColor getWhite:&white alpha:nil];
|
||||
CGColorRef opaqueWhiteColor = [UIColor colorWithWhite:white alpha:1.0].CGColor;
|
||||
CGColorRef transparentWhiteColor = [UIColor colorWithWhite:white alpha:0].CGColor;
|
||||
tableViewMaskLayer.colors = @[(__bridge id) transparentWhiteColor, (__bridge id) transparentWhiteColor, (__bridge id) opaqueWhiteColor];
|
||||
|
||||
addParticipantButtonImageView.tintColor = ThemeService.shared.theme.tintColor;
|
||||
|
||||
if (self.tableView.dataSource)
|
||||
{
|
||||
[self.tableView reloadData];
|
||||
|
@ -304,40 +292,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
- (void)viewDidLayoutSubviews
|
||||
{
|
||||
[super viewDidLayoutSubviews];
|
||||
|
||||
// Sanity check
|
||||
if (tableViewMaskLayer)
|
||||
{
|
||||
CGRect currentBounds = tableViewMaskLayer.bounds;
|
||||
CGRect newBounds = CGRectIntegral(self.view.frame);
|
||||
|
||||
newBounds.size.height -= self.keyboardHeight;
|
||||
|
||||
// Check if there is an update
|
||||
if (!CGSizeEqualToSize(currentBounds.size, newBounds.size))
|
||||
{
|
||||
newBounds.origin = CGPointZero;
|
||||
|
||||
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseIn
|
||||
animations:^{
|
||||
|
||||
tableViewMaskLayer.bounds = newBounds;
|
||||
|
||||
}
|
||||
completion:^(BOOL finished){
|
||||
}];
|
||||
|
||||
}
|
||||
|
||||
// Hide the addParticipants button on landscape when keyboard is visible
|
||||
BOOL isLandscapeOriented = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation);
|
||||
addParticipantButtonImageView.hidden = tableViewMaskLayer.hidden = (isLandscapeOriented && self.keyboardHeight);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
- (void)setMxRoom:(MXRoom *)mxRoom
|
||||
|
@ -554,24 +508,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
- (void)setKeyboardHeight:(CGFloat)keyboardHeight
|
||||
{
|
||||
super.keyboardHeight = keyboardHeight;
|
||||
|
||||
// Update addParticipants button position with animation
|
||||
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseIn
|
||||
animations:^{
|
||||
|
||||
addParticipantButtonImageViewBottomConstraint.constant = keyboardHeight + 9;
|
||||
|
||||
// Force to render the view
|
||||
[self.view layoutIfNeeded];
|
||||
|
||||
}
|
||||
completion:^(BOOL finished){
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark - Internals
|
||||
|
||||
- (void)refreshTableView
|
||||
|
@ -587,88 +523,6 @@
|
|||
topViewController.navigationItem.leftBarButtonItem = nil;
|
||||
}
|
||||
|
||||
- (void)addAddParticipantButton
|
||||
{
|
||||
// Add blur mask programmatically
|
||||
tableViewMaskLayer = [CAGradientLayer layer];
|
||||
|
||||
// Consider the grayscale components of the ThemeService.shared.theme.backgroundColor.
|
||||
CGFloat white = 1.0;
|
||||
[ThemeService.shared.theme.backgroundColor getWhite:&white alpha:nil];
|
||||
|
||||
CGColorRef opaqueWhiteColor = [UIColor colorWithWhite:white alpha:1.0].CGColor;
|
||||
CGColorRef transparentWhiteColor = [UIColor colorWithWhite:white alpha:0].CGColor;
|
||||
|
||||
tableViewMaskLayer.colors = @[(__bridge id) transparentWhiteColor, (__bridge id) transparentWhiteColor, (__bridge id) opaqueWhiteColor];
|
||||
|
||||
// display a gradient to the rencents bottom (20% of the bottom of the screen)
|
||||
tableViewMaskLayer.locations = @[@0.0F,
|
||||
@0.85F,
|
||||
@1.0F];
|
||||
|
||||
tableViewMaskLayer.bounds = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
|
||||
tableViewMaskLayer.anchorPoint = CGPointZero;
|
||||
|
||||
// CAConstraint is not supported on IOS.
|
||||
// it seems only being supported on Mac OS.
|
||||
// so viewDidLayoutSubviews will refresh the layout bounds.
|
||||
[self.view.layer addSublayer:tableViewMaskLayer];
|
||||
|
||||
// Add + button
|
||||
addParticipantButtonImageView = [[UIImageView alloc] init];
|
||||
[addParticipantButtonImageView setTranslatesAutoresizingMaskIntoConstraints:NO];
|
||||
[self.view addSubview:addParticipantButtonImageView];
|
||||
|
||||
addParticipantButtonImageView.backgroundColor = [UIColor clearColor];
|
||||
addParticipantButtonImageView.contentMode = UIViewContentModeCenter;
|
||||
addParticipantButtonImageView.image = [UIImage imageNamed:@"add_participant"];
|
||||
|
||||
CGFloat side = 78.0f;
|
||||
NSLayoutConstraint* widthConstraint = [NSLayoutConstraint constraintWithItem:addParticipantButtonImageView
|
||||
attribute:NSLayoutAttributeWidth
|
||||
relatedBy:NSLayoutRelationEqual
|
||||
toItem:nil
|
||||
attribute:NSLayoutAttributeNotAnAttribute
|
||||
multiplier:1
|
||||
constant:side];
|
||||
|
||||
NSLayoutConstraint* heightConstraint = [NSLayoutConstraint constraintWithItem:addParticipantButtonImageView
|
||||
attribute:NSLayoutAttributeHeight
|
||||
relatedBy:NSLayoutRelationEqual
|
||||
toItem:nil
|
||||
attribute:NSLayoutAttributeNotAnAttribute
|
||||
multiplier:1
|
||||
constant:side];
|
||||
|
||||
NSLayoutConstraint* centerXConstraint = [NSLayoutConstraint constraintWithItem:addParticipantButtonImageView
|
||||
attribute:NSLayoutAttributeCenterX
|
||||
relatedBy:NSLayoutRelationEqual
|
||||
toItem:self.view
|
||||
attribute:NSLayoutAttributeCenterX
|
||||
multiplier:1
|
||||
constant:0];
|
||||
|
||||
addParticipantButtonImageViewBottomConstraint = [NSLayoutConstraint constraintWithItem:self.view
|
||||
attribute:NSLayoutAttributeBottom
|
||||
relatedBy:NSLayoutRelationEqual
|
||||
toItem:addParticipantButtonImageView
|
||||
attribute:NSLayoutAttributeBottom
|
||||
multiplier:1
|
||||
constant:self.keyboardHeight + 9];
|
||||
|
||||
// Available on iOS 8 and later
|
||||
[NSLayoutConstraint activateConstraints:@[widthConstraint, heightConstraint, centerXConstraint, addParticipantButtonImageViewBottomConstraint]];
|
||||
|
||||
addParticipantButtonImageView.userInteractionEnabled = YES;
|
||||
|
||||
// Handle tap gesture
|
||||
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onAddParticipantButtonPressed)];
|
||||
[tap setNumberOfTouchesRequired:1];
|
||||
[tap setNumberOfTapsRequired:1];
|
||||
[tap setDelegate:self];
|
||||
[addParticipantButtonImageView addGestureRecognizer:tap];
|
||||
}
|
||||
|
||||
- (void)onAddParticipantButtonPressed
|
||||
{
|
||||
// Push the contacts picker.
|
||||
|
|
|
@ -2622,7 +2622,7 @@
|
|||
|
||||
if (permalink)
|
||||
{
|
||||
[[UIPasteboard generalPasteboard] setString:permalink];
|
||||
MXKPasteboardManager.shared.pasteboard.string = permalink;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -5256,7 +5256,7 @@
|
|||
|
||||
if (textMessage)
|
||||
{
|
||||
[UIPasteboard generalPasteboard].string = textMessage;
|
||||
MXKPasteboardManager.shared.pasteboard.string = textMessage;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -898,7 +898,7 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
|
|||
|
||||
if (roomdId)
|
||||
{
|
||||
[[UIPasteboard generalPasteboard] setString:roomdId];
|
||||
MXKPasteboardManager.shared.pasteboard.string = roomdId;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1006,7 +1006,7 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
|
|||
|
||||
if (roomAlias)
|
||||
{
|
||||
[[UIPasteboard generalPasteboard] setString:roomAlias];
|
||||
MXKPasteboardManager.shared.pasteboard.string = roomAlias;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1031,7 +1031,7 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
|
|||
|
||||
if (permalink)
|
||||
{
|
||||
[[UIPasteboard generalPasteboard] setString:permalink];
|
||||
MXKPasteboardManager.shared.pasteboard.string = permalink;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -55,9 +55,9 @@
|
|||
self.recentsTableView.tag = RecentsDataSourceModeRooms;
|
||||
|
||||
// Add the (+) button programmatically
|
||||
[self addPlusButton];
|
||||
|
||||
plusButtonImageView.image = [UIImage imageNamed:@"rooms_floating_action"];
|
||||
plusButtonImageView = [self vc_addFABWithImage:[UIImage imageNamed:@"rooms_floating_action"]
|
||||
target:self
|
||||
action:@selector(onPlusButtonPressed)];
|
||||
|
||||
self.enableStickyHeaders = YES;
|
||||
}
|
||||
|
|
|
@ -114,6 +114,8 @@ enum {
|
|||
|
||||
}];
|
||||
[self userInterfaceThemeDidChange];
|
||||
|
||||
[self registerDeviceChangesNotification];
|
||||
}
|
||||
|
||||
- (void)userInterfaceThemeDidChange
|
||||
|
@ -247,6 +249,29 @@ enum {
|
|||
}
|
||||
|
||||
|
||||
#pragma mark - Data update
|
||||
|
||||
- (void)registerDeviceChangesNotification
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(onDeviceInfoTrustLevelDidChangeNotification:)
|
||||
name:MXDeviceInfoTrustLevelDidChangeNotification
|
||||
object:nil];
|
||||
}
|
||||
|
||||
- (void)onDeviceInfoTrustLevelDidChangeNotification:(NSNotification*)notification
|
||||
{
|
||||
MXDeviceInfo *deviceInfo = notification.object;
|
||||
|
||||
NSString *deviceId = deviceInfo.deviceId;
|
||||
if ([deviceId isEqualToString:device.deviceId])
|
||||
{
|
||||
[self reloadDeviceWithCompletion:^{
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Segues
|
||||
|
||||
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
|
||||
|
|
|
@ -204,6 +204,8 @@ TableViewSectionsDelegate>
|
|||
}];
|
||||
[self userInterfaceThemeDidChange];
|
||||
|
||||
[self registerUserDevicesChangesNotification];
|
||||
|
||||
self.tableViewSections = [TableViewSections new];
|
||||
self.tableViewSections.delegate = self;
|
||||
|
||||
|
@ -559,6 +561,57 @@ TableViewSectionsDelegate>
|
|||
}
|
||||
|
||||
|
||||
#pragma mark - Data update
|
||||
|
||||
- (void)registerUserDevicesChangesNotification
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(onDeviceInfoTrustLevelDidChangeNotification:)
|
||||
name:MXDeviceInfoTrustLevelDidChangeNotification
|
||||
object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(crossSigningInfoTrustLevelDidChangeNotification:)
|
||||
name:MXCrossSigningInfoTrustLevelDidChangeNotification
|
||||
object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(onDidUpdateUsersDevicesNotification:)
|
||||
name:MXDeviceListDidUpdateUsersDevicesNotification
|
||||
object:nil];
|
||||
}
|
||||
|
||||
- (void)onDidUpdateUsersDevicesNotification:(NSNotification*)notification
|
||||
{
|
||||
NSDictionary *usersDevices = notification.userInfo;
|
||||
|
||||
if ([usersDevices.allKeys containsObject:self.mainSession.myUserId])
|
||||
{
|
||||
[self loadDevices];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)onDeviceInfoTrustLevelDidChangeNotification:(NSNotification*)notification
|
||||
{
|
||||
MXDeviceInfo *deviceInfo = notification.object;
|
||||
|
||||
NSString *userId = deviceInfo.userId;
|
||||
if ([userId isEqualToString:self.mainSession.myUserId])
|
||||
{
|
||||
[self loadDevices];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)crossSigningInfoTrustLevelDidChangeNotification:(NSNotification*)notification
|
||||
{
|
||||
MXCrossSigningInfo *crossSigningInfo = notification.object;
|
||||
|
||||
NSString *userId = crossSigningInfo.userId;
|
||||
if ([userId isEqualToString:self.mainSession.myUserId])
|
||||
{
|
||||
[self loadDevices];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Cross-signing
|
||||
|
||||
- (void)loadCrossSigning
|
||||
|
|
Loading…
Reference in a new issue