WIP bookmark buttons

This commit is contained in:
Marie 2022-10-12 15:00:46 +02:00 committed by Matthieu
parent 80539851c0
commit e1f7018b19
4 changed files with 74 additions and 1 deletions

View File

@ -317,6 +317,48 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
}
}
private suspend fun bookmarkPost(api: PixelfedAPI) {
//Call the api function
status?.id?.let { id ->
try {
api.bookmarkStatus(id)
} catch (exception: HttpException) {
Toast.makeText(
binding.root.context,
binding.root.context.getString(R.string.bookmark_post_failed_error, exception.code()),
Toast.LENGTH_SHORT
).show()
} catch (exception: IOException) {
Toast.makeText(
binding.root.context,
binding.root.context.getString(R.string.bookmark_post_failed_io_except),
Toast.LENGTH_SHORT
).show()
}
}
}
private suspend fun undoBookmarkPost(api: PixelfedAPI) {
//Call the api function
status?.id?.let { id ->
try {
api.undoBookmarkStatus(id)
} catch (exception: HttpException) {
Toast.makeText(
binding.root.context,
binding.root.context.getString(R.string.undobookmark_post_failed_error, exception.code()),
Toast.LENGTH_SHORT
).show()
} catch (exception: IOException) {
Toast.makeText(
binding.root.context,
binding.root.context.getString(R.string.undobookmark_post_failed_io_except),
Toast.LENGTH_SHORT
).show()
}
}
}
private fun activateMoreButton(apiHolder: PixelfedAPIHolder, db: AppDatabase, lifecycleScope: LifecycleCoroutineScope){
binding.statusMore.setOnClickListener {
PopupMenu(it.context, it).apply {
@ -341,6 +383,18 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
true
}
R.id.post_more_menu_bookmark -> {
lifecycleScope.launch {
bookmarkPost(apiHolder.api ?: apiHolder.setToCurrentUser())
}
true
}
R.id.post_more_menu_unbookmark -> {
lifecycleScope.launch {
undoBookmarkPost(apiHolder.api ?: apiHolder.setToCurrentUser())
}
true
}
R.id.post_more_menu_save_to_gallery -> {
Dexter.withContext(binding.root.context)
.withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
@ -429,6 +483,11 @@ class StatusViewHolder(val binding: PostFragmentBinding) : RecyclerView.ViewHold
}
}
inflate(R.menu.post_more_menu)
if(status?.bookmarked == true) {
menu.setGroupVisible(R.id.post_more_menu_group_bookmark, false)
} else {
menu.setGroupVisible(R.id.post_more_menu_group_unbookmark, false)
}
if(status?.media_attachments.isNullOrEmpty()) {
//make sure to disable image-related things if there aren't any
menu.setGroupVisible(R.id.post_more_group_picture, false)

View File

@ -183,6 +183,17 @@ interface PixelfedAPI {
@Path("id") statusId: String,
) : Status
@POST("/api/v1/statuses/{id}/bookmark")
suspend fun bookmarkStatus(
@Path("id") statusId: String
) : Status
@POST("/api/v1/statuses/{id}/undobookmark")
suspend fun undoBookmarkStatus(
@Path("id") statusId: String
) : Status
//Used in our case to retrieve comments for a given status
@GET("/api/v1/statuses/{id}/context")
suspend fun statusComments(

View File

@ -19,7 +19,6 @@
android:title="@string/unbookmark" />
</group>
<!-- Group that should only be shown if there are pictures in the post -->
<group android:id="@+id/post_more_group_picture">
<item android:id="@+id/post_more_menu_share_picture"

View File

@ -254,6 +254,10 @@ For more info about Pixelfed, you can check here: https://pixelfed.org"</string>
<string name="mascot_description">Image showing a red panda, Pixelfed\'s mascot, using a phone</string>
<string name="delete_post_failed_error">Could not delete the post, error %1$d</string>
<string name="delete_post_failed_io_except">Could not delete the post, check your connection?</string>
<string name="bookmark_post_failed_error">Could not bookmark the post, error %1$d</string>
<string name="bookmark_post_failed_io_except">Could not bookmark the post, check your connection?</string>
<string name="undobookmark_post_failed_error">Could not unbookmark the post, error %1$d</string>
<string name="undobookmark_post_failed_io_except">Could not unbookmark the post, check your connection?</string>
<!-- Error message when a selected file can not be found -->
<string name="file_not_found">File %1$s was not found</string>