Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move save to the topbar of user settings and deduplicate topbar code #1243

Merged
merged 5 commits into from
Sep 20, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class AccountSettingsViewModel(
siteViewModel: SiteViewModel,
account: Account,
ctx: Context,
onSuccess: () -> Unit,
) {
viewModelScope.launch {
saveUserSettingsRes = ApiState.Loading
Expand All @@ -45,6 +46,7 @@ class AccountSettingsViewModel(
)

maybeUpdateAccountSettings(account, form)
onSuccess()
}

is ApiState.Failure -> {
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/com/jerboa/model/SiteViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import com.jerboa.datatypes.types.GetSite
import com.jerboa.datatypes.types.GetSiteResponse
import com.jerboa.datatypes.types.GetUnreadCount
import com.jerboa.datatypes.types.GetUnreadCountResponse
import com.jerboa.datatypes.types.SaveUserSettings
import com.jerboa.db.entity.AnonAccount
import com.jerboa.db.entity.getJWT
import com.jerboa.db.entity.isAnon
Expand All @@ -43,6 +44,7 @@ class SiteViewModel(private val accountRepository: AccountRepository) : ViewMode
private var unreadCountRes: ApiState<GetUnreadCountResponse> by mutableStateOf(ApiState.Empty)

val unreadCount by derivedStateOf { getUnreadCountTotal(unreadCountRes) }
lateinit var saveUserSettings: SaveUserSettings

init {
viewModelScope.launch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.*
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
Expand All @@ -19,49 +18,6 @@ import com.jerboa.R
import com.jerboa.db.entity.Account
import com.jerboa.ui.components.common.MarkdownTextField

@OptIn(ExperimentalMaterial3Api::class)
MV-GH marked this conversation as resolved.
Show resolved Hide resolved
@Composable
fun CommentEditHeader(
onBackClick: () -> Unit,
onSaveClick: () -> Unit,
loading: Boolean,
) {
TopAppBar(
title = {
Text(
text = stringResource(R.string.comment_edit_edit),
)
},
actions = {
IconButton(
onClick = onSaveClick,
enabled = !loading,
) {
if (loading) {
CircularProgressIndicator(
color = MaterialTheme.colorScheme.onSurface,
)
} else {
Icon(
imageVector = Icons.Outlined.Save,
contentDescription = stringResource(R.string.commentEdit_save),
)
}
}
},
navigationIcon = {
IconButton(
onClick = onBackClick,
) {
Icon(
Icons.Outlined.Close,
contentDescription = stringResource(R.string.comment_edit_back),
)
}
},
)
}

@Composable
fun CommentEdit(
content: TextFieldValue,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,18 @@ import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.TextFieldValue
import androidx.lifecycle.viewmodel.compose.viewModel
import com.jerboa.JerboaAppState
import com.jerboa.R
import com.jerboa.api.ApiState
import com.jerboa.datatypes.types.CommentView
import com.jerboa.feat.doIfReadyElseDisplayInfo
import com.jerboa.model.AccountViewModel
import com.jerboa.model.CommentEditViewModel
import com.jerboa.ui.components.common.JerboaSnackbarHost
import com.jerboa.ui.components.common.SaveTopBar
import com.jerboa.ui.components.common.getCurrentAccount

object CommentEditReturn {
Expand Down Expand Up @@ -60,7 +63,7 @@ fun CommentEditActivity(
Scaffold(
snackbarHost = { JerboaSnackbarHost(snackbarHostState) },
topBar = {
CommentEditHeader(
SaveTopBar(
loading = loading,
onBackClick = appState::popBackStack,
onSaveClick = {
Expand All @@ -84,6 +87,8 @@ fun CommentEditActivity(
}
}
},
title = stringResource(R.string.comment_edit_edit),
saveText = R.string.comment_edit_save,
)
},
content = { padding ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.selection.SelectionContainer
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.*
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
Expand All @@ -30,49 +29,6 @@ import com.jerboa.ui.components.post.PostNodeHeader
import com.jerboa.ui.theme.LARGE_PADDING
import com.jerboa.ui.theme.MEDIUM_PADDING

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CommentReplyHeader(
onClickBack: () -> Unit,
onSendClick: () -> Unit,
loading: Boolean,
) {
TopAppBar(
title = {
Text(
text = stringResource(R.string.comment_reply_reply),
)
},
actions = {
IconButton(
onClick = onSendClick,
enabled = !loading,
) {
if (loading) {
CircularProgressIndicator(
color = MaterialTheme.colorScheme.onSurface,
)
} else {
Icon(
imageVector = Icons.Outlined.Send,
contentDescription = stringResource(R.string.commentReply_send),
)
}
}
},
navigationIcon = {
IconButton(
onClick = onClickBack,
) {
Icon(
Icons.Outlined.Close,
contentDescription = stringResource(R.string.comment_reply_back),
)
}
},
)
}

@Composable
fun RepliedComment(
commentView: CommentView,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package com.jerboa.ui.components.comment.reply
import android.util.Log
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Send
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
Expand All @@ -12,16 +14,19 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.TextFieldValue
import androidx.lifecycle.viewmodel.compose.viewModel
import com.jerboa.JerboaAppState
import com.jerboa.R
import com.jerboa.api.ApiState
import com.jerboa.db.entity.isAnon
import com.jerboa.model.AccountViewModel
import com.jerboa.model.CommentReplyViewModel
import com.jerboa.model.ReplyItem
import com.jerboa.model.SiteViewModel
import com.jerboa.ui.components.common.LoadingBar
import com.jerboa.ui.components.common.SaveTopBar
import com.jerboa.ui.components.common.getCurrentAccount

object CommentReplyReturn {
Expand Down Expand Up @@ -58,10 +63,11 @@ fun CommentReplyActivity(

Scaffold(
topBar = {
CommentReplyHeader(
SaveTopBar(
title = stringResource(R.string.comment_reply_reply),
loading = loading,
onClickBack = appState::popBackStack,
onSendClick = {
onBackClick = appState::popBackStack,
onSaveClick = {
if (!account.isAnon()) {
commentReplyViewModel.createComment(
replyItem,
Expand All @@ -77,6 +83,8 @@ fun CommentReplyActivity(
}
}
},
saveText = R.string.commentReply_send,
saveIcon = Icons.Outlined.Send,
)
},
content = { padding ->
Expand Down
76 changes: 40 additions & 36 deletions app/src/main/java/com/jerboa/ui/components/common/AppBars.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.jerboa.ui.components.common

import android.annotation.SuppressLint
import android.app.Activity
import androidx.annotation.StringRes
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.tween
import androidx.compose.foundation.ExperimentalFoundationApi
Expand Down Expand Up @@ -642,13 +643,41 @@ fun LoadingBar(
)
}

/**
* M3 doesn't have a built-in way to do this yet, so we have to do it ourselves.
*
* Supports M3 theming
*/
@OptIn(ExperimentalMaterialApi::class)
@Composable
fun JerboaPullRefreshIndicator(
refreshing: Boolean,
state: PullRefreshState,
modifier: Modifier = Modifier,
backgroundColor: Color = MaterialTheme.colorScheme.surfaceColorAtElevation(6.dp),
contentColor: Color = MaterialTheme.colorScheme.onSurface,
scale: Boolean = true,
) {
PullRefreshIndicator(
refreshing,
state,
modifier,
backgroundColor,
contentColor,
scale,
)
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CreateSubmitHeader(
title: String,
onClickBack: () -> Unit,
onSubmitClick: () -> Unit,
fun SaveTopBar(
MV-GH marked this conversation as resolved.
Show resolved Hide resolved
onBackClick: () -> Unit,
onSaveClick: () -> Unit,
dessalines marked this conversation as resolved.
Show resolved Hide resolved
loading: Boolean,
title: String,
@StringRes saveText: Int = R.string.save,
saveIcon: ImageVector = Icons.Outlined.Save,
formValid: Boolean = true,
) {
TopAppBar(
title = {
Expand All @@ -658,55 +687,30 @@ fun CreateSubmitHeader(
},
actions = {
IconButton(
onClick = onSubmitClick,
enabled = !loading,
onClick = onSaveClick,
enabled = formValid && !loading,
) {
if (loading) {
CircularProgressIndicator(
color = MaterialTheme.colorScheme.onSurface,
)
} else {
Icon(
imageVector = Icons.Outlined.Send,
contentDescription = stringResource(R.string.form_submit),
imageVector = saveIcon,
contentDescription = stringResource(saveText),
)
}
}
},
navigationIcon = {
IconButton(
onClick = onClickBack,
onClick = onBackClick,
) {
Icon(
Icons.Outlined.Close,
contentDescription = stringResource(R.string.create_report_back),
Icons.Outlined.ArrowBack,
contentDescription = stringResource(R.string.topAppBar_back),
)
}
},
)
}

/**
* M3 doesn't have a built-in way to do this yet, so we have to do it ourselves.
*
* Supports M3 theming
*/
@OptIn(ExperimentalMaterialApi::class)
@Composable
fun JerboaPullRefreshIndicator(
refreshing: Boolean,
state: PullRefreshState,
modifier: Modifier = Modifier,
backgroundColor: Color = MaterialTheme.colorScheme.surfaceColorAtElevation(6.dp),
contentColor: Color = MaterialTheme.colorScheme.onSurface,
scale: Boolean = true,
) {
PullRefreshIndicator(
refreshing,
state,
modifier,
backgroundColor,
contentColor,
scale,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ fun CommunityHeader(
IconButton(onClick = onClickBack) {
Icon(
Icons.Outlined.ArrowBack,
contentDescription = stringResource(R.string.community_back),
contentDescription = stringResource(R.string.topAppBar_back),
)
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ fun ViewerHeader(
Icon(
Icons.Outlined.ArrowBack,
tint = Color.White,
contentDescription = stringResource(R.string.login_back),
contentDescription = stringResource(R.string.topAppBar_back),
)
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ fun LoginHeader(
) {
Icon(
Icons.Outlined.ArrowBack,
contentDescription = stringResource(R.string.login_back),
contentDescription = stringResource(R.string.topAppBar_back),
)
}
},
Expand Down
Loading