Skip to content
This repository has been archived by the owner on May 10, 2024. It is now read-only.

Fix #8608: Authenticate when disabling browser lock #8609

Merged
merged 1 commit into from
Jan 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 18 additions & 5 deletions Sources/Brave/Frontend/Settings/SettingsViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,7 @@ class SettingsViewController: TableViewController {
let privateTabsRow = Row(
text: Strings.TabsSettings.privateTabsSettingsTitle,
selection: { [unowned self] in
let vc = UIHostingController(rootView: PrivateTabsView(tabManager: tabManager))
let vc = UIHostingController(rootView: PrivateTabsView(tabManager: tabManager, askForAuthentication: self.askForLocalAuthentication))
self.navigationController?.pushViewController(vc, animated: true)
},
image: UIImage(braveSystemNamed: "leo.product.private-window"),
Expand Down Expand Up @@ -656,11 +656,24 @@ class SettingsViewController: TableViewController {
return Section(
header: .title(Strings.security),
rows: [
.boolRow(
title: Strings.Privacy.browserLock,
Row(
text: Strings.Privacy.browserLock,
detailText: Strings.Privacy.browserLockDescription,
option: Preferences.Privacy.lockWithPasscode,
image: UIImage(braveSystemNamed: "leo.biometric.login")),
image: UIImage(braveSystemNamed: "leo.biometric.login"),
accessory: .view(SwitchAccessoryView(initialValue: Preferences.Privacy.lockWithPasscode.value, valueChange: { isOn in
kylehickinson marked this conversation as resolved.
Show resolved Hide resolved
if isOn {
Preferences.Privacy.lockWithPasscode.value = isOn
} else {
self.askForLocalAuthentication { [weak self] success, error in
if success {
Preferences.Privacy.lockWithPasscode.value = isOn
}
}
}
})),
cellClass: MultilineSubtitleCell.self,
uuid: Preferences.Privacy.lockWithPasscode.key
),
Row(
text: Strings.Login.loginListNavigationTitle,
selection: { [unowned self] in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import Preferences
struct OptionToggleView: View {
let title: String
var subtitle: String?
var markdownSubtitle: LocalizedStringKey?
@ObservedObject var option: Preferences.Option<Bool>
let onChange: ShieldToggleView.OnChangeCallback?

Expand Down
22 changes: 18 additions & 4 deletions Sources/Brave/Frontend/Settings/Tabs/PrivateTabsView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ struct PrivateTabsView: View {
}

@ObservedObject var privateBrowsingOnly = Preferences.Privacy.privateBrowsingOnly
@ObservedObject var privateBrowsingLock = Preferences.Privacy.privateBrowsingLock

var tabManager: TabManager?
var askForAuthentication: (AuthViewType, ((Bool, LAError.Code?) -> Void)?) -> Void

private var localAuthenticationType: AuthenticationType {
let context = LAContext()
Expand Down Expand Up @@ -84,9 +87,20 @@ struct PrivateTabsView: View {

switch localAuthenticationType {
case .faceID, .touchID, .pinCode:
OptionToggleView(title: browsingLockTitle,
subtitle: nil,
option: Preferences.Privacy.privateBrowsingLock)
ShieldToggleView(
title: browsingLockTitle,
subtitle: nil,
toggle: .init(get: {
privateBrowsingLock.value
}, set: { isOn in
if isOn {
privateBrowsingLock.value = true
} else {
askForAuthentication(.general) { success, _ in
privateBrowsingLock.value = !success
}
}
}))
case .noAuthentication:
Toggle(isOn: .constant(false)) {
VStack(alignment: .leading, spacing: 4) {
Expand All @@ -111,7 +125,7 @@ struct PrivateTabsView: View {
#if DEBUG
struct PrivateTabsView_Previews: PreviewProvider {
static var previews: some View {
PrivateTabsView()
PrivateTabsView(askForAuthentication: { _, _ in })
}
}
#endif