diff --git a/apps/giga-wear/client/src/main/kotlin/ru/shadowsparky/gigawear/presentation/MainActivity.kt b/apps/giga-wear/client/src/main/kotlin/ru/shadowsparky/gigawear/presentation/MainActivity.kt index d3b578f..98aa48a 100644 --- a/apps/giga-wear/client/src/main/kotlin/ru/shadowsparky/gigawear/presentation/MainActivity.kt +++ b/apps/giga-wear/client/src/main/kotlin/ru/shadowsparky/gigawear/presentation/MainActivity.kt @@ -1,8 +1,11 @@ package ru.shadowsparky.gigawear.presentation +import android.os.Build import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.runtime.CompositionLocalProvider import com.arkivanov.decompose.retainedComponent import org.koin.android.ext.android.inject import ru.shadowsparky.gigawear.presentation.auth.AuthScreen @@ -10,6 +13,8 @@ import ru.shadowsparky.gigawear.presentation.chat.ChatScreen import ru.shadowsparky.gigawear.presentation.nav.Child import ru.shadowsparky.gigawear.presentation.routing.RoutingScreen import ru.shadowsparky.ui.nav.Nav +import ru.shadowsparky.ui.theme.LocalColorSchemeProvider +import ru.shadowsparky.ui.theme.darkScheme class MainActivity : ComponentActivity() { private val rootFactory by inject() @@ -18,11 +23,18 @@ class MainActivity : ComponentActivity() { super.onCreate(savedInstanceState) val root = retainedComponent { rootFactory.create(it) } setContent { - Nav(root) { child, _ -> - when (child) { - is Child.MainChild -> ChatScreen(child.component) - is Child.AuthChild -> AuthScreen(child.component) - is Child.RoutingChild -> RoutingScreen(child.component) + val scheme = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + dynamicDarkColorScheme(this) + } else { + darkScheme + } + CompositionLocalProvider(LocalColorSchemeProvider provides scheme) { + Nav(root) { child, _ -> + when (child) { + is Child.MainChild -> ChatScreen(child.component) + is Child.AuthChild -> AuthScreen(child.component) + is Child.RoutingChild -> RoutingScreen(child.component) + } } } } diff --git a/libs/ui/src/androidMain/kotlin/ru/shadowsparky/ui/components/InsetLazyColumn.android.kt b/libs/ui/src/androidMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.android.kt similarity index 62% rename from libs/ui/src/androidMain/kotlin/ru/shadowsparky/ui/components/InsetLazyColumn.android.kt rename to libs/ui/src/androidMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.android.kt index c50326c..1130483 100644 --- a/libs/ui/src/androidMain/kotlin/ru/shadowsparky/ui/components/InsetLazyColumn.android.kt +++ b/libs/ui/src/androidMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.android.kt @@ -1,4 +1,4 @@ -package ru.shadowsparky.ui.components +package ru.shadowsparky.ui.util import android.app.UiModeManager import android.content.Context @@ -15,3 +15,12 @@ actual fun isTv(): Boolean { uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION } } + +@Composable +actual fun isWear(): Boolean { + val context = LocalContext.current + return remember(context) { + val uiModeManager = context.getSystemService(Context.UI_MODE_SERVICE) as UiModeManager + uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_WATCH + } +} diff --git a/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/Blur.kt b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/Blur.kt index 04ad2c8..80921a8 100644 --- a/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/Blur.kt +++ b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/Blur.kt @@ -12,11 +12,12 @@ import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi import dev.chrisbanes.haze.materials.HazeMaterials import dev.chrisbanes.haze.rememberHazeState import ru.shadowsparky.ui.components.isTv +import ru.shadowsparky.ui.util.isWear internal val LocalBlurState = compositionLocalOf { null } @Composable -internal fun isBlurEnabled(): Boolean = !isTv() +internal fun isBlurEnabled(): Boolean = !isTv() && !isWear() @Composable internal fun rememberBlurState(): BlurState? { diff --git a/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/components/AlertContent.kt b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/components/AlertContent.kt index 42efc79..3404930 100644 --- a/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/components/AlertContent.kt +++ b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/components/AlertContent.kt @@ -17,6 +17,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.ui.window.DialogProperties import ru.shadowsparky.ui.theme.getColorScheme +import ru.shadowsparky.ui.util.isWear @OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) @Composable @@ -44,7 +45,7 @@ fun AlertContent( } } MaterialExpressiveTheme(getColorScheme()) { - if (isTv()) { + if (isTv() || isWear()) { BasicAlertDialog( onDismissRequest = onDismissRequest, modifier = modifier, diff --git a/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/components/LazyColumn.kt b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/components/LazyColumn.kt index cf5c767..66d74ba 100644 --- a/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/components/LazyColumn.kt +++ b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/components/LazyColumn.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.unit.dp import ru.shadowsparky.ui.blurSource @Composable -expect fun isTv(): Boolean +fun isTv(): Boolean = ru.shadowsparky.ui.util.isTv() /** * LazyColumn — обходной путь для бага LazyColumn + contentPadding на Android TV. diff --git a/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.kt b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.kt new file mode 100644 index 0000000..7b1b4a9 --- /dev/null +++ b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.kt @@ -0,0 +1,9 @@ +package ru.shadowsparky.ui.util + +import androidx.compose.runtime.Composable + +@Composable +expect fun isTv(): Boolean + +@Composable +expect fun isWear(): Boolean diff --git a/libs/ui/src/desktopMain/kotlin/ru/shadowsparky/ui/components/InsetLazyColumn.desktop.kt b/libs/ui/src/desktopMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.desktop.kt similarity index 52% rename from libs/ui/src/desktopMain/kotlin/ru/shadowsparky/ui/components/InsetLazyColumn.desktop.kt rename to libs/ui/src/desktopMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.desktop.kt index 408d080..5f58f9e 100644 --- a/libs/ui/src/desktopMain/kotlin/ru/shadowsparky/ui/components/InsetLazyColumn.desktop.kt +++ b/libs/ui/src/desktopMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.desktop.kt @@ -1,6 +1,9 @@ -package ru.shadowsparky.ui.components +package ru.shadowsparky.ui.util import androidx.compose.runtime.Composable @Composable actual fun isTv(): Boolean = false + +@Composable +actual fun isWear(): Boolean = false diff --git a/libs/ui/src/wasmJsMain/kotlin/ru/shadowsparky/ui/components/InsetLazyColumn.wasmJs.kt b/libs/ui/src/wasmJsMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.wasmJs.kt similarity index 52% rename from libs/ui/src/wasmJsMain/kotlin/ru/shadowsparky/ui/components/InsetLazyColumn.wasmJs.kt rename to libs/ui/src/wasmJsMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.wasmJs.kt index 408d080..5f58f9e 100644 --- a/libs/ui/src/wasmJsMain/kotlin/ru/shadowsparky/ui/components/InsetLazyColumn.wasmJs.kt +++ b/libs/ui/src/wasmJsMain/kotlin/ru/shadowsparky/ui/util/DeviceUtils.wasmJs.kt @@ -1,6 +1,9 @@ -package ru.shadowsparky.ui.components +package ru.shadowsparky.ui.util import androidx.compose.runtime.Composable @Composable actual fun isTv(): Boolean = false + +@Composable +actual fun isWear(): Boolean = false