Skip to content

Commit

Permalink
Dev to Main (#108)
Browse files Browse the repository at this point in the history
  • Loading branch information
mehdiyari authored Feb 18, 2024
2 parents b7b9221 + 4260485 commit 06a9843
Show file tree
Hide file tree
Showing 13 changed files with 137 additions and 47 deletions.
74 changes: 64 additions & 10 deletions app/src/main/java/ir/mehdiyari/krypt/ui/KryptApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,18 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.FabPosition
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.Snackbar
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.SnackbarResult
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
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.Modifier
import ir.mehdiyari.krypt.R
Expand All @@ -29,8 +32,11 @@ import ir.mehdiyari.krypt.mediaList.MediaViewAction
import ir.mehdiyari.krypt.mediaList.navigateToMedia
import ir.mehdiyari.krypt.setting.ui.navigateToSettings
import ir.mehdiyari.krypt.shareContent.ShareDataViewModel
import ir.mehdiyari.krypt.shared.designsystem.components.snackbar.KryptSnackBar
import ir.mehdiyari.krypt.ui.navigation.KryptNaveHost
import ir.mehdiyari.krypt.voice.record.record.navigateToAddVoice
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.launch
import ir.mehdiyari.krypt.shared.designsystem.resources.R as DesignSystemR

@Composable
Expand All @@ -43,9 +49,10 @@ fun KryptApp(
) {
KryptTheme {
val snackbarHostState = remember { SnackbarHostState() }

val snackbarData = remember { MutableSharedFlow<KryptSnackBar?>() }
var openAddItem by remember { mutableStateOf(false) }
var openMenu by remember { mutableStateOf(false) }
val kryptAppCoroutineScope = rememberCoroutineScope()

if (openAddItem) {
AddBottomSheet(scope = kryptAppState.coroutineScope, onSelectAddItemMenuItem = {
Expand Down Expand Up @@ -78,7 +85,16 @@ fun KryptApp(
}, dismissBottomSheet = { openMenu = false }, R.string.app_name)
}

Scaffold(snackbarHost = { SnackbarHost(snackbarHostState) },
Scaffold(
snackbarHost = {
SnackbarHost(hostState = snackbarHostState, snackbar = {
Snackbar(
snackbarData = it,
containerColor = MaterialTheme.colorScheme.surface,
contentColor = MaterialTheme.colorScheme.onSurface,
)
})
},
bottomBar = {
if (kryptAppState.isInHomeRoute) {
KryptBottomAppBar(openMenuSheet = {
Expand Down Expand Up @@ -108,14 +124,52 @@ fun KryptApp(
startDestination = if (hasAnyAccount) ROUTE_LOGIN else ROUTE_CREATE_ACCOUNT,
sharedDataViewModel = sharedDataViewModel,
onRestartApp = onLockAppClicked,
onShowSnackbar = { message, action ->
snackbarHostState.showSnackbar(
message = message,
actionLabel = action,
duration = SnackbarDuration.Short,
) == SnackbarResult.ActionPerformed
onShowSnackbar = { kryptSnackBar ->
kryptAppCoroutineScope.launch {
snackbarData.emit(kryptSnackBar)
}
})
}
}

ShowKryptSnackBar(
snackbarHostState = snackbarHostState,
snackbarData = snackbarData,
)
}
}

@Composable
private fun ShowKryptSnackBar(
snackbarHostState: SnackbarHostState,
snackbarData: MutableSharedFlow<KryptSnackBar?>,
) {
LaunchedEffect(Unit) {
snackbarData.collect {
when (it) {
is KryptSnackBar.Message -> {
if (snackbarHostState.showSnackbar(
message = it.message,
duration = it.duration,
) == SnackbarResult.Dismissed
) {
it.onDismiss()
}
}

is KryptSnackBar.WithAction -> {
when (snackbarHostState.showSnackbar(
message = it.message,
actionLabel = it.actionText,
duration = it.duration,
)) {
SnackbarResult.Dismissed -> it.onDismiss()
SnackbarResult.ActionPerformed -> it.onActionClicked()
}
}

null -> Unit
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import ir.mehdiyari.krypt.restore.navigateToRestore
import ir.mehdiyari.krypt.restore.restoreScreen
import ir.mehdiyari.krypt.setting.ui.settingsRoute
import ir.mehdiyari.krypt.shareContent.ShareDataViewModel
import ir.mehdiyari.krypt.shared.designsystem.components.snackbar.KryptSnackBar
import ir.mehdiyari.krypt.ui.KryptAppState
import ir.mehdiyari.krypt.voice.collection.audiosRoute
import ir.mehdiyari.krypt.voice.collection.navigateToAudios
Expand All @@ -30,7 +31,7 @@ import ir.mehdiyari.krypt.voice.record.record.navigateToAddVoice
@Composable
fun KryptNaveHost(
kryptAppState: KryptAppState,
onShowSnackbar: suspend (String, String?) -> Boolean,
onShowSnackbar: (KryptSnackBar) -> Unit,
startDestination: String,
modifier: Modifier = Modifier,
sharedDataViewModel: ShareDataViewModel,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ package ir.mehdiyari.krypt
import com.android.build.api.dsl.CommonExtension
import org.gradle.api.Project

fun Project.configureComposeAndroid(extension: CommonExtension<*, *, *, *>) {
with(extension){
buildFeatures{
fun Project.configureComposeAndroid(extension: CommonExtension<*, *, *, *, *>) {
with(extension) {
buildFeatures {
compose = true
}

composeOptions {
kotlinCompilerExtensionVersion = libs.findVersion("androidxComposeCompiler").get().toString()
kotlinCompilerExtensionVersion =
libs.findVersion("androidxComposeCompiler").get().toString()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile


fun Project.configureKotlinAndroid(
commonExtension: CommonExtension<*, *, *, *>,
commonExtension: CommonExtension<*, *, *, *, *>,
) {

commonExtension.apply {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ enum class KryptFlavor(

}

fun configureFlavor(extension: CommonExtension<*, *, *, *>) {
with(extension){
fun configureFlavor(extension: CommonExtension<*, *, *, *, *>) {
with(extension) {
flavorDimensions += FlavorDimension.main.name

productFlavors {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ object Versions {
const val VERSION_NAME = "3.0.2-alpha"

const val MIN_SDK = 23
const val COMPILE_SDK = 33
const val TARGET_SDK = 33
const val COMPILE_SDK = 34
const val TARGET_SDK = 34

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.compose.ui.Modifier
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
import ir.mehdiyari.krypt.shared.designsystem.components.snackbar.KryptSnackBar

const val ROUTE_CREATE_ACCOUNT = "create_account"

Expand All @@ -16,7 +17,7 @@ fun NavController.navigateToCreateAccount() {

fun NavGraphBuilder.createAccountScreen(
onCreateAccountSuccess: () -> Unit,
onShowSnackbar: suspend (String, String?) -> Boolean,
onShowSnackbar: (KryptSnackBar) -> Unit,
onRestoreClicked: () -> Unit,
) {
composable(ROUTE_CREATE_ACCOUNT) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import androidx.compose.material.icons.filled.ArrowForward
import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
Expand All @@ -32,11 +33,12 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import ir.mehdiyari.krypt.core.designsystem.theme.KryptTheme
import ir.mehdiyari.krypt.createAccount.R
import ir.mehdiyari.krypt.shared.designsystem.components.snackbar.KryptSnackBar

@Composable
internal fun CreateAccountRoute(
onLoginSuccess: () -> Unit,
onShowSnackbar: suspend (String, String?) -> Boolean,
onShowSnackbar: (KryptSnackBar) -> Unit,
modifier: Modifier = Modifier,
viewModel: CreateAccountViewModel = hiltViewModel(),
onRestoreClicked: () -> Unit,
Expand All @@ -58,8 +60,10 @@ internal fun CreateAccountRoute(

is CreateAccountViewState.FailureCreateAccount -> {
onShowSnackbar(
context.getString((createAccountUiState as CreateAccountViewState.FailureCreateAccount).errorResId),
null
KryptSnackBar.Message(
message = context.getString((createAccountUiState as CreateAccountViewState.FailureCreateAccount).errorResId),
duration = SnackbarDuration.Short,
)
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.compose.ui.Modifier
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
import ir.mehdiyari.krypt.shared.designsystem.components.snackbar.KryptSnackBar

const val ROUTE_LOGIN = "login"

Expand All @@ -15,7 +16,7 @@ fun NavController.navigateToLogin() {
fun NavGraphBuilder.loginScreen(
onCreateAccountClicked: () -> Unit,
onLoginSuccess: () -> Unit,
showSnackBar: suspend (message: String, action: String?) -> Boolean,
showSnackBar: (KryptSnackBar) -> Unit,
onRestoreClicked: () -> Unit,
) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ir.mehdiyari.krypt.features.auth.login
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
Expand All @@ -18,12 +19,13 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import ir.mehdiyari.krypt.core.designsystem.theme.KryptTheme
import ir.mehdiyari.krypt.shared.designsystem.components.snackbar.KryptSnackBar

@Composable
fun LoginRoute(
onCreateAccountClicked: () -> Unit,
onLoginSuccess: () -> Unit,
showSnackBar: suspend (message: String, action: String?) -> Boolean,
showSnackBar: (KryptSnackBar) -> Unit,
modifier: Modifier = Modifier,
viewModel: LoginViewModel = hiltViewModel(),
onRestoreClicked: () -> Unit,
Expand All @@ -38,7 +40,12 @@ fun LoginRoute(
LoginViewState.SuccessfulLogin -> onLoginSuccess()
is LoginViewState.FailureLogin -> {
val message = context.getString((loginState as LoginViewState.FailureLogin).errorId)
showSnackBar(message, null)
showSnackBar(
KryptSnackBar.Message(
message = message,
duration = SnackbarDuration.Short,
)
)
}

null -> Unit
Expand Down
38 changes: 19 additions & 19 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
[versions]
androidGradlePlugin = "8.0.2"
androidLibraryPlugin = "8.0.2"
kspPlugin = "1.8.21-1.0.11"
kotlinAndroidPlugin = "1.8.21"
androidGradlePlugin = "8.2.2"
androidLibraryPlugin = "8.2.2"
kspPlugin = "1.9.22-1.0.17"
kotlinAndroidPlugin = "1.9.22"
hiltAndroidGradlePlugin = "2.46.1"
androidxComposeCompiler = "1.4.7"
hiltNavigationCompose = "1.0.0"
ktx = "1.10.1"
androidxComposeCompiler = "1.5.8"
hiltNavigationCompose = "1.1.0"
ktx = "1.12.0"
androidXAppCompat = "1.6.1"
junit = "4.13.2"
testExt = "1.1.5"
espressoCore = "3.5.1"
lifecycle = "2.6.1"
room = "2.5.2"
hilt = "2.46.1"
composeBom = "2023.06.01"
navigationCompose = "2.6.0"
constraintlayoutCompose = "1.1.0-alpha10"
coroutines = "1.6.4"
lifecycle = "2.7.0"
room = "2.6.1"
hilt = "2.48"
composeBom = "2024.02.00"
navigationCompose = "2.7.7"
constraintlayoutCompose = "1.1.0-alpha13"
coroutines = "1.7.3"
fallery = "1.0.4"
glide = "4.15.1"
glide = "4.16.0"
landscapistGlide = "1.6.1"
moshiKotlin = "1.13.0"
moshiKotlin = "1.14.0"
processPhoenix = "2.1.2"
exoplayer = "1.1.0"
mockk = "1.12.7"
exoplayer = "1.2.1"
mockk = "1.13.9"
turbine = "1.0.0"
splashscreen = "1.0.1"
documentfile = "1.0.1"
material = "1.9.0"
material = "1.11.0"


[libraries]
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Wed Dec 29 18:13:07 IRST 2021
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package ir.mehdiyari.krypt.shared.designsystem.components.snackbar

import androidx.compose.material3.SnackbarDuration

sealed class KryptSnackBar {

data class Message(
val message: String,
val onDismiss: () -> Unit = {},
val duration: SnackbarDuration,
) : KryptSnackBar()

data class WithAction(
val message: String,
val actionText: String,
val onActionClicked: () -> Unit = {},
val onDismiss: () -> Unit = {},
val duration: SnackbarDuration,
) : KryptSnackBar()

}

0 comments on commit 06a9843

Please sign in to comment.