diff --git a/.github/workflows/ci-android.yml b/.github/workflows/ci-android.yml index e6a4684..d89c93a 100644 --- a/.github/workflows/ci-android.yml +++ b/.github/workflows/ci-android.yml @@ -87,7 +87,9 @@ jobs: steps: - uses: actions/checkout@v4 - + with: + fetch-depth: 0 + fetch-tags: true - uses: actions/download-artifact@v4 with: name: apk-release diff --git a/android/app/src/main/java/me/kavishdevar/librepods/MainActivity.kt b/android/app/src/main/java/me/kavishdevar/librepods/MainActivity.kt index 8bbfb9c..b0a2aaf 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/MainActivity.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/MainActivity.kt @@ -121,6 +121,7 @@ import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi import dev.chrisbanes.haze.rememberHazeState import me.kavishdevar.librepods.data.AirPodsNotifications import me.kavishdevar.librepods.data.ControlCommandRepository +import me.kavishdevar.librepods.presentation.components.AppInfoCard import me.kavishdevar.librepods.presentation.components.ConfirmationDialog import me.kavishdevar.librepods.presentation.components.DeviceInfoCard import me.kavishdevar.librepods.presentation.components.SelectItem @@ -249,27 +250,25 @@ fun Main() { verticalArrangement = Arrangement .spacedBy(16.dp) ) { - val innerBackdrop = rememberLayerBackdrop() Spacer(modifier = Modifier.height(48.dp)) Column( - modifier = Modifier.layerBackdrop(innerBackdrop), + modifier = Modifier, verticalArrangement = Arrangement .spacedBy(16.dp) ) { + Spacer(modifier = Modifier.height(16.dp)) Text( text = stringResource(R.string.not_supported), style = TextStyle( fontFamily = FontFamily(Font(R.font.sf_pro)), fontWeight = FontWeight.SemiBold, color = textColor, - fontSize = 20.sp, + fontSize = 28.sp, textAlign = TextAlign.Center ), modifier = Modifier.fillMaxWidth() ) - DeviceInfoCard() - Box( modifier = Modifier .fillMaxWidth() @@ -281,7 +280,7 @@ fun Main() { style = TextStyle( fontFamily = FontFamily(Font(R.font.sf_pro)), fontWeight = FontWeight.Medium, - color = if (isSystemInDarkTheme()) Color.White else Color.Black, + color = if (isDarkTheme) Color.White else Color.Black, fontSize = 16.sp ), modifier = Modifier @@ -289,22 +288,27 @@ fun Main() { .padding(horizontal = 12.dp, vertical = 16.dp) ) } - } - StyledButton( - onClick = { showDialog.value = true }, - backdrop = innerBackdrop, - modifier = Modifier - .fillMaxWidth() - ) { - Text( - text = stringResource(R.string.bypass_compatibility_check), - style = TextStyle( - fontFamily = FontFamily(Font(R.font.sf_pro)), - fontWeight = FontWeight.Medium, - color = if (isSystemInDarkTheme()) Color.White else Color.Black, - fontSize = 16.sp - ), - ) + StyledButton( + onClick = { showDialog.value = true }, + backdrop = rememberLayerBackdrop(), + modifier = Modifier + .fillMaxWidth(), + isInteractive = false, + surfaceColor = if (isDarkTheme) Color(0xFF862424) else Color(0xFFC94646) + ) { + Text( + text = stringResource(R.string.bypass_compatibility_check), + style = TextStyle( + fontFamily = FontFamily(Font(R.font.sf_pro)), + fontWeight = FontWeight.Medium, + color = Color.White, + fontSize = 16.sp + ), + ) + } + Spacer(modifier = Modifier.height(24.dp)) + DeviceInfoCard() + AppInfoCard() } Spacer(modifier = Modifier.height(48.dp)) } @@ -332,7 +336,8 @@ fun Main() { onDismiss = { showDialog.value = false }, - hazeState = hazeState + backdrop = backdrop +// hazeState = hazeState ) if (BuildConfig.PLAY_BUILD) { diff --git a/android/app/src/main/java/me/kavishdevar/librepods/presentation/components/AppInfoCard.kt b/android/app/src/main/java/me/kavishdevar/librepods/presentation/components/AppInfoCard.kt new file mode 100644 index 0000000..bc4d087 --- /dev/null +++ b/android/app/src/main/java/me/kavishdevar/librepods/presentation/components/AppInfoCard.kt @@ -0,0 +1,193 @@ +/* + LibrePods - AirPods liberated from Apple’s ecosystem + Copyright (C) 2025 LibrePods contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +package me.kavishdevar.librepods.presentation.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.onGloballyPositioned +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import me.kavishdevar.librepods.BuildConfig +import me.kavishdevar.librepods.R + +@Composable +fun AppInfoCard() { + val rowHeight = remember { mutableStateOf(0.dp) } + val density = LocalDensity.current + val isDarkTheme = isSystemInDarkTheme() + val backgroundColor = if (isDarkTheme) Color(0xFF1C1C1E) else Color(0xFFFFFFFF) + val textColor = if (isDarkTheme) Color.White else Color.Black + + Column { + Box( + modifier = Modifier + .background(if (isDarkTheme) Color.Black else Color(0xFFF2F2F7)) + .padding(start = 16.dp, bottom = 8.dp, end = 4.dp) + ) { + Text( + text = stringResource(R.string.about), style = TextStyle( + fontSize = 14.sp, + fontWeight = FontWeight.Bold, + color = textColor.copy(alpha = 0.6f), + fontFamily = FontFamily(Font(R.font.sf_pro)) + ) + ) + } + + Column( + modifier = Modifier + .clip(RoundedCornerShape(28.dp)) + .fillMaxWidth() + .background(backgroundColor, RoundedCornerShape(28.dp)) + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + .onGloballyPositioned { coordinates -> + rowHeight.value = with(density) { coordinates.size.height.toDp() } + }, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text( + text = stringResource(R.string.version), style = TextStyle( + fontSize = 16.sp, + color = textColor, + fontFamily = FontFamily(Font(R.font.sf_pro)) + ) + ) + Text( + text = BuildConfig.VERSION_NAME, style = TextStyle( + fontSize = 16.sp, + color = if (isDarkTheme) Color.White.copy(alpha = 0.6f) else Color.Black.copy( + alpha = 0.8f + ), + fontFamily = FontFamily(Font(R.font.sf_pro)) + ) + ) + } + HorizontalDivider( + thickness = 1.dp, + color = Color(0x40888888), + modifier = Modifier.padding(horizontal = 12.dp) + ) + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text( + text = stringResource(R.string.version_code), style = TextStyle( + fontSize = 16.sp, + color = textColor, + fontFamily = FontFamily(Font(R.font.sf_pro)) + ) + ) + Text( + text = BuildConfig.VERSION_CODE.toString(), style = TextStyle( + fontSize = 16.sp, + color = if (isDarkTheme) Color.White.copy(alpha = 0.6f) else Color.Black.copy( + alpha = 0.8f + ), + fontFamily = FontFamily(Font(R.font.sf_pro)) + ) + ) + } + HorizontalDivider( + thickness = 1.dp, + color = Color(0x40888888), + modifier = Modifier.padding(horizontal = 12.dp) + ) + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text( + text = stringResource(R.string.flavor), style = TextStyle( + fontSize = 16.sp, + color = textColor, + fontFamily = FontFamily(Font(R.font.sf_pro)) + ) + ) + Text( + text = BuildConfig.FLAVOR, style = TextStyle( + fontSize = 16.sp, + color = if (isDarkTheme) Color.White.copy(alpha = 0.6f) else Color.Black.copy( + alpha = 0.8f + ), + fontFamily = FontFamily(Font(R.font.sf_pro)) + ) + ) + } + HorizontalDivider( + thickness = 1.dp, + color = Color(0x40888888), + modifier = Modifier.padding(horizontal = 12.dp) + ) + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text( + text = stringResource(R.string.build_type), style = TextStyle( + fontSize = 16.sp, + color = textColor, + fontFamily = FontFamily(Font(R.font.sf_pro)) + ) + ) + Text( + text = BuildConfig.BUILD_TYPE, + style = TextStyle( + fontSize = 16.sp, + color = if (isDarkTheme) Color.White.copy(alpha = 0.6f) else Color.Black.copy( + alpha = 0.8f + ), + fontFamily = FontFamily(Font(R.font.sf_pro)) + ) + ) + } + } + } +} diff --git a/android/app/src/main/java/me/kavishdevar/librepods/presentation/components/ConfirmationDialog.kt b/android/app/src/main/java/me/kavishdevar/librepods/presentation/components/ConfirmationDialog.kt index 337675f..35e538a 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/presentation/components/ConfirmationDialog.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/presentation/components/ConfirmationDialog.kt @@ -18,37 +18,32 @@ package me.kavishdevar.librepods.presentation.components +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredWidthIn -import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color -import androidx.compose.ui.hapticfeedback.HapticFeedbackType -import androidx.compose.ui.input.pointer.PointerEventType -import androidx.compose.ui.input.pointer.pointerInput -import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily @@ -56,13 +51,13 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties -import dev.chrisbanes.haze.HazeState -import dev.chrisbanes.haze.hazeEffect -import dev.chrisbanes.haze.materials.CupertinoMaterials +import com.kyant.backdrop.backdrops.LayerBackdrop +import com.kyant.backdrop.backdrops.rememberLayerBackdrop +import com.kyant.backdrop.drawBackdrop +import com.kyant.backdrop.effects.blur +import com.kyant.backdrop.effects.lens +import com.kyant.backdrop.effects.vibrancy import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi -import kotlinx.coroutines.launch import me.kavishdevar.librepods.R @ExperimentalHazeMaterialsApi @@ -75,162 +70,107 @@ fun ConfirmationDialog( dismissText: String = "Cancel", onConfirm: () -> Unit, onDismiss: () -> Unit = { showDialog.value = false }, - hazeState: HazeState, + backdrop: LayerBackdrop, ) { val isDarkTheme = isSystemInDarkTheme() val textColor = if (isDarkTheme) Color.White else Color.Black - val accentColor = if (isDarkTheme) Color(0xFF007AFF) else Color(0xFF3C6DF5) + val accentColor = if (isDarkTheme) Color(0xFF0091FF) else Color(0xFF0088FF) - val haptics = LocalHapticFeedback.current - val scope = rememberCoroutineScope() - - if (showDialog.value) { - Dialog( - onDismissRequest = { showDialog.value = false }, - properties = DialogProperties( - dismissOnBackPress = false, - dismissOnClickOutside = false - ) + AnimatedVisibility( + visible = showDialog.value, + enter = scaleIn(initialScale = 1.05f) + fadeIn(), + exit = scaleOut(targetScale = 1.05f) + fadeOut() + ) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center ) { + val innerBackdrop = rememberLayerBackdrop() Box( modifier = Modifier - // .fillMaxWidth(0.75f) - .requiredWidthIn(min = 200.dp, max = 360.dp) - .background(Color.Transparent, RoundedCornerShape(14.dp)) - .clip(RoundedCornerShape(14.dp)) - .hazeEffect( - hazeState, - style = CupertinoMaterials.regular( - containerColor = if (isDarkTheme) Color(0xFF1C1C1E).copy(alpha = 0.95f) else Color.White.copy(alpha = 0.95f) - ) - ) + .fillMaxSize() + .background(Color.Black.copy(alpha = 0.4f)) + .clickable(enabled = false, onClick = {}), + contentAlignment = Alignment.Center ) { - Column(horizontalAlignment = Alignment.CenterHorizontally) { - Spacer(modifier = Modifier.height(24.dp)) - Text( - title, - style = TextStyle( - fontSize = 16.sp, - fontWeight = FontWeight.Bold, - color = textColor, - fontFamily = FontFamily(Font(R.font.sf_pro)) - ), - textAlign = TextAlign.Center, - modifier = Modifier.padding(horizontal = 16.dp) - ) - Spacer(modifier = Modifier.height(12.dp)) - Text( - message, - style = TextStyle( - fontSize = 14.sp, - color = textColor.copy(alpha = 0.8f), - fontFamily = FontFamily(Font(R.font.sf_pro)) - ), - textAlign = TextAlign.Center, - modifier = Modifier.padding(horizontal = 16.dp) - ) - Spacer(modifier = Modifier.height(16.dp)) - HorizontalDivider( - thickness = 1.dp, - color = Color(0x40888888), - modifier = Modifier.fillMaxWidth() - ) - var leftPressed by remember { mutableStateOf(false) } - var rightPressed by remember { mutableStateOf(false) } - val pressedColor = if (isDarkTheme) Color(0x40888888) else Color(0x40D9D9D9) - Row( - modifier = Modifier - .fillMaxWidth() - .height(48.dp) - .pointerInput(Unit) { - awaitPointerEventScope { - while (true) { - val event = awaitPointerEvent() - val position = event.changes.first().position - val width = size.width.toFloat() - val height = size.height.toFloat() - val isWithinBounds = position.y >= 0 && position.y <= height - val isLeft = position.x < width / 2 - event.changes.first().consume() - when (event.type) { - PointerEventType.Press -> { - if (isWithinBounds) { - leftPressed = isLeft - rightPressed = !isLeft - } else { - leftPressed = false - rightPressed = false - } - } - PointerEventType.Move -> { - if (isWithinBounds) { - if (leftPressed != isLeft) scope.launch { haptics.performHapticFeedback( - HapticFeedbackType.SegmentTick) } - leftPressed = isLeft - rightPressed = !isLeft - } else { - leftPressed = false - rightPressed = false - } - } - PointerEventType.Release -> { - if (isWithinBounds) { - if (leftPressed) { - scope.launch { haptics.performHapticFeedback( - HapticFeedbackType.Reject) } - onDismiss() - } else if (rightPressed) { - scope.launch { haptics.performHapticFeedback( - HapticFeedbackType.Confirm) } - onConfirm() - } - } - leftPressed = false - rightPressed = false - } - } - } - } + Box( + modifier = Modifier + .requiredWidthIn(min = 200.dp, max = 360.dp) + .clip(RoundedCornerShape(48.dp)) + .drawBackdrop( + backdrop = backdrop, + exportedBackdrop = innerBackdrop, + shape = { RoundedCornerShape(48.dp) }, + effects = { + vibrancy() + blur(4f.dp.toPx()) + lens(12f.dp.toPx(), 48f.dp.toPx(), true) }, - horizontalArrangement = Arrangement.Start, - verticalAlignment = Alignment.CenterVertically - ) { - Box( - modifier = Modifier - .weight(1f) - .fillMaxHeight() - .background(if (leftPressed) pressedColor else Color.Transparent), - contentAlignment = Alignment.Center - ) { - Text( - text = dismissText, - style = TextStyle( - color = accentColor, - fontFamily = FontFamily(Font(R.font.sf_pro)) + onDrawSurface = { + drawRect( + if (isDarkTheme) Color(0xFF1F1F1F).copy(alpha = 0.35f) else Color(0xFFE0E0E0).copy(alpha = 0.7f) ) - ) - } - Box( - modifier = Modifier - .width(1.dp) - .fillMaxHeight() - .background(Color(0x40888888)) + })) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Spacer(modifier = Modifier.height(24.dp)) + Text( + title, + style = TextStyle( + fontSize = 16.sp, + fontWeight = FontWeight.Bold, + color = textColor, + fontFamily = FontFamily(Font(R.font.sf_pro)) + ), + textAlign = TextAlign.Center, + modifier = Modifier.padding(horizontal = 16.dp) ) - Box( - modifier = Modifier - .weight(1f) - .fillMaxHeight() - .background(if (rightPressed) pressedColor else Color.Transparent), - contentAlignment = Alignment.Center + Spacer(modifier = Modifier.height(12.dp)) + Text( + message, + style = TextStyle( + fontSize = 14.sp, + color = textColor.copy(alpha = 0.8f), + fontFamily = FontFamily(Font(R.font.sf_pro)) + ), + textAlign = TextAlign.Center, + modifier = Modifier.padding(horizontal = 16.dp) + ) + Spacer(modifier = Modifier.height(16.dp)) + Row( + modifier = Modifier.fillMaxWidth(0.9f), + horizontalArrangement = Arrangement.spacedBy(24.dp) ) { - Text( - text = confirmText, - style = TextStyle( - color = accentColor, - fontFamily = FontFamily(Font(R.font.sf_pro)) + StyledButton( + onClick = onDismiss, + backdrop = innerBackdrop, + modifier = Modifier.weight(1f), + ) { + Text( + text = dismissText, style = TextStyle( + fontFamily = FontFamily(Font(R.font.sf_pro)), + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + color = textColor + ) ) - ) + } + StyledButton( + onClick = onConfirm, + backdrop = innerBackdrop, + modifier = Modifier.weight(1f), + surfaceColor = accentColor + ) { + Text( + text = confirmText, style = TextStyle( + fontFamily = FontFamily(Font(R.font.sf_pro)), + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + color = Color.White + ) + ) + } } + Spacer(modifier = Modifier.height(24.dp)) } } } diff --git a/android/app/src/main/java/me/kavishdevar/librepods/presentation/components/DeviceInfoCard.kt b/android/app/src/main/java/me/kavishdevar/librepods/presentation/components/DeviceInfoCard.kt index 074907a..18ab494 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/presentation/components/DeviceInfoCard.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/presentation/components/DeviceInfoCard.kt @@ -46,7 +46,7 @@ fun DeviceInfoCard() { Box( modifier = Modifier .background(if (isDarkTheme) Color.Black else Color(0xFFF2F2F7)) - .padding(start = 16.dp, bottom = 2.dp, top = 24.dp, end = 4.dp) + .padding(start = 16.dp, top = 24.dp, end = 4.dp) ) { Text( text = stringResource(R.string.device_info), style = TextStyle( diff --git a/android/app/src/main/java/me/kavishdevar/librepods/presentation/screens/AppSettingsScreen.kt b/android/app/src/main/java/me/kavishdevar/librepods/presentation/screens/AppSettingsScreen.kt index f27d732..95571e7 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/presentation/screens/AppSettingsScreen.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/presentation/screens/AppSettingsScreen.kt @@ -58,9 +58,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.Font @@ -80,6 +78,7 @@ import com.kyant.backdrop.backdrops.rememberLayerBackdrop import dev.chrisbanes.haze.hazeSource import me.kavishdevar.librepods.BuildConfig import me.kavishdevar.librepods.R +import me.kavishdevar.librepods.presentation.components.AppInfoCard import me.kavishdevar.librepods.presentation.components.DeviceInfoCard import me.kavishdevar.librepods.presentation.components.NavigationButton import me.kavishdevar.librepods.presentation.components.StyledBottomSheet @@ -513,145 +512,8 @@ fun AppSettingsScreen( Spacer(modifier = Modifier.height(20.dp)) DeviceInfoCard() - - Box( - modifier = Modifier - .background(if (isDarkTheme) Color.Black else Color(0xFFF2F2F7)) - .padding(start = 16.dp, bottom = 2.dp, top = 24.dp, end = 4.dp) - ) { - Text( - text = stringResource(R.string.about), style = TextStyle( - fontSize = 14.sp, - fontWeight = FontWeight.Bold, - color = textColor.copy(alpha = 0.6f), - fontFamily = FontFamily(Font(R.font.sf_pro)) - ) - ) - } - - val rowHeight = remember { mutableStateOf(0.dp) } - val density = LocalDensity.current - - Spacer(modifier = Modifier.height(4.dp)) - Column( - modifier = Modifier - .clip(RoundedCornerShape(28.dp)) - .fillMaxWidth() - .background(backgroundColor, RoundedCornerShape(28.dp)) - .padding(top = 2.dp) - ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp) - .onGloballyPositioned { coordinates -> - rowHeight.value = with(density) { coordinates.size.height.toDp() } - }, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Text( - text = stringResource(R.string.version), style = TextStyle( - fontSize = 16.sp, - color = textColor, - fontFamily = FontFamily(Font(R.font.sf_pro)) - ) - ) - Text( - text = BuildConfig.VERSION_NAME, style = TextStyle( - fontSize = 16.sp, - color = if (isDarkTheme) Color.White.copy(alpha = 0.6f) else Color.Black.copy( - alpha = 0.8f - ), - fontFamily = FontFamily(Font(R.font.sf_pro)) - ) - ) - } - HorizontalDivider( - thickness = 1.dp, - color = Color(0x40888888), - modifier = Modifier.padding(horizontal = 12.dp) - ) - Row( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp), - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Text( - text = stringResource(R.string.version_code), style = TextStyle( - fontSize = 16.sp, - color = textColor, - fontFamily = FontFamily(Font(R.font.sf_pro)) - ) - ) - Text( - text = BuildConfig.VERSION_CODE.toString(), style = TextStyle( - fontSize = 16.sp, - color = if (isDarkTheme) Color.White.copy(alpha = 0.6f) else Color.Black.copy( - alpha = 0.8f - ), - fontFamily = FontFamily(Font(R.font.sf_pro)) - ) - ) - } - HorizontalDivider( - thickness = 1.dp, - color = Color(0x40888888), - modifier = Modifier.padding(horizontal = 12.dp) - ) - Row( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp), - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Text( - text = stringResource(R.string.flavor), style = TextStyle( - fontSize = 16.sp, - color = textColor, - fontFamily = FontFamily(Font(R.font.sf_pro)) - ) - ) - Text( - text = BuildConfig.FLAVOR, style = TextStyle( - fontSize = 16.sp, - color = if (isDarkTheme) Color.White.copy(alpha = 0.6f) else Color.Black.copy( - alpha = 0.8f - ), - fontFamily = FontFamily(Font(R.font.sf_pro)) - ) - ) - } - HorizontalDivider( - thickness = 1.dp, - color = Color(0x40888888), - modifier = Modifier.padding(horizontal = 12.dp) - ) - Row( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp), - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Text( - text = stringResource(R.string.build_type), style = TextStyle( - fontSize = 16.sp, - color = textColor, - fontFamily = FontFamily(Font(R.font.sf_pro)) - ) - ) - Text( - text = BuildConfig.BUILD_TYPE, - style = TextStyle( - fontSize = 16.sp, - color = if (isDarkTheme) Color.White.copy(alpha = 0.6f) else Color.Black.copy( - alpha = 0.8f - ), - fontFamily = FontFamily(Font(R.font.sf_pro)) - ) - ) - } - } + Spacer(modifier = Modifier.height(16.dp)) + AppInfoCard() Spacer(modifier = Modifier.height(16.dp)) diff --git a/android/app/src/main/java/me/kavishdevar/librepods/presentation/screens/HearingAidScreen.kt b/android/app/src/main/java/me/kavishdevar/librepods/presentation/screens/HearingAidScreen.kt index 753c289..0568664 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/presentation/screens/HearingAidScreen.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/presentation/screens/HearingAidScreen.kt @@ -270,7 +270,7 @@ fun HearingAidScreen(viewModel: AirPodsViewModel, navController: NavController) hearingAidEnabled.value = false showDialog.value = false }, - hazeState = hazeStateS.value, - // backdrop = backdrop +// hazeState = hazeStateS.value, + backdrop = backdrop ) }