@@ -5,9 +5,12 @@ import UIKit
55public class ModalMessageManager : BaseMessageManager {
66 private var modalViewManager : ModalViewManager ?
77 var inAppMessageStoreSubscriber : InAppMessageStoreSubscriber ?
8+ private var colorSchemeSubscriber : InAppMessageStoreSubscriber ?
9+
810 override init ( state: InAppMessageState , message: Message ) {
911 super. init ( state: state, message: message)
1012 subscribeToInAppMessageState ( )
13+ subscribeToColorSchemeChanges ( )
1114 }
1215
1316 deinit {
@@ -22,9 +25,10 @@ public class ModalMessageManager: BaseMessageManager {
2225 let messageState = state. modalMessageState
2326 switch messageState {
2427 case . displayed:
28+ let colorScheme = MessagingInAppImplementation . currentColorScheme
2529 threadUtil. runMain {
2630 // Subclasses (Modal or Inline) can show differently
27- self . onMessageDisplayed ( )
31+ self . onMessageDisplayed ( colorScheme : colorScheme )
2832 }
2933 case . dismissed, . initial:
3034 threadUtil. runMain {
@@ -41,7 +45,7 @@ public class ModalMessageManager: BaseMessageManager {
4145 }
4246
4347 // Show the modal when the message is displayed
44- func onMessageDisplayed( ) {
48+ func onMessageDisplayed( colorScheme : ColorScheme = . auto ) {
4549 guard isMessageLoaded else {
4650 logger. logWithModuleTag (
4751 " Message not loaded yet. Skipping loadModalMessage for \( currentMessage. describeForLogs) . " ,
@@ -62,7 +66,8 @@ public class ModalMessageManager: BaseMessageManager {
6266 modalViewManager = ModalViewManager (
6367 gistView: gistView,
6468 position: gistProperties. position,
65- overlayColor: gistProperties. overlayColor
69+ overlayColor: gistProperties. overlayColor,
70+ colorScheme: colorScheme
6671 )
6772 // Show the modal with an optional completion
6873 modalViewManager? . showModalView { [ weak self] in
@@ -93,11 +98,30 @@ public class ModalMessageManager: BaseMessageManager {
9398 modalViewManager. dismissModalView ( completionHandler: dismissalHandler)
9499 }
95100
101+ private func subscribeToColorSchemeChanges( ) {
102+ colorSchemeSubscriber = {
103+ let subscriber = InAppMessageStoreSubscriber { [ weak self] _ in
104+ guard let self else { return }
105+ let colorScheme = MessagingInAppImplementation . currentColorScheme
106+ self . threadUtil. runMain {
107+ self . modalViewManager? . updateColorScheme ( colorScheme)
108+ }
109+ }
110+ self . inAppMessageManager. subscribe ( keyPath: \. colorScheme, subscriber: subscriber)
111+ return subscriber
112+ } ( )
113+ }
114+
96115 open func unsubscribeFromInAppMessageState( ) {
97- guard let subscriber = inAppMessageStoreSubscriber else { return }
98- logger. logWithModuleTag ( " Unsubscribing BaseMessageManager from InAppMessageState " , level: . debug)
99- inAppMessageManager. unsubscribe ( subscriber: subscriber)
100- inAppMessageStoreSubscriber = nil
116+ if let subscriber = inAppMessageStoreSubscriber {
117+ logger. logWithModuleTag ( " Unsubscribing BaseMessageManager from InAppMessageState " , level: . debug)
118+ inAppMessageManager. unsubscribe ( subscriber: subscriber)
119+ inAppMessageStoreSubscriber = nil
120+ }
121+ if let subscriber = colorSchemeSubscriber {
122+ inAppMessageManager. unsubscribe ( subscriber: subscriber)
123+ colorSchemeSubscriber = nil
124+ }
101125 }
102126
103127 private func finishDismissal( messageState: ModalMessageState ) {
0 commit comments