From 5d59d57871151f64bc2b741094da6b0389d08d73 Mon Sep 17 00:00:00 2001 From: Peter McNeil Date: Sun, 6 Oct 2024 09:24:28 +0100 Subject: [PATCH] =?UTF-8?q?[tvOS]=20Change=20password=20to=20be=20a=20Secu?= =?UTF-8?q?reField=20and=20autosubmit=20on=20password=20comple=E2=80=A6=20?= =?UTF-8?q?(#1090)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Change password to be a SecureField and autosubmit on password completion * Fix SelectUser Button * Respond to comments and remove unnecessary changes * Make FocusField a private enum --- .gitignore | 2 ++ Shared/ViewModels/SelectUserViewModel.swift | 1 - .../Views/UserSignInView/UserSignInView.swift | 32 ++++++++++--------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 12f3ba5f..80be1646 100644 --- a/.gitignore +++ b/.gitignore @@ -98,3 +98,5 @@ iOSInjectionProject/ ehthumbs.db Thumbs.db Shared/Generated/Strings.swift + +.idea diff --git a/Shared/ViewModels/SelectUserViewModel.swift b/Shared/ViewModels/SelectUserViewModel.swift index e46adfb4..9997ba4f 100644 --- a/Shared/ViewModels/SelectUserViewModel.swift +++ b/Shared/ViewModels/SelectUserViewModel.swift @@ -44,7 +44,6 @@ class SelectUserViewModel: ViewModel, Eventful, Stateful { var events: AnyPublisher { eventSubject - .receive(on: RunLoop.main) .eraseToAnyPublisher() } diff --git a/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift b/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift index 05d44041..1ccd8470 100644 --- a/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift +++ b/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift @@ -17,6 +17,11 @@ import SwiftUI struct UserSignInView: View { + private enum FocusField: Hashable { + case username + case password + } + @Default(.accentColor) private var accentColor @@ -24,7 +29,7 @@ struct UserSignInView: View { private var router: UserSignInCoordinator.Router @FocusState - private var focusedTextField: Int? + private var focusedTextField: FocusField? @State private var duplicateUser: UserState? = nil @@ -52,17 +57,16 @@ struct UserSignInView: View { TextField(L10n.username, text: $username) .autocorrectionDisabled() .textInputAutocapitalization(.never) - .focused($focusedTextField, equals: 0) - .onSubmit { - focusedTextField = 1 - } + .focused($focusedTextField, equals: .username) - TextField(L10n.password, text: $password) { - focusedTextField = nil - } - .autocorrectionDisabled() - .textInputAutocapitalization(.never) - .focused($focusedTextField, equals: 1) + SecureField(L10n.password, text: $password) + .focused($focusedTextField, equals: .password) + .onSubmit { + guard username.isNotEmpty else { + return + } + viewModel.send(.signIn(username: username, password: password, policy: .none)) + } } header: { Text(L10n.signInToServer(viewModel.server.name)) } @@ -74,8 +78,6 @@ struct UserSignInView: View { .foregroundStyle(.red, .red.opacity(0.2)) } else { Button(L10n.signIn) { - focusedTextField = nil - viewModel.send(.signIn(username: username, password: password, policy: .none)) } .disabled(username.isEmpty) @@ -123,7 +125,7 @@ struct UserSignInView: View { ) { username = user.name ?? "" password = "" - focusedTextField = 1 + focusedTextField = .password } } } @@ -177,7 +179,7 @@ struct UserSignInView: View { } } .onFirstAppear { - focusedTextField = 0 + focusedTextField = .username viewModel.send(.getPublicData) } .alert(