Add unfold more/unfold less action in FeedTab

This commit is contained in:
Shinokuni 2024-02-13 22:21:18 +01:00
parent a3c9e0a89e
commit bfd54e1b19
6 changed files with 32 additions and 7 deletions

View File

@ -9,6 +9,7 @@ import com.readrops.db.entities.account.AccountType
data class FeedState(
val foldersAndFeeds: FolderAndFeedsState = FolderAndFeedsState.InitialState,
val dialog: DialogState? = null,
val areFoldersExpanded: Boolean = false
)
sealed interface DialogState {

View File

@ -10,7 +10,6 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon
@ -166,10 +165,13 @@ object FeedTab : Tab {
title = { Text(text = "Feeds") },
actions = {
IconButton(
onClick = {}
onClick = { viewModel.setFolderExpandState(state.areFoldersExpanded.not()) }
) {
Icon(
imageVector = Icons.Default.MoreVert,
painter = painterResource(id = if (state.areFoldersExpanded)
R.drawable.ic_unfold_less
else
R.drawable.ic_unfold_more),
contentDescription = null
)
}
@ -231,6 +233,7 @@ object FeedTab : Tab {
FolderExpandableItem(
folder = folder,
feeds = folderWithFeeds.second,
isExpanded = state.areFoldersExpanded,
onFeedClick = { feed ->
viewModel.openDialog(
DialogState.FeedSheet(feed, folder)

View File

@ -90,6 +90,9 @@ class FeedViewModel(
}
}
fun setFolderExpandState(isExpanded: Boolean) =
_feedState.update { it.copy(areFoldersExpanded = isExpanded) }
fun closeDialog() = _feedState.update { it.copy(dialog = null) }
fun openDialog(state: DialogState) {
@ -302,7 +305,9 @@ class FeedViewModel(
if (updateFolder) {
repository?.updateFolder(_folderState.value.folder)
} else {
repository?.addFolder(_folderState.value.folder.apply { accountId = currentAccount!!.id })
repository?.addFolder(_folderState.value.folder.apply {
accountId = currentAccount!!.id
})
}
closeDialog()

View File

@ -19,6 +19,7 @@ import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
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
@ -37,14 +38,19 @@ import com.readrops.db.entities.Folder
fun FolderExpandableItem(
folder: Folder,
feeds: List<Feed>,
isExpanded: Boolean = false,
onFeedClick: (Feed) -> Unit,
onFeedLongClick: (Feed) -> Unit,
onUpdateFolder: () -> Unit,
onDeleteFolder: () -> Unit
) {
var isExpanded by remember { mutableStateOf(false) }
var isFolderExpanded by remember { mutableStateOf(false) }
var isDropDownMenuExpanded by remember { mutableStateOf(false) }
LaunchedEffect(isExpanded) {
isFolderExpanded = isExpanded
}
Column(
modifier = Modifier
.animateContentSize(
@ -56,7 +62,7 @@ fun FolderExpandableItem(
) {
Column(
modifier = Modifier
.clickable { isExpanded = isExpanded.not() }
.clickable { isFolderExpanded = isFolderExpanded.not() }
.padding(
horizontal = MaterialTheme.spacing.shortSpacing,
vertical = MaterialTheme.spacing.veryShortSpacing,
@ -121,7 +127,7 @@ fun FolderExpandableItem(
}
Column {
if (isExpanded) {
if (isFolderExpanded) {
for (feed in feeds) {
FeedItem(
feed = feed,

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M7.41,18.59L8.83,20 12,16.83 15.17,20l1.41,-1.41L12,14l-4.59,4.59zM16.59,5.41L15.17,4 12,7.17 8.83,4 7.41,5.41 12,10l4.59,-4.59z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,5.83L15.17,9l1.41,-1.41L12,3 7.41,7.59 8.83,9 12,5.83zM12,18.17L8.83,15l-1.41,1.41L12,21l4.59,-4.59L15.17,15 12,18.17z"/>
</vector>