Fix NPE in update download dialog when progress is null
The download progress indicator passed a deferred lambda
`progress = { progress!! }` reading UpdateState.downloadProgress
(MutableState<Float?>). Material3 invokes the lambda during
layout/draw, outside the composition snapshot that guarded it, so it
re-read the live state. ApkDownloader sets the value to null when the
response has no content length (total <= 0), and it can also flip while
the screen is being torn down, causing the `!!` to throw NPE.
Capture the value into an immutable local before branching so the
lambda closes over a non-null Float instead of re-reading live state.
This commit is contained in:
@@ -665,16 +665,17 @@ class MainActivity :
|
||||
)
|
||||
} else {
|
||||
val progress by UpdateState.downloadProgress
|
||||
val progressValue = progress
|
||||
Column {
|
||||
if (progress != null) {
|
||||
Text("${stringResource(R.string.downloading)} ${(progress!! * 100).toInt()}%")
|
||||
if (progressValue != null) {
|
||||
Text("${stringResource(R.string.downloading)} ${(progressValue * 100).toInt()}%")
|
||||
} else {
|
||||
Text(stringResource(R.string.downloading))
|
||||
}
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
if (progress != null) {
|
||||
if (progressValue != null) {
|
||||
LinearProgressIndicator(
|
||||
progress = { progress!! },
|
||||
progress = { progressValue },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
)
|
||||
} else {
|
||||
|
||||
@@ -281,16 +281,17 @@ fun AppSettingsScreen(
|
||||
)
|
||||
} else {
|
||||
val progress by UpdateState.downloadProgress
|
||||
val progressValue = progress
|
||||
Column {
|
||||
if (progress != null) {
|
||||
Text("${stringResource(R.string.downloading)} ${(progress!! * 100).toInt()}%")
|
||||
if (progressValue != null) {
|
||||
Text("${stringResource(R.string.downloading)} ${(progressValue * 100).toInt()}%")
|
||||
} else {
|
||||
Text(stringResource(R.string.downloading))
|
||||
}
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
if (progress != null) {
|
||||
if (progressValue != null) {
|
||||
LinearProgressIndicator(
|
||||
progress = { progress!! },
|
||||
progress = { progressValue },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user