Skip to content

Commit d760653

Browse files
committed
profile + auth screens fix; datastore for desktop path fix
1 parent 0829431 commit d760653

10 files changed

Lines changed: 82 additions & 34 deletions

File tree

composeApp/build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ android {
126126
applicationId = "com.paranid5.cooking_corner"
127127
minSdk = libs.versions.android.minSdk.get().toInt()
128128
targetSdk = libs.versions.android.targetSdk.get().toInt()
129-
versionCode = 1
130-
versionName = "1.0.0"
129+
versionCode = 2
130+
versionName = "1.0.1"
131131
}
132132
packaging {
133133
resources {
@@ -159,7 +159,7 @@ compose.desktop {
159159
nativeDistributions {
160160
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
161161
packageName = "Cooking Corner"
162-
packageVersion = "1.0.0"
162+
packageVersion = "1.0.1"
163163
description = "Cooking Recipes App"
164164
copyright = "© 2024 Arseny Savchenko. All rights reserved."
165165
includeAllModules = true

composeApp/src/androidMain/kotlin/com/paranid5/cooking_corner/MainActivity.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.paranid5.cooking_corner
22

33
import android.os.Bundle
4+
import android.view.WindowManager
45
import androidx.activity.ComponentActivity
56
import androidx.activity.compose.setContent
7+
import androidx.activity.enableEdgeToEdge
68
import androidx.compose.foundation.layout.fillMaxSize
79
import androidx.compose.ui.Modifier
810
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
@@ -22,6 +24,9 @@ class MainActivity : ComponentActivity(), DIAware {
2224
installSplashScreen()
2325
super.onCreate(savedInstanceState)
2426

27+
enableEdgeToEdge()
28+
setNavigationBarColorToTransparent()
29+
2530
val rootComponent = retainedComponent {
2631
rootComponentFactory.create(componentContext = it)
2732
}
@@ -34,3 +39,12 @@ class MainActivity : ComponentActivity(), DIAware {
3439
}
3540
}
3641
}
42+
43+
internal fun MainActivity.setNavigationBarColorToTransparent() = window.run {
44+
setFlags(
45+
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
46+
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
47+
)
48+
49+
navigationBarColor = getColor(android.R.color.transparent)
50+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<style name="Theme.CookingCorner" parent="Theme.MaterialComponents.DayNight.NoActionBar">
4+
<item name="android:colorPrimary">@color/main_pastel</item>
5+
<item name="android:colorBackground">@color/main_pastel</item>
6+
<item name="android:statusBarColor">@android:color/transparent</item>
7+
<item name="android:navigationBarColor">@color/main_pastel</item>
8+
<item name="android:windowLightNavigationBar">true</item>
9+
</style>
10+
</resources>

composeApp/src/androidMain/res/values/themes.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
<item name="android:colorPrimary">@color/main_pastel</item>
55
<item name="android:colorBackground">@color/main_pastel</item>
66
<item name="android:statusBarColor">@android:color/transparent</item>
7-
<item name="android:navigationBarColor">@android:color/transparent</item>
7+
<item name="android:navigationBarColor">@color/main_pastel</item>
88
</style>
99
</resources>

data/src/desktopMain/kotlin/com/paranid5/cooking_corner/data/datastore/DataStoreClientImpl.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@ import okio.Path.Companion.toPath
55

66
internal class DataStoreClientImpl : DataStoreClient {
77
private companion object {
8-
const val DATA_STORE_PATH = "params.preferences_pb"
8+
const val DATA_STORE_PATH = "CookingCorner/params.preferences_pb"
9+
}
10+
11+
private val dataStorePath by lazy {
12+
"${System.getProperty("user.home").orEmpty()}/$DATA_STORE_PATH"
913
}
1014

1115
override val dataStore by lazy {
1216
PreferenceDataStoreFactory.createWithPath(
13-
produceFile = { DATA_STORE_PATH.toPath() }
17+
produceFile = { dataStorePath.toPath() }
1418
)
1519
}
1620
}

feature/auth/src/commonMain/kotlin/com/paranid5/cooking_corner/featrue/auth/sign_in/component/SignInExecutor.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ internal class SignInExecutor(
2424

2525
is UiIntent.ConfirmCredentials -> scope.launch {
2626
tryAcquireTokens(unhandledErrorSnackbar = intent.unhandledErrorSnackbarMessage)
27+
dispatch(Msg.UpdateLoginText("ХУЕСОС"))
2728
}
2829

2930
is UiIntent.ShowSignUp -> publish(Label.ShowSignUp)
@@ -55,4 +56,4 @@ internal class SignInExecutor(
5556
is TokenResult.UnhandledError ->
5657
globalEventRepository.sendSnackbar(unhandledErrorSnackbar)
5758
}
58-
}
59+
}

feature/auth/src/commonMain/kotlin/com/paranid5/cooking_corner/featrue/auth/sign_in/presentation/SignInUi.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
77
import androidx.compose.foundation.layout.height
88
import androidx.compose.foundation.layout.padding
99
import androidx.compose.foundation.layout.width
10+
import androidx.compose.foundation.rememberScrollState
11+
import androidx.compose.foundation.verticalScroll
1012
import androidx.compose.material.Button
1113
import androidx.compose.material.ButtonDefaults
1214
import androidx.compose.material3.Text
@@ -48,7 +50,7 @@ internal fun SignInUi(
4850
val state by component.stateFlow.collectAsState()
4951
val onUiIntent = component::onUiIntent
5052

51-
Box(modifier) {
53+
Column(modifier.verticalScroll(rememberScrollState())) {
5254
SignInContent(
5355
state = state,
5456
onUiIntent = onUiIntent,
@@ -57,11 +59,13 @@ internal fun SignInUi(
5759
.padding(top = AppTheme.dimensions.padding.enormous),
5860
)
5961

62+
Spacer(Modifier.weight(1F))
63+
6064
SignUpButton(
6165
onUiIntent = onUiIntent,
6266
modifier = Modifier
63-
.align(Alignment.BottomCenter)
64-
.padding(bottom = AppTheme.dimensions.padding.extraMedium),
67+
.align(Alignment.CenterHorizontally)
68+
.padding(vertical = AppTheme.dimensions.padding.extraMedium),
6569
)
6670
}
6771
}

feature/auth/src/commonMain/kotlin/com/paranid5/cooking_corner/featrue/auth/sign_up/error/UserAlreadyExistsException.kt

Lines changed: 0 additions & 3 deletions
This file was deleted.

feature/auth/src/commonMain/kotlin/com/paranid5/cooking_corner/featrue/auth/sign_up/presentation/SignUpUi.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.paranid5.cooking_corner.featrue.auth.sign_up.presentation
22

3+
import androidx.compose.foundation.rememberScrollState
4+
import androidx.compose.foundation.verticalScroll
35
import androidx.compose.material.Text
46
import androidx.compose.runtime.Composable
57
import androidx.compose.runtime.collectAsState
@@ -63,7 +65,7 @@ private fun SignUpContent(
6365
val invalidCredentialsSnackbar =
6466
ErrorSnackbar(stringResource(Res.string.auth_user_already_exists))
6567

66-
ConstraintLayout(modifier = modifier) {
68+
ConstraintLayout(modifier = modifier.verticalScroll(rememberScrollState())) {
6769
val (
6870
backButton,
6971
title,
@@ -149,6 +151,7 @@ private fun SignUpContent(
149151
},
150152
modifier = Modifier.constrainAs(confirmButton) {
151153
top.linkTo(confirmPassword.bottom, margin = appPadding.large)
154+
bottom.linkTo(parent.bottom, margin = appPadding.extraMedium)
152155
start.linkTo(parent.start, margin = appPadding.extraMedium)
153156
end.linkTo(parent.end, margin = appPadding.extraMedium)
154157
width = Dimension.fillToConstraints

feature/main/profile/src/commonMain/kotlin/com/paranid5/cooking_corner/feature/main/profile/presentation/ProfileUi.kt

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ import androidx.compose.foundation.layout.Arrangement
66
import androidx.compose.foundation.layout.Box
77
import androidx.compose.foundation.layout.BoxScope
88
import androidx.compose.foundation.layout.Column
9+
import androidx.compose.foundation.layout.ColumnScope
910
import androidx.compose.foundation.layout.Spacer
11+
import androidx.compose.foundation.layout.fillMaxSize
1012
import androidx.compose.foundation.layout.fillMaxWidth
1113
import androidx.compose.foundation.layout.height
14+
import androidx.compose.foundation.layout.heightIn
1215
import androidx.compose.foundation.layout.padding
1316
import androidx.compose.foundation.layout.size
1417
import androidx.compose.foundation.rememberScrollState
@@ -24,6 +27,7 @@ import androidx.compose.ui.Alignment
2427
import androidx.compose.ui.Modifier
2528
import androidx.compose.ui.draw.clip
2629
import androidx.compose.ui.unit.dp
30+
import androidx.compose.ui.zIndex
2731
import com.paranid5.cooking_corner.core.resources.Res
2832
import com.paranid5.cooking_corner.core.resources.ic_edit
2933
import com.paranid5.cooking_corner.core.resources.profile_cooking_experience
@@ -71,23 +75,25 @@ fun ProfileUi(
7175
)
7276

7377
@Composable
74-
fun BoxScope.buildProfileButtonsModifier() =
78+
fun ColumnScope.buildProfileButtonsModifier() =
7579
Modifier
7680
.fillMaxWidth()
77-
.align(Alignment.BottomCenter)
78-
.padding(bottom = AppTheme.dimensions.padding.large)
81+
.align(Alignment.CenterHorizontally)
82+
.padding(vertical = AppTheme.dimensions.padding.large)
7983
.padding(horizontal = AppTheme.dimensions.padding.extraLarge)
8084

8185
@Composable
82-
fun BoxScope.Content(profileUiState: ProfileUiState) {
86+
fun ColumnScope.Content(profileUiState: ProfileUiState) {
8387
ProfileUiImpl(
8488
state = state,
8589
profileUiState = profileUiState,
8690
modifier = Modifier
87-
.align(Alignment.TopCenter)
91+
.align(Alignment.CenterHorizontally)
8892
.padding(top = AppTheme.dimensions.padding.medium),
8993
)
9094

95+
Spacer(Modifier.weight(1F))
96+
9197
ProfileButtons(
9298
isProfileEditable = true,
9399
onUiIntent = onUiIntent,
@@ -96,11 +102,17 @@ fun ProfileUi(
96102
}
97103

98104
@Composable
99-
fun BoxScope.Error() {
100-
AppErrorStub(
101-
errorMessage = stringResource(Res.string.profile_error),
102-
modifier = Modifier.align(Alignment.Center),
103-
)
105+
fun ColumnScope.Error() {
106+
Box(
107+
Modifier
108+
.fillMaxWidth()
109+
.weight(1F)
110+
) {
111+
AppErrorStub(
112+
errorMessage = stringResource(Res.string.profile_error),
113+
modifier = Modifier.align(Alignment.Center),
114+
)
115+
}
104116

105117
ProfileButtons(
106118
isProfileEditable = false,
@@ -109,27 +121,30 @@ fun ProfileUi(
109121
)
110122
}
111123

112-
Box(
124+
Column(
113125
modifier
114126
.pullRefresh(pullRefreshState)
115127
.verticalScroll(rememberScrollState())
116128
) {
129+
AppPullRefreshIndicator(
130+
isRefreshing = isRefreshingShown,
131+
state = pullRefreshState,
132+
modifier = Modifier
133+
.zIndex(1F)
134+
.align(Alignment.CenterHorizontally),
135+
)
136+
117137
when (state.uiState) {
118138
is UiState.Data, is UiState.Refreshing, is UiState.Success ->
119139
state.uiState.getOrNull()?.let { Content(profileUiState = it) }
120140

121-
is UiState.Error ->
122-
Error()
141+
is UiState.Error -> Error()
123142

124143
is UiState.Loading, is UiState.Undefined ->
125-
AppProgressIndicator(Modifier.align(Alignment.Center))
144+
Box(Modifier.fillMaxSize()) {
145+
AppProgressIndicator(Modifier.align(Alignment.Center))
146+
}
126147
}
127-
128-
AppPullRefreshIndicator(
129-
isRefreshing = isRefreshingShown,
130-
state = pullRefreshState,
131-
modifier = Modifier.align(Alignment.TopCenter),
132-
)
133148
}
134149
}
135150

0 commit comments

Comments
 (0)