perf(about): parse aboutlibraries.json off the main thread
Bump AboutLibraries plugin to 15.0.4 -> 15.2.0; parse aboutlibraries.json on Dispatchers.IO via produceState (header renders immediately, rows fill in); drop animateContentSize from rows.
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
package com.example.research.ui.about
|
package com.example.research.ui.about
|
||||||
|
|
||||||
import androidx.compose.animation.animateContentSize
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.ExperimentalLayoutApi
|
import androidx.compose.foundation.layout.ExperimentalLayoutApi
|
||||||
@@ -27,6 +26,7 @@ import androidx.compose.material3.TopAppBarDefaults
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.produceState
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
@@ -43,6 +43,8 @@ import androidx.compose.ui.unit.dp
|
|||||||
import com.example.research.R
|
import com.example.research.R
|
||||||
import com.example.research.common.ui.components.OutlinedChoiceButton
|
import com.example.research.common.ui.components.OutlinedChoiceButton
|
||||||
import com.example.research.ui.theme.AppWindowInsets
|
import com.example.research.ui.theme.AppWindowInsets
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
@@ -57,9 +59,11 @@ fun AboutScreen(
|
|||||||
}
|
}
|
||||||
val versionName = packageInfo?.versionName ?: stringResource(R.string.version_unknown)
|
val versionName = packageInfo?.versionName ?: stringResource(R.string.version_unknown)
|
||||||
val uriHandler = LocalUriHandler.current
|
val uriHandler = LocalUriHandler.current
|
||||||
val librariesData = remember(context) {
|
val librariesData by produceState<AboutLibrariesData?>(initialValue = null, context) {
|
||||||
|
value = withContext(Dispatchers.IO) {
|
||||||
AboutLibrariesParser.read(context, R.raw.aboutlibraries)
|
AboutLibrariesParser.read(context, R.raw.aboutlibraries)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
var expandedLibraryId by remember { mutableStateOf<String?>(null) }
|
var expandedLibraryId by remember { mutableStateOf<String?>(null) }
|
||||||
var dialogLicense by remember { mutableStateOf<AboutLicense?>(null) }
|
var dialogLicense by remember { mutableStateOf<AboutLicense?>(null) }
|
||||||
|
|
||||||
@@ -93,12 +97,12 @@ fun AboutScreen(
|
|||||||
AboutHeader(versionName = versionName)
|
AboutHeader(versionName = versionName)
|
||||||
}
|
}
|
||||||
items(
|
items(
|
||||||
items = librariesData.libraries,
|
items = librariesData?.libraries.orEmpty(),
|
||||||
key = AboutLibrary::uniqueId,
|
key = AboutLibrary::uniqueId,
|
||||||
) { library ->
|
) { library ->
|
||||||
AboutLibraryRow(
|
AboutLibraryRow(
|
||||||
library = library,
|
library = library,
|
||||||
licenses = librariesData.licenses,
|
licenses = librariesData?.licenses.orEmpty(),
|
||||||
expanded = expandedLibraryId == library.uniqueId,
|
expanded = expandedLibraryId == library.uniqueId,
|
||||||
onToggle = {
|
onToggle = {
|
||||||
expandedLibraryId = if (expandedLibraryId == library.uniqueId) {
|
expandedLibraryId = if (expandedLibraryId == library.uniqueId) {
|
||||||
@@ -191,8 +195,7 @@ private fun AboutLibraryRow(
|
|||||||
) {
|
) {
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(horizontal = 16.dp, vertical = 12.dp)
|
.padding(horizontal = 16.dp, vertical = 12.dp),
|
||||||
.animateContentSize(),
|
|
||||||
verticalArrangement = Arrangement.spacedBy(5.dp)
|
verticalArrangement = Arrangement.spacedBy(5.dp)
|
||||||
) {
|
) {
|
||||||
Row(
|
Row(
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[versions]
|
[versions]
|
||||||
aboutlibraries = "15.0.4"
|
aboutlibraries = "15.2.0"
|
||||||
activity_compose = "1.13.0"
|
activity_compose = "1.13.0"
|
||||||
agp = "9.3.1"
|
agp = "9.3.1"
|
||||||
compose_bom = "2026.08.00"
|
compose_bom = "2026.08.00"
|
||||||
|
|||||||
Reference in New Issue
Block a user