1
0
mirror of https://github.com/TeamNewPipe/NewPipe synced 2025-01-24 07:56:57 +00:00

Improved component organisation

This commit is contained in:
Isira Seneviratne 2024-07-28 07:34:18 +05:30
parent d7de38c79c
commit b443abbd8b
14 changed files with 39 additions and 37 deletions

View File

@ -7,8 +7,8 @@ import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import org.schabi.newpipe.compose.playlist.Playlist import org.schabi.newpipe.ui.screens.PlaylistScreen
import org.schabi.newpipe.compose.theme.AppTheme import org.schabi.newpipe.ui.theme.AppTheme
import org.schabi.newpipe.util.KEY_SERVICE_ID import org.schabi.newpipe.util.KEY_SERVICE_ID
import org.schabi.newpipe.util.KEY_URL import org.schabi.newpipe.util.KEY_URL
@ -21,7 +21,7 @@ class PlaylistFragment : Fragment() {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent { setContent {
AppTheme { AppTheme {
Playlist() PlaylistScreen()
} }
} }
} }

View File

@ -4,10 +4,10 @@ import androidx.paging.PagingSource
import androidx.paging.PagingState import androidx.paging.PagingState
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.schabi.newpipe.compose.playlist.PlaylistInfo
import org.schabi.newpipe.extractor.NewPipe import org.schabi.newpipe.extractor.NewPipe
import org.schabi.newpipe.extractor.Page import org.schabi.newpipe.extractor.Page
import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.extractor.stream.StreamInfoItem
import org.schabi.newpipe.ui.components.playlist.PlaylistInfo
import org.schabi.newpipe.extractor.playlist.PlaylistInfo as ExtractorPlaylistInfo import org.schabi.newpipe.extractor.playlist.PlaylistInfo as ExtractorPlaylistInfo
class PlaylistItemsSource( class PlaylistItemsSource(

View File

@ -1,8 +1,9 @@
package org.schabi.newpipe.compose.util package org.schabi.newpipe.ui.components.common
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.window.core.layout.WindowWidthSizeClass import androidx.window.core.layout.WindowWidthSizeClass
import org.schabi.newpipe.R import org.schabi.newpipe.R
@ -10,17 +11,16 @@ import org.schabi.newpipe.info_list.ItemViewMode
@Composable @Composable
fun determineItemViewMode(): ItemViewMode { fun determineItemViewMode(): ItemViewMode {
val context = LocalContext.current val listMode = PreferenceManager.getDefaultSharedPreferences(LocalContext.current)
val listMode = PreferenceManager.getDefaultSharedPreferences(context)
.getString( .getString(
context.getString(R.string.list_view_mode_key), stringResource(R.string.list_view_mode_key),
context.getString(R.string.list_view_mode_value) stringResource(R.string.list_view_mode_value)
) )
return when (listMode) { return when (listMode) {
context.getString(R.string.list_view_mode_list_key) -> ItemViewMode.LIST stringResource(R.string.list_view_mode_list_key) -> ItemViewMode.LIST
context.getString(R.string.list_view_mode_grid_key) -> ItemViewMode.GRID stringResource(R.string.list_view_mode_grid_key) -> ItemViewMode.GRID
context.getString(R.string.list_view_mode_card_key) -> ItemViewMode.CARD stringResource(R.string.list_view_mode_card_key) -> ItemViewMode.CARD
else -> { else -> {
// Auto mode - evaluate whether to use Grid based on screen real estate. // Auto mode - evaluate whether to use Grid based on screen real estate.
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass

View File

@ -1,4 +1,4 @@
package org.schabi.newpipe.compose.playlist package org.schabi.newpipe.ui.components.playlist
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.animation.animateContentSize import androidx.compose.animation.animateContentSize
@ -35,12 +35,12 @@ import androidx.compose.ui.unit.dp
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import coil.compose.AsyncImage import coil.compose.AsyncImage
import org.schabi.newpipe.R import org.schabi.newpipe.R
import org.schabi.newpipe.compose.common.DescriptionText
import org.schabi.newpipe.compose.theme.AppTheme
import org.schabi.newpipe.error.ErrorUtil import org.schabi.newpipe.error.ErrorUtil
import org.schabi.newpipe.extractor.ServiceList import org.schabi.newpipe.extractor.ServiceList
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper
import org.schabi.newpipe.extractor.stream.Description import org.schabi.newpipe.extractor.stream.Description
import org.schabi.newpipe.ui.components.common.DescriptionText
import org.schabi.newpipe.ui.theme.AppTheme
import org.schabi.newpipe.util.Localization import org.schabi.newpipe.util.Localization
import org.schabi.newpipe.util.NavigationHelper import org.schabi.newpipe.util.NavigationHelper
import org.schabi.newpipe.util.image.ImageStrategy import org.schabi.newpipe.util.image.ImageStrategy

View File

@ -1,4 +1,4 @@
package org.schabi.newpipe.compose.playlist package org.schabi.newpipe.ui.components.playlist
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import org.schabi.newpipe.extractor.Image import org.schabi.newpipe.extractor.Image

View File

@ -1,4 +1,4 @@
package org.schabi.newpipe.compose.stream package org.schabi.newpipe.ui.components.stream
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
@ -19,8 +19,8 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import org.schabi.newpipe.compose.theme.AppTheme
import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.extractor.stream.StreamInfoItem
import org.schabi.newpipe.ui.theme.AppTheme
@OptIn(ExperimentalFoundationApi::class) @OptIn(ExperimentalFoundationApi::class)
@Composable @Composable

View File

@ -1,4 +1,4 @@
package org.schabi.newpipe.compose.stream package org.schabi.newpipe.ui.components.stream
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
@ -16,8 +16,8 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import org.schabi.newpipe.compose.theme.AppTheme
import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.extractor.stream.StreamInfoItem
import org.schabi.newpipe.ui.theme.AppTheme
@OptIn(ExperimentalFoundationApi::class) @OptIn(ExperimentalFoundationApi::class)
@Composable @Composable

View File

@ -1,4 +1,4 @@
package org.schabi.newpipe.compose.stream package org.schabi.newpipe.ui.components.stream
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.LazyListScope
@ -18,9 +18,9 @@ import androidx.fragment.app.FragmentActivity
import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.LazyPagingItems
import my.nanihadesuka.compose.LazyColumnScrollbar import my.nanihadesuka.compose.LazyColumnScrollbar
import my.nanihadesuka.compose.LazyVerticalGridScrollbar import my.nanihadesuka.compose.LazyVerticalGridScrollbar
import org.schabi.newpipe.compose.util.determineItemViewMode
import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.extractor.stream.StreamInfoItem
import org.schabi.newpipe.info_list.ItemViewMode import org.schabi.newpipe.info_list.ItemViewMode
import org.schabi.newpipe.ui.components.common.determineItemViewMode
import org.schabi.newpipe.util.NavigationHelper import org.schabi.newpipe.util.NavigationHelper
@Composable @Composable

View File

@ -1,4 +1,4 @@
package org.schabi.newpipe.compose.stream package org.schabi.newpipe.ui.components.stream
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
@ -20,8 +20,8 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import org.schabi.newpipe.compose.theme.AppTheme
import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.extractor.stream.StreamInfoItem
import org.schabi.newpipe.ui.theme.AppTheme
@OptIn(ExperimentalFoundationApi::class) @OptIn(ExperimentalFoundationApi::class)
@Composable @Composable

View File

@ -1,4 +1,4 @@
package org.schabi.newpipe.compose.stream package org.schabi.newpipe.ui.components.stream
import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.DropdownMenuItem

View File

@ -1,4 +1,4 @@
package org.schabi.newpipe.compose.stream package org.schabi.newpipe.ui.components.stream
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box

View File

@ -1,4 +1,4 @@
package org.schabi.newpipe.compose.stream package org.schabi.newpipe.ui.components.stream
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable

View File

@ -1,4 +1,4 @@
package org.schabi.newpipe.compose.playlist package org.schabi.newpipe.ui.screens
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.GridItemSpan
@ -15,25 +15,27 @@ import androidx.paging.PagingData
import androidx.paging.compose.collectAsLazyPagingItems import androidx.paging.compose.collectAsLazyPagingItems
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOf
import org.schabi.newpipe.compose.common.LoadingIndicator
import org.schabi.newpipe.compose.stream.StreamInfoItem
import org.schabi.newpipe.compose.stream.StreamList
import org.schabi.newpipe.compose.theme.AppTheme
import org.schabi.newpipe.extractor.stream.Description import org.schabi.newpipe.extractor.stream.Description
import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.extractor.stream.StreamInfoItem
import org.schabi.newpipe.extractor.stream.StreamType import org.schabi.newpipe.extractor.stream.StreamType
import org.schabi.newpipe.ui.components.common.LoadingIndicator
import org.schabi.newpipe.ui.components.playlist.PlaylistHeader
import org.schabi.newpipe.ui.components.playlist.PlaylistInfo
import org.schabi.newpipe.ui.components.stream.StreamInfoItem
import org.schabi.newpipe.ui.components.stream.StreamList
import org.schabi.newpipe.ui.theme.AppTheme
import org.schabi.newpipe.viewmodels.PlaylistViewModel import org.schabi.newpipe.viewmodels.PlaylistViewModel
@Composable @Composable
fun Playlist(playlistViewModel: PlaylistViewModel = viewModel()) { fun PlaylistScreen(playlistViewModel: PlaylistViewModel = viewModel()) {
Surface(color = MaterialTheme.colorScheme.background) { Surface(color = MaterialTheme.colorScheme.background) {
val playlistInfo by playlistViewModel.playlistInfo.collectAsState() val playlistInfo by playlistViewModel.playlistInfo.collectAsState()
Playlist(playlistInfo, playlistViewModel.streamItems) PlaylistScreen(playlistInfo, playlistViewModel.streamItems)
} }
} }
@Composable @Composable
private fun Playlist( private fun PlaylistScreen(
playlistInfo: PlaylistInfo?, playlistInfo: PlaylistInfo?,
streamFlow: Flow<PagingData<StreamInfoItem>> streamFlow: Flow<PagingData<StreamInfoItem>>
) { ) {
@ -75,7 +77,7 @@ private fun PlaylistPreview() {
AppTheme { AppTheme {
Surface(color = MaterialTheme.colorScheme.background) { Surface(color = MaterialTheme.colorScheme.background) {
Playlist(playlistInfo, streamFlow) PlaylistScreen(playlistInfo, streamFlow)
} }
} }
} }

View File

@ -14,10 +14,10 @@ import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.stateIn
import org.schabi.newpipe.compose.playlist.PlaylistInfo
import org.schabi.newpipe.extractor.NewPipe import org.schabi.newpipe.extractor.NewPipe
import org.schabi.newpipe.extractor.stream.Description import org.schabi.newpipe.extractor.stream.Description
import org.schabi.newpipe.paging.PlaylistItemsSource import org.schabi.newpipe.paging.PlaylistItemsSource
import org.schabi.newpipe.ui.components.playlist.PlaylistInfo
import org.schabi.newpipe.util.KEY_SERVICE_ID import org.schabi.newpipe.util.KEY_SERVICE_ID
import org.schabi.newpipe.util.KEY_URL import org.schabi.newpipe.util.KEY_URL
import org.schabi.newpipe.util.NO_SERVICE_ID import org.schabi.newpipe.util.NO_SERVICE_ID