From fb361096fa2263c73c181617474e4f031912ed80 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Sun, 3 Jul 2022 22:07:42 -0700 Subject: [PATCH] bundle all reader preferences cahnges into a single transaction --- .../App/Views/WebReader/WebReader.swift | 27 ++------------- .../Views/WebReader/WebReaderContainer.swift | 18 ++-------- .../WebReader/WebReaderCoordinator.swift | 6 +--- .../Views/FontSizeAdjustmentPopoverView.swift | 34 ++++++------------- 4 files changed, 18 insertions(+), 67 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReader.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReader.swift index 265196a09..c80d23d53 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReader.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReader.swift @@ -11,11 +11,7 @@ struct WebReader: PlatformViewRepresentable { let webViewActionHandler: (WKScriptMessage, WKScriptMessageReplyHandler?) -> Void let navBarVisibilityRatioUpdater: (Double) -> Void - @Binding var updateFontFamilyActionID: UUID? - @Binding var updateFontActionID: UUID? - @Binding var updateTextContrastActionID: UUID? - @Binding var updateMaxWidthActionID: UUID? - @Binding var updateLineHeightActionID: UUID? + @Binding var readerSettingsChangedTransactionID: UUID? @Binding var annotationSaveTransactionID: UUID? @Binding var showNavBarActionID: UUID? @Binding var shareActionID: UUID? @@ -79,35 +75,18 @@ struct WebReader: PlatformViewRepresentable { return webView } - // swiftlint:disable:next cyclomatic_complexity private func updatePlatformView(_ webView: WKWebView, context: Context) { if annotationSaveTransactionID != context.coordinator.lastSavedAnnotationID { context.coordinator.lastSavedAnnotationID = annotationSaveTransactionID (webView as? OmnivoreWebView)?.dispatchEvent(.saveAnnotation(annotation: annotation)) } - if updateFontFamilyActionID != context.coordinator.previousUpdateFontFamilyActionID { - context.coordinator.previousUpdateFontFamilyActionID = updateFontFamilyActionID + if readerSettingsChangedTransactionID != context.coordinator.previousReaderSettingsChangedTransactionID { + context.coordinator.previousReaderSettingsChangedTransactionID = readerSettingsChangedTransactionID (webView as? OmnivoreWebView)?.updateFontFamily() - } - - if updateFontActionID != context.coordinator.previousUpdateFontActionID { - context.coordinator.previousUpdateFontActionID = updateFontActionID (webView as? OmnivoreWebView)?.updateFontSize() - } - - if updateTextContrastActionID != context.coordinator.previousUpdateTextContrastActionID { - context.coordinator.previousUpdateTextContrastActionID = updateTextContrastActionID (webView as? OmnivoreWebView)?.updateTextContrast() - } - - if updateMaxWidthActionID != context.coordinator.previousUpdateMaxWidthActionID { - context.coordinator.previousUpdateMaxWidthActionID = updateMaxWidthActionID (webView as? OmnivoreWebView)?.updateMaxWidthPercentage() - } - - if updateLineHeightActionID != context.coordinator.previousUpdateLineHeightActionID { - context.coordinator.previousUpdateLineHeightActionID = updateLineHeightActionID (webView as? OmnivoreWebView)?.updateLineHeight() } diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift index 60b6e5820..084b30d8b 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift @@ -15,11 +15,7 @@ struct WebReaderContainerView: View { @State private var navBarVisibilityRatio = 1.0 @State private var showDeleteConfirmation = false @State private var progressViewOpacity = 0.0 - @State var updateFontFamilyActionID: UUID? - @State var updateFontActionID: UUID? - @State var updateTextContrastActionID: UUID? - @State var updateMaxWidthActionID: UUID? - @State var updateLineHeightActionID: UUID? + @State var readerSettingsChangedTransactionID: UUID? @State var annotationSaveTransactionID: UUID? @State var showNavBarActionID: UUID? @State var shareActionID: UUID? @@ -162,11 +158,7 @@ struct WebReaderContainerView: View { #if os(iOS) var webPreferencesPopoverView: some View { WebPreferencesPopoverView( - updateFontFamilyAction: { updateFontFamilyActionID = UUID() }, - updateFontAction: { updateFontActionID = UUID() }, - updateTextContrastAction: { updateTextContrastActionID = UUID() }, - updateMaxWidthAction: { updateMaxWidthActionID = UUID() }, - updateLineHeightAction: { updateLineHeightActionID = UUID() }, + updateReaderPreferences: { readerSettingsChangedTransactionID = UUID() }, dismissAction: { showPreferencesPopover = false } ) } @@ -189,11 +181,7 @@ struct WebReaderContainerView: View { navBarVisibilityRatioUpdater: { navBarVisibilityRatio = $0 }, - updateFontFamilyActionID: $updateFontFamilyActionID, - updateFontActionID: $updateFontActionID, - updateTextContrastActionID: $updateTextContrastActionID, - updateMaxWidthActionID: $updateMaxWidthActionID, - updateLineHeightActionID: $updateLineHeightActionID, + readerSettingsChangedTransactionID: $readerSettingsChangedTransactionID, annotationSaveTransactionID: $annotationSaveTransactionID, showNavBarActionID: $showNavBarActionID, shareActionID: $shareActionID, diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderCoordinator.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderCoordinator.swift index 25cfcbd2d..dc539a946 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderCoordinator.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderCoordinator.swift @@ -15,11 +15,7 @@ final class WebReaderCoordinator: NSObject { var linkHandler: (URL) -> Void = { _ in } var needsReload = false var lastSavedAnnotationID: UUID? - var previousUpdateFontFamilyActionID: UUID? - var previousUpdateFontActionID: UUID? - var previousUpdateTextContrastActionID: UUID? - var previousUpdateMaxWidthActionID: UUID? - var previousUpdateLineHeightActionID: UUID? + var previousReaderSettingsChangedTransactionID: UUID? var previousShowNavBarActionID: UUID? var previousShareActionID: UUID? var updateNavBarVisibilityRatio: (Double) -> Void = { _ in } diff --git a/apple/OmnivoreKit/Sources/Views/FontSizeAdjustmentPopoverView.swift b/apple/OmnivoreKit/Sources/Views/FontSizeAdjustmentPopoverView.swift index 654a82b98..e6877fe23 100644 --- a/apple/OmnivoreKit/Sources/Views/FontSizeAdjustmentPopoverView.swift +++ b/apple/OmnivoreKit/Sources/Views/FontSizeAdjustmentPopoverView.swift @@ -26,11 +26,7 @@ public enum WebFont: String, CaseIterable { #if os(iOS) public struct WebPreferencesPopoverView: View { - let updateFontFamilyAction: () -> Void - let updateFontAction: () -> Void - let updateTextContrastAction: () -> Void - let updateMaxWidthAction: () -> Void - let updateLineHeightAction: () -> Void + let updateReaderPreferences: () -> Void let dismissAction: () -> Void @AppStorage(UserDefaultKey.preferredWebFontSize.rawValue) var storedFontSize: Int = @@ -41,18 +37,10 @@ public enum WebFont: String, CaseIterable { @AppStorage(UserDefaultKey.prefersHighContrastWebFont.rawValue) var prefersHighContrastText = true public init( - updateFontFamilyAction: @escaping () -> Void, - updateFontAction: @escaping () -> Void, - updateTextContrastAction: @escaping () -> Void, - updateMaxWidthAction: @escaping () -> Void, - updateLineHeightAction: @escaping () -> Void, + updateReaderPreferences: @escaping () -> Void, dismissAction: @escaping () -> Void ) { - self.updateFontFamilyAction = updateFontFamilyAction - self.updateFontAction = updateFontAction - self.updateTextContrastAction = updateTextContrastAction - self.updateMaxWidthAction = updateMaxWidthAction - self.updateLineHeightAction = updateLineHeightAction + self.updateReaderPreferences = updateReaderPreferences self.dismissAction = dismissAction } @@ -62,7 +50,7 @@ public enum WebFont: String, CaseIterable { Button( action: { preferredFont = font.rawValue - updateFontFamilyAction() + updateReaderPreferences() }, label: { HStack { @@ -90,11 +78,11 @@ public enum WebFont: String, CaseIterable { labelText: "Font Size:", onIncrement: { storedFontSize = min(storedFontSize + 2, 28) - updateFontAction() + updateReaderPreferences() }, onDecrement: { storedFontSize = max(storedFontSize - 2, 10) - updateFontAction() + updateReaderPreferences() } ) @@ -102,11 +90,11 @@ public enum WebFont: String, CaseIterable { labelText: "Margin:", onIncrement: { storedMaxWidthPercentage = max(storedMaxWidthPercentage - 10, 40) - updateMaxWidthAction() + updateReaderPreferences() }, onDecrement: { storedMaxWidthPercentage = min(storedMaxWidthPercentage + 10, 100) - updateMaxWidthAction() + updateReaderPreferences() } ) @@ -114,11 +102,11 @@ public enum WebFont: String, CaseIterable { labelText: "Line Spacing:", onIncrement: { storedLineSpacing = min(storedLineSpacing + 25, 300) - updateLineHeightAction() + updateReaderPreferences() }, onDecrement: { storedLineSpacing = max(storedLineSpacing - 25, 100) - updateLineHeightAction() + updateReaderPreferences() } ) @@ -126,7 +114,7 @@ public enum WebFont: String, CaseIterable { .frame(height: 40) .padding(.trailing, 6) .onChange(of: prefersHighContrastText) { _ in - updateTextContrastAction() + updateReaderPreferences() } HStack {