Skip to content

Commit 695c05b

Browse files
Add confirmation dialog for clearing watch history
1 parent ac34ada commit 695c05b

2 files changed

Lines changed: 49 additions & 18 deletions

File tree

app/src/main/java/org/schabi/newpipe/ui/screens/HistoryScreen.kt

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,14 @@ import androidx.compose.foundation.layout.Column
66
import androidx.compose.foundation.layout.ExperimentalLayoutApi
77
import androidx.compose.foundation.layout.FlowRow
88
import androidx.compose.foundation.layout.Row
9-
import androidx.compose.foundation.layout.Spacer
109
import androidx.compose.foundation.layout.fillMaxWidth
11-
import androidx.compose.foundation.layout.height
1210
import androidx.compose.foundation.layout.padding
1311
import androidx.compose.material.icons.Icons
1412
import androidx.compose.material.icons.automirrored.filled.PlaylistPlay
1513
import androidx.compose.material.icons.filled.ClearAll
1614
import androidx.compose.material.icons.filled.Headphones
1715
import androidx.compose.material.icons.filled.PictureInPicture
16+
import androidx.compose.material3.AlertDialog
1817
import androidx.compose.material3.ExperimentalMaterial3Api
1918
import androidx.compose.material3.ExposedDropdownMenuBox
2019
import androidx.compose.material3.ExposedDropdownMenuDefaults
@@ -24,6 +23,7 @@ import androidx.compose.material3.MenuAnchorType
2423
import androidx.compose.material3.PlainTooltip
2524
import androidx.compose.material3.Surface
2625
import androidx.compose.material3.Text
26+
import androidx.compose.material3.TextButton
2727
import androidx.compose.material3.TextField
2828
import androidx.compose.material3.TooltipBox
2929
import androidx.compose.material3.TooltipDefaults
@@ -93,20 +93,20 @@ private fun HistoryHeader(
9393
onClickPlayAll: () -> Unit,
9494
onClickPopup: () -> Unit
9595
) {
96-
var expanded by remember { mutableStateOf(false) }
97-
val selected = when (sortKey) {
98-
SortKey.MOST_PLAYED -> R.string.title_most_played
99-
SortKey.LAST_PLAYED -> R.string.title_last_played
100-
}
101-
10296
Column(
10397
modifier = Modifier
10498
.fillMaxWidth()
10599
.padding(12.dp),
106-
verticalArrangement = Arrangement.Center,
100+
verticalArrangement = Arrangement.spacedBy(12.dp, Alignment.CenterVertically),
107101
horizontalAlignment = Alignment.CenterHorizontally,
108102
) {
109103
Row(verticalAlignment = Alignment.CenterVertically) {
104+
var expanded by remember { mutableStateOf(false) }
105+
val selected = when (sortKey) {
106+
SortKey.MOST_PLAYED -> R.string.title_most_played
107+
SortKey.LAST_PLAYED -> R.string.title_last_played
108+
}
109+
110110
ExposedDropdownMenuBox(
111111
expanded = expanded,
112112
onExpandedChange = { expanded = it },
@@ -119,7 +119,7 @@ private fun HistoryHeader(
119119
onValueChange = {},
120120
trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) },
121121
colors = ExposedDropdownMenuDefaults.textFieldColors(),
122-
label = { Text(text = stringResource(R.string.history_sort_label)) }
122+
label = { Text(text = stringResource(R.string.history_sort_label)) },
123123
)
124124

125125
ExposedDropdownMenu(
@@ -131,14 +131,14 @@ private fun HistoryHeader(
131131
onClick = {
132132
expanded = false
133133
onSelectSortKey(SortKey.MOST_PLAYED)
134-
}
134+
},
135135
)
136136
DropdownTextMenuItem(
137137
text = R.string.title_last_played,
138138
onClick = {
139139
expanded = false
140140
onSelectSortKey(SortKey.LAST_PLAYED)
141-
}
141+
},
142142
)
143143
}
144144
}
@@ -150,39 +150,69 @@ private fun HistoryHeader(
150150
},
151151
state = rememberTooltipState(),
152152
) {
153-
IconButton(onClick = onClickClear) {
153+
var openClearDialog by remember { mutableStateOf(false) }
154+
155+
IconButton(onClick = { openClearDialog = true }) {
154156
Icon(
155157
imageVector = Icons.Default.ClearAll,
156158
contentDescription = stringResource(R.string.clear_history_description),
157159
)
158160
}
161+
162+
ClearHistoryDialog(openClearDialog, onClickClear, onDismissRequest = { openClearDialog = false })
159163
}
160164
}
161165

162-
Spacer(Modifier.height(12.dp))
163-
164166
FlowRow(horizontalArrangement = Arrangement.spacedBy(4.dp)) {
165167
IconButtonWithLabel(
166168
icon = Icons.Default.Headphones,
167169
label = R.string.controls_background_title,
168-
onClick = onClickBackground
170+
onClick = onClickBackground,
169171
)
170172

171173
IconButtonWithLabel(
172174
icon = Icons.AutoMirrored.Filled.PlaylistPlay,
173175
label = R.string.play_all,
174-
onClick = onClickPlayAll
176+
onClick = onClickPlayAll,
175177
)
176178

177179
IconButtonWithLabel(
178180
icon = Icons.Default.PictureInPicture,
179181
label = R.string.controls_popup_title,
180-
onClick = onClickPopup
182+
onClick = onClickPopup,
181183
)
182184
}
183185
}
184186
}
185187

188+
@Composable
189+
private fun ClearHistoryDialog(
190+
openClearDialog: Boolean,
191+
onClickClear: () -> Unit,
192+
onDismissRequest: () -> Unit
193+
) {
194+
if (openClearDialog) {
195+
AlertDialog(
196+
onDismissRequest = onDismissRequest,
197+
title = { Text(text = stringResource(R.string.delete_view_history_alert)) },
198+
text = { Text(text = stringResource(R.string.delete_view_history_description)) },
199+
confirmButton = {
200+
TextButton(onClick = {
201+
onClickClear()
202+
onDismissRequest()
203+
}) {
204+
Text(stringResource(R.string.delete))
205+
}
206+
},
207+
dismissButton = {
208+
TextButton(onClick = onDismissRequest) {
209+
Text(stringResource(R.string.cancel))
210+
}
211+
},
212+
)
213+
}
214+
}
215+
186216
@Preview(name = "Light mode", uiMode = Configuration.UI_MODE_NIGHT_NO)
187217
@Preview(name = "Dark mode", uiMode = Configuration.UI_MODE_NIGHT_YES)
188218
@Composable

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@
215215
<string name="clear_views_history_title">Clear watch history</string>
216216
<string name="clear_views_history_summary">Deletes the history of played streams and the playback positions</string>
217217
<string name="delete_view_history_alert">Delete entire watch history?</string>
218+
<string name="delete_view_history_description">Your watching history will be permanently erased</string>
218219
<string name="watch_history_deleted">Watch history deleted</string>
219220
<string name="clear_playback_states_title">Delete playback positions</string>
220221
<string name="clear_playback_states_summary">Deletes all playback positions</string>

0 commit comments

Comments
 (0)