Skip to content

Commit e436c7b

Browse files
UI changes for Settings (#576)
* UI changes for Settings * removing unused imports
1 parent 2c94070 commit e436c7b

File tree

7 files changed

+113
-62
lines changed

7 files changed

+113
-62
lines changed

application/core/documents/src/commonMain/kotlin/io/writeopia/core/folders/di/WorkspaceHandlerImpl.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,13 @@ class WorkspaceHandlerImpl(
8787
}
8888

8989
override fun selectWorkspaceToManage(workspaceId: String) {
90-
_selectedWorkspaceId.value = workspaceId
90+
val currentSelected = _selectedWorkspaceId.value
91+
92+
if (currentSelected == workspaceId) {
93+
_selectedWorkspaceId.value = null
94+
} else {
95+
_selectedWorkspaceId.value = workspaceId
96+
}
9197
}
9298

9399
override fun syncWorkspace() {

application/core/navigation/src/commonMain/kotlin/io/writeopia/navigation/Navigation.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ fun Navigation(
8080
navigateToAuthMenu = {
8181
navController.navigate(Destinations.AUTH_MENU_INNER_NAVIGATION.id)
8282
},
83+
resetPassword = {
84+
navController.navigate(Destinations.AUTH_RESET_PASSWORD.id)
85+
},
8386
navigationClick = navController::navigateUp,
8487
selectColorTheme = selectColorTheme
8588
)

application/features/account/src/commonMain/kotlin/io/writeopia/account/navigation/AccountNavigation.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package io.writeopia.account.navigation
22

33
import androidx.compose.animation.slideInHorizontally
44
import androidx.compose.animation.slideOutHorizontally
5+
import androidx.compose.foundation.background
56
import androidx.compose.foundation.clickable
67
import androidx.compose.foundation.layout.Row
78
import androidx.compose.foundation.layout.fillMaxHeight
@@ -25,10 +26,12 @@ import io.writeopia.common.utils.Destinations
2526
import io.writeopia.common.utils.icons.WrIcons
2627
import io.writeopia.model.ColorThemeOption
2728
import io.writeopia.resources.WrStrings
29+
import io.writeopia.theme.WriteopiaTheme
2830

2931
@OptIn(ExperimentalMaterial3Api::class)
3032
fun NavGraphBuilder.accountMenuNavigation(
3133
navigateToAuthMenu: () -> Unit,
34+
resetPassword: () -> Unit,
3235
navigationClick: () -> Unit,
3336
selectColorTheme: (ColorThemeOption) -> Unit,
3437
) {
@@ -77,11 +80,14 @@ fun NavGraphBuilder.accountMenuNavigation(
7780
}
7881
) { paddingValues ->
7982
AccountMenuScreen(
80-
modifier = Modifier.padding(paddingValues),
83+
modifier = Modifier.background(WriteopiaTheme.colorScheme.lightBackground)
84+
.padding(paddingValues),
8185
accountMenuViewModel = accountMenuViewModel,
8286
isLoggedInState = accountMenuViewModel.isLoggedIn,
8387
onLogout = navigateToAuthMenu,
8488
goToRegister = navigateToAuthMenu,
89+
changeAccount = navigateToAuthMenu,
90+
resetPassword = resetPassword,
8591
selectColorTheme = selectColorTheme
8692
)
8793
}

application/features/account/src/commonMain/kotlin/io/writeopia/account/ui/AccountMenuScreen.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ fun AccountMenuScreen(
2020
isLoggedInState: StateFlow<ResultData<Boolean>>,
2121
onLogout: () -> Unit,
2222
goToRegister: () -> Unit,
23+
changeAccount: () -> Unit,
24+
resetPassword: () -> Unit,
2325
selectColorTheme: (ColorThemeOption) -> Unit,
2426
modifier: Modifier = Modifier,
2527
) {
@@ -53,6 +55,8 @@ fun AccountMenuScreen(
5355
usersInSelectedWorkspace = accountMenuViewModel.usersOfSelectedWorkspace,
5456
isLoggedInState = isLoggedInState,
5557
goToRegister = goToRegister,
58+
changeAccount = changeAccount,
59+
resetPassword = resetPassword,
5660
logout = {
5761
accountMenuViewModel.logout {
5862
onLogout()

application/features/account/src/commonMain/kotlin/io/writeopia/account/ui/SettingsDialog.kt

Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,12 @@ import io.writeopia.common.utils.download.DownloadState
6464
import io.writeopia.common.utils.icons.WrIcons
6565
import io.writeopia.commonui.SettingsPanel
6666
import io.writeopia.commonui.buttons.CommonButton
67-
import io.writeopia.commonui.buttons.CommonTextButton
6867
import io.writeopia.commonui.workplace.WorkspaceConfigurationDialog
6968
import io.writeopia.model.ColorThemeOption
7069
import io.writeopia.resources.WrStrings
7170
import io.writeopia.sdk.models.user.WriteopiaUser
7271
import io.writeopia.sdk.models.utils.ResultData
7372
import io.writeopia.sdk.models.utils.toBoolean
74-
import io.writeopia.commonui.buttons.AccentButton
7573
import io.writeopia.sdk.models.workspace.Workspace
7674
import io.writeopia.theme.WriteopiaTheme
7775
import kotlinx.coroutines.flow.Flow
@@ -210,12 +208,10 @@ fun SettingsScreen(
210208
usersInSelectedWorkspace: Flow<ResultData<List<String>>>,
211209
isLoggedInState: StateFlow<ResultData<Boolean>>,
212210
goToRegister: () -> Unit,
211+
changeAccount: () -> Unit,
212+
resetPassword: () -> Unit,
213213
logout: () -> Unit,
214214
) {
215-
Connect(isLoggedInState, goToRegister, logout)
216-
217-
Spacer(modifier = Modifier.height(16.dp))
218-
219215
TeamsSection(
220216
workspacesState = workspacesState,
221217
selectedWorkspaceState = selectedWorkspaceState,
@@ -233,6 +229,10 @@ fun SettingsScreen(
233229

234230
Spacer(modifier = Modifier.height(20.dp))
235231

232+
Connect(isLoggedInState, goToRegister, changeAccount, resetPassword, logout)
233+
234+
Spacer(modifier = Modifier.height(16.dp))
235+
236236
WorkspaceSection(
237237
workplacePathState,
238238
syncWorkspaceState,
@@ -264,6 +264,8 @@ fun SettingsScreen(
264264
private fun Connect(
265265
isLoggedInState: StateFlow<ResultData<Boolean>>,
266266
goToRegister: () -> Unit,
267+
changeAccount: () -> Unit,
268+
resetPassword: () -> Unit,
267269
logout: () -> Unit,
268270
) {
269271
val isLoggedIn = isLoggedInState.collectAsState().value.toBoolean()
@@ -283,16 +285,41 @@ private fun Connect(
283285
color = MaterialTheme.colorScheme.onBackground,
284286
fontWeight = FontWeight.Bold,
285287
)
286-
}
287288

288-
Spacer(modifier = Modifier.height(4.dp))
289+
Spacer(modifier = Modifier.height(4.dp))
289290

290-
AccentButton(text = if (isLoggedIn) WrStrings.logout() else WrStrings.singIn()) {
291-
if (isLoggedIn) {
292-
logout()
293-
} else {
291+
CommonButton(text = WrStrings.singIn()) {
294292
goToRegister()
295293
}
294+
} else {
295+
Spacer(modifier = Modifier.height(4.dp))
296+
297+
Column(modifier = Modifier.width(IntrinsicSize.Max)) {
298+
CommonButton(
299+
text = WrStrings.changeAccount(),
300+
modifier = Modifier.fillMaxWidth()
301+
) {
302+
changeAccount()
303+
}
304+
305+
Spacer(modifier = Modifier.height(4.dp))
306+
307+
CommonButton(
308+
text = WrStrings.resetPassword(),
309+
modifier = Modifier.fillMaxWidth()
310+
) {
311+
resetPassword()
312+
}
313+
314+
Spacer(modifier = Modifier.height(4.dp))
315+
316+
CommonButton(
317+
text = WrStrings.logout(),
318+
modifier = Modifier.fillMaxWidth()
319+
) {
320+
logout()
321+
}
322+
}
296323
}
297324
}
298325

@@ -333,7 +360,7 @@ private fun AccountScreen(
333360
Spacer(modifier = Modifier.height(SPACE_AFTER_SUB_TITLE.dp))
334361

335362
Column(modifier = Modifier.width(IntrinsicSize.Max)) {
336-
CommonTextButton(
363+
CommonButton(
337364
text = WrStrings.changeAccount(),
338365
modifier = Modifier.fillMaxWidth()
339366
) {
@@ -342,7 +369,7 @@ private fun AccountScreen(
342369

343370
Spacer(modifier = Modifier.height(4.dp))
344371

345-
CommonTextButton(
372+
CommonButton(
346373
text = WrStrings.resetPassword(),
347374
modifier = Modifier.fillMaxWidth()
348375
) {
@@ -351,7 +378,7 @@ private fun AccountScreen(
351378

352379
Spacer(modifier = Modifier.height(4.dp))
353380

354-
CommonTextButton(text = WrStrings.logout(), modifier = Modifier.fillMaxWidth()) {
381+
CommonButton(text = WrStrings.logout(), modifier = Modifier.fillMaxWidth()) {
355382
logout()
356383
}
357384

@@ -365,11 +392,13 @@ private fun AccountScreen(
365392

366393
Spacer(modifier = Modifier.height(SPACE_AFTER_SUB_TITLE.dp))
367394

368-
CommonTextButton(
395+
CommonButton(
369396
text = WrStrings.deleteAccount(),
370397
modifier = Modifier.fillMaxWidth(),
371398
defaultColor = Color.Red,
372-
textColor = MaterialTheme.colorScheme.onPrimary,
399+
textStyle = MaterialTheme.typography.bodySmall.copy(
400+
color = MaterialTheme.colorScheme.onPrimary
401+
),
373402
clickListener = showDeleteConfirm
374403
)
375404

application/features/auth/src/commonMain/kotlin/io/writeopia/auth/register/ResetPasswordScreen.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation
3636
import androidx.compose.ui.text.input.VisualTransformation
3737
import androidx.compose.ui.unit.dp
3838
import androidx.compose.ui.unit.max
39+
import io.writeopia.common.utils.configuration.LocalPlatform
3940
import io.writeopia.common.utils.icons.WrIcons
4041
import io.writeopia.resources.WrStrings
4142
import io.writeopia.sdk.models.utils.ResultData
@@ -115,9 +116,11 @@ private fun BoxScope.ResetPasswordContent(
115116
var showRepeatPassword by remember { mutableStateOf(false) }
116117
val shape = MaterialTheme.shapes.large
117118

119+
val currentPlatform = LocalPlatform.current
120+
118121
Column(
119122
modifier = modifier
120-
.padding(horizontal = 50.dp)
123+
.padding(horizontal = 20.dp)
121124
.widthIn(max = 430.dp)
122125
.align(Alignment.Center),
123126
horizontalAlignment = Alignment.CenterHorizontally
@@ -144,7 +147,7 @@ private fun BoxScope.ResetPasswordContent(
144147

145148
OutlinedTextField(
146149
password,
147-
modifier = Modifier.fillMaxWidth().padding(horizontal = 24.dp),
150+
modifier = Modifier.fillMaxWidth(),
148151
onValueChange = passwordChanged,
149152
shape = shape,
150153
singleLine = true,
@@ -182,7 +185,7 @@ private fun BoxScope.ResetPasswordContent(
182185

183186
OutlinedTextField(
184187
repeatPassword,
185-
modifier = Modifier.fillMaxWidth().padding(horizontal = 24.dp),
188+
modifier = Modifier.fillMaxWidth(),
186189
onValueChange = repeatPasswordChanged,
187190
shape = shape,
188191
singleLine = true,
@@ -220,13 +223,12 @@ private fun BoxScope.ResetPasswordContent(
220223

221224
TextButton(
222225
modifier = Modifier
223-
.padding(horizontal = 24.dp)
224226
.background(MaterialTheme.colorScheme.primary, shape = shape)
225227
.fillMaxWidth(),
226228
onClick = onPasswordResetRequest
227229
) {
228230
Text(
229-
text = WrStrings.createAccount(),
231+
text = WrStrings.resetPassword(),
230232
color = MaterialTheme.colorScheme.onPrimary
231233
)
232234
}

application/features/note_menu/src/commonMain/kotlin/io/writeopia/notemenu/ui/screen/menu/MobileChooseNoteScreen.kt

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ package io.writeopia.notemenu.ui.screen.menu
33
import androidx.compose.animation.AnimatedVisibilityScope
44
import androidx.compose.animation.ExperimentalSharedTransitionApi
55
import androidx.compose.animation.SharedTransitionScope
6+
import androidx.compose.foundation.background
67
import androidx.compose.foundation.clickable
78
import androidx.compose.foundation.layout.Box
89
import androidx.compose.foundation.layout.PaddingValues
910
import androidx.compose.foundation.layout.Row
1011
import androidx.compose.foundation.layout.Spacer
1112
import androidx.compose.foundation.layout.fillMaxSize
1213
import androidx.compose.foundation.layout.padding
14+
import androidx.compose.foundation.layout.size
1315
import androidx.compose.foundation.layout.width
1416
import androidx.compose.foundation.shape.CircleShape
1517
import androidx.compose.material.icons.Icons
@@ -29,8 +31,6 @@ import androidx.compose.runtime.getValue
2931
import androidx.compose.ui.Alignment
3032
import androidx.compose.ui.Modifier
3133
import androidx.compose.ui.draw.clip
32-
import androidx.compose.ui.graphics.vector.RenderVectorGroup
33-
import androidx.compose.ui.graphics.vector.rememberVectorPainter
3434
import androidx.compose.ui.semantics.semantics
3535
import androidx.compose.ui.semantics.testTag
3636
import androidx.compose.ui.unit.dp
@@ -167,49 +167,29 @@ private fun TopBar(
167167
modifier = Modifier.clickable(onClick = accountClick),
168168
verticalAlignment = Alignment.CenterVertically
169169
) {
170-
val userIcon = WrIcons.person
171-
172-
val fallbackPainter = rememberVectorPainter(
173-
defaultWidth = userIcon.defaultWidth,
174-
defaultHeight = userIcon.defaultHeight,
175-
viewportWidth = userIcon.viewportWidth,
176-
viewportHeight = userIcon.viewportHeight,
177-
name = userIcon.name,
178-
tintColor = MaterialTheme.colorScheme.onPrimary,
179-
tintBlendMode = userIcon.tintBlendMode,
180-
autoMirror = userIcon.autoMirror,
181-
) { _, _ ->
182-
RenderVectorGroup(group = userIcon.root)
170+
Box(
171+
modifier = Modifier
172+
.size(42.dp)
173+
.clip(CircleShape)
174+
.background(MaterialTheme.colorScheme.secondary)
175+
.clickable(onClick = accountClick),
176+
contentAlignment = Alignment.Center
177+
) {
178+
Text(
179+
text = getUserInitials(title),
180+
color = MaterialTheme.colorScheme.onSecondary,
181+
style = MaterialTheme.typography.labelLarge,
182+
maxLines = 1
183+
)
183184
}
184185

185-
// AsyncImage(
186-
// modifier = Modifier
187-
// .clip(shape = CircleShape)
188-
// .background(MaterialTheme.colorScheme.secondary)
189-
// .size(48.dp)
190-
// .padding(10.dp),
191-
// model = ImageRequest.Builder(LocalContext.current)
192-
// .data("")
193-
// .build(),
194-
// contentScale = ContentScale.Crop,
195-
// contentDescription = "",
196-
// placeholder = fallbackPainter,
197-
// error = fallbackPainter
198-
// )
199-
200186
Spacer(modifier = Modifier.width(12.dp))
201187

202188
Text(
203189
modifier = Modifier,
204-
// .let { modifierLet ->
205-
// if (title is UserState.Loading) {
206-
// modifierLet.shimmer()
207-
// } else {
208-
// modifierLet
209-
// }
210-
// },
211190
text = getUserName(title),
212-
color = MaterialTheme.colorScheme.onPrimary
191+
color = MaterialTheme.colorScheme.onPrimary,
192+
maxLines = 1
213193
)
214194
}
215195
},
@@ -242,6 +222,27 @@ private fun getUserName(userNameState: UserState<String>): String =
242222
// stringResource(id = R.string.disconnected)
243223
}
244224

225+
private fun getUserInitials(userNameState: UserState<String>): String =
226+
when (userNameState) {
227+
is UserState.ConnectedUser -> {
228+
val name = userNameState.data
229+
if (name.isNotEmpty()) {
230+
name.split(" ")
231+
.filter { it.isNotEmpty() }
232+
.take(2)
233+
.mapNotNull { it.firstOrNull()?.uppercaseChar() }
234+
.joinToString("")
235+
.ifEmpty { "U" }
236+
} else {
237+
"U"
238+
}
239+
}
240+
is UserState.DisconnectedUser -> "OF"
241+
is UserState.Idle -> ""
242+
is UserState.Loading -> ""
243+
is UserState.UserNotReturned -> "D"
244+
}
245+
245246
@Composable
246247
private fun FloatingActionButton(
247248
onClick: () -> Unit

0 commit comments

Comments
 (0)