Release 1.1.0
- Fixed handling of an HTML "not found" payload served with HTTP 200 for a missing daily build: DictionaryDownloader validates Content-Type and the gzip magic bytes and falls back to the previous day's build. - Fixed the update check counting a text/html HEAD response as an available build (DictionaryChecker). - Fixed dictionary source matching: sources are matched by normalized identity key and the normalized template is handed to the downloader in downloadSpecificSources (DictionaryRepository). - Fixed the dictionary progress indicator animating backwards to 0% during its exit animation; it now stays frozen while it fades out (DictionaryProgressSection). - Fixed slow first composition of every screen by extending the checked-in baseline profile to the settings/dictionary flow and the Compose framework: the Compose alpha AARs ship near-empty profiles, so every first composition ran interpreted.
This commit is contained in:
1 parent
4c2faf3c94
commit
db0e8ba6ea
8 files changed
+111
-25
No files matched your search
+28
-19
@@ -29,39 +29,48 @@ fun DictionaryProgressSection(
|
||||
percent: Int,
|
||||
testTag: String,
|
||||
) {
|
||||
val targetProgress = progressProvider().coerceIn(0f, 1f)
|
||||
var monotonicTargetProgress by remember { mutableFloatStateOf(0f) }
|
||||
LaunchedEffect(visible, targetProgress) {
|
||||
monotonicTargetProgress = if (visible) {
|
||||
maxOf(monotonicTargetProgress, targetProgress)
|
||||
} else {
|
||||
0f
|
||||
}
|
||||
}
|
||||
val animatedProgress by animateFloatAsState(
|
||||
targetValue = monotonicTargetProgress,
|
||||
animationSpec = tween(durationMillis = 650, easing = FastOutSlowInEasing),
|
||||
label = "dictionary-progress"
|
||||
)
|
||||
|
||||
AnimatedVisibility(
|
||||
visible = visible,
|
||||
enter = fadeIn() + expandVertically(),
|
||||
exit = fadeOut() + shrinkVertically(),
|
||||
modifier = modifier.testTag(testTag)
|
||||
modifier = modifier
|
||||
) {
|
||||
Column {
|
||||
val targetProgress = progressProvider().coerceIn(0f, 1f)
|
||||
var monotonicTargetProgress by remember { mutableFloatStateOf(0f) }
|
||||
var displayedLabel by remember { mutableStateOf(label) }
|
||||
var displayedPercent by remember { mutableIntStateOf(percent) }
|
||||
var displayedTestTag by remember { mutableStateOf(testTag) }
|
||||
|
||||
LaunchedEffect(visible, targetProgress) {
|
||||
if (visible) {
|
||||
monotonicTargetProgress = maxOf(monotonicTargetProgress, targetProgress)
|
||||
}
|
||||
}
|
||||
SideEffect {
|
||||
if (visible) {
|
||||
displayedLabel = label
|
||||
displayedPercent = percent
|
||||
displayedTestTag = testTag
|
||||
}
|
||||
}
|
||||
val animatedProgress by animateFloatAsState(
|
||||
targetValue = monotonicTargetProgress,
|
||||
animationSpec = tween(durationMillis = 650, easing = FastOutSlowInEasing),
|
||||
label = "dictionary-progress"
|
||||
)
|
||||
|
||||
Column(modifier = Modifier.testTag(displayedTestTag)) {
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
horizontalArrangement = Arrangement.SpaceBetween
|
||||
) {
|
||||
Text(
|
||||
text = label,
|
||||
text = displayedLabel,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.primary
|
||||
)
|
||||
Text(
|
||||
text = "$percent%",
|
||||
text = "$displayedPercent%",
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.primary
|
||||
)
|
||||
|
||||
Reference in new issue
Block a user