From 1e319a74fc3e467207870e57bb745a8beb0b66a6 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 2 Jul 2019 20:04:07 +0200 Subject: [PATCH] Disallow eastern arabic numerals in passcode setup Try to match western arabic passcode with eastern arabic for users who already stuck --- submodules/TelegramUI/TelegramUI/NumberFormat.swift | 10 ++++++++++ .../TelegramUI/PasscodeEntryController.swift | 3 +++ .../TelegramUI/PasscodeEntryInputFieldNode.swift | 12 ++++++++++-- .../TelegramUI/PasscodeOptionsController.swift | 3 +++ .../TelegramUI_Xcode.xcodeproj/project.pbxproj | 4 ++++ 5 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 submodules/TelegramUI/TelegramUI/NumberFormat.swift diff --git a/submodules/TelegramUI/TelegramUI/NumberFormat.swift b/submodules/TelegramUI/TelegramUI/NumberFormat.swift new file mode 100644 index 0000000000..ab36c7c313 --- /dev/null +++ b/submodules/TelegramUI/TelegramUI/NumberFormat.swift @@ -0,0 +1,10 @@ +import Foundation + +func convertToArabicNumeralString(_ string: String) -> String { + var string = string + let arabicNumbers = ["٠": "0", "١": "1", "٢": "2", "٣": "3", "٤": "4", "٥": "5", "٦": "6", "٧": "7", "٨": "8", "٩": "9"] + for (arabic, generic) in arabicNumbers { + string = string.replacingOccurrences(of: generic, with: arabic) + } + return string +} diff --git a/submodules/TelegramUI/TelegramUI/PasscodeEntryController.swift b/submodules/TelegramUI/TelegramUI/PasscodeEntryController.swift index 69ccac8220..ab23fe8c50 100644 --- a/submodules/TelegramUI/TelegramUI/PasscodeEntryController.swift +++ b/submodules/TelegramUI/TelegramUI/PasscodeEntryController.swift @@ -122,6 +122,9 @@ final public class PasscodeEntryController: ViewController { succeed = true case let .numericalPassword(code, _, _): succeed = passcode == code + if !succeed { + succeed = convertToArabicNumeralString(passcode) == code + } case let .plaintextPassword(code, _, _): succeed = passcode == code } diff --git a/submodules/TelegramUI/TelegramUI/PasscodeEntryInputFieldNode.swift b/submodules/TelegramUI/TelegramUI/PasscodeEntryInputFieldNode.swift index e985fa5e70..8ee0e18c69 100644 --- a/submodules/TelegramUI/TelegramUI/PasscodeEntryInputFieldNode.swift +++ b/submodules/TelegramUI/TelegramUI/PasscodeEntryInputFieldNode.swift @@ -47,6 +47,10 @@ private func generateFieldBackgroundImage(background: PasscodeBackground, frame: }) } +private let validDigitsSet: CharacterSet = { + return CharacterSet(charactersIn: "0".unicodeScalars.first! ... "9".unicodeScalars.first!) +}() + enum PasscodeEntryFieldType { case digits6 case digits4 @@ -66,7 +70,7 @@ enum PasscodeEntryFieldType { var allowedCharacters: CharacterSet? { switch self { case .digits6, .digits4: - return CharacterSet.decimalDigits + return validDigitsSet case .alphanumeric: return nil } @@ -75,7 +79,11 @@ enum PasscodeEntryFieldType { var keyboardType: UIKeyboardType { switch self { case .digits6, .digits4: - return .numberPad + if #available(iOS 10.0, *) { + return .asciiCapableNumberPad + } else { + return .numberPad + } case .alphanumeric: return .default } diff --git a/submodules/TelegramUI/TelegramUI/PasscodeOptionsController.swift b/submodules/TelegramUI/TelegramUI/PasscodeOptionsController.swift index 51fa868cea..50603c41d8 100644 --- a/submodules/TelegramUI/TelegramUI/PasscodeOptionsController.swift +++ b/submodules/TelegramUI/TelegramUI/PasscodeOptionsController.swift @@ -420,6 +420,9 @@ public func passcodeOptionsAccessController(context: AccountContext, animateIn: succeed = true case let .numericalPassword(code, _, _): succeed = passcode == code + if !succeed { + succeed = convertToArabicNumeralString(passcode) == code + } case let .plaintextPassword(code, _, _): succeed = passcode == code } diff --git a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj index bf5812eda2..d936ef2175 100644 --- a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj +++ b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj @@ -154,6 +154,7 @@ 09EC0DE722C67FB100E7185B /* UpdateInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EC0DE622C67FB100E7185B /* UpdateInfoController.swift */; }; 09EC0DEB22CAFF1400E7185B /* UpdateInfoItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EC0DEA22CAFF1400E7185B /* UpdateInfoItem.swift */; }; 09EC0DED22CB583C00E7185B /* TextLinkHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EC0DEC22CB583C00E7185B /* TextLinkHandling.swift */; }; + 09EC5CDC22CBD33D00292E42 /* NumberFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EC5CDB22CBD33D00292E42 /* NumberFormat.swift */; }; 09EDAD26220D30980012A50B /* AutodownloadConnectionTypeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EDAD25220D30980012A50B /* AutodownloadConnectionTypeController.swift */; }; 09EDAD2A220DA6A40012A50B /* VolumeButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EDAD29220DA6A40012A50B /* VolumeButtons.swift */; }; 09EDAD2C2211552F0012A50B /* AutodownloadMediaCategoryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EDAD2B2211552F0012A50B /* AutodownloadMediaCategoryController.swift */; }; @@ -1376,6 +1377,7 @@ 09EC0DE622C67FB100E7185B /* UpdateInfoController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateInfoController.swift; sourceTree = ""; }; 09EC0DEA22CAFF1400E7185B /* UpdateInfoItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateInfoItem.swift; sourceTree = ""; }; 09EC0DEC22CB583C00E7185B /* TextLinkHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkHandling.swift; sourceTree = ""; }; + 09EC5CDB22CBD33D00292E42 /* NumberFormat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumberFormat.swift; sourceTree = ""; }; 09EDAD25220D30980012A50B /* AutodownloadConnectionTypeController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutodownloadConnectionTypeController.swift; sourceTree = ""; }; 09EDAD29220DA6A40012A50B /* VolumeButtons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VolumeButtons.swift; sourceTree = ""; }; 09EDAD2B2211552F0012A50B /* AutodownloadMediaCategoryController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutodownloadMediaCategoryController.swift; sourceTree = ""; }; @@ -2975,6 +2977,7 @@ 0900678E21ED8E0E00530762 /* HexColor.swift */, 0947FCAF224055990086741C /* StringHash.swift */, 09F2158C225CF5BC00AEDF6D /* Pasteboard.swift */, + 09EC5CDB22CBD33D00292E42 /* NumberFormat.swift */, ); name = Strings; sourceTree = ""; @@ -6051,6 +6054,7 @@ 09FFBCD9228473BD00C33B4B /* CallSuggestTabController.swift in Sources */, D0EC6DFC1EB9F58900EBF1C3 /* GalleryController.swift in Sources */, D0EC6DFD1EB9F58900EBF1C3 /* GalleryControllerNode.swift in Sources */, + 09EC5CDC22CBD33D00292E42 /* NumberFormat.swift in Sources */, D0E9BA571F055A0B00F079A4 /* STPFormTextField.m in Sources */, D0EC6DFE1EB9F58900EBF1C3 /* GalleryControllerPresentationState.swift in Sources */, D00817DB22B47A14008A895F /* LegacyChatImport.swift in Sources */,