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
 |