Skip to content

Commit e4b8e4c

Browse files
committed
Upgrade material 3 and fix #1346
1 parent 4ce6212 commit e4b8e4c

File tree

86 files changed

+5950
-3952
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+5950
-3952
lines changed

app/build.gradle.kts

-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ dependencies {
134134
implementation(libs.media3.okhttp)
135135

136136
implementation(libs.room.runtime)
137-
annotationProcessor(libs.room.compiler)
138137
ksp(libs.room.compiler)
139138
implementation(libs.room.ktx)
140139

app/src/main/java/com/zionhuang/music/MainActivity.kt

+13-194
Large diffs are not rendered by default.

app/src/main/java/com/zionhuang/music/constants/PreferenceKeys.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,12 @@ val RepeatModeKey = intPreferencesKey("repeatMode")
112112
val SearchSourceKey = stringPreferencesKey("searchSource")
113113

114114
enum class SearchSource {
115-
LOCAL, ONLINE
115+
LOCAL, ONLINE;
116+
117+
fun toggle() = when (this) {
118+
LOCAL -> ONLINE
119+
ONLINE -> LOCAL
120+
}
116121
}
117122

118123
val VisitorDataKey = stringPreferencesKey("visitorData")

app/src/main/java/com/zionhuang/music/ui/component/BottomSheet.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ class BottomSheetState(
250250
isTopReached = false
251251
}
252252

253-
return if (isTopReached && available.y < 0 && source == NestedScrollSource.Drag) {
253+
return if (isTopReached && available.y < 0 && source == NestedScrollSource.UserInput) {
254254
dispatchRawDelta(available.y)
255255
available
256256
} else {
@@ -267,7 +267,7 @@ class BottomSheetState(
267267
isTopReached = consumed.y == 0f && available.y > 0
268268
}
269269

270-
return if (isTopReached && source == NestedScrollSource.Drag) {
270+
return if (isTopReached && source == NestedScrollSource.UserInput) {
271271
dispatchRawDelta(available.y)
272272
available
273273
} else {

app/src/main/java/com/zionhuang/music/ui/component/Dialog.kt

+24-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,32 @@
11
package com.zionhuang.music.ui.component
22

3-
import androidx.compose.foundation.layout.*
3+
import androidx.compose.foundation.layout.Box
4+
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.ColumnScope
6+
import androidx.compose.foundation.layout.Row
7+
import androidx.compose.foundation.layout.RowScope
8+
import androidx.compose.foundation.layout.Spacer
9+
import androidx.compose.foundation.layout.height
10+
import androidx.compose.foundation.layout.padding
411
import androidx.compose.foundation.lazy.LazyColumn
512
import androidx.compose.foundation.lazy.LazyListScope
613
import androidx.compose.foundation.text.KeyboardActions
714
import androidx.compose.foundation.text.KeyboardOptions
8-
import androidx.compose.material3.*
9-
import androidx.compose.runtime.*
15+
import androidx.compose.material3.AlertDialogDefaults
16+
import androidx.compose.material3.ExperimentalMaterial3Api
17+
import androidx.compose.material3.LocalContentColor
18+
import androidx.compose.material3.MaterialTheme
19+
import androidx.compose.material3.ProvideTextStyle
20+
import androidx.compose.material3.Surface
21+
import androidx.compose.material3.Text
22+
import androidx.compose.material3.TextButton
23+
import androidx.compose.material3.TextField
24+
import androidx.compose.material3.TextFieldDefaults
25+
import androidx.compose.runtime.Composable
26+
import androidx.compose.runtime.CompositionLocalProvider
27+
import androidx.compose.runtime.LaunchedEffect
28+
import androidx.compose.runtime.mutableStateOf
29+
import androidx.compose.runtime.remember
1030
import androidx.compose.ui.Alignment
1131
import androidx.compose.ui.Modifier
1232
import androidx.compose.ui.focus.FocusRequester
@@ -171,7 +191,7 @@ fun TextFieldDialog(
171191
placeholder = placeholder,
172192
singleLine = singleLine,
173193
maxLines = maxLines,
174-
colors = TextFieldDefaults.outlinedTextFieldColors(),
194+
colors = TextFieldDefaults.colors(),
175195
keyboardOptions = KeyboardOptions(imeAction = if (singleLine) ImeAction.Done else ImeAction.None),
176196
keyboardActions = KeyboardActions(
177197
onDone = {

app/src/main/java/com/zionhuang/music/ui/component/IconButton.kt

+7-7
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ import androidx.compose.foundation.combinedClickable
1212
import androidx.compose.foundation.interaction.MutableInteractionSource
1313
import androidx.compose.foundation.layout.Box
1414
import androidx.compose.foundation.layout.size
15-
import androidx.compose.material.ripple.rememberRipple
15+
import androidx.compose.foundation.shape.CircleShape
1616
import androidx.compose.material3.IconButtonColors
1717
import androidx.compose.material3.IconButtonDefaults
1818
import androidx.compose.material3.LocalContentColor
1919
import androidx.compose.material3.MaterialTheme
2020
import androidx.compose.material3.minimumInteractiveComponentSize
21-
import androidx.compose.material3.toShape
21+
import androidx.compose.material3.ripple
2222
import androidx.compose.material3.tokens.IconButtonTokens
2323
import androidx.compose.runtime.Composable
2424
import androidx.compose.runtime.CompositionLocalProvider
@@ -47,7 +47,7 @@ fun ResizableIconButton(
4747
colorFilter = ColorFilter.tint(color),
4848
modifier = Modifier
4949
.clickable(
50-
indication = indication ?: rememberRipple(bounded = false),
50+
indication = indication ?: ripple(bounded = false),
5151
interactionSource = remember { MutableInteractionSource() },
5252
enabled = enabled,
5353
onClick = onClick
@@ -72,22 +72,22 @@ fun IconButton(
7272
modifier = modifier
7373
.minimumInteractiveComponentSize()
7474
.size(IconButtonTokens.StateLayerSize)
75-
.clip(IconButtonTokens.StateLayerShape.toShape())
76-
.background(color = colors.containerColor(enabled).value)
75+
.clip(CircleShape)
76+
.background(color = colors.containerColor(enabled))
7777
.combinedClickable(
7878
onClick = onClick,
7979
onLongClick = onLongClick,
8080
enabled = enabled,
8181
role = Role.Button,
8282
interactionSource = interactionSource,
83-
indication = rememberRipple(
83+
indication = ripple(
8484
bounded = false,
8585
radius = IconButtonTokens.StateLayerSize / 2
8686
)
8787
),
8888
contentAlignment = Alignment.Center
8989
) {
90-
val contentColor = colors.contentColor(enabled).value
90+
val contentColor = colors.contentColor(enabled)
9191
CompositionLocalProvider(LocalContentColor provides contentColor, content = content)
9292
}
9393
}

app/src/main/java/com/zionhuang/music/ui/component/NavigationTitle.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ fun NavigationTitle(
3434
.clickable(enabled = onClick != null) {
3535
onClick?.invoke()
3636
}
37-
.padding(horizontal = 12.dp, vertical = 12.dp)
37+
.padding(horizontal = 12.dp, vertical = 16.dp)
3838
) {
3939
Text(
4040
text = title,

app/src/main/java/com/zionhuang/music/ui/component/SearchBar.kt

+25-25
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import androidx.compose.foundation.gestures.awaitEachGesture
99
import androidx.compose.foundation.gestures.awaitFirstDown
1010
import androidx.compose.foundation.gestures.waitForUpOrCancellation
1111
import androidx.compose.foundation.interaction.MutableInteractionSource
12-
import androidx.compose.foundation.layout.Box
12+
import androidx.compose.foundation.interaction.collectIsFocusedAsState
1313
import androidx.compose.foundation.layout.BoxWithConstraints
1414
import androidx.compose.foundation.layout.Column
1515
import androidx.compose.foundation.layout.ColumnScope
@@ -20,7 +20,6 @@ import androidx.compose.foundation.layout.WindowInsets
2020
import androidx.compose.foundation.layout.asPaddingValues
2121
import androidx.compose.foundation.layout.calculateEndPadding
2222
import androidx.compose.foundation.layout.calculateStartPadding
23-
import androidx.compose.foundation.layout.fillMaxHeight
2423
import androidx.compose.foundation.layout.fillMaxWidth
2524
import androidx.compose.foundation.layout.height
2625
import androidx.compose.foundation.layout.offset
@@ -33,19 +32,19 @@ import androidx.compose.foundation.shape.RoundedCornerShape
3332
import androidx.compose.foundation.text.BasicTextField
3433
import androidx.compose.foundation.text.KeyboardActions
3534
import androidx.compose.foundation.text.KeyboardOptions
36-
import androidx.compose.material3.Decoration
3735
import androidx.compose.material3.Divider
3836
import androidx.compose.material3.ExperimentalMaterial3Api
3937
import androidx.compose.material3.LocalTextStyle
40-
import androidx.compose.material3.MaterialTheme
4138
import androidx.compose.material3.SearchBarColors
4239
import androidx.compose.material3.SearchBarDefaults
43-
import androidx.compose.material3.Strings
40+
import androidx.compose.material3.SearchBarDefaults.TonalElevation
4441
import androidx.compose.material3.Surface
4542
import androidx.compose.material3.TextFieldColors
43+
import androidx.compose.material3.TextFieldDefaults
4644
import androidx.compose.material3.TopAppBarScrollBehavior
4745
import androidx.compose.material3.contentColorFor
48-
import androidx.compose.material3.getString
46+
import androidx.compose.material3.internal.Strings
47+
import androidx.compose.material3.internal.getString
4948
import androidx.compose.material3.tokens.MotionTokens
5049
import androidx.compose.runtime.Composable
5150
import androidx.compose.runtime.SideEffect
@@ -74,6 +73,7 @@ import androidx.compose.ui.semantics.stateDescription
7473
import androidx.compose.ui.text.TextStyle
7574
import androidx.compose.ui.text.input.ImeAction
7675
import androidx.compose.ui.text.input.TextFieldValue
76+
import androidx.compose.ui.text.input.VisualTransformation
7777
import androidx.compose.ui.unit.Dp
7878
import androidx.compose.ui.unit.IntOffset
7979
import androidx.compose.ui.unit.dp
@@ -99,7 +99,7 @@ fun SearchBar(
9999
trailingIcon: @Composable (() -> Unit)? = null,
100100
shape: Shape = SearchBarDefaults.inputFieldShape,
101101
colors: SearchBarColors = SearchBarDefaults.colors(),
102-
tonalElevation: Dp = SearchBarDefaults.Elevation,
102+
tonalElevation: Dp = TonalElevation,
103103
windowInsets: WindowInsets = WindowInsets.systemBars,
104104
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
105105
focusRequester: FocusRequester = remember { FocusRequester() },
@@ -244,10 +244,12 @@ private fun SearchBarInputField(
244244
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
245245
focusRequester: FocusRequester = remember { FocusRequester() },
246246
) {
247+
val focused = interactionSource.collectIsFocusedAsState().value
248+
247249
val searchSemantics = getString(Strings.SearchBarSearch)
248250
val suggestionsAvailableSemantics = getString(Strings.SuggestionsAvailable)
249251
val textColor = LocalTextStyle.current.color.takeOrElse {
250-
colors.textColor(enabled).value
252+
colors.textColor(enabled, isError = false, focused = focused)
251253
}
252254

253255
Row(
@@ -294,26 +296,24 @@ private fun SearchBarInputField(
294296
enabled = enabled,
295297
singleLine = true,
296298
textStyle = LocalTextStyle.current.merge(TextStyle(color = textColor)),
297-
cursorBrush = SolidColor(colors.cursorColor(isError = false).value),
299+
cursorBrush = SolidColor(colors.cursorColor(isError = false)),
298300
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),
299301
keyboardActions = KeyboardActions(onSearch = { onSearch(query.text) }),
300302
interactionSource = interactionSource,
301-
decorationBox = { innerTextField ->
302-
Box(
303-
modifier = Modifier.fillMaxHeight(),
304-
contentAlignment = Alignment.CenterStart
305-
) {
306-
if (placeholder != null && query.text.isEmpty()) {
307-
Box(Modifier.alpha(0.8f)) {
308-
Decoration(
309-
contentColor = colors.placeholderColor(enabled).value,
310-
typography = MaterialTheme.typography.bodyLarge,
311-
content = placeholder
312-
)
313-
}
314-
}
315-
innerTextField()
316-
}
303+
decorationBox = @Composable { innerTextField ->
304+
TextFieldDefaults.DecorationBox(
305+
value = query.text,
306+
innerTextField = innerTextField,
307+
enabled = enabled,
308+
singleLine = true,
309+
visualTransformation = VisualTransformation.None,
310+
interactionSource = interactionSource,
311+
placeholder = placeholder,
312+
shape = SearchBarDefaults.inputFieldShape,
313+
colors = colors,
314+
contentPadding = PaddingValues(),
315+
container = {},
316+
)
317317
}
318318
)
319319

app/src/main/java/com/zionhuang/music/ui/component/SortHeader.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import androidx.compose.foundation.layout.Row
66
import androidx.compose.foundation.layout.padding
77
import androidx.compose.foundation.layout.size
88
import androidx.compose.foundation.layout.widthIn
9-
import androidx.compose.material.ripple.rememberRipple
109
import androidx.compose.material3.DropdownMenu
1110
import androidx.compose.material3.DropdownMenuItem
1211
import androidx.compose.material3.Icon
1312
import androidx.compose.material3.MaterialTheme
1413
import androidx.compose.material3.Text
14+
import androidx.compose.material3.ripple
1515
import androidx.compose.runtime.Composable
1616
import androidx.compose.runtime.getValue
1717
import androidx.compose.runtime.mutableStateOf
@@ -49,7 +49,7 @@ inline fun <reified T : Enum<T>> SortHeader(
4949
modifier = Modifier
5050
.clickable(
5151
interactionSource = remember { MutableInteractionSource() },
52-
indication = rememberRipple(bounded = false)
52+
indication = ripple(bounded = false)
5353
) {
5454
menuExpanded = !menuExpanded
5555
}

app/src/main/java/com/zionhuang/music/ui/menu/AlbumMenu.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import androidx.compose.foundation.layout.size
1313
import androidx.compose.foundation.layout.systemBars
1414
import androidx.compose.foundation.lazy.items
1515
import androidx.compose.foundation.shape.CircleShape
16-
import androidx.compose.material3.Divider
16+
import androidx.compose.material3.HorizontalDivider
1717
import androidx.compose.material3.Icon
1818
import androidx.compose.material3.IconButton
1919
import androidx.compose.material3.LocalContentColor
@@ -188,7 +188,7 @@ fun AlbumMenu(
188188
}
189189
)
190190

191-
Divider()
191+
HorizontalDivider()
192192

193193
GridMenu(
194194
contentPadding = PaddingValues(

app/src/main/java/com/zionhuang/music/ui/menu/ArtistMenu.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import androidx.compose.foundation.layout.PaddingValues
55
import androidx.compose.foundation.layout.WindowInsets
66
import androidx.compose.foundation.layout.asPaddingValues
77
import androidx.compose.foundation.layout.systemBars
8-
import androidx.compose.material3.Divider
8+
import androidx.compose.material3.HorizontalDivider
99
import androidx.compose.material3.Icon
1010
import androidx.compose.material3.IconButton
1111
import androidx.compose.material3.LocalContentColor
@@ -63,7 +63,7 @@ fun ArtistMenu(
6363
}
6464
)
6565

66-
Divider()
66+
HorizontalDivider()
6767

6868
GridMenu(
6969
contentPadding = PaddingValues(

app/src/main/java/com/zionhuang/music/ui/menu/PlaylistMenu.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import androidx.compose.foundation.layout.WindowInsets
55
import androidx.compose.foundation.layout.asPaddingValues
66
import androidx.compose.foundation.layout.padding
77
import androidx.compose.foundation.layout.systemBars
8-
import androidx.compose.material3.Divider
8+
import androidx.compose.material3.HorizontalDivider
99
import androidx.compose.material3.Icon
1010
import androidx.compose.material3.MaterialTheme
1111
import androidx.compose.material3.Text
@@ -216,7 +216,7 @@ fun PlaylistMenu(
216216
}
217217
)
218218

219-
Divider()
219+
HorizontalDivider()
220220

221221
GridMenu(
222222
contentPadding = PaddingValues(

app/src/main/java/com/zionhuang/music/ui/menu/SongMenu.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import androidx.compose.foundation.layout.size
1313
import androidx.compose.foundation.layout.systemBars
1414
import androidx.compose.foundation.lazy.items
1515
import androidx.compose.foundation.shape.CircleShape
16-
import androidx.compose.material3.Divider
16+
import androidx.compose.material3.HorizontalDivider
1717
import androidx.compose.material3.Icon
1818
import androidx.compose.material3.IconButton
1919
import androidx.compose.material3.LocalContentColor
@@ -176,7 +176,7 @@ fun SongMenu(
176176
}
177177
)
178178

179-
Divider()
179+
HorizontalDivider()
180180

181181
GridMenu(
182182
contentPadding = PaddingValues(

app/src/main/java/com/zionhuang/music/ui/menu/YouTubeAlbumMenu.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import androidx.compose.foundation.layout.height
1111
import androidx.compose.foundation.layout.padding
1212
import androidx.compose.foundation.layout.systemBars
1313
import androidx.compose.foundation.lazy.items
14-
import androidx.compose.material3.Divider
14+
import androidx.compose.material3.HorizontalDivider
1515
import androidx.compose.material3.Icon
1616
import androidx.compose.material3.IconButton
1717
import androidx.compose.material3.LocalContentColor
@@ -183,7 +183,7 @@ fun YouTubeAlbumMenu(
183183
}
184184
)
185185

186-
Divider()
186+
HorizontalDivider()
187187

188188
GridMenu(
189189
contentPadding = PaddingValues(

app/src/main/java/com/zionhuang/music/ui/menu/YouTubeArtistMenu.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import androidx.compose.foundation.layout.PaddingValues
55
import androidx.compose.foundation.layout.WindowInsets
66
import androidx.compose.foundation.layout.asPaddingValues
77
import androidx.compose.foundation.layout.systemBars
8-
import androidx.compose.material3.Divider
8+
import androidx.compose.material3.HorizontalDivider
99
import androidx.compose.material3.Icon
1010
import androidx.compose.material3.IconButton
1111
import androidx.compose.material3.LocalContentColor
@@ -69,7 +69,7 @@ fun YouTubeArtistMenu(
6969
}
7070
)
7171

72-
Divider()
72+
HorizontalDivider()
7373

7474
GridMenu(
7575
contentPadding = PaddingValues(

0 commit comments

Comments
 (0)