Fix log screen crash on API 23

This commit is contained in:
世界
2025-12-22 14:48:03 +08:00
parent f04b10a366
commit cf771e1071

View File

@@ -1,6 +1,7 @@
package io.nekohasekai.sfa.compose.screen.log package io.nekohasekai.sfa.compose.screen.log
import android.content.ClipData import android.content.ClipData
import android.os.Build
import android.content.Intent import android.content.Intent
import android.widget.Toast import android.widget.Toast
import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.rememberLauncherForActivityResult
@@ -10,6 +11,8 @@ import androidx.compose.animation.core.tween
import androidx.compose.animation.expandVertically import androidx.compose.animation.expandVertically
import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut import androidx.compose.animation.fadeOut
import androidx.compose.animation.scaleIn
import androidx.compose.animation.scaleOut
import androidx.compose.animation.shrinkVertically import androidx.compose.animation.shrinkVertically
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.combinedClickable
@@ -721,10 +724,11 @@ fun LogScreen(
verticalArrangement = Arrangement.spacedBy(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp),
) { ) {
// Scroll to bottom FAB // Scroll to bottom FAB
// Use fade animation on API 23 to avoid OpenGLRenderer crash with scale transforms
AnimatedVisibility( AnimatedVisibility(
visible = !isAtBottom && !uiState.isSelectionMode && uiState.logs.isNotEmpty(), visible = !isAtBottom && !uiState.isSelectionMode && uiState.logs.isNotEmpty(),
enter = androidx.compose.animation.scaleIn(), enter = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) scaleIn() else fadeIn(),
exit = androidx.compose.animation.scaleOut(), exit = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) scaleOut() else fadeOut(),
) { ) {
FloatingActionButton( FloatingActionButton(
onClick = { viewModel.scrollToBottom() }, onClick = { viewModel.scrollToBottom() },
@@ -738,10 +742,11 @@ fun LogScreen(
} }
// Start/Stop Service FAB // Start/Stop Service FAB
// Use fade animation on API 23 to avoid OpenGLRenderer crash with scale transforms
AnimatedVisibility( AnimatedVisibility(
visible = serviceStatus != Status.Stopping && !uiState.isSelectionMode, visible = serviceStatus != Status.Stopping && !uiState.isSelectionMode,
enter = androidx.compose.animation.scaleIn(), enter = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) scaleIn() else fadeIn(),
exit = androidx.compose.animation.scaleOut(), exit = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) scaleOut() else fadeOut(),
) { ) {
FloatingActionButton( FloatingActionButton(
onClick = { onClick = {