@@ -15,14 +15,15 @@ import androidx.compose.foundation.layout.Box
1515import androidx.compose.foundation.layout.Column
1616import androidx.compose.foundation.layout.PaddingValues
1717import androidx.compose.foundation.layout.WindowInsets
18- import androidx.compose.foundation.layout.WindowInsetsSides
1918import androidx.compose.foundation.layout.asPaddingValues
2019import androidx.compose.foundation.layout.fillMaxWidth
2120import androidx.compose.foundation.layout.ime
2221import androidx.compose.foundation.layout.padding
22+ import androidx.compose.foundation.lazy.LazyColumn
2323import androidx.compose.material.icons.Icons
2424import androidx.compose.material.icons.rounded.Save
2525import androidx.compose.material3.FloatingActionButton
26+ import androidx.compose.material3.MaterialTheme
2627import androidx.compose.runtime.Composable
2728import androidx.compose.runtime.derivedStateOf
2829import androidx.compose.runtime.getValue
@@ -54,10 +55,12 @@ import com.m3u.material.components.Background
5455import com.m3u.material.components.Icon
5556import com.m3u.material.components.PlaceholderField
5657import com.m3u.material.ktx.checkPermissionOrRationale
57- import com.m3u.material.ktx.split
58+ import com.m3u.material.model.LocalHazeState
5859import com.m3u.material.model.LocalSpacing
5960import com.m3u.ui.helper.LocalHelper
6061import com.m3u.ui.helper.Metadata
62+ import dev.chrisbanes.haze.HazeStyle
63+ import dev.chrisbanes.haze.haze
6164import kotlinx.datetime.LocalDateTime
6265
6366@Composable
@@ -144,60 +147,72 @@ private fun PlaylistConfigurationScreen(
144147 }
145148 Background (modifier) {
146149 Box {
147- val (outer, inner) = contentPadding split WindowInsetsSides .Top
148- Column (
150+ LazyColumn (
149151 verticalArrangement = Arrangement .spacedBy(spacing.small),
152+ contentPadding = contentPadding,
150153 modifier = Modifier
151- .padding(outer)
154+ .haze(
155+ LocalHazeState .current,
156+ HazeStyle (MaterialTheme .colorScheme.surface)
157+ )
152158 .padding(spacing.medium)
153159 ) {
154- PlaceholderField (
155- text = title,
156- placeholder = stringResource(string.feat_playlist_configuration_title).title(),
157- onValueChange = { title = it },
158- )
159- PlaceholderField (
160- text = userAgent,
161- placeholder = stringResource(string.feat_playlist_configuration_user_agent).title(),
162- onValueChange = { userAgent = it }
163- )
164- AnimatedVisibility (playlist.epgUrlsOrXtreamXmlUrl().isNotEmpty()) {
165- Column (
166- verticalArrangement = Arrangement .spacedBy(spacing.small)
167- ) {
168- SyncProgrammesButton (
169- subscribingOrRefreshing = subscribingOrRefreshing,
170- expired = expired,
171- onSyncProgrammes = onSyncProgrammes
172- )
173- AutoSyncProgrammesButton (
174- checked = playlist.autoRefreshProgrammes,
175- onCheckedChange = onUpdatePlaylistAutoRefreshProgrammes
176- )
160+ item {
161+ PlaceholderField (
162+ text = title,
163+ placeholder = stringResource(string.feat_playlist_configuration_title).title(),
164+ onValueChange = { title = it },
165+ )
166+ }
167+
168+ item {
169+ PlaceholderField (
170+ text = userAgent,
171+ placeholder = stringResource(string.feat_playlist_configuration_user_agent).title(),
172+ onValueChange = { userAgent = it }
173+ )
174+ }
175+
176+ item {
177+ AnimatedVisibility (playlist.epgUrlsOrXtreamXmlUrl().isNotEmpty()) {
178+ Column (
179+ verticalArrangement = Arrangement .spacedBy(spacing.small)
180+ ) {
181+ SyncProgrammesButton (
182+ subscribingOrRefreshing = subscribingOrRefreshing,
183+ expired = expired,
184+ onSyncProgrammes = onSyncProgrammes
185+ )
186+ AutoSyncProgrammesButton (
187+ checked = playlist.autoRefreshProgrammes,
188+ onCheckedChange = onUpdatePlaylistAutoRefreshProgrammes
189+ )
190+ }
177191 }
178192 }
193+
179194 if (playlist.source == DataSource .M3U ) {
180195 EpgManifestGallery (
181196 playlistUrl = playlist.url,
182197 manifest = manifest,
183- contentPadding = inner,
184- onUpdateEpgPlaylist = onUpdateEpgPlaylist,
185- modifier = Modifier .fillMaxWidth()
198+ onUpdateEpgPlaylist = onUpdateEpgPlaylist
186199 )
187200 }
188201
189202 if (playlist.source == DataSource .Xtream ) {
190- XtreamPanel (
191- info = xtreamUserInfo,
192- modifier = Modifier .fillMaxWidth()
193- )
203+ item {
204+ XtreamPanel (
205+ info = xtreamUserInfo,
206+ modifier = Modifier .fillMaxWidth()
207+ )
208+ }
194209 }
195210 }
196211
197212 val fabBottomPadding by animateDpAsState(
198213 targetValue = maxOf(
199214 WindowInsets .ime.asPaddingValues().calculateBottomPadding(),
200- inner .calculateBottomPadding()
215+ contentPadding .calculateBottomPadding()
201216 ),
202217 label = " apply changes bottom padding"
203218 )
0 commit comments