diff --git a/Sources/SkipUI/SkipUI/Color/Color.swift b/Sources/SkipUI/SkipUI/Color/Color.swift index b3508e2c..6aab2686 100644 --- a/Sources/SkipUI/SkipUI/Color/Color.swift +++ b/Sources/SkipUI/SkipUI/Color/Color.swift @@ -191,11 +191,11 @@ public struct Color: ShapeStyle, Renderable, Hashable { } #if SKIP - @Composable static func assetAccentColor(colorScheme: ColorScheme) -> androidx.compose.ui.graphics.Color? { + @Composable static func assetAccentColor(colorScheme: ColorScheme, bundle: Bundle = Bundle.main) -> androidx.compose.ui.graphics.Color? { let name = "AccentColor" - let colorInfo = rememberCachedAsset(namedColorCache, AssetKey(name: name, bundle: Bundle.main)) { _ in - assetColorInfo(name: name, bundle: Bundle.main) - } + let colorInfo = rememberCachedAsset(namedColorCache, AssetKey(name: name, bundle: bundle)) { _ in + assetColorInfo(name: name, bundle: bundle) + } return colorInfo?.colorImpl(colorScheme: colorScheme) } diff --git a/Sources/SkipUI/SkipUI/Color/ColorScheme.swift b/Sources/SkipUI/SkipUI/Color/ColorScheme.swift index b352a686..4d38aedf 100644 --- a/Sources/SkipUI/SkipUI/Color/ColorScheme.swift +++ b/Sources/SkipUI/SkipUI/Color/ColorScheme.swift @@ -1,6 +1,7 @@ // Copyright 2023–2026 Skip // SPDX-License-Identifier: MPL-2.0 #if !SKIP_BRIDGE +import Foundation #if SKIP import androidx.compose.material3.MaterialTheme import androidx.compose.material3.darkColorScheme @@ -24,7 +25,7 @@ public enum ColorScheme : Int, CaseIterable, Hashable { } /// Return the material color scheme for this scheme. - @Composable public func asMaterialTheme() -> androidx.compose.material3.ColorScheme { + @Composable public func asMaterialTheme(accentColorBundle: Bundle = Bundle.main) -> androidx.compose.material3.ColorScheme { let context = LocalContext.current let isDarkMode = self == ColorScheme.dark // Dynamic color is available on Android 12+ @@ -35,7 +36,7 @@ public enum ColorScheme : Int, CaseIterable, Hashable { } else { colorScheme = isDynamicColor ? dynamicLightColorScheme(context) : lightColorScheme() } - if let primary = Color.assetAccentColor(colorScheme: isDarkMode ? ColorScheme.dark : ColorScheme.light) { + if let primary = Color.assetAccentColor(colorScheme: isDarkMode ? ColorScheme.dark : ColorScheme.light, bundle: accentColorBundle) { colorScheme = colorScheme.copy(primary: primary) } guard let customization = EnvironmentValues.shared._material3ColorScheme else { diff --git a/Sources/SkipUI/SkipUI/Containers/PresentationRoot.swift b/Sources/SkipUI/SkipUI/Containers/PresentationRoot.swift index 3e7461e0..665a770d 100644 --- a/Sources/SkipUI/SkipUI/Containers/PresentationRoot.swift +++ b/Sources/SkipUI/SkipUI/Containers/PresentationRoot.swift @@ -27,15 +27,16 @@ import androidx.compose.ui.layout.boundsInWindow import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection +import Foundation /// The root of a presentation, such as the root presentation or a sheet. -@Composable public func PresentationRoot(defaultColorScheme: ColorScheme? = nil, absoluteSystemBarEdges systemBarEdges: Edge.Set = .all, context: ComposeContext, content: @Composable (ComposeContext) -> Void) { +@Composable public func PresentationRoot(defaultColorScheme: ColorScheme? = nil, absoluteSystemBarEdges systemBarEdges: Edge.Set = .all, context: ComposeContext, accentColorBundle: Bundle = Bundle.main, content: @Composable (ComposeContext) -> Void) { launchUIApplicationActivity() let preferredColorScheme = rememberSaveable(stateSaver: context.stateSaver as! Saver, Any>) { mutableStateOf(Preference(key: PreferredColorSchemePreferenceKey.self)) } let preferredColorSchemeCollector = PreferenceCollector(key: PreferredColorSchemePreferenceKey.self, state: preferredColorScheme) PreferenceValues.shared.collectPreferences([preferredColorSchemeCollector]) { - let materialColorScheme = preferredColorScheme.value.reduced.colorScheme?.asMaterialTheme() ?? defaultColorScheme?.asMaterialTheme() ?? MaterialTheme.colorScheme + let materialColorScheme = preferredColorScheme.value.reduced.colorScheme?.asMaterialTheme(accentColorBundle: accentColorBundle) ?? defaultColorScheme?.asMaterialTheme(accentColorBundle: accentColorBundle) ?? MaterialTheme.colorScheme MaterialTheme(colorScheme: materialColorScheme) { let presentationBounds = remember { mutableStateOf(Rect.Zero) } let density = LocalDensity.current