Unregistering scrobbler

This commit is contained in:
Zakhar Timoshenko
2022-07-01 22:05:30 +03:00
parent c6785bfda0
commit a73d3d375a
8 changed files with 64 additions and 12 deletions

View File

@@ -207,6 +207,14 @@ class DetailsViewModel(
}
}
fun unregisterScrobbling() {
launchJob(Dispatchers.Default) {
scrobbler.unregisterScrobbling(
mangaId = delegate.mangaId
)
}
}
private fun doLoad() = launchLoadingJob(Dispatchers.Default) {
delegate.doLoad()
}

View File

@@ -5,11 +5,13 @@ import android.content.Intent
import android.os.Bundle
import android.text.method.LinkMovementMethod
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.RatingBar
import android.widget.Toast
import androidx.appcompat.widget.PopupMenu
import androidx.core.net.toUri
import androidx.fragment.app.FragmentManager
import coil.ImageLoader
@@ -31,7 +33,8 @@ class ScrobblingInfoBottomSheet :
BaseBottomSheet<SheetScrobblingBinding>(),
AdapterView.OnItemSelectedListener,
RatingBar.OnRatingBarChangeListener,
View.OnClickListener {
View.OnClickListener,
PopupMenu.OnMenuItemClickListener {
private val viewModel by sharedViewModel<DetailsViewModel>()
private val coil by inject<ImageLoader>(mode = LazyThreadSafetyMode.NONE)
@@ -52,6 +55,12 @@ class ScrobblingInfoBottomSheet :
binding.buttonOpen.setOnClickListener(this)
binding.imageViewCover.setOnClickListener(this)
binding.textViewDescription.movementMethod = LinkMovementMethod.getInstance()
val popupMenu = PopupMenu(view.context, binding.buttonOpen)
popupMenu.inflate(R.menu.opt_scrobbling)
popupMenu.setOnMenuItemClickListener(this)
binding.buttonOpen.setOnClickListener { popupMenu.show() }
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
@@ -74,13 +83,6 @@ class ScrobblingInfoBottomSheet :
override fun onClick(v: View) {
when (v.id) {
R.id.button_open -> {
val url = viewModel.scrobblingInfo.value?.externalUrl ?: return
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(
Intent.createChooser(intent, getString(R.string.open_in_browser))
)
}
R.id.imageView_cover -> {
val coverUrl = viewModel.scrobblingInfo.value?.coverUrl ?: return
val options = ActivityOptions.makeScaleUpAnimation(v, 0, 0, v.width, v.height)
@@ -116,4 +118,21 @@ class ScrobblingInfoBottomSheet :
fun show(fm: FragmentManager) = ScrobblingInfoBottomSheet().show(fm, TAG)
}
override fun onMenuItemClick(item: MenuItem?): Boolean {
when (item?.itemId) {
R.id.action_browser -> {
val url = viewModel.scrobblingInfo.value?.externalUrl ?: return false
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(
Intent.createChooser(intent, getString(R.string.open_in_browser))
)
}
R.id.action_unregister -> {
dismiss()
viewModel.unregisterScrobbling()
}
}
return true
}
}

View File

@@ -17,4 +17,7 @@ abstract class ScrobblingDao {
@Update
abstract suspend fun update(entity: ScrobblingEntity)
@Query("DELETE FROM scrobblings WHERE scrobbler = :scrobbler AND manga_id = :mangaId")
abstract suspend fun delete(scrobbler: Int, mangaId: Long)
}

View File

@@ -41,6 +41,8 @@ abstract class Scrobbler(
.map { it?.toScrobblingInfo(mangaId) }
}
abstract suspend fun unregisterScrobbling(mangaId: Long)
protected abstract suspend fun getMangaInfo(id: Long): ScrobblerMangaInfo
private suspend fun ScrobblingEntity.toScrobblingInfo(mangaId: Long): ScrobblingInfo? {

View File

@@ -69,6 +69,10 @@ class ShikimoriRepository(
return storage.user
}
suspend fun unregister(mangaId: Long) {
return db.scrobblingDao.delete(ScrobblerService.SHIKIMORI.id, mangaId)
}
fun logout() {
storage.clear()
}

View File

@@ -58,6 +58,10 @@ class ShikimoriScrobbler(
)
}
override suspend fun unregisterScrobbling(mangaId: Long) {
repository.unregister(mangaId)
}
override suspend fun getMangaInfo(id: Long): ScrobblerMangaInfo {
return repository.getMangaInfo(id)
}

View File

@@ -45,14 +45,13 @@
<ImageButton
android:id="@+id/button_open"
style="?android:attr/actionOverflowButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginEnd="12dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/open_in_browser"
android:padding="4dp"
android:src="@drawable/ic_open_external"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:tint="?android:colorControlNormal" />

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_browser"
android:title="@string/open_in_browser" />
<item
android:id="@+id/action_unregister"
android:title="@string/remove" />
</menu>