Skip to content

Commit

Permalink
Clean AddFeed UI and move Theme to shared module
Browse files Browse the repository at this point in the history
  • Loading branch information
prof18 committed Jan 14, 2024
1 parent b6fa602 commit 903a074
Show file tree
Hide file tree
Showing 14 changed files with 123 additions and 204 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
Expand All @@ -21,13 +20,10 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.prof18.feedflow.MR
import com.prof18.feedflow.core.model.CategoriesState
import com.prof18.feedflow.core.model.CategoryId
import com.prof18.feedflow.core.model.CategoryName
import com.prof18.feedflow.shared.domain.model.FeedAddedState
import com.prof18.feedflow.shared.presentation.AddFeedViewModel
import com.prof18.feedflow.shared.presentation.preview.categoriesState
import com.prof18.feedflow.shared.ui.addfeed.AddFeedsContent
import com.prof18.feedflow.shared.presentation.preview.categoriesExpandedState
import com.prof18.feedflow.shared.ui.addfeed.AddFeedContent
import com.prof18.feedflow.shared.ui.preview.FeedFlowPhonePreview
import dev.icerock.moko.resources.compose.stringResource
import org.koin.androidx.compose.koinViewModel
Expand Down Expand Up @@ -68,7 +64,7 @@ fun AddFeedScreen(

val categoriesState by viewModel.categoriesState.collectAsStateWithLifecycle()

AddFeedScreenContent(
AddFeedContent(
feedUrl = feedUrl,
showError = showError,
errorMessage = errorMessage,
Expand All @@ -80,7 +76,6 @@ fun AddFeedScreen(
addFeed = {
viewModel.addFeed()
},
navigateBack = navigateBack,
onExpandClick = {
viewModel.onExpandCategoryClick()
},
Expand All @@ -90,26 +85,7 @@ fun AddFeedScreen(
onDeleteCategoryClick = { categoryId ->
viewModel.deleteCategory(categoryId.value)
},
)
}

@OptIn(ExperimentalMaterial3Api::class)
@Suppress("LongParameterList")
@Composable
private fun AddFeedScreenContent(
feedUrl: String,
showError: Boolean,
errorMessage: String,
categoriesState: CategoriesState,
onFeedUrlUpdated: (String) -> Unit,
addFeed: () -> Unit,
navigateBack: () -> Unit,
onExpandClick: () -> Unit,
onAddCategoryClick: (CategoryName) -> Unit,
onDeleteCategoryClick: (CategoryId) -> Unit,
) {
Scaffold(
topBar = {
topAppBar = {
TopAppBar(
title = {
Text(stringResource(resource = MR.strings.add_feed))
Expand All @@ -128,56 +104,40 @@ private fun AddFeedScreenContent(
},
)
},
) { paddingValues ->
AddFeedsContent(
paddingValues = paddingValues,
feedUrl = feedUrl,
showError = showError,
errorMessage = errorMessage,
categoriesState = categoriesState,
onFeedUrlUpdated = onFeedUrlUpdated,
addFeed = addFeed,
onExpandClick = onExpandClick,
onAddCategoryClick = onAddCategoryClick,
onDeleteCategoryClick = onDeleteCategoryClick,
)
}
)
}

@FeedFlowPhonePreview
@Composable
private fun AddScreenContentPreview() {
FeedFlowTheme {
AddFeedScreenContent(
AddFeedContent(
feedUrl = "https://www.ablog.com/feed",
showError = false,
errorMessage = "",
categoriesState = categoriesState,
onFeedUrlUpdated = {},
addFeed = { },
navigateBack = {},
onExpandClick = {},
onAddCategoryClick = {},
onDeleteCategoryClick = {},
)
}
}

@FeedFlowPhonePreview
@Composable
private fun AddScreenContentInvalidUrlPreview() {
FeedFlowTheme {
AddFeedScreenContent(
feedUrl = "https://www.ablog.com/feed",
showError = true,
errorMessage = "The link you provided is not a valid RSS feed",
categoriesState = categoriesState,
categoriesState = categoriesExpandedState,
onFeedUrlUpdated = {},
addFeed = { },
navigateBack = {},
onExpandClick = {},
onAddCategoryClick = {},
onDeleteCategoryClick = {},
topAppBar = {
TopAppBar(
title = {
Text(stringResource(resource = MR.strings.add_feed))
},
navigationIcon = {
IconButton(
onClick = {},
) {
Icon(
imageVector = Icons.Default.ArrowBack,
contentDescription = null,
)
}
},
)
},
)
}
}
2 changes: 1 addition & 1 deletion config/detekt/detekt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ complexity:
active: true
threshold: 600
LongMethod:
active: true
active: false
threshold: 60
LongParameterList:
active: true
Expand Down
1 change: 0 additions & 1 deletion desktopApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ kotlin {
implementation(libs.kotlinx.coroutines.core)
implementation(libs.decompose)
implementation(libs.decompose.compose.jetbrains)
implementation(libs.jsystem.theme.detector)
implementation(libs.compose.image.loader)
implementation(libs.moko.resourcesCompose)
implementation(libs.bundles.about.libraries)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ import com.prof18.feedflow.desktop.navigation.ChildStack
import com.prof18.feedflow.desktop.navigation.ProvideComponentContext
import com.prof18.feedflow.desktop.navigation.Screen
import com.prof18.feedflow.desktop.ui.components.NewVersionBanner
import com.prof18.feedflow.desktop.ui.style.FeedFlowTheme
import com.prof18.feedflow.desktop.ui.style.rememberDesktopDarkTheme
import com.prof18.feedflow.desktop.utils.initSentry
import com.prof18.feedflow.desktop.versionchecker.NewVersionChecker
import com.prof18.feedflow.desktop.versionchecker.NewVersionState
import com.prof18.feedflow.shared.presentation.HomeViewModel
import com.prof18.feedflow.shared.presentation.SettingsViewModel
import com.prof18.feedflow.shared.ui.theme.FeedFlowTheme
import com.prof18.feedflow.shared.ui.theme.rememberDesktopDarkTheme
import com.prof18.feedflow.shared.utils.UserFeedbackReporter
import dev.icerock.moko.resources.compose.stringResource
import kotlinx.coroutines.launch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ import com.prof18.feedflow.core.utils.Websites.FEED_FLOW_WEBSITE
import com.prof18.feedflow.core.utils.Websites.MG_WEBSITE
import com.prof18.feedflow.desktop.openInBrowser
import com.prof18.feedflow.desktop.scrollbarStyle
import com.prof18.feedflow.desktop.ui.style.FeedFlowTheme
import com.prof18.feedflow.shared.ui.about.AboutButtonItem
import com.prof18.feedflow.shared.ui.about.AboutTextItem
import com.prof18.feedflow.shared.ui.about.AuthorText
import com.prof18.feedflow.shared.ui.style.Spacing
import com.prof18.feedflow.shared.ui.theme.FeedFlowTheme
import dev.icerock.moko.resources.compose.stringResource

@Composable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.prof18.feedflow.desktop.addfeed

import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
Expand All @@ -12,16 +11,13 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import com.prof18.feedflow.core.model.CategoriesState
import com.prof18.feedflow.core.model.CategoryId
import com.prof18.feedflow.core.model.CategoryName
import com.prof18.feedflow.desktop.desktopViewModel
import com.prof18.feedflow.desktop.di.DI
import com.prof18.feedflow.desktop.ui.style.FeedFlowTheme
import com.prof18.feedflow.shared.domain.model.FeedAddedState
import com.prof18.feedflow.shared.presentation.AddFeedViewModel
import com.prof18.feedflow.shared.presentation.preview.categoriesState
import com.prof18.feedflow.shared.ui.addfeed.AddFeedsContent
import com.prof18.feedflow.shared.presentation.preview.categoriesExpandedState
import com.prof18.feedflow.shared.ui.addfeed.AddFeedContent
import com.prof18.feedflow.shared.ui.theme.FeedFlowTheme

@Composable
fun AddFeedScreen(
Expand Down Expand Up @@ -65,11 +61,10 @@ fun AddFeedScreen(

val categoriesState by viewModel.categoriesState.collectAsState()

AddFeedScreenContent(
AddFeedContent(
feedUrl = feedUrl,
isInvalidUrl = showError,
showError = showError,
errorMessage = errorMessage,
snackbarHostState = snackbarHostState,
onFeedUrlUpdated = { url ->
feedUrl = url
viewModel.updateFeedUrlTextFieldValue(url)
Expand All @@ -87,91 +82,20 @@ fun AddFeedScreen(
onDeleteCategoryClick = { categoryId ->
viewModel.deleteCategory(categoryId.value)
},
)
}

@Suppress("LongParameterList")
@Composable
private fun AddFeedScreenContent(
feedUrl: String,
isInvalidUrl: Boolean,
errorMessage: String,
snackbarHostState: SnackbarHostState,
categoriesState: CategoriesState,
onFeedUrlUpdated: (String) -> Unit,
addFeed: () -> Unit,
onExpandClick: () -> Unit,
onAddCategoryClick: (CategoryName) -> Unit,
onDeleteCategoryClick: (CategoryId) -> Unit,
) {
Scaffold(
snackbarHost = { SnackbarHost(snackbarHostState) },
) { paddingValues ->
AddFeedsContent(
paddingValues = paddingValues,
feedUrl = feedUrl,
showError = isInvalidUrl,
errorMessage = errorMessage,
categoriesState = categoriesState,
onFeedUrlUpdated = onFeedUrlUpdated,
addFeed = addFeed,
onExpandClick = onExpandClick,
onAddCategoryClick = onAddCategoryClick,
onDeleteCategoryClick = onDeleteCategoryClick,
)
}
)
}

@Preview
@Composable
private fun AddScreenContentPreview() {
FeedFlowTheme {
AddFeedScreenContent(
feedUrl = "https://www.ablog.com/feed",
isInvalidUrl = false,
errorMessage = "",
snackbarHostState = SnackbarHostState(),
categoriesState = categoriesState,
onFeedUrlUpdated = {},
addFeed = { },
onExpandClick = {},
onAddCategoryClick = {},
onDeleteCategoryClick = {},
)
}
}

@Preview
@Composable
private fun AddScreenContentDarkPreview() {
FeedFlowTheme(
darkTheme = true,
) {
AddFeedScreenContent(
AddFeedContent(
feedUrl = "https://www.ablog.com/feed",
isInvalidUrl = false,
showError = false,
errorMessage = "",
snackbarHostState = SnackbarHostState(),
categoriesState = categoriesState,
onFeedUrlUpdated = {},
addFeed = { },
onExpandClick = {},
onAddCategoryClick = {},
onDeleteCategoryClick = {},
)
}
}

@Preview
@Composable
private fun AddScreenContentInvalidUrlPreview() {
FeedFlowTheme {
AddFeedScreenContent(
feedUrl = "https://www.ablog.com/feed",
isInvalidUrl = true,
errorMessage = "The link you provided is not a valid RSS feed",
snackbarHostState = SnackbarHostState(),
categoriesState = categoriesState,
snackbarHost = { SnackbarHost(SnackbarHostState()) },
categoriesState = categoriesExpandedState,
onFeedUrlUpdated = {},
addFeed = { },
onExpandClick = {},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ import com.prof18.feedflow.desktop.addfeed.AddFeedScreen
import com.prof18.feedflow.desktop.desktopViewModel
import com.prof18.feedflow.desktop.di.DI
import com.prof18.feedflow.desktop.ui.components.FeedSourceLogoImage
import com.prof18.feedflow.desktop.ui.style.FeedFlowTheme
import com.prof18.feedflow.shared.presentation.FeedSourceListViewModel
import com.prof18.feedflow.shared.presentation.preview.feedSourcesState
import com.prof18.feedflow.shared.ui.feedsourcelist.FeedSourceNavBar
import com.prof18.feedflow.shared.ui.feedsourcelist.FeedSourcesWithCategoryList
import com.prof18.feedflow.shared.ui.feedsourcelist.NoFeedSourcesView
import com.prof18.feedflow.shared.ui.theme.FeedFlowTheme
import dev.icerock.moko.resources.compose.stringResource

@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.withStyle
import com.prof18.feedflow.MR
import com.prof18.feedflow.desktop.ui.style.FeedFlowTheme
import com.prof18.feedflow.desktop.utils.WindowWidthSizeClass
import com.prof18.feedflow.desktop.utils.calculateWindowSizeClass
import com.prof18.feedflow.shared.ui.style.Spacing
import com.prof18.feedflow.shared.ui.theme.FeedFlowTheme
import dev.icerock.moko.resources.compose.stringResource

@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ val importExportStates = listOf(
),
)

val categoriesState = CategoriesState(
val categoriesExpandedState = CategoriesState(
isExpanded = true,
header = "No category selected",
categories = listOf(
Expand All @@ -213,6 +213,31 @@ val categoriesState = CategoriesState(
),
)

val categoriesCollapsedState = CategoriesState(
isExpanded = false,
header = "Android",
categories = listOf(
CategoryItem(
id = 0,
name = "Android",
isSelected = true,
onClick = {},
),
CategoryItem(
id = 0,
name = "Apple",
isSelected = false,
onClick = {},
),
CategoryItem(
id = 0,
name = "Tech",
isSelected = false,
onClick = {},
),
),
)

val feedSourcesState = listOf(
FeedSourceState(
categoryId = CategoryId(1),
Expand Down
Loading

0 comments on commit 903a074

Please sign in to comment.