Milan Jurkulak 3 лет назад
Родитель
Сommit
cc08c80ac7
22 измененных файлов с 144 добавлено и 65 удалено
  1. 2 0
      app/build.gradle.kts
  2. 14 0
      app/src/main/kotlin/org/mjdev/tvapp/base/interfaces/ItemAudio.kt
  3. 14 0
      app/src/main/kotlin/org/mjdev/tvapp/base/interfaces/ItemPhoto.kt
  4. 14 0
      app/src/main/kotlin/org/mjdev/tvapp/base/interfaces/ItemVideo.kt
  5. 3 2
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/button/Button.kt
  6. 2 0
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/card/ItemCard.kt
  7. 3 0
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/card/PhotoCard.kt
  8. 3 2
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/carousel/BigCarousel.kt
  9. 2 1
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/complex/FocusableBox.kt
  10. 3 0
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/complex/FocusableCard.kt
  11. 1 0
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/image/PhotoImage.kt
  12. 0 0
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/media/ExoPlayerImpl.kt
  13. 2 1
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/media/MediaPlayerContainer.kt
  14. 43 1
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/media/NativePlayerImpl.kt
  15. 11 17
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/navigation/NavigationRow.kt
  16. 2 0
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/text/AutoHideEmptyText.kt
  17. 1 1
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/text/CircleText.kt
  18. 18 17
      app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/tv/BrowseView.kt
  19. 0 1
      app/src/main/kotlin/org/mjdev/tvapp/ui/components/Details.kt
  20. 0 2
      app/src/main/kotlin/org/mjdev/tvapp/ui/components/Loading.kt
  21. 2 2
      app/src/main/kotlin/org/mjdev/tvapp/ui/pages/MainPage.kt
  22. 4 18
      app/src/main/kotlin/org/mjdev/tvapp/ui/screens/SplashScreen.kt

+ 2 - 0
app/build.gradle.kts

@@ -251,6 +251,8 @@ dependencies {
     // permission
     implementation("com.google.accompanist:accompanist-permissions:0.31.5-beta")
 
+    debugImplementation("androidx.customview:customview-poolingcontainer:1.0.0")
+
     constraints {
         implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.0")?.apply {
             because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")

+ 14 - 0
app/src/main/kotlin/org/mjdev/tvapp/base/interfaces/ItemAudio.kt

@@ -0,0 +1,14 @@
+/*
+ * Copyright (c) Milan Jurkulák 2023.
+ *  Contact:
+ *  e: mimoccc@gmail.com
+ *  e: mj@mjdev.org
+ *  w: https://mjdev.org
+ */
+
+package org.mjdev.tvapp.base.interfaces
+
+@Suppress("unused")
+class ItemAudio {
+    val isAudio = true
+}

+ 14 - 0
app/src/main/kotlin/org/mjdev/tvapp/base/interfaces/ItemPhoto.kt

@@ -0,0 +1,14 @@
+/*
+ * Copyright (c) Milan Jurkulák 2023.
+ *  Contact:
+ *  e: mimoccc@gmail.com
+ *  e: mj@mjdev.org
+ *  w: https://mjdev.org
+ */
+
+package org.mjdev.tvapp.base.interfaces
+
+@Suppress("unused")
+class ItemPhoto {
+    val isAudio = true
+}

+ 14 - 0
app/src/main/kotlin/org/mjdev/tvapp/base/interfaces/ItemVideo.kt

@@ -0,0 +1,14 @@
+/*
+ * Copyright (c) Milan Jurkulák 2023.
+ *  Contact:
+ *  e: mimoccc@gmail.com
+ *  e: mj@mjdev.org
+ *  w: https://mjdev.org
+ */
+
+package org.mjdev.tvapp.base.interfaces
+
+@Suppress("unused")
+class ItemVideo {
+    val isVideo = true
+}

+ 3 - 2
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/button/Button.kt

@@ -49,7 +49,7 @@ fun Button(
     fontSize: TextUnit = 24.sp,
     fontWeight: FontWeight = FontWeight.Bold,
     color: Color = Color.White,
-    containerColor: Color = Color.Transparent,
+    containerColor: Color = Color.LightGray,
     contentPadding: PaddingValues = PaddingValues(0.dp),
     roundRectSize: Dp = 8.dp,
     shape: Shape = RoundedCornerShape(roundRectSize),
@@ -64,7 +64,8 @@ fun Button(
 ) {
 
     Button(
-        modifier = modifier.recomposeHighlighter()
+        modifier = modifier
+            .recomposeHighlighter()
 //            .touchable(
 //                focusState = focusState,
 //            )

+ 2 - 0
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/card/ItemCard.kt

@@ -43,6 +43,7 @@ fun ItemCard(
     contentScale: ContentScale = ContentScale.Crop,
     scale: CardScale = CardDefaults.scale(),
     shape: CardShape = CardDefaults.shape(),
+    textColor: Color = Color.White,
     colors: CardColors = CardDefaults.colors(),
     border: CardBorder = CardDefaults.colorFocusBorder(Color.Green),
     glow: CardGlow = CardDefaults.colorFocusGlow(Color.Green),
@@ -66,6 +67,7 @@ fun ItemCard(
     focusState = focusState,
     contentScale = contentScale,
     aspectRatio = aspectRatio,
+    textColor = textColor,
     scale = scale,
     shape = shape,
     colors = colors,

+ 3 - 0
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/card/PhotoCard.kt

@@ -14,6 +14,7 @@ import androidx.compose.ui.Modifier
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.MutableState
 import androidx.compose.ui.focus.FocusState
+import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.Dp
@@ -35,6 +36,7 @@ fun PhotoCard(
     item: Any? = null,
     modifier: Modifier = Modifier,
     contentScale: ContentScale = ContentScale.Crop,
+    textColor: Color = Color.White,
     focusState: MutableState<FocusState?> = rememberFocusState(item),
     imageRenderer: @Composable () -> Unit = {
         PhotoImage(
@@ -54,6 +56,7 @@ fun PhotoCard(
         item = item,
         modifier = modifier.recomposeHighlighter(),
         contentScale = contentScale,
+        textColor = textColor,
         focusState = focusState,
         aspectRatio = aspectRatio,
         cardWidth = cardWidth,

+ 3 - 2
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/carousel/BigCarousel.kt

@@ -37,7 +37,7 @@ import org.mjdev.tvapp.base.extensions.ModifierExt.recomposeHighlighter
 @Composable
 fun BigCarousel(
     modifier: Modifier = Modifier,
-    items: List<Any?> = emptyList(),
+    items: List<Any?> = listOf(Unit, Unit, Unit),
     onItemSelected: (movie: Any?) -> Unit = {},
     onItemClicked: (movie: Any?) -> Unit = {},
 ) {
@@ -51,7 +51,8 @@ fun BigCarousel(
     BoxWithConstraints {
         Carousel(
             itemCount = items.size,
-            modifier = modifier.recomposeHighlighter()
+            modifier = modifier
+                .recomposeHighlighter()
                 .fillMaxWidth()
                 .height(height.dp),
         ) { indexOfCarouselItem ->

+ 2 - 1
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/complex/FocusableBox.kt

@@ -56,7 +56,8 @@ fun FocusableBox(
 ) {
     Surface(
         onClick = onClick,
-        modifier = modifier.recomposeHighlighter()
+        modifier = modifier
+            .recomposeHighlighter()
             .focusState(focusState)
             .onFocusChanged { state -> onFocusChange(state) }
             .requestFocusOnTouch(focusRequester) {

+ 3 - 0
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/complex/FocusableCard.kt

@@ -61,6 +61,7 @@ fun FocusableCard(
     contentScale: ContentScale = ContentScale.Crop,
     scale: CardScale = CardDefaults.scale(),
     shape: CardShape = CardDefaults.shape(),
+    textColor: Color = Color.White,
     colors: CardColors = CardDefaults.colors(),
     border: CardBorder = CardDefaults.colorFocusBorder(Color.Green),
     glow: CardGlow = CardDefaults.colorFocusGlow(Color.Green),
@@ -113,6 +114,7 @@ fun FocusableCard(
             AutoHideEmptyText(
                 modifier = Modifier.padding(4.dp),
                 maxLines = 1,
+                color = textColor,
                 style = MaterialTheme.typography.titleSmall,
                 text = (item as? ItemWithTitle<*>)?.title
             )
@@ -121,6 +123,7 @@ fun FocusableCard(
             AutoHideEmptyText(
                 modifier = Modifier.padding(4.dp),
                 maxLines = 1,
+                color = textColor,
                 style = MaterialTheme.typography.displaySmall,
                 text = (item as? ItemWithSubtitle<*>)?.subtitle
             )

+ 1 - 0
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/image/PhotoImage.kt

@@ -62,6 +62,7 @@ fun PhotoImage(
 ) {
     val isEdit = isEditMode()
     val context = LocalContext.current
+    // todo coil image does not shows
     CoilImage(
         imageLoader = {
             ImageLoader(context).newBuilder()

+ 0 - 0
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/media/MediaPlayerImpl.kt → app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/media/ExoPlayerImpl.kt


+ 2 - 1
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/media/MediaPlayerContainer.kt

@@ -12,6 +12,7 @@ package org.mjdev.tvapp.base.ui.components.media
 
 import android.net.Uri
 import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.DisposableEffect
 import androidx.compose.ui.Modifier
@@ -33,7 +34,7 @@ fun MediaPlayerContainer(
 ) {
     val state = rememberMediaPlayerState(uri ?: Uri.EMPTY, autoPlay, startSeek)
     Box(
-        modifier = modifier.recomposeHighlighter()
+        modifier = modifier.recomposeHighlighter().fillMaxSize()
     ) {
         background(state)
         mediaPlayer.GetPlayerView()

+ 43 - 1
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/media/NativePlayerImpl.kt

@@ -10,40 +10,82 @@ package org.mjdev.tvapp.base.ui.components.media
 
 import android.media.MediaPlayer
 import android.net.Uri
+import android.view.SurfaceView
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.size
 import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.RectangleShape
+import androidx.compose.ui.platform.LocalConfiguration
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.viewinterop.AndroidView
+import org.mjdev.tvapp.base.extensions.ComposeExt
+import org.mjdev.tvapp.base.extensions.ModifierExt.recomposeHighlighter
 
 // todo
 @Suppress("unused")
 class NativePlayerImpl(
-    val mediaPlayer: MediaPlayer
+    private val mediaPlayer: MediaPlayer
 ) : IMediaPlayer {
 
     @Composable
     override fun GetPlayerView() {
+        val width = LocalConfiguration.current.screenWidthDp
+        val height = LocalConfiguration.current.screenHeightDp
+        val isEdit = ComposeExt.isEditMode()
+        Box(
+            modifier = Modifier
+                .recomposeHighlighter()
+                .size(width.dp, height.dp)
+                .background(Color.Black, RectangleShape)
+        ) {
+            if (!isEdit) {
+                AndroidView(
+                    modifier = Modifier
+                        .size(width.dp, height.dp)
+                        .recomposeHighlighter(),
+                    factory = { context ->
+                        SurfaceView(context).apply {
+                            mediaPlayer.setDisplay(holder)
+                        }
+                    }
+                )
+            }
+        }
     }
 
     override fun setMediaUri(uri: Uri) {
+        mediaPlayer.setDataSource(uri.toString())
     }
 
     override fun prepare() {
+        mediaPlayer.prepareAsync()
     }
 
     override fun play() {
+        mediaPlayer.start()
     }
 
     override fun pause() {
+        mediaPlayer.pause()
     }
 
     override fun resume() {
+        mediaPlayer.start()
     }
 
     override fun stop() {
+        mediaPlayer.stop()
     }
 
     override fun dispose() {
+        mediaPlayer.release()
     }
 
     override fun seekTo(value: Long) {
+        mediaPlayer.seekTo(value.toInt())
     }
 
 }

+ 11 - 17
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/navigation/NavigationRow.kt

@@ -61,16 +61,6 @@ fun NavigationRow(
     strokeWidth: Dp = 1.dp,
     margin: Dp = 0.dp,
     padding: Dp = 4.dp,
-//    brush: Brush? = BrushBuilder()
-//        .type(BrushBuilder.Vertical)
-//        .colors(
-//            0.1f to Color.White,
-//            0.3f to Color.Green,
-//            0.4f to Color.Green,
-//            0.5f to Color.Green,
-//            0.9f to Color.Green,
-//        )
-//        .build(),
     drawerState: DrawerState = rememberDrawerState(DrawerValue.Closed),
     focusState: MutableState<FocusState?> = rememberFocusState(text),
     onFocus: (id: Int) -> Unit = {},
@@ -78,7 +68,8 @@ fun NavigationRow(
 ) {
     val isEdit = isEditMode()
     FocusableBox(
-        modifier = modifier.recomposeHighlighter()
+        modifier = modifier
+            .recomposeHighlighter()
             .padding(margin)
             .border(
                 BorderStroke(
@@ -91,7 +82,7 @@ fun NavigationRow(
             .focusState(focusState),
         shape = shape,
         focusedColor = focusedColor.copy(alpha = 0.5f),
-        unFocusedColor = Color.Transparent,
+        unFocusedColor = unFocusedColor,
         onFocusChange = { state ->
             if (state.isFocused || state.hasFocus) {
                 onFocus(id)
@@ -102,14 +93,16 @@ fun NavigationRow(
         },
     ) {
         Row(
-            modifier = Modifier.recomposeHighlighter()
+            modifier = Modifier
+                .recomposeHighlighter()
                 .padding(padding),
-//                .background(brush!!, shape),
             horizontalArrangement = Arrangement.Start,
             verticalAlignment = Alignment.CenterVertically,
         ) {
             Box(
-                modifier = Modifier.padding(4.dp).recomposeHighlighter()
+                modifier = Modifier
+                    .padding(4.dp)
+                    .recomposeHighlighter()
             ) {
                 IconAny(
                     src = icon,
@@ -118,12 +111,13 @@ fun NavigationRow(
                 )
             }
             AnimatedVisibility(
-                visible = (drawerState.currentValue == DrawerValue.Open)
+                visible = (isEdit || (drawerState.currentValue == DrawerValue.Open))
             ) {
                 TextAny(
                     text = text,
                     softWrap = false,
-                    modifier = Modifier.recomposeHighlighter()
+                    modifier = Modifier
+                        .recomposeHighlighter()
                         .padding(8.dp)
                         .width(expandedWidth),
                     color = textColor,

+ 2 - 0
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/text/AutoHideEmptyText.kt

@@ -20,11 +20,13 @@ import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.TextUnit
 import androidx.tv.material3.LocalTextStyle
 import org.mjdev.tvapp.base.extensions.ModifierExt.recomposeHighlighter
 
 @SuppressLint("ModifierParameter")
+@Preview
 @Composable
 fun AutoHideEmptyText(
     text: Any? = "test",

+ 1 - 1
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/text/CircleText.kt

@@ -33,8 +33,8 @@ import androidx.tv.material3.MaterialTheme
 import org.mjdev.tvapp.base.extensions.ModifierExt.recomposeHighlighter
 import org.mjdev.tvapp.base.extensions.ModifierExt.tvAspectRatio
 
-@OptIn(ExperimentalTvMaterial3Api::class)
 @SuppressLint("ModifierParameter")
+@OptIn(ExperimentalTvMaterial3Api::class)
 @Preview
 @Composable
 fun CircleText(

+ 18 - 17
app/src/main/kotlin/org/mjdev/tvapp/base/ui/components/tv/BrowseView.kt

@@ -58,15 +58,16 @@ fun BrowseView(
     backgroundShape: Shape = RoundedCornerShape(roundCornerSize),
     verticalArrangement: Arrangement.Vertical = Arrangement.spacedBy(32.dp),
     contentPadding: PaddingValues = PaddingValues(horizontal = 16.dp, vertical = 8.dp),
-    onTitleClick : () ->Unit = {},
-    onClockClick: () -> Unit = {},
-    onMessageBadgeClick: () -> Unit = {},
-    onUserPicClick: () -> Unit = {},
-    onItemClick: (item: Any?) -> Unit = {}
+    onTitleClicked: () -> Unit = {},
+    onClockClicked: () -> Unit = {},
+    onMessageBadgeClicked: () -> Unit = {},
+    onUserPicClicked: () -> Unit = {},
+    onItemClicked: (item: Any?) -> Unit = {}
 ) {
     val isEdit = isEditMode()
     ScrollableTvLazyRow(
-        modifier = modifier.recomposeHighlighter()
+        modifier = modifier
+            .recomposeHighlighter()
             .fillMaxSize()
             .background(backgroundColor, backgroundShape),
         verticalArrangement = verticalArrangement,
@@ -76,13 +77,13 @@ fun BrowseView(
             Header(
                 title = title,
                 messagesCount = messages.size,
-                onTitleClick = onTitleClick,
-                onClockClick = onClockClick,
-                onMessageBadgeClick = onMessageBadgeClick,
-                onUserPicClick = onUserPicClick
+                onTitleClick = onTitleClicked,
+                onClockClick = onClockClicked,
+                onMessageBadgeClick = onMessageBadgeClicked,
+                onUserPicClick = onUserPicClicked,
             )
         }
-        if (showNetworkState && (isEdit || networkState.isNotConnected)) item {
+        if (isEdit || (showNetworkState && networkState.isNotConnected)) item {
             ErrorMessage(
                 error = stringResource(R.string.error_no_network).asException(),
                 backgroundColor = Color.Black,
@@ -100,7 +101,7 @@ fun BrowseView(
                 items = categories.map { category ->
                     (category as? ItemWithTitle<*>)?.title
                 },
-                onItemClick = { category ->
+                onItemClick = { //category ->
                     // todo
                 }
             )
@@ -109,7 +110,7 @@ fun BrowseView(
             BigCarousel(
                 modifier = Modifier.recomposeHighlighter(),
                 items = featuredItems,
-                onItemClicked = onItemClick
+                onItemClicked = onItemClicked
             )
         }
         if (showApps) item {
@@ -117,17 +118,17 @@ fun BrowseView(
         }
         if (showLocalAudio) item {
             LocalAudioRow(
-                openItem = { item -> onItemClick(item) }
+                openItem = { item -> onItemClicked(item) }
             )
         }
         if (showLocalVideo) item {
             LocalVideoRow(
-                openItem = { item -> onItemClick(item) }
+                openItem = { item -> onItemClicked(item) }
             )
         }
         if (showLocalPhotos) item {
             LocalPhotosRow(
-                openItem = { item -> onItemClick(item) }
+                openItem = { item -> onItemClicked(item) }
             )
         }
         items(categoriesAndItemsMap.map { entry ->
@@ -136,7 +137,7 @@ fun BrowseView(
             CategoryRow(
                 title = (entry.first as? ItemWithTitle<*>)?.title,
                 items = entry.second,
-                onItemClick = onItemClick
+                onItemClick = onItemClicked
             )
         }
     }

+ 0 - 1
app/src/main/kotlin/org/mjdev/tvapp/ui/components/Details.kt

@@ -52,7 +52,6 @@ fun Details(
     val title = (data as? ItemWithTitle<*>)?.title
     val subtitle = (data as? ItemWithSubtitle<*>)?.subtitle
     val description = (data as? ItemWithDescription<*>)?.description
-
     var infoVisible by remember { mutableStateOf(true) }
 
     Box(

+ 0 - 2
app/src/main/kotlin/org/mjdev/tvapp/ui/components/Loading.kt

@@ -24,7 +24,6 @@ import org.mjdev.tvapp.base.annotations.TvPreview
 @TvPreview
 @Composable
 fun Loading(modifier: Modifier = Modifier) {
-
     Box(
         modifier = modifier.fillMaxSize().background(
             Color.DarkGray,
@@ -39,5 +38,4 @@ fun Loading(modifier: Modifier = Modifier) {
             style = MaterialTheme.typography.headlineMedium
         )
     }
-
 }

+ 2 - 2
app/src/main/kotlin/org/mjdev/tvapp/ui/pages/MainPage.kt

@@ -92,10 +92,10 @@ class MainPage : Page() {
             networkState = networkState,
             errorState = errorState,
             backgroundColor = Color.DarkGray,
-            onTitleClick = {
+            onTitleClicked = {
                 navController?.openMenu()
             },
-            onItemClick = onItemClick
+            onItemClicked = onItemClick
         )
 
     }

+ 4 - 18
app/src/main/kotlin/org/mjdev/tvapp/ui/screens/SplashScreen.kt

@@ -21,7 +21,6 @@ import androidx.compose.runtime.remember
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.scale
-import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.ui.text.font.FontWeight
@@ -34,7 +33,7 @@ import org.mjdev.tvapp.base.extensions.ComposeExt.isEditMode
 import org.mjdev.tvapp.base.extensions.NavControllerExt.openAsTop
 import org.mjdev.tvapp.base.screen.Screen
 import org.mjdev.tvapp.base.ui.components.text.TextAny
-import org.mjdev.tvapp.base.ui.components.text.TextWithShadow
+import org.mjdev.tvapp.base.ui.components.tv.Title
 
 class SplashScreen : Screen() {
 
@@ -48,26 +47,15 @@ class SplashScreen : Screen() {
 
         val isEdit = isEditMode()
         val scale = remember { Animatable(if (isEdit) 1f else 0f) }
-        val brush = Brush.radialGradient(
-            colors = listOf(Color.Black, Color.Black, Color.DarkGray, Color.Black),
-        )
 
         Box(
             modifier = Modifier
                 .scale(scale.value)
-                .background(brush, RectangleShape)
+                .background(backgroundColor, RectangleShape)
                 .fillMaxSize(),
             contentAlignment = Alignment.Center
         ) {
-            TextWithShadow(
-                text = R.string.app_name,
-                fontSize = 64.sp,
-                fontWeight = FontWeight.Bold,
-                color = Color.Gray,
-                modifier = Modifier.padding(10.dp),
-                shadowColor = Color.DarkGray,
-                shadowSize = 18.dp
-            )
+            Title()
         }
         Box(
             modifier = Modifier
@@ -87,7 +75,6 @@ class SplashScreen : Screen() {
                 color = Color.White.copy(alpha = 0.5f)
             )
         }
-
         LaunchedEffect(key1 = true) {
             scale.animateTo(
                 targetValue = 1f,
@@ -97,10 +84,9 @@ class SplashScreen : Screen() {
                         OvershootInterpolator(4f).getInterpolation(it)
                     })
             )
-            delay(3000L)
+            delay(1000L)
             navController?.openAsTop<MainScreen>()
         }
-
     }
 
 }