add isWear shortcut
This commit is contained in:
+17
-5
@@ -1,8 +1,11 @@
|
|||||||
package ru.shadowsparky.gigawear.presentation
|
package ru.shadowsparky.gigawear.presentation
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
|
import androidx.compose.material3.dynamicDarkColorScheme
|
||||||
|
import androidx.compose.runtime.CompositionLocalProvider
|
||||||
import com.arkivanov.decompose.retainedComponent
|
import com.arkivanov.decompose.retainedComponent
|
||||||
import org.koin.android.ext.android.inject
|
import org.koin.android.ext.android.inject
|
||||||
import ru.shadowsparky.gigawear.presentation.auth.AuthScreen
|
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.nav.Child
|
||||||
import ru.shadowsparky.gigawear.presentation.routing.RoutingScreen
|
import ru.shadowsparky.gigawear.presentation.routing.RoutingScreen
|
||||||
import ru.shadowsparky.ui.nav.Nav
|
import ru.shadowsparky.ui.nav.Nav
|
||||||
|
import ru.shadowsparky.ui.theme.LocalColorSchemeProvider
|
||||||
|
import ru.shadowsparky.ui.theme.darkScheme
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
private val rootFactory by inject<RootComponentFactory>()
|
private val rootFactory by inject<RootComponentFactory>()
|
||||||
@@ -18,11 +23,18 @@ class MainActivity : ComponentActivity() {
|
|||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
val root = retainedComponent { rootFactory.create(it) }
|
val root = retainedComponent { rootFactory.create(it) }
|
||||||
setContent {
|
setContent {
|
||||||
Nav(root) { child, _ ->
|
val scheme = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
when (child) {
|
dynamicDarkColorScheme(this)
|
||||||
is Child.MainChild -> ChatScreen(child.component)
|
} else {
|
||||||
is Child.AuthChild -> AuthScreen(child.component)
|
darkScheme
|
||||||
is Child.RoutingChild -> RoutingScreen(child.component)
|
}
|
||||||
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-1
@@ -1,4 +1,4 @@
|
|||||||
package ru.shadowsparky.ui.components
|
package ru.shadowsparky.ui.util
|
||||||
|
|
||||||
import android.app.UiModeManager
|
import android.app.UiModeManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -15,3 +15,12 @@ actual fun isTv(): Boolean {
|
|||||||
uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,11 +12,12 @@ import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
|
|||||||
import dev.chrisbanes.haze.materials.HazeMaterials
|
import dev.chrisbanes.haze.materials.HazeMaterials
|
||||||
import dev.chrisbanes.haze.rememberHazeState
|
import dev.chrisbanes.haze.rememberHazeState
|
||||||
import ru.shadowsparky.ui.components.isTv
|
import ru.shadowsparky.ui.components.isTv
|
||||||
|
import ru.shadowsparky.ui.util.isWear
|
||||||
|
|
||||||
internal val LocalBlurState = compositionLocalOf<BlurState?> { null }
|
internal val LocalBlurState = compositionLocalOf<BlurState?> { null }
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
internal fun isBlurEnabled(): Boolean = !isTv()
|
internal fun isBlurEnabled(): Boolean = !isTv() && !isWear()
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
internal fun rememberBlurState(): BlurState? {
|
internal fun rememberBlurState(): BlurState? {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.DialogProperties
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import ru.shadowsparky.ui.theme.getColorScheme
|
import ru.shadowsparky.ui.theme.getColorScheme
|
||||||
|
import ru.shadowsparky.ui.util.isWear
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
@@ -44,7 +45,7 @@ fun AlertContent(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
MaterialExpressiveTheme(getColorScheme()) {
|
MaterialExpressiveTheme(getColorScheme()) {
|
||||||
if (isTv()) {
|
if (isTv() || isWear()) {
|
||||||
BasicAlertDialog(
|
BasicAlertDialog(
|
||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import ru.shadowsparky.ui.blurSource
|
import ru.shadowsparky.ui.blurSource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
expect fun isTv(): Boolean
|
fun isTv(): Boolean = ru.shadowsparky.ui.util.isTv()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LazyColumn — обходной путь для бага LazyColumn + contentPadding на Android TV.
|
* LazyColumn — обходной путь для бага LazyColumn + contentPadding на Android TV.
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package ru.shadowsparky.ui.util
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
expect fun isTv(): Boolean
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
expect fun isWear(): Boolean
|
||||||
+4
-1
@@ -1,6 +1,9 @@
|
|||||||
package ru.shadowsparky.ui.components
|
package ru.shadowsparky.ui.util
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
actual fun isTv(): Boolean = false
|
actual fun isTv(): Boolean = false
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
actual fun isWear(): Boolean = false
|
||||||
+4
-1
@@ -1,6 +1,9 @@
|
|||||||
package ru.shadowsparky.ui.components
|
package ru.shadowsparky.ui.util
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
actual fun isTv(): Boolean = false
|
actual fun isTv(): Boolean = false
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
actual fun isWear(): Boolean = false
|
||||||
Reference in New Issue
Block a user