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

Commit

Permalink
Fix #8565: Re-enable Screen-Time. (#8611)
Browse files Browse the repository at this point in the history
  • Loading branch information
Brandon-T authored Jan 4, 2024
1 parent e084089 commit 0400f6c
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 15 deletions.
14 changes: 5 additions & 9 deletions Sources/Brave/Frontend/Browser/BrowserViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -380,8 +380,7 @@ public class BrowserViewController: UIViewController {
}

if Preferences.Privacy.screenTimeEnabled.value {
// Enable once fixed, ref #8566
//screenTimeViewController = STWebpageController()
screenTimeViewController = STWebpageController()
}
}

Expand Down Expand Up @@ -1251,11 +1250,7 @@ public class BrowserViewController: UIViewController {
make.leading.trailing.equalTo(self.view)
}

if let screenTimeViewController = screenTimeViewController {
webViewContainer.addSubview(screenTimeViewController.view)
addChild(screenTimeViewController)
screenTimeViewController.didMove(toParent: self)

if let screenTimeViewController = screenTimeViewController, screenTimeViewController.parent != nil {
screenTimeViewController.view.snp.remakeConstraints {
$0.edges.equalTo(webViewContainer)
}
Expand Down Expand Up @@ -1945,6 +1940,7 @@ public class BrowserViewController: UIViewController {
}

updateInContentHomePanel(url as URL)
updateScreenTimeUrl(url)
updatePlaylistURLBar(tab: tab, state: tab.playlistItemState, item: tab.playlistItem)
}
}
Expand Down Expand Up @@ -3321,13 +3317,13 @@ extension BrowserViewController: PreferencesObserver {
recordAdsUsageType()
case Preferences.Privacy.screenTimeEnabled.key:
if Preferences.Privacy.screenTimeEnabled.value {
// Enable once fixed, ref #8566
//screenTimeViewController = STWebpageController()
screenTimeViewController = STWebpageController()
if let tab = tabManager.selectedTab {
recordScreenTimeUsage(for: tab)
}
} else {
screenTimeViewController?.view.removeFromSuperview()
screenTimeViewController?.willMove(toParent: nil)
screenTimeViewController?.removeFromParent()
screenTimeViewController?.suppressUsageRecording = true
screenTimeViewController = nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,22 @@ extension BrowserViewController {
/// There is also one hack required: STWebpageController breaks if you pass scheme other than http or https,
/// it will not block anything for the rest of its lifecycle. Our internal urls have to be bridged to an empty https url.
func updateScreenTimeUrl(_ url: URL?) {
guard let screenTimeViewController = screenTimeViewController else {
return
}

guard let url = url, (url.scheme == "http" || url.scheme == "https") else {
screenTimeViewController?.url = URL(string: "https://about:blank")
// This is signficantly better than removing the view controller from the screen!
// If we use `nil` instead, STViewController goes into a broken state PERMANENTLY until the app is restarted
// The URL cannot be nil, and it cannot be anything other than http(s) otherwise it will break
// for the duration of the app.
// Chromium solves this issue by not setting the URL, but instead removing it from the view entirely.
// But setting the URL to an empty URL works too.
screenTimeViewController.url = NSURL() as URL
return
}

screenTimeViewController?.url = url
screenTimeViewController.url = url
}

func recordScreenTimeUsage(for tab: Tab) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,20 @@ extension BrowserViewController: TabManagerDelegate {
webView.snp.remakeConstraints { make in
make.left.right.top.bottom.equalTo(self.webViewContainer)
}

// Add ScreenTime above the WebView
if let screenTimeViewController = screenTimeViewController {
if screenTimeViewController.parent == nil {
addChild(screenTimeViewController)
screenTimeViewController.didMove(toParent: self)
}

webViewContainer.addSubview(screenTimeViewController.view)

screenTimeViewController.view.snp.remakeConstraints {
$0.edges.equalTo(webViewContainer)
}
}

// This is a terrible workaround for a bad iOS 12 bug where PDF
// content disappears any time the view controller changes (i.e.
Expand Down Expand Up @@ -137,6 +151,7 @@ extension BrowserViewController: TabManagerDelegate {
topToolbar.updateReaderModeState(ReaderModeState.unavailable)
}

updateScreenTimeUrl(tabManager.selectedTab?.url)
updateInContentHomePanel(selected?.url as URL?)

notificationsPresenter.removeNotification(with: WalletNotification.Constant.id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,7 @@ extension BrowserViewController: TopToolbarDelegate {
func topToolbarDidLeaveOverlayMode(_ topToolbar: TopToolbarView) {
hideSearchController()
hideFavoritesController()
updateScreenTimeUrl(tabManager.selectedTab?.url)
updateInContentHomePanel(tabManager.selectedTab?.url as URL?)
updateTabsBarVisibility()
if isUsingBottomBar {
Expand Down
2 changes: 1 addition & 1 deletion Sources/Brave/Frontend/ClientPreferences.swift
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ extension Preferences {
/// The toggles states for clear private data screen
static let clearPrivateDataToggles = Option<[Bool]>(key: "privacy.clear-data-toggles", default: [])
/// Enables the Apple's Screen Time feature.
public static let screenTimeEnabled = Option<Bool>(key: "privacy.screentime", default: true)
public static let screenTimeEnabled = Option<Bool>(key: "privacy.screentime-toggle", default: AppConstants.buildChannel != .release)

}
final public class NewTabPage {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,11 @@ struct OtherPrivacySettingsSectionView: View {
subtitle: String.localizedStringWithFormat(Strings.googleSafeBrowsingUsingWebKitDescription, URL.brave.safeBrowsingHelp.absoluteString),
option: Preferences.Shields.googleSafeBrowsing
)
// Enable once fixed, ref #8566
/*
OptionToggleView(
title: Strings.screenTimeSetting,
subtitle: String.localizedStringWithFormat(Strings.screenTimeSettingDescription, URL.brave.screenTimeHelp.absoluteString),
option: Preferences.Privacy.screenTimeEnabled
)
*/
ShieldToggleView(
title: Strings.P3A.settingTitle,
subtitle: Strings.P3A.settingSubtitle,
Expand Down

0 comments on commit 0400f6c

Please sign in to comment.