Skip to content

Commit 35bcc8a

Browse files
committed
Show tabs icon in favorite page
1 parent 4b66b50 commit 35bcc8a

File tree

2 files changed

+42
-23
lines changed

2 files changed

+42
-23
lines changed

app/src/main/java/com/paulcoding/hviewer/ui/favorite/FavoritePage.kt

Lines changed: 39 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@ import androidx.compose.material3.TopAppBar
1818
import androidx.compose.runtime.Composable
1919
import androidx.compose.runtime.collectAsState
2020
import androidx.compose.runtime.getValue
21+
import androidx.compose.runtime.mutableStateOf
2122
import androidx.compose.runtime.remember
2223
import androidx.compose.runtime.rememberCoroutineScope
24+
import androidx.compose.runtime.setValue
2325
import androidx.compose.ui.Modifier
26+
import androidx.compose.ui.geometry.Offset
2427
import androidx.compose.ui.platform.LocalContext
2528
import androidx.compose.ui.res.stringResource
2629
import androidx.compose.ui.unit.dp
@@ -31,12 +34,16 @@ import com.paulcoding.hviewer.ui.component.HBackIcon
3134
import com.paulcoding.hviewer.ui.component.HEmpty
3235
import com.paulcoding.hviewer.ui.page.AppViewModel
3336
import com.paulcoding.hviewer.ui.page.posts.FavoriteCard
37+
import com.paulcoding.hviewer.ui.page.posts.TabsIcon
38+
import com.paulcoding.hviewer.ui.page.tabs.AddToCartAnimation
3439
import kotlinx.coroutines.launch
3540

3641
@OptIn(ExperimentalMaterial3Api::class)
3742
@Composable
3843
fun FavoritePage(
3944
appViewModel: AppViewModel,
45+
tabs: List<PostItem>,
46+
navToTabs: () -> Unit,
4047
navToImages: (PostItem) -> Unit,
4148
navToCustomTag: (PostItem, Tag) -> Unit,
4249
goBack: () -> Boolean
@@ -45,6 +52,10 @@ fun FavoritePage(
4552
val snackbarHostState = remember { SnackbarHostState() }
4653
val scope = rememberCoroutineScope()
4754
val favoritePosts by appViewModel.favoritePosts.collectAsState(initial = emptyList())
55+
var tabsIconPosition by remember { mutableStateOf(Offset.Zero) }
56+
57+
var startPos by remember { mutableStateOf(Offset.Zero) }
58+
var isAnimating by remember { mutableStateOf(false) }
4859

4960
fun onDelete(post: PostItem) {
5061
appViewModel.deleteFavorite(post)
@@ -72,8 +83,14 @@ fun FavoritePage(
7283
topBar = {
7384
TopAppBar(title = { Text(stringResource(R.string.favorite)) }, navigationIcon = {
7485
HBackIcon { goBack() }
86+
}, actions = {
87+
TabsIcon(
88+
onClick = navToTabs,
89+
size = tabs.size,
90+
onGloballyPositioned = { tabsIconPosition = it })
7591
})
76-
}) { paddings ->
92+
},
93+
) { paddings ->
7794
Column(
7895
modifier = Modifier
7996
.padding(paddings)
@@ -85,34 +102,33 @@ fun FavoritePage(
85102
verticalArrangement = Arrangement.spacedBy(12.dp)
86103
) {
87104
items(items = favoritePosts, key = { it.url }) { item ->
88-
FavoriteItem(item, navToImages = { navToImages(item) },
89-
onTagClick = { tag -> navToCustomTag(item, tag) },
90-
deleteFavorite = {
105+
FavoriteCard(
106+
item,
107+
isFavorite = true,
108+
setFavorite = {
91109
onDelete(item)
110+
},
111+
onTagClick = { tag -> navToCustomTag(item, tag) },
112+
onAddToTabs = {
113+
startPos = it
114+
isAnimating = true
115+
appViewModel.addTab(item)
116+
},
117+
onClick = {
118+
navToImages(item)
92119
})
93120
}
94121
}
95122
if (favoritePosts.isEmpty())
96123
HEmpty()
97124
}
98-
}
99125

100-
}
101-
102-
@Composable
103-
fun FavoriteItem(
104-
post: PostItem,
105-
navToImages: () -> Unit,
106-
onTagClick: (Tag) -> Unit,
107-
deleteFavorite: () -> Unit
108-
) {
109-
FavoriteCard(
110-
post, isFavorite = true,
111-
setFavorite = {
112-
deleteFavorite()
113-
},
114-
onTagClick = { onTagClick(it) },
115-
) {
116-
navToImages()
126+
AddToCartAnimation(
127+
isAnimating = isAnimating,
128+
startPosition = startPos,
129+
endPosition = tabsIconPosition.copy(y = tabsIconPosition.y - 100),
130+
onAnimationEnd = { isAnimating = false },
131+
)
117132
}
118-
}
133+
134+
}

app/src/main/java/com/paulcoding/hviewer/ui/page/AppEntry.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ fun AppEntry(intent: Intent?, appViewModel: AppViewModel) {
5050
val navController = rememberNavController()
5151
val appState by appViewModel.stateFlow.collectAsState()
5252
val hostsMap by appViewModel.hostsMap.collectAsState()
53+
val tabs by appViewModel.tabs.collectAsState(initial = listOf())
5354

5455
val context = LocalContext.current
5556

@@ -200,6 +201,8 @@ fun AppEntry(intent: Intent?, appViewModel: AppViewModel) {
200201
navToImages = { post: PostItem ->
201202
navToImages(post)
202203
},
204+
tabs = tabs,
205+
navToTabs = { navController.navigate(Route.TABS) },
203206
navToCustomTag = { post, tag ->
204207
navToCustomTag(post, tag)
205208
},

0 commit comments

Comments
 (0)