Handle empty linked device names
This commit is contained in:
parent
207023272a
commit
47cbfce8e1
@ -994,6 +994,7 @@ class EditDeviceNameViewController: NameEditorViewController {
|
||||
override class var nameByteLimit: Int { 225 }
|
||||
override class var nameGlyphLimit: Int { 50 }
|
||||
|
||||
override var allowEmptyName: Bool { false }
|
||||
override var placeholderText: String? {
|
||||
OWSLocalizedString(
|
||||
"SECONDARY_ONBOARDING_CHOOSE_DEVICE_NAME_PLACEHOLDER",
|
||||
|
||||
@ -19,6 +19,7 @@ class NameEditorViewController: OWSTableViewController2 {
|
||||
class var nameByteLimit: Int { owsFail("Must be implemented by subclasses") }
|
||||
class var nameGlyphLimit: Int { owsFail("Must be implemented by subclasses") }
|
||||
|
||||
var allowEmptyName: Bool { true }
|
||||
var placeholderText: String? { nil }
|
||||
|
||||
private lazy var nameField = OWSTextField(
|
||||
@ -31,7 +32,7 @@ class NameEditorViewController: OWSTableViewController2 {
|
||||
self.updateHasUnsavedChanges()
|
||||
},
|
||||
returnPressed: { [unowned self] in
|
||||
if hasUnsavedChanges { self.didTapDone() }
|
||||
if canSaveChanges { self.didTapDone() }
|
||||
},
|
||||
)
|
||||
|
||||
@ -63,7 +64,7 @@ class NameEditorViewController: OWSTableViewController2 {
|
||||
if isPresentedInSheet {
|
||||
self.navigationItem.leftBarButtonItem = .cancelButton(
|
||||
dismissingFrom: self,
|
||||
hasUnsavedChanges: { [unowned self] in self.hasUnsavedChanges },
|
||||
hasUnsavedChanges: { [unowned self] in self.canSaveChanges },
|
||||
)
|
||||
}
|
||||
self.navigationItem.rightBarButtonItem = .doneButton { [unowned self] in self.didTapDone() }
|
||||
@ -98,20 +99,23 @@ class NameEditorViewController: OWSTableViewController2 {
|
||||
}
|
||||
|
||||
override var isModalInPresentation: Bool {
|
||||
get { hasUnsavedChanges }
|
||||
get { canSaveChanges }
|
||||
set {}
|
||||
}
|
||||
|
||||
private func updateHasUnsavedChanges() {
|
||||
self.hasUnsavedChanges = self.nameField.text != self.oldName
|
||||
let hasUnsavedChanges = self.nameField.text != self.oldName
|
||||
let hasUnallowedEmptyName = !self.allowEmptyName && self.nameField.text.isEmptyOrNil
|
||||
|
||||
self.navigationItem.rightBarButtonItem?.isEnabled = hasUnsavedChanges && !hasUnallowedEmptyName
|
||||
}
|
||||
|
||||
private var hasUnsavedChanges: Bool = false {
|
||||
private var canSaveChanges: Bool = false {
|
||||
didSet {
|
||||
if oldValue == hasUnsavedChanges {
|
||||
if oldValue == canSaveChanges {
|
||||
return
|
||||
}
|
||||
self.navigationItem.rightBarButtonItem?.isEnabled = hasUnsavedChanges
|
||||
self.navigationItem.rightBarButtonItem?.isEnabled = canSaveChanges
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -10,6 +10,7 @@ public import LibSignalClient
|
||||
public enum OWSDeviceNameError: Error {
|
||||
case assertionFailure
|
||||
case invalidInput
|
||||
case emptyName
|
||||
case cryptError(_ description: String)
|
||||
}
|
||||
|
||||
@ -98,8 +99,7 @@ public enum OWSDeviceNames {
|
||||
throw OWSDeviceNameError.assertionFailure
|
||||
}
|
||||
guard ciphertext.count > 0 else {
|
||||
owsFailDebug("Invalid cipher text.")
|
||||
throw OWSDeviceNameError.assertionFailure
|
||||
throw OWSDeviceNameError.emptyName
|
||||
}
|
||||
|
||||
// master_secret = ECDH(identity_private, ephemeral_public)
|
||||
|
||||
@ -154,9 +154,11 @@ struct OWSDeviceServiceImpl: OWSDeviceService {
|
||||
base64String: nameCiphertext,
|
||||
identityKeyPair: identityKeyPair,
|
||||
)
|
||||
} catch OWSDeviceNameError.emptyName {
|
||||
name = nil
|
||||
} catch {
|
||||
owsFailDebug("Failed to decrypt device name! Is this a legacy device name? \(error)")
|
||||
name = nameCiphertext
|
||||
name = nil
|
||||
}
|
||||
} else {
|
||||
name = nil
|
||||
|
||||
Loading…
Reference in New Issue
Block a user