Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Sources/SkipUI/SkipUI/Color/Color.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
5 changes: 3 additions & 2 deletions Sources/SkipUI/SkipUI/Color/ColorScheme.swift
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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+
Expand All @@ -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 {
Expand Down
5 changes: 3 additions & 2 deletions Sources/SkipUI/SkipUI/Containers/PresentationRoot.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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<Preference<PreferredColorScheme>, Any>) { mutableStateOf(Preference<PreferredColorScheme>(key: PreferredColorSchemePreferenceKey.self)) }
let preferredColorSchemeCollector = PreferenceCollector<PreferredColorScheme>(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
Expand Down
Loading