Merge tag '2.36.1.0'

This commit is contained in:
Michael Kirk 2019-02-26 10:07:54 -07:00
commit 5bd3cec6dc
17 changed files with 592 additions and 533 deletions

View File

@ -89,7 +89,9 @@ NS_ASSUME_NONNULL_BEGIN
OWSTableSection *loggingSection = [OWSTableSection new];
loggingSection.headerTitle = NSLocalizedString(@"LOGGING_SECTION", nil);
[loggingSection addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_ADVANCED_DEBUGLOG", @"")
isOn:[OWSPreferences isLoggingEnabled]
isOnBlock:^{
return [OWSPreferences isLoggingEnabled];
}
target:weakSelf
selector:@selector(didToggleEnableLogSwitch:)]];
@ -160,21 +162,26 @@ NS_ASSUME_NONNULL_BEGIN
// * ...The internet is not reachable, since we don't want to let users to activate
// censorship circumvention unnecessarily, e.g. if they just don't have a valid
// internet connection.
BOOL isManualCensorshipCircumventionOnEnabled
= (OWSSignalService.sharedInstance.isCensorshipCircumventionManuallyActivated
OWSTableSwitchBlock isCensorshipCircumventionOnBlock = ^{
if (OWSSignalService.sharedInstance.hasCensoredPhoneNumber) {
return YES;
} else {
return OWSSignalService.sharedInstance.isCensorshipCircumventionManuallyActivated;
}
};
Reachability *reachability = self.reachability;
OWSTableSwitchBlock isManualCensorshipCircumventionOnEnabledBlock = ^{
BOOL isAnySocketOpen = TSSocketManager.shared.highestSocketState == OWSWebSocketStateOpen;
BOOL value = (OWSSignalService.sharedInstance.isCensorshipCircumventionManuallyActivated
|| (!OWSSignalService.sharedInstance.hasCensoredPhoneNumber && !isAnySocketOpen
&& weakSelf.reachability.isReachable));
BOOL isCensorshipCircumventionOn = NO;
if (OWSSignalService.sharedInstance.hasCensoredPhoneNumber) {
isCensorshipCircumventionOn = YES;
} else {
isCensorshipCircumventionOn = OWSSignalService.sharedInstance.isCensorshipCircumventionManuallyActivated;
}
&& reachability.isReachable));
return value;
};
[censorshipSection
addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_ADVANCED_CENSORSHIP_CIRCUMVENTION",
@"Label for the 'manual censorship circumvention' switch.")
isOn:isCensorshipCircumventionOn
isEnabled:isManualCensorshipCircumventionOnEnabled
isOnBlock:isCensorshipCircumventionOnBlock
isEnabledBlock:isManualCensorshipCircumventionOnEnabledBlock
target:weakSelf
selector:@selector(didToggleEnableCensorshipCircumventionSwitch:)]];

View File

@ -1,5 +1,5 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
//
#import "BlockListViewController.h"
@ -91,21 +91,23 @@ NS_ASSUME_NONNULL_BEGIN
@"BLOCK_LIST_BLOCKED_USERS_SECTION", @"Section header for users that have been blocked");
for (NSString *phoneNumber in blockedPhoneNumbers) {
[blockedContactsSection
addItem:[OWSTableItem
itemWithCustomCellBlock:^{
ContactTableViewCell *cell = [ContactTableViewCell new];
[cell configureWithRecipientId:phoneNumber];
return cell;
}
customRowHeight:UITableViewAutomaticDimension
actionBlock:^{
[BlockListUIUtils showUnblockPhoneNumberActionSheet:phoneNumber
fromViewController:weakSelf
blockingManager:helper.blockingManager
contactsManager:helper.contactsManager
completionBlock:nil];
}]];
[blockedContactsSection addItem:[OWSTableItem
itemWithCustomCellBlock:^{
ContactTableViewCell *cell = [ContactTableViewCell new];
[cell configureWithRecipientId:phoneNumber];
return cell;
}
customRowHeight:UITableViewAutomaticDimension
actionBlock:^{
[BlockListUIUtils
showUnblockPhoneNumberActionSheet:phoneNumber
fromViewController:weakSelf
blockingManager:helper.blockingManager
contactsManager:helper.contactsManager
completionBlock:^(BOOL isBlocked) {
[weakSelf updateTableContents];
}];
}]];
}
[contents addSection:blockedContactsSection];
}
@ -142,7 +144,9 @@ NS_ASSUME_NONNULL_BEGIN
displayName:groupName
fromViewController:weakSelf
blockingManager:helper.blockingManager
completionBlock:nil];
completionBlock:^(BOOL isBlocked) {
[weakSelf updateTableContents];
}];
}]];
}
[contents addSection:blockedGroupsSection];

View File

@ -1,5 +1,5 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
//
#import "NotificationSettingsViewController.h"
@ -56,7 +56,9 @@
@"Table cell switch label. When disabled, Signal will not play notification sounds while the app is in the "
@"foreground.");
[soundsSection addItem:[OWSTableItem switchItemWithText:inAppSoundsLabelText
isOn:[prefs soundInForeground]
isOnBlock:^{
return [prefs soundInForeground];
}
target:weakSelf
selector:@selector(didToggleSoundNotificationsSwitch:)]];
[contents addSection:soundsSection];

View File

@ -1,5 +1,5 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
//
#import "OWSBackupSettingsViewController.h"
@ -117,7 +117,9 @@ NS_ASSUME_NONNULL_BEGIN
addItem:[OWSTableItem switchItemWithText:
NSLocalizedString(@"SETTINGS_BACKUP_ENABLING_SWITCH",
@"Label for switch in settings that controls whether or not backup is enabled.")
isOn:isBackupEnabled
isOnBlock:^{
return [OWSBackup.sharedManager isBackupEnabled];
}
target:self
selector:@selector(isBackupEnabledDidChange:)]];
[contents addSection:enableSection];
@ -187,6 +189,8 @@ NS_ASSUME_NONNULL_BEGIN
- (void)isBackupEnabledDidChange:(UISwitch *)sender
{
[OWSBackup.sharedManager setIsBackupEnabled:sender.isOn];
[self updateTableContents];
}
#pragma mark - Events

View File

@ -98,11 +98,14 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s
= NSLocalizedString(@"SETTINGS_READ_RECEIPT", @"Label for the 'read receipts' setting.");
readReceiptsSection.footerTitle = NSLocalizedString(
@"SETTINGS_READ_RECEIPTS_SECTION_FOOTER", @"An explanation of the 'read receipts' setting.");
[readReceiptsSection addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_READ_RECEIPT",
@"Label for the 'read receipts' setting.")
isOn:[self.readReceiptManager areReadReceiptsEnabled]
target:weakSelf
selector:@selector(didToggleReadReceiptsSwitch:)]];
[readReceiptsSection
addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_READ_RECEIPT",
@"Label for the 'read receipts' setting.")
isOnBlock:^{
return [OWSReadReceiptManager.sharedManager areReadReceiptsEnabled];
}
target:weakSelf
selector:@selector(didToggleReadReceiptsSwitch:)]];
[contents addSection:readReceiptsSection];
OWSTableSection *typingIndicatorsSection = [OWSTableSection new];
@ -110,11 +113,14 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s
= NSLocalizedString(@"SETTINGS_TYPING_INDICATORS", @"Label for the 'typing indicators' setting.");
typingIndicatorsSection.footerTitle = NSLocalizedString(
@"SETTINGS_TYPING_INDICATORS_FOOTER", @"An explanation of the 'typing indicators' setting.");
[typingIndicatorsSection addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_TYPING_INDICATORS",
@"Label for the 'typing indicators' setting.")
isOn:[self.typingIndicators areTypingIndicatorsEnabled]
target:weakSelf
selector:@selector(didToggleTypingIndicatorsSwitch:)]];
[typingIndicatorsSection
addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_TYPING_INDICATORS",
@"Label for the 'typing indicators' setting.")
isOnBlock:^{
return [SSKEnvironment.shared.typingIndicators areTypingIndicatorsEnabled];
}
target:weakSelf
selector:@selector(didToggleTypingIndicatorsSwitch:)]];
[contents addSection:typingIndicatorsSection];
OWSTableSection *screenLockSection = [OWSTableSection new];
@ -126,7 +132,9 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s
addItem:[OWSTableItem
switchItemWithText:NSLocalizedString(@"SETTINGS_SCREEN_LOCK_SWITCH_LABEL",
@"Label for the 'enable screen lock' switch of the privacy settings.")
isOn:OWSScreenLock.sharedManager.isScreenLockEnabled
isOnBlock:^{
return [OWSScreenLock.sharedManager isScreenLockEnabled];
}
target:self
selector:@selector(isScreenLockEnabledDidChange:)]];
[contents addSection:screenLockSection];
@ -150,10 +158,13 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s
OWSTableSection *screenSecuritySection = [OWSTableSection new];
screenSecuritySection.headerTitle = NSLocalizedString(@"SETTINGS_SECURITY_TITLE", @"Section header");
screenSecuritySection.footerTitle = NSLocalizedString(@"SETTINGS_SCREEN_SECURITY_DETAIL", nil);
[screenSecuritySection addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_SCREEN_SECURITY", @"")
isOn:[self.preferences screenSecurityIsEnabled]
target:weakSelf
selector:@selector(didToggleScreenSecuritySwitch:)]];
[screenSecuritySection
addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_SCREEN_SECURITY", @"")
isOnBlock:^{
return [Environment.shared.preferences screenSecurityIsEnabled];
}
target:weakSelf
selector:@selector(didToggleScreenSecuritySwitch:)]];
[contents addSection:screenSecuritySection];
// Allow calls to connect directly vs. using TURN exclusively
@ -165,7 +176,9 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s
[callingSection addItem:[OWSTableItem switchItemWithText:NSLocalizedString(
@"SETTINGS_CALLING_HIDES_IP_ADDRESS_PREFERENCE_TITLE",
@"Table cell label")
isOn:[self.preferences doCallsHideIPAddress]
isOnBlock:^{
return [Environment.shared.preferences doCallsHideIPAddress];
}
target:weakSelf
selector:@selector(didToggleCallsHideIPAddressSwitch:)]];
[contents addSection:callingSection];
@ -176,7 +189,9 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s
addItem:[OWSTableItem switchItemWithText:NSLocalizedString(
@"SETTINGS_PRIVACY_CALLKIT_SYSTEM_CALL_LOG_PREFERENCE_TITLE",
@"Short table cell label")
isOn:[self.preferences isSystemCallLogEnabled]
isOnBlock:^{
return [Environment.shared.preferences isSystemCallLogEnabled];
}
target:weakSelf
selector:@selector(didToggleEnableSystemCallLogSwitch:)]];
callKitSection.footerTitle = NSLocalizedString(
@ -188,14 +203,19 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s
= NSLocalizedString(@"SETTINGS_SECTION_CALL_KIT_DESCRIPTION", @"Settings table section footer.");
[callKitSection addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_PRIVACY_CALLKIT_TITLE",
@"Short table cell label")
isOn:[self.preferences isCallKitEnabled]
isOnBlock:^{
return [Environment.shared.preferences isCallKitEnabled];
}
target:weakSelf
selector:@selector(didToggleEnableCallKitSwitch:)]];
if (self.preferences.isCallKitEnabled) {
[callKitSection
addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_PRIVACY_CALLKIT_PRIVACY_TITLE",
@"Label for 'CallKit privacy' preference")
isOn:![self.preferences isCallKitPrivacyEnabled]
isOnBlock:^{
return (BOOL) !
[Environment.shared.preferences isCallKitPrivacyEnabled];
}
target:weakSelf
selector:@selector(didToggleEnableCallKitPrivacySwitch:)]];
}
@ -260,7 +280,7 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s
UISwitch *cellSwitch = [UISwitch new];
cell.accessoryView = cellSwitch;
[cellSwitch setOn:weakSelf.preferences.shouldShowUnidentifiedDeliveryIndicators];
[cellSwitch setOn:Environment.shared.preferences.shouldShowUnidentifiedDeliveryIndicators];
[cellSwitch addTarget:weakSelf
action:@selector(didToggleUDShowIndicatorsSwitch:)
forControlEvents:UIControlEventValueChanged];
@ -290,7 +310,9 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s
OWSTableSection *unidentifiedDeliveryUnrestrictedSection = [OWSTableSection new];
OWSTableItem *unrestrictedAccessItem = [OWSTableItem
switchItemWithText:NSLocalizedString(@"SETTINGS_UNIDENTIFIED_DELIVERY_UNRESTRICTED_ACCESS", @"switch label")
isOn:weakSelf.udManager.shouldAllowUnrestrictedAccessLocal
isOnBlock:^{
return [SSKEnvironment.shared.udManager shouldAllowUnrestrictedAccessLocal];
}
target:weakSelf
selector:@selector(didToggleUDUnrestrictedAccessSwitch:)];
[unidentifiedDeliveryUnrestrictedSection addItem:unrestrictedAccessItem];
@ -313,7 +335,9 @@ static NSString *const kSealedSenderInfoURL = @"https://signal.org/blog/sealed-s
[linkPreviewsSection
addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_LINK_PREVIEWS",
@"Setting for enabling & disabling link previews.")
isOn:SSKPreferences.areLinkPreviewsEnabled
isOnBlock:^{
return [SSKPreferences areLinkPreviewsEnabled];
}
target:weakSelf
selector:@selector(didToggleLinkPreviewsEnabled:)]];
linkPreviewsSection.headerTitle = NSLocalizedString(

View File

@ -1122,6 +1122,7 @@ const CGFloat kIconViewLength = 24;
BOOL isCurrentlyBlocked = [self.blockingManager isThreadBlocked:self.thread];
__weak OWSConversationSettingsViewController *weakSelf = self;
if (blockConversationSwitch.isOn) {
OWSAssertDebug(!isCurrentlyBlocked);
if (isCurrentlyBlocked) {
@ -1135,6 +1136,8 @@ const CGFloat kIconViewLength = 24;
completionBlock:^(BOOL isBlocked) {
// Update switch state if user cancels action.
blockConversationSwitch.on = isBlocked;
[weakSelf updateTableContents];
}];
} else {
@ -1149,6 +1152,8 @@ const CGFloat kIconViewLength = 24;
completionBlock:^(BOOL isBlocked) {
// Update switch state if user cancels action.
blockConversationSwitch.on = isBlocked;
[weakSelf updateTableContents];
}];
}
}

View File

@ -2,20 +2,20 @@
"AB_PERMISSION_MISSING_ACTION_NOT_NOW" = "Ara no";
/* Action sheet item */
"ACCEPT_NEW_IDENTITY_ACTION" = "Accepta el nou número de seguretat";
"ACCEPT_NEW_IDENTITY_ACTION" = "Accepta el número de seguretat nou";
/* Label for 'audio call' button in contact view. */
"ACTION_AUDIO_CALL" = "Trucada d'audio";
"ACTION_AUDIO_CALL" = "Trucada Signal";
/* Label for 'invite' button in contact view. */
"ACTION_INVITE" = "Convida a Signal";
"ACTION_INVITE" = "Convida al Signal";
/* Label for 'send message' button in contact view.
Label for button that lets you send a message to a contact. */
"ACTION_SEND_MESSAGE" = "Envia missatge";
"ACTION_SEND_MESSAGE" = "Envia-li un missatge";
/* Label for 'share contact' button. */
"ACTION_SHARE_CONTACT" = "Comparteix contacte";
"ACTION_SHARE_CONTACT" = "Comparteix el contacte";
/* Label for 'video call' button in contact view. */
"ACTION_VIDEO_CALL" = "Trucada de video";
@ -33,7 +33,7 @@
"ADD_GROUP_MEMBER_VIEW_TITLE" = "Afegeix un membre";
/* Message shown in conversation view that offers to share your profile with a group. */
"ADD_GROUP_TO_PROFILE_WHITELIST_OFFER" = "Vols compartir el teu perfil amb aquest grup?";
"ADD_GROUP_TO_PROFILE_WHITELIST_OFFER" = "Voleu compartir el perfil amb aquest grup?";
/* Message shown in conversation view that offers to add an unknown user to your phone's contacts. */
"ADD_TO_CONTACTS_OFFER" = "Vols afegir aquest usuari als teus contactes?";
@ -1479,7 +1479,7 @@
"NOTIFICATIONS_NONE" = "Sense nom ni contingut";
/* Table cell switch label. When disabled, Signal will not play notification sounds while the app is in the foreground. */
"NOTIFICATIONS_SECTION_INAPP" = "Jugueu mentre l'aplicació estigui oberta";
"NOTIFICATIONS_SECTION_INAPP" = "Sona si l'aplicació està oberta";
/* Label for settings UI that allows user to change the notification sound. */
"NOTIFICATIONS_SECTION_SOUNDS" = "Sons";
@ -1896,7 +1896,7 @@
"SEARCH_SECTION_MESSAGES" = "Missatges";
/* No comment provided by engineer. */
"SECURE_SESSION_RESET" = "La sessió segura a estat reiniciada.";
"SECURE_SESSION_RESET" = "La sessió segura ha estat reiniciada.";
/* Label for 'select GIF to attach' action sheet button */
"SELECT_GIF_BUTTON" = "GIF";

View File

@ -180,7 +180,7 @@
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "Sicherungsdaten konnten nicht exportiert werden.";
/* Error indicating that the app received an invalid response from CloudKit. */
"BACKUP_EXPORT_ERROR_INVALID_CLOUDKIT_RESPONSE" = "Ungültige Serverantwort";
"BACKUP_EXPORT_ERROR_INVALID_CLOUDKIT_RESPONSE" = "Ungültige Dienstantwort";
/* Indicates that the cloud is being cleaned up. */
"BACKUP_EXPORT_PHASE_CLEAN_UP" = "Sicherung wird bereinigt";
@ -447,7 +447,7 @@
"COMPOSE_SCREEN_MISSING_CONTACTS_PERMISSION" = "Du kannst den Zugriff auf deine Kontakte in der iOS-App »Einstellungen« aktivieren, um zu sehen, welche deiner Kontakte Signal verwenden.";
/* No comment provided by engineer. */
"CONFIRM_ACCOUNT_DESTRUCTION_TEXT" = "Dies setzt die App in ihren Ursprungszustand zurück. Dabei werden alle deine Nachrichten und dein Benutzerkonto auf dem Server gelöscht. Nach Abschluss des Vorgangs beendet sich die App automatisch.";
"CONFIRM_ACCOUNT_DESTRUCTION_TEXT" = "Dies setzt die App in ihren Ursprungszustand zurück. Dabei werden alle deine Nachrichten und dein Benutzerkonto vom Server gelöscht. Nach Abschluss des Vorgangs beendet sich die App automatisch.";
/* No comment provided by engineer. */
"CONFIRM_ACCOUNT_DESTRUCTION_TITLE" = "Möchtest du dein Benutzerkonto wirklich löschen?";
@ -480,7 +480,7 @@
"CONTACT_CELL_IS_NO_LONGER_VERIFIED" = "Nicht verifiziert";
/* No comment provided by engineer. */
"CONTACT_DETAIL_COMM_TYPE_INSECURE" = "Nicht registrierte Rufnummer";
"CONTACT_DETAIL_COMM_TYPE_INSECURE" = "Unregistrierte Rufnummer";
/* Label for the 'edit name' button in the contact share approval view. */
"CONTACT_EDIT_NAME_BUTTON" = "Bearbeiten";
@ -627,7 +627,7 @@
"CONVERSATION_SETTINGS_VIEW_PROFILE_IS_SHARED_WITH_GROUP" = "Diese Gruppe kann dein Profil sehen.";
/* Indicates that user's profile has been shared with a user. */
"CONVERSATION_SETTINGS_VIEW_PROFILE_IS_SHARED_WITH_USER" = "Dieser Benutzer kann dein Profil sehen.";
"CONVERSATION_SETTINGS_VIEW_PROFILE_IS_SHARED_WITH_USER" = "Benutzer kann dein Profil sehen.";
/* Button to confirm that user wants to share their profile with a user or group. */
"CONVERSATION_SETTINGS_VIEW_SHARE_PROFILE" = "Profil teilen";
@ -1240,7 +1240,7 @@
"MESSAGE_ACTION_DELETE_MESSAGE" = "Diese Nachricht löschen";
/* Action sheet button subtitle */
"MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "Sie wird nur auf diesem Gerät gelöscht";
"MESSAGE_ACTION_DELETE_MESSAGE_SUBTITLE" = "Wird nur auf diesem Gerät gelöscht.";
/* Action sheet button title */
"MESSAGE_ACTION_DETAILS" = "Mehr Details";
@ -1288,7 +1288,7 @@
"MESSAGE_METADATA_VIEW_MESSAGE_STATUS_UPLOADING" = "Wird hochgeladen";
/* Label for messages without a body or attachment in the 'message metadata' view. */
"MESSAGE_METADATA_VIEW_NO_ATTACHMENT_OR_BODY" = "Nachricht hat keinen Inhalt oder Anhang.";
"MESSAGE_METADATA_VIEW_NO_ATTACHMENT_OR_BODY" = "Nachricht hat weder Inhalt noch Anhang.";
/* Label for the 'received date & time' field of the 'message metadata' view. */
"MESSAGE_METADATA_VIEW_RECEIVED_DATE_TIME" = "Empfangen";
@ -2340,7 +2340,7 @@
"UNNAMED_DEVICE" = "Unbenanntes Gerät";
/* No comment provided by engineer. */
"UNREGISTER_SIGNAL_FAIL" = "Löschen des Benutzerkontos gescheitert.";
"UNREGISTER_SIGNAL_FAIL" = "Deregistrieren gescheitert.";
/* No comment provided by engineer. */
"UNSUPPORTED_ATTACHMENT" = "Nicht unterstützten Anhangstyp erhalten.";

View File

@ -321,16 +321,16 @@
"CALL_AUDIO_PERMISSION_TITLE" = "Ligipääs mikrofonile on vajalik";
/* notification body */
"CALL_INCOMING_NOTIFICATION_BODY" = "☎️ Incoming Call";
"CALL_INCOMING_NOTIFICATION_BODY" = "Sissetulev kõne";
/* Accessibility label for placing call button */
"CALL_LABEL" = "Helista";
/* notification body */
"CALL_MISSED_BECAUSE_OF_IDENTITY_CHANGE_NOTIFICATION_BODY" = "☎️ Missed call because the caller's safety number changed.";
"CALL_MISSED_BECAUSE_OF_IDENTITY_CHANGE_NOTIFICATION_BODY" = "Vastamata kõne, sest helistaja turvanumber on muutunud.";
/* notification body */
"CALL_MISSED_NOTIFICATION_BODY" = "☎️ Missed Call";
"CALL_MISSED_NOTIFICATION_BODY" = "Vastamata kõne";
/* Call setup status label after outgoing call times out */
"CALL_SCREEN_STATUS_NO_ANSWER" = "Vastust pole";
@ -1081,16 +1081,16 @@
"HOME_VIEW_TITLE_INBOX" = "Signal";
/* Label for brush button in image editor. */
"IMAGE_EDITOR_BRUSH_BUTTON" = "Brush";
"IMAGE_EDITOR_BRUSH_BUTTON" = "Pihusti";
/* Label for crop button in image editor. */
"IMAGE_EDITOR_CROP_BUTTON" = "Crop";
"IMAGE_EDITOR_CROP_BUTTON" = "Kärbi";
/* Momentarily shown to the user when attempting to select more images than is allowed. Embeds {{max number of items}} that can be shared. */
"IMAGE_PICKER_CAN_SELECT_NO_MORE_TOAST_FORMAT" = "You can't share more than %@ items.";
"IMAGE_PICKER_CAN_SELECT_NO_MORE_TOAST_FORMAT" = "Sa ei saa jagada rohkem kui %@ üksust.";
/* alert title */
"IMAGE_PICKER_FAILED_TO_PROCESS_ATTACHMENTS" = "Failed to select attachment.";
"IMAGE_PICKER_FAILED_TO_PROCESS_ATTACHMENTS" = "Manuse laadimine ei õnnestunud.";
/* Call setup status label */
"IN_CALL_CONNECTING" = "Ühendumine...";
@ -1183,7 +1183,7 @@
"LINK_NEW_DEVICE_TITLE" = "Ühenda uus seade";
/* Label for link previews with an unknown host. */
"LINK_PREVIEW_UNKNOWN_DOMAIN" = "Link Preview";
"LINK_PREVIEW_UNKNOWN_DOMAIN" = "Lingi eelvaade";
/* Menu item and navbar title for the device manager */
"LINKED_DEVICES_TITLE" = "Ühendatud seadmed";
@ -1440,7 +1440,7 @@
"NEW_GROUP_MEMBER_LABEL" = "Liige";
/* notification title. Embeds {{author name}} and {{group name}} */
"NEW_GROUP_MESSAGE_NOTIFICATION_TITLE" = "%@ to %@";
"NEW_GROUP_MESSAGE_NOTIFICATION_TITLE" = "%@ grupile %@";
/* Placeholder text for group name field */
"NEW_GROUP_NAMEGROUP_REQUEST_DEFAULT" = "Lisa grupivestlusele nimi";
@ -1467,7 +1467,7 @@
"NO_CONTACTS_SEARCH_BY_PHONE_NUMBER" = "Leia kontaktid numbri järgi";
/* Label for 1:1 conversation with yourself. */
"NOTE_TO_SELF" = "Note to Self";
"NOTE_TO_SELF" = "Märkus endale";
/* Lock screen notification text presented after user powers on their device without unlocking. Embeds {{device model}} (either 'iPad' or 'iPhone') */
"NOTIFICATION_BODY_PHONE_LOCKED_FORMAT" = "Sa võisid %@'i taaskäivitamise ajal saada sõnumeid.";
@ -1914,7 +1914,7 @@
"SEND_BUTTON_TITLE" = "Saada";
/* notification body */
"SEND_FAILED_NOTIFICATION_BODY" = "Your message failed to send.";
"SEND_FAILED_NOTIFICATION_BODY" = "Sinu sõnumi saatmine ei õnnestunud.";
/* Alert body after invite failed */
"SEND_INVITE_FAILURE" = "Kutse saatmine ei õnnestunud, palun proovi hiljem uuesti.";
@ -2082,13 +2082,13 @@
"SETTINGS_LEGAL_TERMS_CELL" = "Tingimused ja privaatsuspoliitika";
/* Setting for enabling & disabling link previews. */
"SETTINGS_LINK_PREVIEWS" = "Send Link Previews";
"SETTINGS_LINK_PREVIEWS" = "Saada linkide eelvaateid";
/* Footer for setting for enabling & disabling link previews. */
"SETTINGS_LINK_PREVIEWS_FOOTER" = "Previews are supported for Imgur, Instagram, Reddit, and YouTube links.";
"SETTINGS_LINK_PREVIEWS_FOOTER" = "Eelvaated on toetatud Imgur, Instagram, Reddit ja YouTube linkide puhul";
/* Header for setting for enabling & disabling link previews. */
"SETTINGS_LINK_PREVIEWS_HEADER" = "Link Previews";
"SETTINGS_LINK_PREVIEWS_HEADER" = "Linkide eelvaated";
/* Title for settings activity */
"SETTINGS_NAV_BAR_TITLE" = "Sätted";
@ -2370,10 +2370,10 @@
"UPGRADE_EXPERIENCE_INTRODUCING_LINK_PREVIEWS_DESCRIPTION" = "Valikulised linkide eelvaated on nüüd toetatud populaarseimate saitide puhul.";
/* Subtitle for upgrading users */
"UPGRADE_EXPERIENCE_INTRODUCING_LINK_PREVIEWS_SUBTITLE" = "You can disable or enable this feature anytime in your Signal settings (Privacy > Send link previews).";
"UPGRADE_EXPERIENCE_INTRODUCING_LINK_PREVIEWS_SUBTITLE" = "Seda funktsiooni on võimalik igal ajal keelata või lubada Signali sätetes (Privaatsus > Saada linkide eelvaateid).";
/* Header for upgrading users */
"UPGRADE_EXPERIENCE_INTRODUCING_LINK_PREVIEWS_TITLE" = "Link Previews";
"UPGRADE_EXPERIENCE_INTRODUCING_LINK_PREVIEWS_TITLE" = "Linkide eelvaated";
/* Description for notification audio customization */
"UPGRADE_EXPERIENCE_INTRODUCING_NOTIFICATION_AUDIO_DESCRIPTION" = "Nüüd saad valida nii vaikimisi helina kui ka igale vestlusele eraldi. Kõned kasutavad seda helinat, mille oled valinud kontaktide jaoks telefonis.";

View File

@ -1605,7 +1605,7 @@
"PRIVACY_VERIFICATION_FAILURE_INVALID_QRCODE" = "Le code balayé ne semble pas être un numéro de sécurité. Utilisez-vous tous les deux une version à jour de Signal?";
/* Paragraph(s) shown alongside the safety number when verifying privacy with {{contact name}} */
"PRIVACY_VERIFICATION_INSTRUCTIONS" = "Si vous souhaitez vérifier la sécurité du chiffrement de bout en bout avec %@, comparez les numéros ci-dessus avec ceux sur son appareil.\n\nVous pouvez aussi balayé le code sur son appareil ou lui demander de balayer le vôtre.";
"PRIVACY_VERIFICATION_INSTRUCTIONS" = "Si vous souhaitez vérifier la sécurité du chiffrement de bout en bout avec %@, comparez les numéros ci-dessus avec ceux sur son appareil.\n\nVous pouvez aussi balayer le code sur son appareil ou lui demander de balayer le vôtre.";
/* Navbar title */
"PRIVACY_VERIFICATION_TITLE" = "Vérifier le numéro de sécurité";

View File

@ -1467,7 +1467,7 @@
"NO_CONTACTS_SEARCH_BY_PHONE_NUMBER" = "Atopar contactos por número de teléfono";
/* Label for 1:1 conversation with yourself. */
"NOTE_TO_SELF" = "Note to Self";
"NOTE_TO_SELF" = "Notificarmo";
/* Lock screen notification text presented after user powers on their device without unlocking. Embeds {{device model}} (either 'iPad' or 'iPhone') */
"NOTIFICATION_BODY_PHONE_LOCKED_FORMAT" = "You may have received messages while your %@ was restarting.";

View File

@ -1183,7 +1183,7 @@
"LINK_NEW_DEVICE_TITLE" = "新しい端末を追加";
/* Label for link previews with an unknown host. */
"LINK_PREVIEW_UNKNOWN_DOMAIN" = "リンクプレビュー";
"LINK_PREVIEW_UNKNOWN_DOMAIN" = "リンクプレビュー";
/* Menu item and navbar title for the device manager */
"LINKED_DEVICES_TITLE" = "追加される端末";
@ -2088,7 +2088,7 @@
"SETTINGS_LINK_PREVIEWS_FOOTER" = "リンクプレビューは、次のサービスに対応しています: Imgur, Instagram, Reddit, YouTube";
/* Header for setting for enabling & disabling link previews. */
"SETTINGS_LINK_PREVIEWS_HEADER" = "リンクプレビュー";
"SETTINGS_LINK_PREVIEWS_HEADER" = "リンクプレビュー";
/* Title for settings activity */
"SETTINGS_NAV_BAR_TITLE" = "設定";
@ -2373,7 +2373,7 @@
"UPGRADE_EXPERIENCE_INTRODUCING_LINK_PREVIEWS_SUBTITLE" = "この機能は、Signalの設定プライバシー > リンクプレビューを送る)で有効化できます。";
/* Header for upgrading users */
"UPGRADE_EXPERIENCE_INTRODUCING_LINK_PREVIEWS_TITLE" = "リンクプレビュー";
"UPGRADE_EXPERIENCE_INTRODUCING_LINK_PREVIEWS_TITLE" = "リンクプレビュー";
/* Description for notification audio customization */
"UPGRADE_EXPERIENCE_INTRODUCING_NOTIFICATION_AUDIO_DESCRIPTION" = "通知音を相手ごとに設定できるようになりました。";

View File

@ -1467,7 +1467,7 @@
"NO_CONTACTS_SEARCH_BY_PHONE_NUMBER" = "Odszukaj kontakty po numerze telefonu";
/* Label for 1:1 conversation with yourself. */
"NOTE_TO_SELF" = "Uwaga dla siebie";
"NOTE_TO_SELF" = "Moje notatki";
/* Lock screen notification text presented after user powers on their device without unlocking. Embeds {{device model}} (either 'iPad' or 'iPhone') */
"NOTIFICATION_BODY_PHONE_LOCKED_FORMAT" = "Możliwe, że otrzymałeś wiadomości podczas restartowania %@.";

File diff suppressed because it is too large Load Diff

View File

@ -321,16 +321,16 @@
"CALL_AUDIO_PERMISSION_TITLE" = "Accesul la microfon este necesar";
/* notification body */
"CALL_INCOMING_NOTIFICATION_BODY" = "☎️ Incoming Call";
"CALL_INCOMING_NOTIFICATION_BODY" = "☎️ Apel de intrare";
/* Accessibility label for placing call button */
"CALL_LABEL" = "Sună";
/* notification body */
"CALL_MISSED_BECAUSE_OF_IDENTITY_CHANGE_NOTIFICATION_BODY" = "☎️ Missed call because the caller's safety number changed.";
"CALL_MISSED_BECAUSE_OF_IDENTITY_CHANGE_NOTIFICATION_BODY" = "☎️ Apel ratat deoarece numărul de siguranță al apelantului s-a schimbat.";
/* notification body */
"CALL_MISSED_NOTIFICATION_BODY" = "☎️ Missed Call";
"CALL_MISSED_NOTIFICATION_BODY" = "☎️ Apel pierdut";
/* Call setup status label after outgoing call times out */
"CALL_SCREEN_STATUS_NO_ANSWER" = "Nici un răspuns";
@ -1440,7 +1440,7 @@
"NEW_GROUP_MEMBER_LABEL" = "Membru";
/* notification title. Embeds {{author name}} and {{group name}} */
"NEW_GROUP_MESSAGE_NOTIFICATION_TITLE" = "%@ to %@";
"NEW_GROUP_MESSAGE_NOTIFICATION_TITLE" = "%@ către %@";
/* Placeholder text for group name field */
"NEW_GROUP_NAMEGROUP_REQUEST_DEFAULT" = "Denumește această conversație de grup";
@ -1914,7 +1914,7 @@
"SEND_BUTTON_TITLE" = "Trimite";
/* notification body */
"SEND_FAILED_NOTIFICATION_BODY" = "Your message failed to send.";
"SEND_FAILED_NOTIFICATION_BODY" = "Mesajul tău nu a putut fi transmis.";
/* Alert body after invite failed */
"SEND_INVITE_FAILURE" = "Invitația trimisă a eșuat, te rog încearcă din nou mai târziu.";

View File

@ -1,5 +1,5 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
//
#import <SignalMessaging/OWSViewController.h>
@ -47,6 +47,7 @@ extern const CGFloat kOWSTable_DefaultCellHeight;
typedef void (^OWSTableActionBlock)(void);
typedef void (^OWSTableSubPageBlock)(UIViewController *viewController);
typedef UITableViewCell *_Nonnull (^OWSTableCustomCellBlock)(void);
typedef BOOL (^OWSTableSwitchBlock)(void);
@interface OWSTableItem : NSObject
@ -103,11 +104,14 @@ typedef UITableViewCell *_Nonnull (^OWSTableCustomCellBlock)(void);
+ (OWSTableItem *)longDisclosureItemWithText:(NSString *)text actionBlock:(nullable OWSTableActionBlock)actionBlock;
+ (OWSTableItem *)switchItemWithText:(NSString *)text isOn:(BOOL)isOn target:(id)target selector:(SEL)selector;
+ (OWSTableItem *)switchItemWithText:(NSString *)text
isOnBlock:(OWSTableSwitchBlock)isOnBlock
target:(id)target
selector:(SEL)selector;
+ (OWSTableItem *)switchItemWithText:(NSString *)text
isOn:(BOOL)isOn
isEnabled:(BOOL)isEnabled
isOnBlock:(OWSTableSwitchBlock)isOnBlock
isEnabledBlock:(OWSTableSwitchBlock)isEnabledBlock
target:(id)target
selector:(SEL)selector;

View File

@ -366,14 +366,23 @@ const CGFloat kOWSTable_DefaultCellHeight = 45.f;
return item;
}
+ (OWSTableItem *)switchItemWithText:(NSString *)text isOn:(BOOL)isOn target:(id)target selector:(SEL)selector
+ (OWSTableItem *)switchItemWithText:(NSString *)text
isOnBlock:(OWSTableSwitchBlock)isOnBlock
target:(id)target
selector:(SEL)selector
{
return [self switchItemWithText:text isOn:isOn isEnabled:YES target:target selector:selector];
return [self switchItemWithText:text
isOnBlock:(OWSTableSwitchBlock)isOnBlock
isEnabledBlock:^{
return YES;
}
target:target
selector:selector];
}
+ (OWSTableItem *)switchItemWithText:(NSString *)text
isOn:(BOOL)isOn
isEnabled:(BOOL)isEnabled
isOnBlock:(OWSTableSwitchBlock)isOnBlock
isEnabledBlock:(OWSTableSwitchBlock)isEnabledBlock
target:(id)target
selector:(SEL)selector
{
@ -389,9 +398,9 @@ const CGFloat kOWSTable_DefaultCellHeight = 45.f;
UISwitch *cellSwitch = [UISwitch new];
cell.accessoryView = cellSwitch;
[cellSwitch setOn:isOn];
[cellSwitch setOn:isOnBlock()];
[cellSwitch addTarget:weakTarget action:selector forControlEvents:UIControlEventValueChanged];
cellSwitch.enabled = isEnabled;
cellSwitch.enabled = isEnabledBlock();
cell.selectionStyle = UITableViewCellSelectionStyleNone;