@@ -7,69 +7,42 @@ import androidx.compose.foundation.layout.FlowRow
77import androidx.compose.foundation.layout.Row
88import androidx.compose.foundation.layout.fillMaxWidth
99import androidx.compose.foundation.layout.padding
10- import androidx.compose.material.icons.Icons
11- import androidx.compose.material.icons.automirrored.filled.PlaylistPlay
12- import androidx.compose.material.icons.filled.ClearAll
13- import androidx.compose.material.icons.filled.Headphones
14- import androidx.compose.material.icons.filled.PictureInPicture
15- import androidx.compose.material3.AlertDialog
16- import androidx.compose.material3.Icon
1710import androidx.compose.material3.SegmentedButton
1811import androidx.compose.material3.SegmentedButtonDefaults
1912import androidx.compose.material3.SingleChoiceSegmentedButtonRow
2013import androidx.compose.material3.Surface
2114import androidx.compose.material3.Text
22- import androidx.compose.material3.TextButton
2315import androidx.compose.runtime.Composable
2416import androidx.compose.runtime.getValue
25- import androidx.compose.runtime.mutableStateOf
26- import androidx.compose.runtime.remember
27- import androidx.compose.runtime.setValue
2817import androidx.compose.ui.Alignment
2918import androidx.compose.ui.Modifier
30- import androidx.compose.ui.platform.LocalContext
3119import androidx.compose.ui.res.stringResource
3220import androidx.compose.ui.tooling.preview.Preview
3321import androidx.compose.ui.unit.dp
3422import androidx.lifecycle.compose.collectAsStateWithLifecycle
3523import androidx.lifecycle.viewmodel.compose.viewModel
3624import androidx.paging.compose.collectAsLazyPagingItems
3725import org.schabi.newpipe.R
38- import org.schabi.newpipe.ktx.findFragmentActivity
3926import org.schabi.newpipe.local.history.HistoryViewModel
4027import org.schabi.newpipe.local.history.SortKey
28+ import org.schabi.newpipe.player.playqueue.PlayQueue
4129import org.schabi.newpipe.player.playqueue.SinglePlayQueue
42- import org.schabi.newpipe.ui.components.common.IconButtonWithLabel
30+ import org.schabi.newpipe.ui.components.common.PlaybackControlButtons
4331import org.schabi.newpipe.ui.components.items.ItemList
4432import org.schabi.newpipe.ui.theme.AppTheme
45- import org.schabi.newpipe.util.NavigationHelper
4633
4734@Composable
4835fun HistoryScreen (viewModel : HistoryViewModel = viewModel()) {
49- val context = LocalContext .current
5036 val sortKey by viewModel.sortKey.collectAsStateWithLifecycle()
5137 val historyItems = viewModel.historyItems.collectAsLazyPagingItems()
52-
5338 val streams = historyItems.itemSnapshotList.mapNotNull { it?.toStreamInfoItem() }
5439 val queue = SinglePlayQueue (streams, 0 )
55- val onClickBackground = {
56- NavigationHelper .playOnBackgroundPlayer(context, queue, false )
57- }
58- val onClickPopup = {
59- NavigationHelper .playOnPopupPlayer(context, queue, false )
60- }
61- val onClickPlayAll = {
62- NavigationHelper .playOnMainPlayer(context.findFragmentActivity(), queue)
63- }
6440
6541 ItemList (historyItems, header = {
6642 HistoryHeader (
6743 sortKey = sortKey,
6844 onSelectSortKey = viewModel::updateOrder,
69- onClickClear = viewModel::deleteWatchHistory,
70- onClickBackground = onClickBackground,
71- onClickPlayAll = onClickPlayAll,
72- onClickPopup = onClickPopup,
45+ queue = queue
7346 )
7447 })
7548}
@@ -78,11 +51,8 @@ fun HistoryScreen(viewModel: HistoryViewModel = viewModel()) {
7851@Composable
7952private fun HistoryHeader (
8053 sortKey : SortKey ,
54+ queue : PlayQueue ,
8155 onSelectSortKey : (SortKey ) -> Unit ,
82- onClickClear : () -> Unit ,
83- onClickBackground : () -> Unit ,
84- onClickPlayAll : () -> Unit ,
85- onClickPopup : () -> Unit
8656) {
8757 FlowRow (
8858 modifier = Modifier
@@ -93,7 +63,7 @@ private fun HistoryHeader(
9363 ) {
9464 HistorySortRow (sortKey, onSelectSortKey)
9565
96- HistoryButtons (onClickClear, onClickBackground, onClickPlayAll, onClickPopup )
66+ PlaybackControlButtons (queue )
9767 }
9868}
9969
@@ -123,75 +93,13 @@ private fun HistorySortRow(
12393 }
12494}
12595
126- @OptIn(ExperimentalLayoutApi ::class )
127- @Composable
128- private fun HistoryButtons (
129- onClickClear : () -> Unit ,
130- onClickBackground : () -> Unit ,
131- onClickPlayAll : () -> Unit ,
132- onClickPopup : () -> Unit
133- ) {
134- FlowRow (horizontalArrangement = Arrangement .spacedBy(4 .dp, Alignment .CenterHorizontally )) {
135- IconButtonWithLabel (
136- icon = Icons .Default .Headphones ,
137- label = R .string.controls_background_title,
138- onClick = onClickBackground,
139- )
140-
141- IconButtonWithLabel (
142- icon = Icons .AutoMirrored .Filled .PlaylistPlay ,
143- label = R .string.play_all,
144- onClick = onClickPlayAll,
145- )
146-
147- IconButtonWithLabel (
148- icon = Icons .Default .PictureInPicture ,
149- label = R .string.controls_popup_title,
150- onClick = onClickPopup,
151- )
152-
153- var openClearDialog by remember { mutableStateOf(false ) }
154-
155- TextButton (onClick = { openClearDialog = true }) {
156- Row (
157- horizontalArrangement = Arrangement .spacedBy(4 .dp),
158- verticalAlignment = Alignment .CenterVertically ,
159- ) {
160- Icon (imageVector = Icons .Default .ClearAll , contentDescription = null )
161- Text (text = stringResource(R .string.clear))
162- }
163- }
164-
165- if (openClearDialog) {
166- AlertDialog (
167- onDismissRequest = { openClearDialog = false },
168- title = { Text (text = stringResource(R .string.delete_view_history_alert)) },
169- text = { Text (text = stringResource(R .string.delete_view_history_description)) },
170- confirmButton = {
171- TextButton (onClick = {
172- onClickClear()
173- openClearDialog = false
174- }) {
175- Text (stringResource(R .string.delete))
176- }
177- },
178- dismissButton = {
179- TextButton (onClick = { openClearDialog = false }) {
180- Text (stringResource(R .string.cancel))
181- }
182- },
183- )
184- }
185- }
186- }
187-
18896@Preview(name = " Light mode" , uiMode = Configuration .UI_MODE_NIGHT_NO )
18997@Preview(name = " Dark mode" , uiMode = Configuration .UI_MODE_NIGHT_YES )
19098@Composable
19199private fun HistoryHeaderPreview () {
192100 AppTheme {
193101 Surface {
194- HistoryHeader (SortKey .MOST_PLAYED , {}, {}, {}, {}, {})
102+ HistoryHeader (SortKey .MOST_PLAYED , SinglePlayQueue ( listOf (), 0 )) {}
195103 }
196104 }
197105}
0 commit comments