Opened DefaultTooltipManager

commit_hash:e8aca9562e2a0bb604ace36cbf31ea4b4198b4d1
This commit is contained in:
pkurchatov
2024-11-14 14:58:23 +03:00
parent 44a1bd2455
commit ed5ffaf3ce
3 changed files with 28 additions and 22 deletions
+12 -17
View File
@@ -154,26 +154,11 @@ public final class DivKitComponents {
self.patchProvider = patchProvider
?? DivPatchDownloader(requestPerformer: requestPerformer)
weak var weakTimerStorage: DivTimerStorage?
weak var weakActionHandler: DivActionHandler?
#if os(iOS)
self.tooltipManager = tooltipManager ?? DefaultTooltipManager(
shownTooltips: .init(),
handleAction: {
switch $0.payload {
case let .divAction(params: params):
weakActionHandler?.handle(params: params, sender: nil)
default: break
}
}
)
#else
self.tooltipManager = tooltipManager ?? DefaultTooltipManager()
#endif
functionsStorage = DivFunctionsStorage(reporter: reporter)
weak var weakTimerStorage: DivTimerStorage?
actionHandler = DivActionHandler(
stateUpdater: stateManagement,
blockStateStorage: blockStateStorage,
@@ -213,11 +198,21 @@ public final class DivKitComponents {
reporter: reporter
)
weakActionHandler = actionHandler
weakTimerStorage = timerStorage
variablesStorage.changeEvents.addObserver { [weak self] event in
self?.onVariablesChanged(event: event)
}.dispose(in: disposePool)
#if os(iOS)
self.tooltipManager.setHandler { [weak self] in
switch $0.payload {
case let .divAction(params):
self?.actionHandler.handle(params: params, sender: nil)
default:
break
}
}
#endif
}
public func reset() {
@@ -274,7 +274,7 @@ extension UserInterfaceAction.Payload {
public var divActionParams: UserInterfaceAction.DivActionParams? {
switch self {
case let .divAction(params: params):
case let .divAction(params):
return params
case .empty, .menu, .url:
return nil
@@ -53,9 +53,16 @@ public protocol TooltipManager: AnyObject, TooltipActionPerformer, RenderingDele
/// Removes all tooltips.
func reset()
/// Sets handler for the tooltip view UI events.
func setHandler(_ handler: @escaping (UIActionEvent) -> Void)
}
public final class DefaultTooltipManager: TooltipManager {
extension TooltipManager {
public func setHandler(_: @escaping (UIActionEvent) -> Void) {}
}
public class DefaultTooltipManager: TooltipManager {
public struct Tooltip {
public let id: String
public let duration: Duration
@@ -64,15 +71,15 @@ public final class DefaultTooltipManager: TooltipManager {
public var shownTooltips: Property<Set<String>>
private let handleAction: (UIActionEvent) -> Void
private var handleAction: (UIActionEvent) -> Void
private var existingAnchorViews = WeakCollection<TooltipAnchorView>()
private var showingTooltips = [String: TooltipContainerView]()
private var tooltipWindow: UIWindow?
private var previousOrientation = UIDevice.current.orientation
public init(
shownTooltips: Property<Set<String>>,
handleAction: @escaping (UIActionEvent) -> Void
shownTooltips: Property<Set<String>> = Property(),
handleAction: @escaping (UIActionEvent) -> Void = { _ in }
) {
self.handleAction = handleAction
self.shownTooltips = shownTooltips
@@ -140,6 +147,10 @@ public final class DefaultTooltipManager: TooltipManager {
tooltipWindow = nil
}
public func setHandler(_ handler: @escaping (UIActionEvent) -> Void) {
handleAction = handler
}
deinit {
NotificationCenter.default.removeObserver(
self,