Tweak badge style, add badge progress

This commit is contained in:
MM20 2022-02-18 00:00:57 +01:00
parent 944132ba12
commit 81c6662ede
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -4,22 +4,26 @@ import android.graphics.Matrix
import android.graphics.Path import android.graphics.Path
import android.graphics.RectF import android.graphics.RectF
import android.graphics.drawable.AdaptiveIconDrawable import android.graphics.drawable.AdaptiveIconDrawable
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.Canvas import androidx.compose.foundation.Canvas
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.GenericShape import androidx.compose.foundation.shape.GenericShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Offset
@ -104,24 +108,34 @@ fun ShapedLauncherIcon(
modifier = Modifier modifier = Modifier
.size(size * 0.33f) .size(size * 0.33f)
.align(Alignment.BottomEnd), .align(Alignment.BottomEnd),
color = MaterialTheme.colorScheme.secondaryContainer, color = MaterialTheme.colorScheme.secondary,
shape = CircleShape shape = CircleShape
) { ) {
Box( Box(
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
badge.progress?.let {
val progress by animateFloatAsState(it)
CircularProgressIndicator(
modifier = Modifier.fillMaxSize(),
progress = progress,
strokeWidth = size / 48,
color = MaterialTheme.colorScheme.secondaryContainer
)
}
val badgeIconRes = badge.iconRes val badgeIconRes = badge.iconRes
val badgeIcon = badge.icon val badgeIcon = badge.icon
val number = badge.number val number = badge.number
if (badgeIconRes != null) { if (badgeIconRes != null) {
Image( Image(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize().padding(size / 48),
painter = painterResource(badgeIconRes), painter = painterResource(badgeIconRes),
contentDescription = null contentDescription = null
) )
} else if (badgeIcon != null) { } else if (badgeIcon != null) {
Canvas(modifier = Modifier.fillMaxSize()) { Canvas(modifier = Modifier.fillMaxSize().padding(size / 48)) {
badgeIcon.setBounds( badgeIcon.setBounds(
0, 0,
0, 0,
@ -135,7 +149,7 @@ fun ShapedLauncherIcon(
} else if (number != null && number > 0 && number < 100) { } else if (number != null && number > 0 && number < 100) {
Text( Text(
number.toString(), number.toString(),
color = MaterialTheme.colorScheme.onSecondaryContainer, color = MaterialTheme.colorScheme.secondaryContainer,
style = MaterialTheme.typography.labelSmall.copy( style = MaterialTheme.typography.labelSmall.copy(
fontSize = with(LocalDensity.current) { fontSize = with(LocalDensity.current) {
size.toSp() * 0.2f size.toSp() * 0.2f