Skip to content

Commit 182bdcf

Browse files
committed
Show favorite and info in post page
* use isFavorite as flow
1 parent 4a0c101 commit 182bdcf

File tree

5 files changed

+64
-18
lines changed

5 files changed

+64
-18
lines changed

app/src/main/java/com/paulcoding/hviewer/database/PostItemDao.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ interface PostItemDao {
4343
)
4444

4545
@Query("SELECT favorite FROM post_items WHERE url = :url")
46-
suspend fun isFavorite(url: String): Boolean
46+
fun isFavorite(url: String): Flow<Boolean>
4747

4848
@Query("UPDATE post_items SET viewed = 0, viewedAt = 0 WHERE viewed = 1")
4949
suspend fun clearHistory()

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ fun AppEntry(intent: Intent?, appViewModel: AppViewModel) {
178178
appViewModel.setWebViewUrl(it)
179179
navController.navigate(Route.WEBVIEW)
180180
},
181+
navToCustomTag = { postItem, tag -> navToCustomTag(postItem, tag) },
181182
goBack = {
182183
navController.popBackStack()
183184
})

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ class AppViewModel : ViewModel() {
5252
.stateIn(viewModelScope, SharingStarted.Eagerly, emptySet())
5353
val historyPosts = DatabaseProvider.getInstance().postItemDao().getViewedPosts()
5454

55+
val postFavorite =
56+
{ url: String -> DatabaseProvider.getInstance().postItemDao().isFavorite(url) }
57+
5558
fun setCurrentPost(post: PostItem) {
5659
_stateFlow.update { it.copy(post = post) }
5760
}
Lines changed: 58 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,76 @@
11
package com.paulcoding.hviewer.ui.page.post
22

3+
import androidx.compose.foundation.layout.Spacer
4+
import androidx.compose.foundation.layout.width
5+
import androidx.compose.material.icons.Icons
6+
import androidx.compose.material.icons.outlined.Info
37
import androidx.compose.runtime.Composable
48
import androidx.compose.runtime.collectAsState
59
import androidx.compose.runtime.getValue
10+
import androidx.compose.runtime.mutableStateOf
11+
import androidx.compose.runtime.remember
12+
import androidx.compose.runtime.rememberCoroutineScope
13+
import androidx.compose.runtime.setValue
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.unit.dp
16+
import com.paulcoding.hviewer.model.PostItem
17+
import com.paulcoding.hviewer.model.Tag
618
import com.paulcoding.hviewer.ui.LocalHostsMap
19+
import com.paulcoding.hviewer.ui.component.HFavoriteIcon
20+
import com.paulcoding.hviewer.ui.component.HIcon
721
import com.paulcoding.hviewer.ui.page.AppViewModel
22+
import com.paulcoding.hviewer.ui.page.posts.InfoBottomSheet
23+
import kotlinx.coroutines.launch
824

925
@Composable
1026
fun PostPage(
1127
appViewModel: AppViewModel,
1228
navToWebView: (String) -> Unit,
29+
navToCustomTag: (PostItem, Tag) -> Unit,
1330
goBack: () -> Unit
1431
) {
1532
val appState by appViewModel.stateFlow.collectAsState()
16-
val post = appState.post
33+
val post = remember { appState.post }
34+
val siteConfig = appViewModel.getCurrentSiteConfig()
35+
val favorite by appViewModel.postFavorite(post.url).collectAsState(false)
1736
val hostsMap = LocalHostsMap.current
37+
var infoSheetVisible by remember { mutableStateOf(false) }
38+
val scope = rememberCoroutineScope()
1839

19-
post.getSiteConfig(hostsMap)?.let {
20-
ImageList(
21-
post = post, siteConfig = it,
22-
goBack = goBack
23-
)
24-
}
40+
ImageList(
41+
post = post,
42+
siteConfig = siteConfig,
43+
goBack = goBack,
44+
bottomRowActions = {
45+
HIcon(
46+
Icons.Outlined.Info,
47+
size = 32,
48+
rounded = true
49+
) {
50+
infoSheetVisible = true
51+
}
52+
53+
Spacer(modifier = Modifier.width(16.dp))
54+
55+
HFavoriteIcon(isFavorite = favorite, rounded = true) {
56+
scope.launch {
57+
if (!favorite)
58+
appViewModel.addFavorite(postItem = post)
59+
else
60+
appViewModel.deleteFavorite(post)
61+
}
62+
}
63+
})
64+
65+
InfoBottomSheet(
66+
visible = infoSheetVisible,
67+
postItem = post,
68+
onDismissRequest = {
69+
infoSheetVisible = false
70+
},
71+
onTagClick = { tag ->
72+
infoSheetVisible = false
73+
navToCustomTag(post, tag)
74+
},
75+
)
2576
}

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

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import androidx.compose.material.icons.outlined.ChevronRight
1515
import androidx.compose.material.icons.outlined.Info
1616
import androidx.compose.material3.Text
1717
import androidx.compose.runtime.Composable
18-
import androidx.compose.runtime.LaunchedEffect
1918
import androidx.compose.runtime.collectAsState
2019
import androidx.compose.runtime.derivedStateOf
2120
import androidx.compose.runtime.getValue
@@ -26,7 +25,6 @@ import androidx.compose.runtime.setValue
2625
import androidx.compose.ui.Modifier
2726
import androidx.compose.ui.graphics.Color
2827
import androidx.compose.ui.unit.dp
29-
import com.paulcoding.hviewer.database.DatabaseProvider
3028
import com.paulcoding.hviewer.model.PostItem
3129
import com.paulcoding.hviewer.model.Tag
3230
import com.paulcoding.hviewer.ui.LocalHostsMap
@@ -126,13 +124,7 @@ internal fun BottomRowActions(
126124
pagerState: PagerState,
127125
toggleBottomSheet: () -> Unit,
128126
) {
129-
var favorite by remember { mutableStateOf(false) }
130-
131-
LaunchedEffect(Unit) {
132-
scope.launch {
133-
favorite = DatabaseProvider.getInstance().postItemDao().isFavorite(postItem.url)
134-
}
135-
}
127+
val favorite by appViewModel.postFavorite(postItem.url).collectAsState(false)
136128

137129
HIcon(
138130
Icons.Outlined.ChevronLeft,
@@ -178,7 +170,6 @@ internal fun BottomRowActions(
178170
appViewModel.addFavorite(postItem = postItem)
179171
else
180172
appViewModel.deleteFavorite(postItem)
181-
favorite = !favorite
182173
}
183174
}
184175
}

0 commit comments

Comments
 (0)