Skip to content

Commit 783d329

Browse files
committed
refactor(ui): add fade edge effect to scrollable lists
1 parent f5a8cbe commit 783d329

14 files changed

Lines changed: 134 additions & 59 deletions

File tree

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/ui/components/Dialogs.kt

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.size
1414
import androidx.compose.foundation.layout.wrapContentHeight
1515
import androidx.compose.foundation.lazy.LazyColumn
1616
import androidx.compose.foundation.lazy.items
17+
import androidx.compose.foundation.lazy.rememberLazyListState
1718
import androidx.compose.foundation.rememberScrollState
1819
import androidx.compose.foundation.text.KeyboardActions
1920
import androidx.compose.foundation.text.KeyboardOptions
@@ -73,7 +74,12 @@ fun SimpleAlertDialog(
7374
)
7475
},
7576
text = {
76-
Column(modifier = Modifier.verticalScroll(rememberScrollState())) {
77+
val scrollState = rememberScrollState()
78+
Column(
79+
modifier = Modifier
80+
.fadeEdge(state = scrollState)
81+
.verticalScroll(state = scrollState)
82+
) {
7783
Text(text = text)
7884
}
7985
},
@@ -113,7 +119,12 @@ fun SimpleAlertDialog(
113119
)
114120
},
115121
text = {
116-
Column(modifier = Modifier.verticalScroll(rememberScrollState())) {
122+
val scrollState = rememberScrollState()
123+
Column(
124+
modifier = Modifier
125+
.fadeEdge(state = scrollState)
126+
.verticalScroll(state = scrollState)
127+
) {
117128
Text(text = text)
118129
}
119130
},
@@ -144,7 +155,12 @@ fun SimpleAlertDialog(
144155
)
145156
},
146157
text = {
147-
Column(modifier = Modifier.verticalScroll(rememberScrollState())) {
158+
val scrollState = rememberScrollState()
159+
Column(
160+
modifier = Modifier
161+
.fadeEdge(state = scrollState)
162+
.verticalScroll(state = scrollState)
163+
) {
148164
text()
149165
}
150166
},
@@ -305,10 +321,12 @@ private fun simpleEditDialogBody(
305321
style = MaterialTheme.typography.titleMedium
306322
)
307323

324+
val scrollState = rememberScrollState()
308325
Column(
309326
modifier = Modifier
327+
.fadeEdge(state = scrollState)
310328
.weight(1f, fill = false)
311-
.verticalScroll(rememberScrollState())
329+
.verticalScroll(state = scrollState)
312330
.fillMaxWidth(),
313331
horizontalAlignment = Alignment.CenterHorizontally
314332
) {
@@ -440,8 +458,13 @@ fun <T> SimpleListDialog(
440458
style = MaterialTheme.typography.titleMedium
441459
)
442460
Spacer(modifier = Modifier.size(16.dp))
461+
462+
val state = rememberLazyListState()
443463
LazyColumn(
444-
modifier = Modifier.weight(1f, fill = false)
464+
modifier = Modifier
465+
.fadeEdge(state = state)
466+
.weight(1f, fill = false),
467+
state = state
445468
) {
446469
items(items) { item ->
447470
SimpleListItem(

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/ui/screens/content/AccountManageScreen.kt

Lines changed: 36 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ fun AccountManageScreen(
141141
modifier = Modifier
142142
.fillMaxHeight()
143143
.padding(all = 12.dp)
144-
.weight(2.5f),
144+
.weight(3f),
145145
updateMicrosoftOperation = { microsoftLoginOperation = it },
146146
updateLocalLoginOperation = { localLoginOperation = it },
147147
updateOtherLoginOperation = { otherLoginOperation = it },
@@ -152,7 +152,7 @@ fun AccountManageScreen(
152152
modifier = Modifier
153153
.fillMaxHeight()
154154
.padding(top = 12.dp, end = 12.dp, bottom = 12.dp)
155-
.weight(7.5f),
155+
.weight(7f),
156156
submitError = submitError,
157157
onMicrosoftChangeSkin = { account, result ->
158158
microsoftChangeSkinOperation = MicrosoftChangeSkinOperation.ImportFile(account, result)
@@ -234,55 +234,50 @@ private fun ServerTypeMenu(
234234
Card(
235235
modifier = modifier
236236
.offset {
237-
IntOffset(
238-
x = xOffset.roundToPx(),
239-
y = 0
240-
)
237+
IntOffset(x = xOffset.roundToPx(), y = 0)
241238
}
242239
.fillMaxHeight(),
243240
shape = MaterialTheme.shapes.extraLarge
244241
) {
245-
Column {
246-
Column(
247-
modifier = Modifier
248-
.padding(all = 12.dp)
249-
.verticalScroll(state = rememberScrollState())
250-
.weight(1f)
242+
Column(
243+
modifier = Modifier
244+
.weight(1f)
245+
.padding(all = 12.dp)
246+
.verticalScroll(state = rememberScrollState())
247+
) {
248+
LoginItem(
249+
modifier = Modifier.fillMaxWidth(),
250+
serverName = stringResource(R.string.account_type_microsoft),
251251
) {
252-
LoginItem(
253-
modifier = Modifier.fillMaxWidth(),
254-
serverName = stringResource(R.string.account_type_microsoft),
255-
) {
256-
if (!isMicrosoftLogging()) {
257-
updateMicrosoftOperation(MicrosoftLoginOperation.Tip)
258-
}
259-
}
260-
LoginItem(
261-
modifier = Modifier.fillMaxWidth(),
262-
serverName = stringResource(R.string.account_type_local)
263-
) {
264-
updateLocalLoginOperation(LocalLoginOperation.Edit)
265-
}
266-
267-
val authServers by AccountsManager.authServersFlow.collectAsState()
268-
authServers.forEach { server ->
269-
ServerItem(
270-
server = server,
271-
onClick = { updateOtherLoginOperation(OtherLoginOperation.OnLogin(server)) },
272-
onDeleteClick = { updateServerOperation(ServerOperation.Delete(server)) }
273-
)
252+
if (!isMicrosoftLogging()) {
253+
updateMicrosoftOperation(MicrosoftLoginOperation.Tip)
274254
}
275255
}
276-
277-
ScalingActionButton(
278-
modifier = Modifier
279-
.padding(PaddingValues(horizontal = 12.dp, vertical = 8.dp))
280-
.fillMaxWidth(),
281-
onClick = { updateServerOperation(ServerOperation.AddNew) }
256+
LoginItem(
257+
modifier = Modifier.fillMaxWidth(),
258+
serverName = stringResource(R.string.account_type_local)
282259
) {
283-
MarqueeText(text = stringResource(R.string.account_add_new_server_button))
260+
updateLocalLoginOperation(LocalLoginOperation.Edit)
261+
}
262+
263+
val authServers by AccountsManager.authServersFlow.collectAsState()
264+
authServers.forEach { server ->
265+
ServerItem(
266+
server = server,
267+
onClick = { updateOtherLoginOperation(OtherLoginOperation.OnLogin(server)) },
268+
onDeleteClick = { updateServerOperation(ServerOperation.Delete(server)) }
269+
)
284270
}
285271
}
272+
273+
ScalingActionButton(
274+
modifier = Modifier
275+
.padding(PaddingValues(horizontal = 12.dp, vertical = 8.dp))
276+
.fillMaxWidth(),
277+
onClick = { updateServerOperation(ServerOperation.AddNew) }
278+
) {
279+
MarqueeText(text = stringResource(R.string.account_add_new_server_button))
280+
}
286281
}
287282
}
288283

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/ui/screens/content/download/DownloadGameScreen.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import com.movtery.zalithlauncher.notification.NotificationManager
4141
import com.movtery.zalithlauncher.ui.components.MarqueeText
4242
import com.movtery.zalithlauncher.ui.components.NotificationCheck
4343
import com.movtery.zalithlauncher.ui.components.SimpleAlertDialog
44+
import com.movtery.zalithlauncher.ui.components.fadeEdge
4445
import com.movtery.zalithlauncher.ui.screens.NestedNavKey
4546
import com.movtery.zalithlauncher.ui.screens.NormalNavKey
4647
import com.movtery.zalithlauncher.ui.screens.content.download.common.GameInstallOperation
@@ -255,8 +256,11 @@ private fun GameInstallOperation(
255256
Text(text = stringResource(R.string.download_install_error_title))
256257
},
257258
text = {
259+
val scrollState = rememberScrollState()
258260
Column(
259-
modifier = Modifier.verticalScroll(rememberScrollState()),
261+
modifier = Modifier
262+
.fadeEdge(state = scrollState)
263+
.verticalScroll(state = scrollState),
260264
verticalArrangement = Arrangement.spacedBy(4.dp)
261265
) {
262266
Text(text = stringResource(R.string.download_install_error_message))

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/ui/screens/content/download/DownloadModPackScreen.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import com.movtery.zalithlauncher.ui.components.MarqueeText
4545
import com.movtery.zalithlauncher.ui.components.NotificationCheck
4646
import com.movtery.zalithlauncher.ui.components.SimpleAlertDialog
4747
import com.movtery.zalithlauncher.ui.components.SimpleEditDialog
48+
import com.movtery.zalithlauncher.ui.components.fadeEdge
4849
import com.movtery.zalithlauncher.ui.screens.NestedNavKey
4950
import com.movtery.zalithlauncher.ui.screens.NormalNavKey
5051
import com.movtery.zalithlauncher.ui.screens.content.download.assets.download.DownloadAssetsScreen
@@ -320,8 +321,11 @@ private fun ModPackInstallOperation(
320321
Text(text = stringResource(R.string.download_install_error_title))
321322
},
322323
text = {
324+
val scrollState = rememberScrollState()
323325
Column(
324-
modifier = Modifier.verticalScroll(rememberScrollState()),
326+
modifier = Modifier
327+
.fadeEdge(state = scrollState)
328+
.verticalScroll(state = scrollState),
325329
verticalArrangement = Arrangement.spacedBy(4.dp)
326330
) {
327331
Text(text = stringResource(R.string.download_install_error_message))

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/ui/screens/content/download/assets/elements/_Download.Single.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import com.movtery.zalithlauncher.game.version.installed.Version
4343
import com.movtery.zalithlauncher.game.version.installed.VersionsManager
4444
import com.movtery.zalithlauncher.ui.components.MarqueeText
4545
import com.movtery.zalithlauncher.ui.components.SimpleAlertDialog
46+
import com.movtery.zalithlauncher.ui.components.fadeEdge
4647
import com.movtery.zalithlauncher.ui.components.itemLayoutColor
4748
import com.movtery.zalithlauncher.ui.screens.content.elements.CommonVersionInfoLayout
4849

@@ -207,9 +208,9 @@ private fun ChoseGameVersionLayout(
207208

208209
LazyColumn(
209210
modifier = Modifier
210-
.fillMaxWidth()
211-
.padding(vertical = 4.dp),
212-
contentPadding = PaddingValues(horizontal = 4.dp),
211+
.fadeEdge(state = listState)
212+
.fillMaxWidth(),
213+
contentPadding = PaddingValues(all = 4.dp),
213214
state = listState
214215
) {
215216
items(versions) { version ->

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/ui/screens/content/elements/AccountElements.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ import com.movtery.zalithlauncher.ui.components.IconTextButton
9595
import com.movtery.zalithlauncher.ui.components.MarqueeText
9696
import com.movtery.zalithlauncher.ui.components.SimpleAlertDialog
9797
import com.movtery.zalithlauncher.ui.components.SimpleEditDialog
98+
import com.movtery.zalithlauncher.ui.components.fadeEdge
9899
import com.movtery.zalithlauncher.ui.components.itemLayoutColor
99100
import com.movtery.zalithlauncher.utils.animation.getAnimateTween
100101
import com.movtery.zalithlauncher.utils.logging.Logger.lError
@@ -658,10 +659,12 @@ fun OtherServerLoginDialog(
658659
)
659660
Spacer(modifier = Modifier.size(16.dp))
660661

662+
val scrollState = rememberScrollState()
661663
Column(
662664
modifier = Modifier
665+
.fadeEdge(state = scrollState)
663666
.weight(1f, fill = false)
664-
.verticalScroll(rememberScrollState())
667+
.verticalScroll(state = scrollState)
665668
.fillMaxWidth(),
666669
horizontalAlignment = Alignment.CenterHorizontally
667670
) {
@@ -802,8 +805,12 @@ fun SelectSkinModelDialog(
802805
style = MaterialTheme.typography.titleMedium
803806
)
804807

808+
val scrollState = rememberScrollState()
805809
Column(
806-
modifier = Modifier.weight(1f, fill = false).verticalScroll(rememberScrollState()),
810+
modifier = Modifier
811+
.fadeEdge(state = scrollState)
812+
.weight(1f, fill = false)
813+
.verticalScroll(state = scrollState),
807814
horizontalAlignment = Alignment.CenterHorizontally
808815
) {
809816
Text(

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/ui/screens/content/elements/CommonElements.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.compose.foundation.layout.size
2020
import androidx.compose.foundation.layout.width
2121
import androidx.compose.foundation.lazy.LazyColumn
2222
import androidx.compose.foundation.lazy.items
23+
import androidx.compose.foundation.lazy.rememberLazyListState
2324
import androidx.compose.foundation.shape.RoundedCornerShape
2425
import androidx.compose.material.icons.Icons
2526
import androidx.compose.material.icons.filled.Add
@@ -62,6 +63,7 @@ import com.movtery.zalithlauncher.coroutine.TaskSystem
6263
import com.movtery.zalithlauncher.coroutine.TitledTask
6364
import com.movtery.zalithlauncher.ui.components.IconTextButton
6465
import com.movtery.zalithlauncher.ui.components.MarqueeText
66+
import com.movtery.zalithlauncher.ui.components.fadeEdge
6567
import com.movtery.zalithlauncher.utils.animation.getAnimateTween
6668
import com.movtery.zalithlauncher.utils.platform.bytesToMB
6769
import com.movtery.zalithlauncher.utils.platform.getTotalMemory
@@ -226,8 +228,12 @@ fun TitleTaskFlowDialog(
226228
)
227229
Spacer(modifier = Modifier.size(16.dp))
228230

231+
val scrollState = rememberLazyListState()
229232
LazyColumn(
230-
modifier = Modifier.weight(1f, fill = false)
233+
modifier = Modifier
234+
.fadeEdge(state = scrollState)
235+
.weight(1f, fill = false),
236+
state = scrollState
231237
) {
232238
items(tasks) { task ->
233239
InstallingTaskItem(

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/ui/screens/content/elements/VersionsManageElements.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ import com.movtery.zalithlauncher.ui.components.SimpleEditDialog
6868
import com.movtery.zalithlauncher.ui.components.SimpleTaskDialog
6969
import com.movtery.zalithlauncher.ui.components.TextRailItem
7070
import com.movtery.zalithlauncher.ui.components.desaturate
71+
import com.movtery.zalithlauncher.ui.components.fadeEdge
7172
import com.movtery.zalithlauncher.ui.components.itemLayoutColor
7273
import com.movtery.zalithlauncher.ui.components.secondaryContainerDrawerItemColors
7374
import com.movtery.zalithlauncher.utils.animation.getAnimateTween
@@ -585,7 +586,12 @@ fun CleanupOperation(
585586
)
586587
},
587588
text = {
588-
Column(modifier = Modifier.verticalScroll(rememberScrollState())) {
589+
val scrollState = rememberScrollState()
590+
Column(
591+
modifier = Modifier
592+
.fadeEdge(state = scrollState)
593+
.verticalScroll(state = scrollState)
594+
) {
589595
Text(stringResource(R.string.versions_manage_cleanup_failed_files))
590596
error.files.forEach { file ->
591597
Text(file.absolutePath)

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/ui/screens/content/settings/ControlManageScreen.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -897,10 +897,12 @@ private fun CreateNewLayoutDialog(
897897
style = MaterialTheme.typography.titleMedium
898898
)
899899

900+
val scrollState = rememberScrollState()
900901
Column(
901902
modifier = Modifier
903+
.fadeEdge(state = scrollState)
902904
.weight(1f, fill = false)
903-
.verticalScroll(rememberScrollState())
905+
.verticalScroll(state = scrollState)
904906
.fillMaxWidth(),
905907
horizontalAlignment = Alignment.CenterHorizontally
906908
) {

ZalithLauncher/src/main/java/com/movtery/zalithlauncher/ui/screens/content/versions/elements/ModsScreenElements.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import androidx.compose.foundation.layout.size
1717
import androidx.compose.foundation.layout.wrapContentHeight
1818
import androidx.compose.foundation.lazy.LazyColumn
1919
import androidx.compose.foundation.lazy.items
20+
import androidx.compose.foundation.lazy.rememberLazyListState
2021
import androidx.compose.foundation.rememberScrollState
2122
import androidx.compose.foundation.shape.RoundedCornerShape
2223
import androidx.compose.foundation.verticalScroll
@@ -53,6 +54,7 @@ import com.movtery.zalithlauncher.game.version.mod.update.ModUpdater
5354
import com.movtery.zalithlauncher.ui.components.MarqueeText
5455
import com.movtery.zalithlauncher.ui.components.ProgressDialog
5556
import com.movtery.zalithlauncher.ui.components.SimpleAlertDialog
57+
import com.movtery.zalithlauncher.ui.components.fadeEdge
5658
import com.movtery.zalithlauncher.ui.components.itemLayoutColor
5759
import com.movtery.zalithlauncher.ui.screens.content.download.assets.elements.AssetsIcon
5860
import com.movtery.zalithlauncher.ui.screens.content.elements.TitleTaskFlowDialog
@@ -188,8 +190,11 @@ fun ModsUpdateOperation(
188190
Text(text = stringResource(R.string.mods_update_failed))
189191
},
190192
text = {
193+
val scrollState = rememberScrollState()
191194
Column(
192-
modifier = Modifier.verticalScroll(rememberScrollState()),
195+
modifier = Modifier
196+
.fadeEdge(state = scrollState)
197+
.verticalScroll(state = scrollState),
193198
verticalArrangement = Arrangement.spacedBy(4.dp)
194199
) {
195200
Text(text = stringResource(R.string.mods_update_failed_text))
@@ -272,8 +277,12 @@ private fun ModsUpdateListDialog(
272277
)
273278
Spacer(modifier = Modifier.size(16.dp))
274279

280+
val scrollState = rememberLazyListState()
275281
LazyColumn(
276-
modifier = Modifier.weight(1f, fill = false),
282+
modifier = Modifier
283+
.fadeEdge(state = scrollState)
284+
.weight(1f, fill = false),
285+
state = scrollState,
277286
verticalArrangement = Arrangement.spacedBy(12.dp),
278287
contentPadding = PaddingValues(vertical = 12.dp)
279288
) {

0 commit comments

Comments
 (0)