Merge branch 'mkirk/ud-ui' into master
This commit is contained in:
commit
a5655649d6
@ -12,6 +12,7 @@
|
||||
#import <SignalMessaging/ThreadUtil.h>
|
||||
#import <SignalServiceKit/OWS2FAManager.h>
|
||||
#import <SignalServiceKit/OWSReadReceiptManager.h>
|
||||
#import <SignalServiceKit/SignalServiceKit-Swift.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@ -48,6 +49,18 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
}
|
||||
|
||||
#pragma mark - Dependencies
|
||||
|
||||
- (id<OWSUDManager>)udManager
|
||||
{
|
||||
return SSKEnvironment.shared.udManager;
|
||||
}
|
||||
|
||||
- (OWSPreferences *)preferences
|
||||
{
|
||||
return Environment.shared.preferences;
|
||||
}
|
||||
|
||||
#pragma mark - Table Contents
|
||||
|
||||
- (void)updateTableContents
|
||||
@ -113,11 +126,10 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
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:[Environment.shared.preferences screenSecurityIsEnabled]
|
||||
target:weakSelf
|
||||
selector:@selector(didToggleScreenSecuritySwitch:)]];
|
||||
[screenSecuritySection addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_SCREEN_SECURITY", @"")
|
||||
isOn:[self.preferences screenSecurityIsEnabled]
|
||||
target:weakSelf
|
||||
selector:@selector(didToggleScreenSecuritySwitch:)]];
|
||||
[contents addSection:screenSecuritySection];
|
||||
|
||||
// Allow calls to connect directly vs. using TURN exclusively
|
||||
@ -129,7 +141,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
[callingSection addItem:[OWSTableItem switchItemWithText:NSLocalizedString(
|
||||
@"SETTINGS_CALLING_HIDES_IP_ADDRESS_PREFERENCE_TITLE",
|
||||
@"Table cell label")
|
||||
isOn:[Environment.shared.preferences doCallsHideIPAddress]
|
||||
isOn:[self.preferences doCallsHideIPAddress]
|
||||
target:weakSelf
|
||||
selector:@selector(didToggleCallsHideIPAddressSwitch:)]];
|
||||
[contents addSection:callingSection];
|
||||
@ -140,7 +152,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
addItem:[OWSTableItem switchItemWithText:NSLocalizedString(
|
||||
@"SETTINGS_PRIVACY_CALLKIT_SYSTEM_CALL_LOG_PREFERENCE_TITLE",
|
||||
@"Short table cell label")
|
||||
isOn:[Environment.shared.preferences isSystemCallLogEnabled]
|
||||
isOn:[self.preferences isSystemCallLogEnabled]
|
||||
target:weakSelf
|
||||
selector:@selector(didToggleEnableSystemCallLogSwitch:)]];
|
||||
callKitSection.footerTitle = NSLocalizedString(
|
||||
@ -152,14 +164,14 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
= NSLocalizedString(@"SETTINGS_SECTION_CALL_KIT_DESCRIPTION", @"Settings table section footer.");
|
||||
[callKitSection addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_PRIVACY_CALLKIT_TITLE",
|
||||
@"Short table cell label")
|
||||
isOn:[Environment.shared.preferences isCallKitEnabled]
|
||||
isOn:[self.preferences isCallKitEnabled]
|
||||
target:weakSelf
|
||||
selector:@selector(didToggleEnableCallKitSwitch:)]];
|
||||
if (Environment.shared.preferences.isCallKitEnabled) {
|
||||
if (self.preferences.isCallKitEnabled) {
|
||||
[callKitSection
|
||||
addItem:[OWSTableItem switchItemWithText:NSLocalizedString(@"SETTINGS_PRIVACY_CALLKIT_PRIVACY_TITLE",
|
||||
@"Label for 'CallKit privacy' preference")
|
||||
isOn:![Environment.shared.preferences isCallKitPrivacyEnabled]
|
||||
isOn:![self.preferences isCallKitPrivacyEnabled]
|
||||
target:weakSelf
|
||||
selector:@selector(didToggleEnableCallKitPrivacySwitch:)]];
|
||||
}
|
||||
@ -193,6 +205,34 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
}]];
|
||||
[contents addSection:historyLogsSection];
|
||||
|
||||
OWSTableSection *unidentifiedDeliveryIndicatorsSection = [OWSTableSection new];
|
||||
unidentifiedDeliveryIndicatorsSection.headerTitle
|
||||
= NSLocalizedString(@"SETTINGS_UNIDENTIFIED_DELIVERY_SECTION_TITLE", @"table section label");
|
||||
|
||||
unidentifiedDeliveryIndicatorsSection.footerTitle
|
||||
= NSLocalizedString(@"SETTINGS_UNIDENTIFIED_DELIVERY_SHOW_INDICATORS_FOOTER", @"table section footer");
|
||||
|
||||
OWSTableItem *showUDIndicatorsItem = [OWSTableItem
|
||||
switchItemWithText:NSLocalizedString(@"SETTINGS_UNIDENTIFIED_DELIVERY_SHOW_INDICATORS", @"switch label")
|
||||
isOn:weakSelf.preferences.shouldShowUnidentifiedDeliveryIndicators
|
||||
target:weakSelf
|
||||
selector:@selector(didToggleUDShowIndicatorsSwitch:)];
|
||||
[unidentifiedDeliveryIndicatorsSection addItem:showUDIndicatorsItem];
|
||||
|
||||
OWSTableSection *unidentifiedDeliveryUnrestrictedSection = [OWSTableSection new];
|
||||
OWSTableItem *unrestrictedAccessItem = [OWSTableItem
|
||||
switchItemWithText:NSLocalizedString(@"SETTINGS_UNIDENTIFIED_DELIVERY_UNRESTRICTED_ACCESS", @"switch label")
|
||||
isOn:weakSelf.udManager.shouldAllowUnrestrictedAccessLocal
|
||||
target:weakSelf
|
||||
selector:@selector(didToggleUDUnrestrictedAccessSwitch:)];
|
||||
[unidentifiedDeliveryUnrestrictedSection addItem:unrestrictedAccessItem];
|
||||
|
||||
unidentifiedDeliveryUnrestrictedSection.footerTitle
|
||||
= NSLocalizedString(@"SETTINGS_UNIDENTIFIED_DELIVERY_UNRESTRICTED_ACCESS_FOOTER", @"table section footer");
|
||||
|
||||
[contents addSection:unidentifiedDeliveryIndicatorsSection];
|
||||
[contents addSection:unidentifiedDeliveryUnrestrictedSection];
|
||||
|
||||
self.contents = contents;
|
||||
}
|
||||
|
||||
@ -235,7 +275,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
{
|
||||
BOOL enabled = sender.isOn;
|
||||
OWSLogInfo(@"toggled screen security: %@", enabled ? @"ON" : @"OFF");
|
||||
[Environment.shared.preferences setScreenSecurity:enabled];
|
||||
[self.preferences setScreenSecurity:enabled];
|
||||
}
|
||||
|
||||
- (void)didToggleReadReceiptsSwitch:(UISwitch *)sender
|
||||
@ -249,13 +289,13 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
{
|
||||
BOOL enabled = sender.isOn;
|
||||
OWSLogInfo(@"toggled callsHideIPAddress: %@", enabled ? @"ON" : @"OFF");
|
||||
[Environment.shared.preferences setDoCallsHideIPAddress:enabled];
|
||||
[self.preferences setDoCallsHideIPAddress:enabled];
|
||||
}
|
||||
|
||||
- (void)didToggleEnableSystemCallLogSwitch:(UISwitch *)sender
|
||||
{
|
||||
OWSLogInfo(@"user toggled call kit preference: %@", (sender.isOn ? @"ON" : @"OFF"));
|
||||
[Environment.shared.preferences setIsSystemCallLogEnabled:sender.isOn];
|
||||
[self.preferences setIsSystemCallLogEnabled:sender.isOn];
|
||||
|
||||
// rebuild callUIAdapter since CallKit configuration changed.
|
||||
[SignalApp.sharedApp.callService createCallUIAdapter];
|
||||
@ -264,7 +304,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (void)didToggleEnableCallKitSwitch:(UISwitch *)sender
|
||||
{
|
||||
OWSLogInfo(@"user toggled call kit preference: %@", (sender.isOn ? @"ON" : @"OFF"));
|
||||
[Environment.shared.preferences setIsCallKitEnabled:sender.isOn];
|
||||
[self.preferences setIsCallKitEnabled:sender.isOn];
|
||||
|
||||
// rebuild callUIAdapter since CallKit vs not changed.
|
||||
[SignalApp.sharedApp.callService createCallUIAdapter];
|
||||
@ -276,12 +316,24 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (void)didToggleEnableCallKitPrivacySwitch:(UISwitch *)sender
|
||||
{
|
||||
OWSLogInfo(@"user toggled call kit privacy preference: %@", (sender.isOn ? @"ON" : @"OFF"));
|
||||
[Environment.shared.preferences setIsCallKitPrivacyEnabled:!sender.isOn];
|
||||
[self.preferences setIsCallKitPrivacyEnabled:!sender.isOn];
|
||||
|
||||
// rebuild callUIAdapter since CallKit configuration changed.
|
||||
[SignalApp.sharedApp.callService createCallUIAdapter];
|
||||
}
|
||||
|
||||
- (void)didToggleUDUnrestrictedAccessSwitch:(UISwitch *)sender
|
||||
{
|
||||
OWSLogInfo(@"toggled to: %@", (sender.isOn ? @"ON" : @"OFF"));
|
||||
[self.udManager setShouldAllowUnrestrictedAccessLocal:sender.isOn];
|
||||
}
|
||||
|
||||
- (void)didToggleUDShowIndicatorsSwitch:(UISwitch *)sender
|
||||
{
|
||||
OWSLogInfo(@"toggled to: %@", (sender.isOn ? @"ON" : @"OFF"));
|
||||
[self.preferences setShouldShowUnidentifiedDeliveryIndicators:sender.isOn];
|
||||
}
|
||||
|
||||
- (void)show2FASettings
|
||||
{
|
||||
OWSLogInfo(@"");
|
||||
|
||||
@ -16,8 +16,6 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele
|
||||
|
||||
// MARK: Properties
|
||||
|
||||
let contactsManager: OWSContactsManager
|
||||
|
||||
let uiDatabaseConnection: YapDatabaseConnection
|
||||
|
||||
var bubbleView: UIView?
|
||||
@ -39,9 +37,23 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele
|
||||
var attachmentStream: TSAttachmentStream?
|
||||
var messageBody: String?
|
||||
|
||||
lazy var shouldShowUD: Bool = {
|
||||
return self.preferences.shouldShowUnidentifiedDeliveryIndicators()
|
||||
}()
|
||||
|
||||
var conversationStyle: ConversationStyle
|
||||
|
||||
private var contactShareViewHelper: ContactShareViewHelper
|
||||
private var contactShareViewHelper: ContactShareViewHelper!
|
||||
|
||||
// MARK: Dependencies
|
||||
|
||||
var preferences: OWSPreferences {
|
||||
return Environment.shared.preferences
|
||||
}
|
||||
|
||||
var contactsManager: OWSContactsManager {
|
||||
return Environment.shared.contactsManager
|
||||
}
|
||||
|
||||
// MARK: Initializers
|
||||
|
||||
@ -52,23 +64,21 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele
|
||||
|
||||
@objc
|
||||
required init(viewItem: ConversationViewItem, message: TSMessage, thread: TSThread, mode: MessageMetadataViewMode) {
|
||||
self.contactsManager = Environment.shared.contactsManager
|
||||
self.viewItem = viewItem
|
||||
self.message = message
|
||||
self.mode = mode
|
||||
self.uiDatabaseConnection = OWSPrimaryStorage.shared().newDatabaseConnection()
|
||||
self.contactShareViewHelper = ContactShareViewHelper(contactsManager: contactsManager)
|
||||
self.conversationStyle = ConversationStyle(thread: thread)
|
||||
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
|
||||
contactShareViewHelper.delegate = self
|
||||
}
|
||||
|
||||
// MARK: View Lifecycle
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
self.contactShareViewHelper = ContactShareViewHelper(contactsManager: contactsManager)
|
||||
contactShareViewHelper.delegate = self
|
||||
|
||||
self.uiDatabaseConnection.beginLongLivedReadTransaction()
|
||||
updateDBConnectionAndMessageToLatest()
|
||||
@ -191,7 +201,6 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele
|
||||
}
|
||||
|
||||
var rows = [UIView]()
|
||||
let contactsManager = Environment.shared.contactsManager!
|
||||
|
||||
// Content
|
||||
rows += contentRows()
|
||||
@ -258,7 +267,12 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele
|
||||
// context of a table view.
|
||||
let cellView = ContactCellView()
|
||||
// We use the "short" status message to avoid being redundant with the section title.
|
||||
cellView.accessoryMessage = shortStatusMessage
|
||||
if self.shouldShowUD, recipientState.wasSentByUD {
|
||||
// TODO once design is complete, replace stand-in emoji
|
||||
cellView.accessoryMessage = shortStatusMessage.rtlSafeAppend(" ").rtlSafeAppend("💌")
|
||||
} else {
|
||||
cellView.accessoryMessage = shortStatusMessage
|
||||
}
|
||||
cellView.configure(withRecipientId: recipientId, contactsManager: self.contactsManager)
|
||||
|
||||
let wrapper = UIView()
|
||||
@ -284,14 +298,18 @@ class MessageDetailViewController: OWSViewController, MediaGalleryDataSourceDele
|
||||
}
|
||||
}
|
||||
|
||||
var sentText = DateUtil.formatPastTimestampRelativeToNow(message.timestamp)
|
||||
if self.shouldShowUD, let incomingMessage = message as? TSIncomingMessage, incomingMessage.wasReceivedByUD {
|
||||
sentText = sentText.rtlSafeAppend(" ").rtlSafeAppend("💌")
|
||||
}
|
||||
let sentRow = valueRow(name: NSLocalizedString("MESSAGE_METADATA_VIEW_SENT_DATE_TIME",
|
||||
comment: "Label for the 'sent date & time' field of the 'message metadata' view."),
|
||||
value: DateUtil.formatPastTimestampRelativeToNow(message.timestamp))
|
||||
value: sentText)
|
||||
sentRow.isUserInteractionEnabled = true
|
||||
sentRow.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(didLongPressSent)))
|
||||
rows.append(sentRow)
|
||||
|
||||
if message as? TSIncomingMessage != nil {
|
||||
if message is TSIncomingMessage {
|
||||
rows.append(valueRow(name: NSLocalizedString("MESSAGE_METADATA_VIEW_RECEIVED_DATE_TIME",
|
||||
comment: "Label for the 'received date & time' field of the 'message metadata' view."),
|
||||
value: DateUtil.formatPastTimestampRelativeToNow(message.timestampForSorting())))
|
||||
|
||||
@ -9,8 +9,9 @@ cd $REPO_ROOT
|
||||
SSK_DIR="./SignalServiceKit/src"
|
||||
SAE_DIR="./SignalShareExtension"
|
||||
SM_DIR="./SignalMessaging"
|
||||
SCK_DIR="../SignalCoreKit"
|
||||
|
||||
TARGETS="Signal/src ${SSK_DIR} ${SAE_DIR} ${SM_DIR}"
|
||||
TARGETS="Signal/src ${SSK_DIR} ${SAE_DIR} ${SM_DIR} ${SCK_DIR}"
|
||||
TMP="$(mktemp -d)"
|
||||
STRINGFILE="Signal/translations/en.lproj/Localizable.strings"
|
||||
|
||||
|
||||
@ -2093,6 +2093,21 @@
|
||||
/* Title for the 'two factor auth' section of the privacy settings. */
|
||||
"SETTINGS_TWO_FACTOR_AUTH_TITLE" = "Registration Lock";
|
||||
|
||||
/* table section label */
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_SECTION_TITLE" = "Unidentified Delivery";
|
||||
|
||||
/* switch label */
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_SHOW_INDICATORS" = "Display Indicators";
|
||||
|
||||
/* table section footer */
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_SHOW_INDICATORS_FOOTER" = "Show a status icon when you select \"More Info\" on messages that were sent using unidentified delivery.";
|
||||
|
||||
/* switch label */
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_UNRESTRICTED_ACCESS" = "Allow from Anyone";
|
||||
|
||||
/* table section footer */
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_UNRESTRICTED_ACCESS_FOOTER" = "Enable unidentified delivery for incoming messages from non-contacts and people with whom you have not shared your profile.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SETTINGS_VERSION" = "Version";
|
||||
|
||||
|
||||
@ -10,6 +10,10 @@ public extension String {
|
||||
return self.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
}
|
||||
|
||||
func rtlSafeAppend(_ string: String) -> String {
|
||||
return (self as NSString).rtlSafeAppend(string)
|
||||
}
|
||||
|
||||
// Truncates string to be less than or equal to byteCount, while ensuring we never truncate partial characters for multibyte characters.
|
||||
func truncated(toByteCount byteCount: UInt) -> String? {
|
||||
var lowerBoundCharCount = 0
|
||||
|
||||
@ -58,6 +58,9 @@ extern NSString *const OWSPreferencesCallLoggingDidChangeNotification;
|
||||
- (BOOL)hasGeneratedThumbnails;
|
||||
- (void)setHasGeneratedThumbnails:(BOOL)value;
|
||||
|
||||
- (BOOL)shouldShowUnidentifiedDeliveryIndicators;
|
||||
- (void)setShouldShowUnidentifiedDeliveryIndicators:(BOOL)value;
|
||||
|
||||
#pragma mark Callkit
|
||||
|
||||
- (BOOL)isSystemCallLogEnabled;
|
||||
|
||||
@ -27,6 +27,8 @@ NSString *const OWSPreferencesKeyCallKitPrivacyEnabled = @"CallKitPrivacyEnabled
|
||||
NSString *const OWSPreferencesKeyCallsHideIPAddress = @"CallsHideIPAddress";
|
||||
NSString *const OWSPreferencesKeyHasDeclinedNoContactsView = @"hasDeclinedNoContactsView";
|
||||
NSString *const OWSPreferencesKeyHasGeneratedThumbnails = @"OWSPreferencesKeyHasGeneratedThumbnails";
|
||||
NSString *const OWSPreferencesKeyShouldShowUnidentifiedDeliveryIndicators
|
||||
= @"OWSPreferencesKeyShouldShowUnidentifiedDeliveryIndicators";
|
||||
NSString *const OWSPreferencesKeyIOSUpgradeNagDate = @"iOSUpgradeNagDate";
|
||||
NSString *const OWSPreferencesKey_IsReadyForAppExtensions = @"isReadyForAppExtensions_5";
|
||||
NSString *const OWSPreferencesKeySystemCallLogEnabled = @"OWSPreferencesKeySystemCallLogEnabled";
|
||||
@ -188,6 +190,17 @@ NSString *const OWSPreferencesKeySystemCallLogEnabled = @"OWSPreferencesKeySyste
|
||||
return [self tryGetValueForKey:OWSPreferencesKeyIOSUpgradeNagDate];
|
||||
}
|
||||
|
||||
- (BOOL)shouldShowUnidentifiedDeliveryIndicators
|
||||
{
|
||||
NSNumber *preference = [self tryGetValueForKey:OWSPreferencesKeyShouldShowUnidentifiedDeliveryIndicators];
|
||||
return preference ? [preference boolValue] : NO;
|
||||
}
|
||||
|
||||
- (void)setShouldShowUnidentifiedDeliveryIndicators:(BOOL)value
|
||||
{
|
||||
[self setValueForKey:OWSPreferencesKeyShouldShowUnidentifiedDeliveryIndicators toValue:@(value)];
|
||||
}
|
||||
|
||||
#pragma mark - Calling
|
||||
|
||||
#pragma mark CallKit
|
||||
|
||||
Loading…
Reference in New Issue
Block a user