fix: correct ABox switch semantics and motion
This commit is contained in:
+10
-1
@@ -54,6 +54,8 @@ import androidx.compose.ui.semantics.contentDescription
|
||||
import androidx.compose.ui.semantics.role
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
import androidx.compose.ui.semantics.stateDescription
|
||||
import androidx.compose.foundation.selection.toggleable
|
||||
import androidx.compose.ui.semantics.clearAndSetSemantics
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.Dp
|
||||
@@ -135,6 +137,12 @@ fun ABoxSwitch(
|
||||
Box(
|
||||
modifier = modifier
|
||||
.defaultMinSize(minWidth = 48.dp, minHeight = 48.dp)
|
||||
.toggleable(
|
||||
value = checked,
|
||||
enabled = enabled && onCheckedChange != null,
|
||||
role = Role.Switch,
|
||||
onValueChange = { onCheckedChange?.invoke(it) },
|
||||
)
|
||||
.semantics {
|
||||
this.contentDescription = contentDescription
|
||||
},
|
||||
@@ -142,8 +150,9 @@ fun ABoxSwitch(
|
||||
) {
|
||||
Switch(
|
||||
checked = checked,
|
||||
onCheckedChange = onCheckedChange,
|
||||
onCheckedChange = null,
|
||||
enabled = enabled,
|
||||
modifier = Modifier.clearAndSetSemantics { },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+33
-3
@@ -1,6 +1,7 @@
|
||||
package com.flagship.abox.manager.designsystem
|
||||
|
||||
import android.os.Build
|
||||
import android.provider.Settings
|
||||
import androidx.compose.material3.ColorScheme
|
||||
import androidx.compose.material3.darkColorScheme
|
||||
import androidx.compose.material3.dynamicDarkColorScheme
|
||||
@@ -35,12 +36,12 @@ fun ABoxTheme(
|
||||
content: @Composable () -> Unit,
|
||||
) {
|
||||
val systemInDarkTheme = androidx.compose.foundation.isSystemInDarkTheme()
|
||||
val context = LocalContext.current
|
||||
val isDarkTheme = when (preferences.themeMode) {
|
||||
AppThemeMode.SYSTEM -> systemInDarkTheme
|
||||
AppThemeMode.LIGHT -> false
|
||||
AppThemeMode.DARK -> true
|
||||
}
|
||||
val context = LocalContext.current
|
||||
val dynamicTokens = if (preferences.dynamicColorEnabled && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
val dynamicColorScheme = if (isDarkTheme) {
|
||||
dynamicDarkColorScheme(context)
|
||||
@@ -51,11 +52,30 @@ fun ABoxTheme(
|
||||
} else {
|
||||
null
|
||||
}
|
||||
val resolution = ABoxThemeResolver.resolve(
|
||||
ABoxThemeContent(
|
||||
preferences = preferences,
|
||||
systemInDarkTheme = systemInDarkTheme,
|
||||
sdkInt = Build.VERSION.SDK_INT,
|
||||
dynamicColorTokens = dynamicTokens,
|
||||
reducedMotion = systemAnimatorDurationScale(context) == 0f,
|
||||
content = content,
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
internal fun ABoxThemeContent(
|
||||
preferences: UiPreferences,
|
||||
systemInDarkTheme: Boolean,
|
||||
sdkInt: Int,
|
||||
dynamicColorTokens: ABoxColorTokens?,
|
||||
reducedMotion: Boolean,
|
||||
content: @Composable () -> Unit,
|
||||
) {
|
||||
val resolution = ABoxThemeResolver.resolve(
|
||||
preferences = preferences,
|
||||
systemInDarkTheme = systemInDarkTheme,
|
||||
sdkInt = sdkInt,
|
||||
dynamicColorTokens = dynamicColorTokens,
|
||||
)
|
||||
val renderer = ABoxRendererAdapters.forRenderer(resolution.renderer)
|
||||
|
||||
@@ -65,7 +85,7 @@ fun ABoxTheme(
|
||||
LocalABoxTypography provides ABoxTypography,
|
||||
LocalABoxShapes provides resolution.shapeTokens,
|
||||
LocalABoxRenderer provides resolution.renderer,
|
||||
LocalABoxReducedMotion provides false,
|
||||
LocalABoxReducedMotion provides reducedMotion,
|
||||
LocalABoxBlurEnabled provides resolution.blurEnabled,
|
||||
) {
|
||||
renderer.Render(
|
||||
@@ -75,6 +95,16 @@ fun ABoxTheme(
|
||||
}
|
||||
}
|
||||
|
||||
private fun systemAnimatorDurationScale(context: android.content.Context): Float =
|
||||
runCatching {
|
||||
Settings.Global.getFloat(
|
||||
context.contentResolver,
|
||||
Settings.Global.ANIMATOR_DURATION_SCALE,
|
||||
1f,
|
||||
)
|
||||
}.getOrDefault(1f)
|
||||
|
||||
|
||||
@Composable
|
||||
fun ABoxTheme(
|
||||
darkTheme: Boolean = androidx.compose.foundation.isSystemInDarkTheme(),
|
||||
|
||||
Reference in New Issue
Block a user