From 45c8d605b27fc09774482f06de269c32f254146f Mon Sep 17 00:00:00 2001 From: oxy Date: Fri, 19 Jan 2024 23:24:20 +0800 Subject: [PATCH] fix: tv provider. --- features/playlist/build.gradle.kts | 1 + features/playlist/src/main/AndroidManifest.xml | 1 + .../com/m3u/features/playlist/PlaylistEvent.kt | 2 ++ .../m3u/features/playlist/PlaylistViewModel.kt | 18 ++++++++++++++++++ .../playlist/components/PlaylistDrawer.kt | 2 +- .../playlist/impl/TvPlaylistScreenImpl.kt | 4 ++-- 6 files changed, 25 insertions(+), 3 deletions(-) diff --git a/features/playlist/build.gradle.kts b/features/playlist/build.gradle.kts index ade431b69..74ec86672 100644 --- a/features/playlist/build.gradle.kts +++ b/features/playlist/build.gradle.kts @@ -65,6 +65,7 @@ dependencies { implementation(libs.androidx.work.work.runtime.ktx) implementation(libs.com.google.accompanist.accompanist.permissions) + implementation(libs.androidx.tvprovider.tvprovider) } tasks.withType().configureEach { diff --git a/features/playlist/src/main/AndroidManifest.xml b/features/playlist/src/main/AndroidManifest.xml index 2676010ff..18d2435e8 100644 --- a/features/playlist/src/main/AndroidManifest.xml +++ b/features/playlist/src/main/AndroidManifest.xml @@ -1,4 +1,5 @@ + \ No newline at end of file diff --git a/features/playlist/src/main/java/com/m3u/features/playlist/PlaylistEvent.kt b/features/playlist/src/main/java/com/m3u/features/playlist/PlaylistEvent.kt index 1043a7eef..84567887e 100644 --- a/features/playlist/src/main/java/com/m3u/features/playlist/PlaylistEvent.kt +++ b/features/playlist/src/main/java/com/m3u/features/playlist/PlaylistEvent.kt @@ -1,5 +1,6 @@ package com.m3u.features.playlist +import android.content.ContentResolver import android.content.Context sealed interface PlaylistEvent { @@ -10,4 +11,5 @@ sealed interface PlaylistEvent { data object ScrollUp : PlaylistEvent data class Query(val text: String) : PlaylistEvent data class CreateShortcut(val context: Context, val id: Int) : PlaylistEvent + data class CreateTvRecommend(val contentResolver: ContentResolver, val id: Int) : PlaylistEvent } diff --git a/features/playlist/src/main/java/com/m3u/features/playlist/PlaylistViewModel.kt b/features/playlist/src/main/java/com/m3u/features/playlist/PlaylistViewModel.kt index 22a36e8c7..f9535edb4 100644 --- a/features/playlist/src/main/java/com/m3u/features/playlist/PlaylistViewModel.kt +++ b/features/playlist/src/main/java/com/m3u/features/playlist/PlaylistViewModel.kt @@ -77,6 +77,7 @@ class PlaylistViewModel @Inject constructor( is PlaylistEvent.SavePicture -> savePicture(event) is PlaylistEvent.Query -> query(event) is PlaylistEvent.CreateShortcut -> createShortcut(event.context, event.id) + is PlaylistEvent.CreateTvRecommend -> createTvRecommend(event.contentResolver, event.id) } } @@ -204,6 +205,23 @@ class PlaylistViewModel @Inject constructor( } } + private fun createTvRecommend(contentResolver: ContentResolver, id: Int) { + viewModelScope.launch { + val stream = streamRepository.get(id) ?: return@launch + val bitmap = stream.cover?.let { mediaRepository.loadDrawable(it)?.toBitmap() } + val channel = TvChannel.Builder() + .setType(TvContractCompat.Channels.TYPE_PREVIEW) + .setDisplayName(stream.title) + .setInternalProviderId(id.toString()) + .setAppLinkIntentUri("content://channelsample.com/category/$id".toUri()) + .build() + contentResolver.insert( + TvContractCompat.Channels.CONTENT_URI, + channel.toContentValues() + ) + } + } + private val _query: MutableStateFlow = MutableStateFlow("") internal val query: StateFlow = _query.asStateFlow() private fun query(event: PlaylistEvent.Query) { diff --git a/features/playlist/src/main/java/com/m3u/features/playlist/components/PlaylistDrawer.kt b/features/playlist/src/main/java/com/m3u/features/playlist/components/PlaylistDrawer.kt index 189ec24ae..086732d76 100644 --- a/features/playlist/src/main/java/com/m3u/features/playlist/components/PlaylistDrawer.kt +++ b/features/playlist/src/main/java/com/m3u/features/playlist/components/PlaylistDrawer.kt @@ -94,7 +94,7 @@ internal fun PlaylistDrawer( internal object PlaylistDrawerDefaults { @Composable - fun rememberStreamItems( + fun rememberStreamMenuItems( stream: Stream?, onFavorite: (streamId: Int, target: Boolean) -> Unit, ban: (streamId: Int) -> Unit, diff --git a/features/playlist/src/main/java/com/m3u/features/playlist/impl/TvPlaylistScreenImpl.kt b/features/playlist/src/main/java/com/m3u/features/playlist/impl/TvPlaylistScreenImpl.kt index db7517e09..f1b6788fb 100644 --- a/features/playlist/src/main/java/com/m3u/features/playlist/impl/TvPlaylistScreenImpl.kt +++ b/features/playlist/src/main/java/com/m3u/features/playlist/impl/TvPlaylistScreenImpl.kt @@ -22,8 +22,8 @@ import com.m3u.features.playlist.components.PlaylistDrawerDefaults import com.m3u.features.playlist.components.TvStreamGallery import com.m3u.material.ktx.Edge import com.m3u.material.ktx.blurEdge -import com.m3u.ui.helper.LocalHelper import com.m3u.ui.Sort +import com.m3u.ui.helper.LocalHelper import kotlinx.collections.immutable.ImmutableList @Composable @@ -81,7 +81,7 @@ internal fun TvPlaylistScreenImpl( PlaylistDrawer( drawerState = drawerState, - items = PlaylistDrawerDefaults.rememberStreamItems( + items = PlaylistDrawerDefaults.rememberStreamMenuItems( stream = pressStream, onFavorite = onFavorite, ban = ban,