Milan Jurkulak 3 роки тому
батько
коміт
c0354b05bf
21 змінених файлів з 57 додано та 48 видалено
  1. 4 4
      app/build.gradle.kts
  2. 2 0
      build.gradle.kts
  3. 6 6
      tvlib/build.gradle.kts
  4. 2 2
      tvlib/src/main/kotlin/org/mjdev/tvlib/extensions/ComposeExt.kt
  5. 2 2
      tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/brush/BrushBuilder.kt
  6. 3 1
      tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/brush/SquashedOval.kt
  7. 1 1
      tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/coil/AlbumArtDecoder.kt
  8. 0 18
      tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/cursor/PhotoItem.kt
  9. 1 1
      tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/lifecycle/LifeCycle.kt
  10. 2 0
      tvlib/src/main/kotlin/org/mjdev/tvlib/screen/Screen.kt
  11. 2 0
      tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/card/CardContent.kt
  12. 7 2
      tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/image/ImageAny.kt
  13. 1 2
      tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/navigation/NavigationDrawer.kt
  14. 1 0
      tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/navigation/SettingsDrawer.kt
  15. 2 3
      tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/navigation/SettingsDrawerContent.kt
  16. 2 0
      tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/text/AutoHideEmptyText.kt
  17. 2 0
      tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/text/TextAny.kt
  18. 2 0
      tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/text/TextWithShadow.kt
  19. 3 1
      tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/tv/Loading.kt
  20. 10 5
      tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/tv/Tabs.kt
  21. 2 0
      tvlib/src/main/kotlin/org/mjdev/tvlib/ui/theme/ThemeHelper.kt

+ 4 - 4
app/build.gradle.kts

@@ -182,7 +182,7 @@ dependencies {
     // tv library by mjde milan jurkulak
     implementation(project(mapOf("path" to ":tvlib")))
     // base libs
-    implementation("androidx.core:core-ktx:1.12.0-alpha05")
+    implementation("androidx.core:core-ktx:1.12.0-beta01")
     // compose base libs
     implementation(platform("androidx.compose:compose-bom:2023.06.01"))
     implementation("androidx.compose.ui:ui-tooling")
@@ -191,7 +191,7 @@ dependencies {
     implementation("androidx.compose.material:material-icons-extended:1.4.3")
     // tv compose
     implementation("androidx.tv:tv-foundation:1.0.0-SNAPSHOT")
-    implementation("androidx.tv:tv-material:1.0.0-alpha07")
+    implementation("androidx.tv:tv-material:1.0.0-alpha08")
     // dagger - hilt
     implementation("com.google.dagger:dagger-android:2.47")
     implementation("com.google.dagger:dagger-android-support:2.47")
@@ -215,7 +215,7 @@ dependencies {
     // view model
     implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1")
     // navigation
-    implementation("androidx.navigation:navigation-compose:2.7.0-beta02")
+    implementation("androidx.navigation:navigation-compose:2.7.0-rc01")
     // retrofit
     implementation("com.squareup.retrofit2:retrofit:2.9.0")
     implementation("com.squareup.retrofit2:converter-moshi:2.9.0")
@@ -223,7 +223,7 @@ dependencies {
     // encrypt data
     implementation("com.scottyab:aescrypt:0.0.1")
     // permission
-    implementation("com.google.accompanist:accompanist-permissions:0.31.5-beta")
+    implementation("com.google.accompanist:accompanist-permissions:0.31.6-rc")
     // previews
     debugImplementation("androidx.customview:customview-poolingcontainer:1.0.0")
     // lottie

+ 2 - 0
build.gradle.kts

@@ -16,8 +16,10 @@ plugins {
 buildscript {
     repositories {
         mavenCentral()
+        maven(url = "https://storage.googleapis.com/r8-releases/raw")
     }
     dependencies {
+        classpath("com.android.tools:r8:8.1.56")
         classpath("io.objectbox:objectbox-gradle-plugin:3.6.0")
         classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.22")
     }

+ 6 - 6
tvlib/build.gradle.kts

@@ -80,9 +80,9 @@ android {
 
 dependencies {
     // base libs
-    implementation("androidx.core:core-ktx:1.12.0-alpha05")
+    implementation("androidx.core:core-ktx:1.12.0-beta01")
     // reflect / debug purposes only
-    implementation(kotlin("reflect", "1.8.21"))
+    implementation("org.jetbrains.kotlin:kotlin-reflect:1.9.0")
     // window manager
     implementation("androidx.window:window:1.1.0")
     // compose base libs
@@ -93,13 +93,13 @@ dependencies {
     implementation("androidx.compose.material:material-icons-extended:1.4.3")
     // tv compose
     implementation("androidx.tv:tv-foundation:1.0.0-SNAPSHOT")
-    implementation("androidx.tv:tv-material:1.0.0-alpha07")
+    implementation("androidx.tv:tv-material:1.0.0-alpha08")
     // paging
-    implementation("androidx.paging:paging-compose:3.2.0-rc01")
+    implementation("androidx.paging:paging-compose:3.2.0")
     // view model
     implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1")
     // navigation
-    implementation("androidx.navigation:navigation-compose:2.7.0-beta02")
+    implementation("androidx.navigation:navigation-compose:2.7.0-rc01")
     // image loading
     implementation("io.coil-kt:coil-base:2.4.0")
     implementation("io.coil-kt:coil-gif:2.4.0")
@@ -146,7 +146,7 @@ dependencies {
     implementation("androidx.media3:media3-datasource:1.1.0")
     implementation("androidx.media3:media3-common:1.1.0")
     // permission
-    implementation("com.google.accompanist:accompanist-permissions:0.31.5-beta")
+    implementation("com.google.accompanist:accompanist-permissions:0.31.6-rc")
     // for previews
     debugImplementation("androidx.customview:customview-poolingcontainer:1.0.0")
     // pallette

+ 2 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/extensions/ComposeExt.kt

@@ -36,7 +36,7 @@ import coil.decode.SvgDecoder
 import coil.decode.VideoFrameDecoder
 import coil.request.CachePolicy
 import org.mjdev.tvlib.extensions.ContextExt.isATv
-import org.mjdev.tvlib.helpers.AlbumArtDecoder
+import org.mjdev.tvlib.helpers.coil.AlbumArtDecoder
 
 @Suppress("MemberVisibilityCanBePrivate")
 object ComposeExt {
@@ -151,9 +151,9 @@ object ComposeExt {
                     } else {
                         add(GifDecoder.Factory())
                     }
+                    add(AlbumArtDecoder.Factory())
                     add(VideoFrameDecoder.Factory())
                     add(SvgDecoder.Factory())
-                    add(AlbumArtDecoder.Factory())
                 }
                 .build()
         }

+ 2 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/BrushBuilder.kt → tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/brush/BrushBuilder.kt

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) Milan Jurkulák 2023.
+ *  Copyright (c) Milan Jurkulák 2023.
  *  Contact:
  *  e: mimoccc@gmail.com
  *  e: mj@mjdev.org
@@ -8,7 +8,7 @@
 
 @file:Suppress("unused")
 
-package org.mjdev.tvlib.helpers
+package org.mjdev.tvlib.helpers.brush
 
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.drawBehind

+ 3 - 1
tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/SquashedOval.kt → tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/brush/SquashedOval.kt

@@ -6,7 +6,9 @@
  *  w: https://mjdev.org
  */
 
-package org.mjdev.tvlib.helpers
+@file:Suppress("unused")
+
+package org.mjdev.tvlib.helpers.brush
 
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.geometry.Size

+ 1 - 1
tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/AlbumArtDecoder.kt → tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/coil/AlbumArtDecoder.kt

@@ -6,7 +6,7 @@
  *  w: https://mjdev.org
  */
 
-package org.mjdev.tvlib.helpers
+package org.mjdev.tvlib.helpers.coil
 
 import android.graphics.BitmapFactory
 import androidx.core.graphics.drawable.toDrawable

+ 0 - 18
tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/cursor/PhotoItem.kt

@@ -48,24 +48,6 @@ class PhotoItem() :
         }
     }
 
-//    override val image: Any?
-//        get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
-//            try {
-//                uri.let { thumbUri ->
-//                    contentResolver.loadThumbnail(
-//                        thumbUri,
-//                        Size(320, 240),
-//                        null
-//                    )
-//                }
-//            } catch (e: Exception) {
-//                Timber.e(e)
-//                null
-//            }
-//        } else {
-//            Uri.parse(this[MediaStore.Images.Media.DATA].toString())
-//        }
-
     companion object {
 
         const val SORT_ORDER_DATE_DESC: String = MediaStore.Images.Media.DATE_ADDED + " DESC"

+ 1 - 1
tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/LifeCycle.kt → tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/lifecycle/LifeCycle.kt

@@ -8,7 +8,7 @@
 
 @file:Suppress("unused")
 
-package org.mjdev.tvlib.helpers
+package org.mjdev.tvlib.helpers.lifecycle
 
 import android.annotation.SuppressLint
 import androidx.compose.runtime.Composable

+ 2 - 0
tvlib/src/main/kotlin/org/mjdev/tvlib/screen/Screen.kt

@@ -28,6 +28,7 @@ import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import androidx.navigation.NamedNavArgument
 import androidx.navigation.NavBackStackEntry
+import androidx.tv.material3.ExperimentalTvMaterial3Api
 import androidx.tv.material3.Text
 import org.mjdev.tvlib.annotations.TvPreview
 import org.mjdev.tvlib.extensions.NavExt.rememberNavControllerEx
@@ -94,6 +95,7 @@ open class Screen {
         ComposeScreen()
     }
 
+    @OptIn(ExperimentalTvMaterial3Api::class)
     @Composable
     open fun ComposeScreen() {
         Column(

+ 2 - 0
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/card/CardContent.kt

@@ -14,11 +14,13 @@ import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.graphicsLayer
 import androidx.compose.ui.tooling.preview.Preview
+import androidx.tv.material3.ExperimentalTvMaterial3Api
 import androidx.tv.material3.MaterialTheme
 import androidx.tv.material3.ProvideTextStyle
 import org.mjdev.tvlib.extensions.ModifierExt.recomposeHighlighter
 import org.mjdev.tvlib.ui.components.text.AutoHideEmptyText
 
+@OptIn(ExperimentalTvMaterial3Api::class)
 @Preview
 @Composable
 fun CardContent(

+ 7 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/image/ImageAny.kt

@@ -31,6 +31,7 @@ import androidx.compose.ui.tooling.preview.Preview
 import com.skydoves.landscapist.ImageOptions
 import com.skydoves.landscapist.coil.CoilImage
 import org.mjdev.tvlib.R
+import org.mjdev.tvlib.extensions.ComposeExt.rememberImageLoader
 import org.mjdev.tvlib.extensions.DrawableExt.asImageBitmap
 import org.mjdev.tvlib.extensions.ModifierExt.recomposeHighlighter
 import java.net.URL
@@ -52,8 +53,9 @@ fun ImageAny(
     modifier = modifier
 ) {
 
-    val width = if(constraints.minWidth  ==0) 1 else constraints.minWidth
-    val height = if(constraints.minHeight  ==0) 1 else constraints.minHeight
+    val imageLoader = rememberImageLoader()
+    val width = if (constraints.minWidth == 0) 1 else constraints.minWidth
+    val height = if (constraints.minHeight == 0) 1 else constraints.minHeight
 
     when (src) {
 
@@ -120,6 +122,7 @@ fun ImageAny(
         )
 
         is URL -> CoilImage(
+            imageLoader = { imageLoader },
             modifier = modifier.recomposeHighlighter(),
             imageModel = { src },
             imageOptions = ImageOptions(
@@ -132,6 +135,7 @@ fun ImageAny(
         )
 
         is Uri -> CoilImage(
+            imageLoader = { imageLoader },
             modifier = modifier.recomposeHighlighter(),
             imageModel = { src },
             imageOptions = ImageOptions(
@@ -144,6 +148,7 @@ fun ImageAny(
         )
 
         is String -> CoilImage(
+            imageLoader = { imageLoader },
             modifier = modifier.recomposeHighlighter(),
             imageModel = { src },
             imageOptions = ImageOptions(

+ 1 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/navigation/NavigationDrawer.kt

@@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.width
 import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.RectangleShape
@@ -34,7 +33,7 @@ fun NavigationDrawer(
     drawerState: DrawerState = rememberDrawerState(
         if (isEditMode()) DrawerValue.Open else DrawerValue.Closed
     ),
-    contentAlignment: Alignment = Alignment.TopStart,
+//    contentAlignment: Alignment = Alignment.TopStart,
     drawerContent: @Composable (DrawerValue) -> Unit = {
         Box(
             modifier = Modifier

+ 1 - 0
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/navigation/SettingsDrawer.kt

@@ -43,6 +43,7 @@ fun SettingsDrawer(
     },
 ) {
     ModalNavigationDrawer(
+        modifier = modifier,
         contentAlignment = Alignment.TopEnd,
         drawerState = drawerState,
         drawerContent = {

+ 2 - 3
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/navigation/SettingsDrawerContent.kt

@@ -28,7 +28,6 @@ import org.mjdev.tvlib.extensions.ComposeExt.isEditMode
 import org.mjdev.tvlib.extensions.ModifierExt.conditional
 import org.mjdev.tvlib.extensions.ModifierExt.recomposeHighlighter
 
-@Suppress("UNUSED_ANONYMOUS_PARAMETER")
 @SuppressLint("AutoboxingStateValueProperty")
 @Preview
 @Composable
@@ -38,8 +37,8 @@ fun SettingsDrawerContent(
     borderSize: Dp = 0.dp,
     borderColor: Color = Color.Transparent,
     shape: Shape = RoundedCornerShape(roundCornerSize),
-    onDrawerItemClick: (id: Int) -> Unit = { id -> },
-    onDrawerItemFocus: (id: Int) -> Unit = { id -> },
+//    onDrawerItemClick: (id: Int) -> Unit = { id -> },
+//    onDrawerItemFocus: (id: Int) -> Unit = { id -> },
 ) {
     Column(
         modifier = Modifier

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

@@ -22,9 +22,11 @@ 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.ExperimentalTvMaterial3Api
 import androidx.tv.material3.LocalTextStyle
 import org.mjdev.tvlib.extensions.ModifierExt.recomposeHighlighter
 
+@OptIn(ExperimentalTvMaterial3Api::class)
 @SuppressLint("ModifierParameter")
 @Preview
 @Composable

+ 2 - 0
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/text/TextAny.kt

@@ -22,11 +22,13 @@ 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.ExperimentalTvMaterial3Api
 import androidx.tv.material3.LocalTextStyle
 import androidx.tv.material3.Text
 import org.mjdev.tvlib.extensions.ComposeExt.textFrom
 import org.mjdev.tvlib.extensions.ModifierExt.recomposeHighlighter
 
+@OptIn(ExperimentalTvMaterial3Api::class)
 @SuppressLint("ModifierParameter")
 @Preview
 @Composable

+ 2 - 0
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/text/TextWithShadow.kt

@@ -20,9 +20,11 @@ import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.TextUnit
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
+import androidx.tv.material3.ExperimentalTvMaterial3Api
 import androidx.tv.material3.MaterialTheme
 import org.mjdev.tvlib.extensions.ModifierExt.recomposeHighlighter
 
+@OptIn(ExperimentalTvMaterial3Api::class)
 @Preview
 @Composable
 fun TextWithShadow(

+ 3 - 1
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/tv/Loading.kt

@@ -6,7 +6,7 @@
  *  w: https://mjdev.org
  */
 
-package org.mjdev.tvapp.base.ui.components.tv
+package org.mjdev.tvlib.ui.components.tv
 
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.Box
@@ -20,11 +20,13 @@ import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.unit.TextUnit
 import androidx.compose.ui.unit.sp
+import androidx.tv.material3.ExperimentalTvMaterial3Api
 import androidx.tv.material3.MaterialTheme
 import org.mjdev.tvlib.annotations.TvPreview
 import org.mjdev.tvlib.R
 import org.mjdev.tvlib.ui.components.text.TextAny
 
+@OptIn(ExperimentalTvMaterial3Api::class)
 @TvPreview
 @Composable
 fun Loading(

+ 10 - 5
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/components/tv/Tabs.kt

@@ -55,26 +55,29 @@ fun Tabs(
 ) {
     val selectedTabIndex = remember { mutableIntStateOf(0) }
     val colors = TabDefaults.pillIndicatorTabColors(
-        activeContentColor = activeContentColor,
+//        activeContentColor = activeContentColor,
         contentColor = activeContentColor,
         selectedContentColor = activeContentColor,
         focusedContentColor = focusedContentColor,
         focusedSelectedContentColor = focusedContentColor,
-        disabledActiveContentColor = activeContentColor.copy(alpha = 0.4f),
+//        disabledActiveContentColor = activeContentColor.copy(alpha = 0.4f),
         disabledContentColor = activeContentColor.copy(alpha = 0.4f),
         disabledSelectedContentColor = selectedContentColor,
     )
     TabRow(
-        modifier = modifier.fillMaxWidth().recomposeHighlighter(),
+        modifier = modifier
+            .fillMaxWidth()
+            .recomposeHighlighter(),
         selectedTabIndex = selectedTabIndex.value,
         contentColor = activeContentColor,
         separator = {
             Spacer(modifier = Modifier.width(itemsSpacing))
         },
-        indicator = { tabPositions ->
+        indicator = { tabPositions, isActivated ->
             tabPositions.getOrNull(selectedTabIndex.value)?.let { tab ->
                 TabRowDefaults.PillIndicator(
                     currentTabPosition = tab,
+                    isActivated = isActivated,
                     activeColor = activeContentColor,
                     inactiveColor = activeContentColor.copy(alpha = 0.4f)
                 )
@@ -105,7 +108,9 @@ fun Tabs(
                     onClick = { onItemClick(items[selectedTabIndex.value]) }
                 ) {
                     TextAny(
-                        modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp).recomposeHighlighter(),
+                        modifier = Modifier
+                            .padding(horizontal = 16.dp, vertical = 8.dp)
+                            .recomposeHighlighter(),
                         text = if (tab is ItemWithTitle<*>) tab.title else tab.toString(),
                         fontSize = fontSize,
                         color = Color.White,

+ 2 - 0
tvlib/src/main/kotlin/org/mjdev/tvlib/ui/theme/ThemeHelper.kt

@@ -86,9 +86,11 @@ class ThemeProvider {
     val detailTextPaddingVertical: Dp = 32.dp
     val detailsTextColor: Color = Color.White
     val detailTextBackgroundColor: Color = Color.Black
+    @OptIn(ExperimentalTvMaterial3Api::class)
     val detailsTitleTextStyle: TextStyle
         @Composable
         get() = MaterialTheme.typography.headlineSmall
+    @OptIn(ExperimentalTvMaterial3Api::class)
     val detailsTextStyle: TextStyle
         @Composable
         get() = MaterialTheme.typography.bodySmall