Ver código fonte

items improve

Milan Jurkulak 3 anos atrás
pai
commit
4a5403b838

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

@@ -23,9 +23,7 @@ import org.mjdev.tvapp.R
 import org.mjdev.tvlib.annotations.TvPreview
 import org.mjdev.tvlib.extensions.HiltExt.appViewModel
 import org.mjdev.tvlib.extensions.NavControllerExt.open
-import org.mjdev.tvlib.extensions.StringExt.asException
 import org.mjdev.tvlib.interfaces.ItemWithId
-import org.mjdev.tvlib.interfaces.ItemWithUri
 import org.mjdev.tvlib.ui.components.page.Page
 import org.mjdev.tvlib.ui.components.tv.AppsRow
 import org.mjdev.tvlib.ui.components.tv.BrowseView
@@ -35,6 +33,9 @@ import org.mjdev.tvlib.ui.components.tv.LocalVideoRow
 import org.mjdev.tvapp.ui.screens.DetailScreen
 import org.mjdev.tvapp.ui.screens.PlayerScreen
 import org.mjdev.tvapp.viewmodel.MainViewModel
+import org.mjdev.tvlib.interfaces.ItemAudio
+import org.mjdev.tvlib.interfaces.ItemPhoto
+import org.mjdev.tvlib.interfaces.ItemVideo
 
 @SuppressLint("ComposableNaming")
 class MainPage : Page() {
@@ -69,16 +70,26 @@ class MainPage : Page() {
         }
 
         val onItemClick: (item: Any?) -> Unit = { item ->
-            val dataUri = (item as? ItemWithUri<*>)?.uri
             val dataId = (item as? ItemWithId)?.id
-            if (item == null) {
-                viewModel.postError("No media found.".asException())
-            } else if (dataId != null) {
+            if (dataId != null) {
                 navController?.open<PlayerScreen>(dataId)
-            } else if (dataUri != null) {
-                navController?.open<PlayerScreen>(dataUri)
             } else {
-                navController?.open<DetailScreen>(item)
+                when (item) {
+                    is ItemAudio -> {
+                        val dataUri = (item as? ItemAudio)?.uri
+                        navController?.open<PlayerScreen>(dataUri)
+                    }
+                    is ItemVideo -> {
+                        val dataUri = (item as? ItemVideo)?.uri
+                        navController?.open<PlayerScreen>(dataUri)
+                    }
+                    is ItemPhoto -> {
+                        navController?.open<DetailScreen>(item)
+                    }
+                    else -> {
+                        navController?.open<DetailScreen>(item)
+                    }
+                }
             }
         }
 

+ 2 - 1
tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/cursor/AudioItem.kt

@@ -15,6 +15,7 @@ import android.os.Build
 import android.provider.MediaStore
 import android.util.Size
 import org.mjdev.tvlib.extensions.CursorExt.asMap
+import org.mjdev.tvlib.interfaces.ItemAudio
 import org.mjdev.tvlib.interfaces.ItemWithImage
 import org.mjdev.tvlib.interfaces.ItemWithTitle
 import org.mjdev.tvlib.interfaces.ItemWithUri
@@ -24,7 +25,7 @@ import timber.log.Timber
 class AudioItem(
     private val contentResolver: ContentResolver,
     c: Cursor
-) : HashMap<String, Any?>(), ItemWithTitle<String>, ItemWithImage<Any>, ItemWithUri<Uri> {
+) : HashMap<String, Any?>(), ItemAudio, ItemWithTitle<String>, ItemWithImage<Any>, ItemWithUri<Uri> {
 
     init {
         putAll(c.asMap(MEDIA_PROJECTION))

+ 13 - 3
tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/cursor/PhotoItem.kt

@@ -15,15 +15,22 @@ import android.os.Build
 import android.provider.MediaStore
 import android.util.Size
 import org.mjdev.tvlib.extensions.CursorExt.asMap
+import org.mjdev.tvlib.interfaces.ItemPhoto
+import org.mjdev.tvlib.interfaces.ItemWithBackground
 import org.mjdev.tvlib.interfaces.ItemWithImage
 import org.mjdev.tvlib.interfaces.ItemWithTitle
 import timber.log.Timber
 
-@Suppress( "unused")
+@Suppress("unused")
 class PhotoItem(
     private val contentResolver: ContentResolver,
     c: Cursor
-) : HashMap<String, Any?>(), ItemWithTitle<String>, ItemWithImage<Any> {
+) :
+    HashMap<String, Any?>(),
+    ItemPhoto,
+    ItemWithTitle<String>,
+    ItemWithImage<Any>,
+    ItemWithBackground<Any?> {
 
     init {
         putAll(c.asMap(MEDIA_PROJECTION))
@@ -32,12 +39,15 @@ class PhotoItem(
     override val title: String?
         get() = this[MediaStore.Images.Media.TITLE]?.toString()
 
-    val uri: Uri
+    override val uri: Uri
         get() = Uri.withAppendedPath(
             MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
             this[MediaStore.Images.Media._ID].toString()
         )
 
+    override val background: Any?
+        get() = this[MediaStore.Images.Media.DATA]
+
     override val image: Any?
         get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
             try {

+ 2 - 1
tvlib/src/main/kotlin/org/mjdev/tvlib/helpers/cursor/VideoItem.kt

@@ -15,6 +15,7 @@ import android.os.Build
 import android.provider.MediaStore
 import android.util.Size
 import org.mjdev.tvlib.extensions.CursorExt.asMap
+import org.mjdev.tvlib.interfaces.ItemVideo
 import org.mjdev.tvlib.interfaces.ItemWithImage
 import org.mjdev.tvlib.interfaces.ItemWithTitle
 import org.mjdev.tvlib.interfaces.ItemWithUri
@@ -24,7 +25,7 @@ import timber.log.Timber
 class VideoItem(
     private val contentResolver: ContentResolver,
     c: Cursor
-) : HashMap<String, Any?>(), ItemWithTitle<String>, ItemWithImage<Any>, ItemWithUri<Uri> {
+) : HashMap<String, Any?>(), ItemVideo, ItemWithTitle<String>, ItemWithImage<Any>, ItemWithUri<Uri> {
 
     override val title: String?
         get() = this[MediaStore.Video.Media.TITLE]?.toString()

+ 2 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/interfaces/ItemAudio.kt

@@ -9,6 +9,6 @@
 package org.mjdev.tvlib.interfaces
 
 @Suppress("unused")
-class ItemAudio {
-    val isAudio = true
+interface ItemAudio {
+    val uri: Any?
 }

+ 2 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/interfaces/ItemPhoto.kt

@@ -9,6 +9,6 @@
 package org.mjdev.tvlib.interfaces
 
 @Suppress("unused")
-class ItemPhoto {
-    val isAudio = true
+interface ItemPhoto {
+    val uri: Any?
 }

+ 2 - 2
tvlib/src/main/kotlin/org/mjdev/tvlib/interfaces/ItemVideo.kt

@@ -9,6 +9,6 @@
 package org.mjdev.tvlib.interfaces
 
 @Suppress("unused")
-class ItemVideo {
-    val isVideo = true
+interface ItemVideo {
+    val uri: Any?
 }