83 lines
3.7 KiB
Swift
83 lines
3.7 KiB
Swift
import SwiftUI
|
||
|
||
struct AppLockSettingsView: View {
|
||
@State private var desiredPassword: String = ""
|
||
@State private var confirmationPassword: String = ""
|
||
@State private var activeAlert: AppLockAlert?
|
||
@FocusState private var focusedField: Field?
|
||
|
||
private enum Field: Hashable {
|
||
case desired
|
||
case confirmation
|
||
}
|
||
|
||
var body: some View {
|
||
Form {
|
||
Section(header: Text(NSLocalizedString("Пароль-приложение", comment: "Раздел формы установки пароля на приложение"))) {
|
||
SecureField(NSLocalizedString("Введите пароль", comment: "Поле ввода пароля на приложение"), text: $desiredPassword)
|
||
.focused($focusedField, equals: .desired)
|
||
|
||
SecureField(NSLocalizedString("Повторите пароль", comment: "Поле подтверждения пароля на приложение"), text: $confirmationPassword)
|
||
.focused($focusedField, equals: .confirmation)
|
||
|
||
Button(NSLocalizedString("Сохранить пароль", comment: "Кнопка сохранения пароля на приложение")) {
|
||
handleSaveTapped()
|
||
}
|
||
.disabled(desiredPassword.isEmpty || confirmationPassword.isEmpty)
|
||
}
|
||
|
||
Section {
|
||
Text(NSLocalizedString("Настоящая защита приложения появится позже. Пока вы можете ознакомится с макетом.", comment: "Описание заглушки для пароля на приложение"))
|
||
.font(.callout)
|
||
.foregroundColor(.secondary)
|
||
}
|
||
}
|
||
.navigationTitle(NSLocalizedString("Пароль на приложение", comment: "Заголовок экрана пароля на приложение"))
|
||
.navigationBarTitleDisplayMode(.inline)
|
||
.onAppear {
|
||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) {
|
||
focusedField = .desired
|
||
}
|
||
}
|
||
.alert(item: $activeAlert) { alert in
|
||
Alert(
|
||
title: Text(alert.title),
|
||
message: Text(alert.message),
|
||
dismissButton: .default(Text(NSLocalizedString("OK", comment: "Общий текст кнопки OK")))
|
||
)
|
||
}
|
||
}
|
||
|
||
private func handleSaveTapped() {
|
||
guard !desiredPassword.isEmpty, desiredPassword == confirmationPassword else {
|
||
activeAlert = AppLockAlert(
|
||
title: NSLocalizedString("Пароли не совпадают", comment: "Заголовок ошибки несовпадения паролей"),
|
||
message: NSLocalizedString("Проверьте ввод и попробуйте снова.", comment: "Сообщение ошибки несовпадения паролей"))
|
||
return
|
||
}
|
||
|
||
activeAlert = AppLockAlert(
|
||
title: NSLocalizedString("Скоро", comment: "Заголовок заглушки"),
|
||
message: NSLocalizedString("Защита приложением будет добавлена в будущих обновлениях.", comment: "Сообщение заглушки пароля на приложение")
|
||
)
|
||
desiredPassword.removeAll()
|
||
confirmationPassword.removeAll()
|
||
}
|
||
}
|
||
|
||
private struct AppLockAlert: Identifiable {
|
||
let id = UUID()
|
||
let title: String
|
||
let message: String
|
||
}
|
||
|
||
#if DEBUG
|
||
struct AppLockSettingsView_Previews: PreviewProvider {
|
||
static var previews: some View {
|
||
NavigationView {
|
||
AppLockSettingsView()
|
||
}
|
||
}
|
||
}
|
||
#endif
|