Signal-iOS/Signal/src/ViewControllers/AppSettings/Privacy/PhoneNumberDiscoverabilitySettingsTableViewController.swift
2021-03-09 12:17:32 -08:00

88 lines
3.2 KiB
Swift

//
// Copyright (c) 2021 Open Whisper Systems. All rights reserved.
//
import Foundation
struct PhoneNumberDiscoverability {
static func nameForDiscoverability(_ isDiscoverable: Bool) -> String {
if isDiscoverable {
return NSLocalizedString("PHONE_NUMBER_DISCOVERABILITY_EVERYBODY",
comment: "A user friendly name for the 'everybody' phone number discoverability mode.")
} else {
return NSLocalizedString("PHONE_NUMBER_DISCOVERABILITY_NOBODY",
comment: "A user friendly name for the 'nobody' phone number discoverability mode.")
}
}
static func descriptionForDiscoverability(_ isDiscoverable: Bool) -> String {
if isDiscoverable {
return NSLocalizedString("PHONE_NUMBER_DISCOVERABILITY_EVERYBODY_DESCRIPTION",
comment: "A user friendly description of the 'everybody' phone number discoverability mode.")
} else {
return NSLocalizedString("PHONE_NUMBER_DISCOVERABILITY_NOBODY_DESCRIPTION",
comment: "A user friendly description of the 'nobody' phone number discoverability mode.")
}
}
}
@objc
class PhoneNumberDiscoverabilitySettingsTableViewController: OWSTableViewController2 {
@objc
class var nameForCurrentDiscoverability: String {
return PhoneNumberDiscoverability.nameForDiscoverability(tsAccountManager.isDiscoverableByPhoneNumber())
}
@objc
class var descriptionForCurrentDiscoverability: String {
return PhoneNumberDiscoverability.descriptionForDiscoverability(tsAccountManager.isDiscoverableByPhoneNumber())
}
override func viewDidLoad() {
super.viewDidLoad()
title = NSLocalizedString("SETTINGS_PHONE_NUMBER_DISCOVERABILITY_TITLE",
comment: "The title for the phone number discoverability settings.")
updateTableContents()
}
func updateTableContents() {
let contents = OWSTableContents()
let section = OWSTableSection()
section.customHeaderView = .spacer(withHeight: 32)
section.footerTitle = Self.descriptionForCurrentDiscoverability
section.add(discoverabilityItem(true))
section.add(discoverabilityItem(false))
contents.addSection(section)
self.contents = contents
}
func discoverabilityItem(_ isDiscoverable: Bool) -> OWSTableItem {
return OWSTableItem(
text: PhoneNumberDiscoverability.nameForDiscoverability(isDiscoverable),
actionBlock: { [weak self] in
self?.changeDiscoverability(isDiscoverable)
},
accessoryType: tsAccountManager.isDiscoverableByPhoneNumber() == isDiscoverable ? .checkmark : .none
)
}
func changeDiscoverability(_ isDiscoverable: Bool) {
databaseStorage.asyncWrite(block: { [weak self] transaction in
self?.tsAccountManager.setIsDiscoverableByPhoneNumber(
isDiscoverable,
updateStorageService: true,
transaction: transaction
)
}) { [weak self] in
self?.updateTableContents()
}
}
}