Merge branch 'mkirk/ud-ui' into master

pull/1/head
Michael Kirk 7 years ago
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…
Cancel
Save