diff --git a/mobile/build.gradle.kts b/mobile/build.gradle.kts index 465edb6..ac5a9eb 100644 --- a/mobile/build.gradle.kts +++ b/mobile/build.gradle.kts @@ -23,7 +23,7 @@ android { minSdk = 30 targetSdk = 36 versionCode = generateVersionCode() - versionName = "2.4.0" + versionName = "2.5.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/mobile/release/baselineProfiles/0/mobile-release.dm b/mobile/release/baselineProfiles/0/mobile-release.dm index 6d74b8b..4f39ed4 100644 Binary files a/mobile/release/baselineProfiles/0/mobile-release.dm and b/mobile/release/baselineProfiles/0/mobile-release.dm differ diff --git a/mobile/release/baselineProfiles/1/mobile-release.dm b/mobile/release/baselineProfiles/1/mobile-release.dm index 2d964e9..0961792 100644 Binary files a/mobile/release/baselineProfiles/1/mobile-release.dm and b/mobile/release/baselineProfiles/1/mobile-release.dm differ diff --git a/mobile/src/main/java/ru/omni_devel/cards/MainActivity.kt b/mobile/src/main/java/ru/omni_devel/cards/MainActivity.kt index ba7d222..e331559 100644 --- a/mobile/src/main/java/ru/omni_devel/cards/MainActivity.kt +++ b/mobile/src/main/java/ru/omni_devel/cards/MainActivity.kt @@ -4,9 +4,19 @@ import android.content.Intent import android.os.Bundle import android.widget.Toast import androidx.activity.ComponentActivity +import androidx.activity.compose.BackHandler import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge +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.animation.slideInVertically +import androidx.compose.animation.slideOutVertically import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -28,15 +38,20 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.stringResource +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import kotlinx.serialization.json.Json import ru.omni_devel.cards.ui.theme.OmniCardsTheme +private const val ANIMATION_DELAY = 300L + class MainActivity : ComponentActivity() { private lateinit var db: DbHelper @@ -81,12 +96,30 @@ fun MainPage( ) { val context = LocalContext.current val uriHandler = LocalUriHandler.current + val scope = rememberCoroutineScope() var isActionBarShowed by remember { mutableStateOf(false) } Box( - modifier = Modifier.fillMaxSize() + modifier = Modifier + .fillMaxSize() + .then( + if (isActionBarShowed) { + Modifier.clickable( + interactionSource = remember { MutableInteractionSource() }, + indication = null + ) { + isActionBarShowed = false + } + } else Modifier + ) ) { + BackHandler( + enabled = isActionBarShowed, + ) { + isActionBarShowed = false + } + Page( stringResource(R.string.app_name), innerPadding @@ -107,12 +140,21 @@ fun MainPage( } } - if (isActionBarShowed) { + AnimatedVisibility( + modifier = Modifier + .align(Alignment.BottomEnd) + .padding(innerPadding) + .padding(16.dp), + visible = isActionBarShowed, + enter = slideInVertically(initialOffsetY = { it }) + fadeIn(), + exit = slideOutVertically(targetOffsetY = { it }) + fadeOut() + ) { Column( modifier = Modifier - .align(Alignment.BottomEnd) - .padding(innerPadding) - .padding(16.dp) + .clickable( + interactionSource = remember { MutableInteractionSource() }, + indication = null + ) {} .background( MaterialTheme.colorScheme.inversePrimary, RoundedCornerShape(24.dp) @@ -124,9 +166,13 @@ fun MainPage( onClick = { isActionBarShowed = false - val intent = Intent(context, EditCardActivity::class.java) + scope.launch { + delay(ANIMATION_DELAY) - context.startActivity(intent) + val intent = Intent(context, EditCardActivity::class.java) + + context.startActivity(intent) + } } ) { Text(stringResource(R.string.do_add_card)) @@ -150,11 +196,15 @@ fun MainPage( } FullWidthButton( onClick = { - val intent = Intent(context, BackupActivity::class.java) - - context.startActivity(intent) - isActionBarShowed = false + + scope.launch { + delay(ANIMATION_DELAY) + + val intent = Intent(context, BackupActivity::class.java) + + context.startActivity(intent) + } } ) { Text(stringResource(R.string.open_backup_menu)) @@ -176,11 +226,19 @@ fun MainPage( Text(">") } } - } else { + } + + AnimatedVisibility( + modifier = Modifier + .align(Alignment.BottomEnd) + .padding(innerPadding) + .padding(32.dp), + visible = !isActionBarShowed, + enter = fadeIn() + scaleIn(), + exit = fadeOut() + scaleOut() + ){ Button( - modifier = Modifier - .align(Alignment.BottomEnd) - .padding(innerPadding).padding(32.dp), + modifier = Modifier, onClick = { isActionBarShowed = true } diff --git a/wear/release/baselineProfiles/0/wear-release.dm b/wear/release/baselineProfiles/0/wear-release.dm index d50c81b..66fdee0 100644 Binary files a/wear/release/baselineProfiles/0/wear-release.dm and b/wear/release/baselineProfiles/0/wear-release.dm differ diff --git a/wear/release/baselineProfiles/1/wear-release.dm b/wear/release/baselineProfiles/1/wear-release.dm index 7c46543..b6003d4 100644 Binary files a/wear/release/baselineProfiles/1/wear-release.dm and b/wear/release/baselineProfiles/1/wear-release.dm differ