feat: view subscriptions in settings

This commit is contained in:
rebelonion 2024-05-17 08:57:59 -05:00
parent f1d16ba16a
commit 6c1176a182
14 changed files with 221 additions and 15 deletions

View file

@ -18,6 +18,7 @@ import ani.dantotsu.navBarHeight
import ani.dantotsu.notifications.TaskScheduler
import ani.dantotsu.notifications.anilist.AnilistNotificationWorker
import ani.dantotsu.notifications.comment.CommentNotificationWorker
import ani.dantotsu.notifications.subscription.SubscriptionHelper
import ani.dantotsu.notifications.subscription.SubscriptionNotificationWorker
import ani.dantotsu.openSettings
import ani.dantotsu.settings.saving.PrefManager
@ -102,6 +103,19 @@ class SettingsNotificationActivity : AppCompatActivity() {
).scheduleAllTasks(context)
}
),
Settings(
type = 1,
name = getString(R.string.view_subscriptions),
desc = getString(R.string.view_subscriptions_desc),
icon = R.drawable.ic_round_search_24,
onClick = {
val subscriptions = SubscriptionHelper.getSubscriptions()
SubscriptionsBottomDialog.newInstance(subscriptions).show(
supportFragmentManager,
"subscriptions"
)
}
),
Settings(
type = 1,
name = getString(R.string.anilist_notification_filters),

View file

@ -0,0 +1,52 @@
package ani.dantotsu.settings
import android.content.Intent
import android.view.View
import androidx.core.content.ContextCompat
import ani.dantotsu.R
import ani.dantotsu.databinding.ItemSubscriptionBinding
import ani.dantotsu.media.MediaDetailsActivity
import ani.dantotsu.notifications.subscription.SubscriptionHelper
import com.xwray.groupie.GroupieAdapter
import com.xwray.groupie.Item
import com.xwray.groupie.viewbinding.BindableItem
class SubscriptionItem(
val id: Int,
private val media: SubscriptionHelper.Companion.SubscribeMedia,
private val adapter: GroupieAdapter
) : BindableItem<ItemSubscriptionBinding>() {
private lateinit var binding: ItemSubscriptionBinding
override fun bind(p0: ItemSubscriptionBinding, p1: Int) {
val context = p0.root.context
binding = p0
val parserName = if (media.isAnime)
SubscriptionHelper.getAnimeParser(media.id).name
else
SubscriptionHelper.getMangaParser(media.id).name
val mediaName = media.name
val showName = "$mediaName - $parserName"
binding.subscriptionName.text = showName
binding.root.setOnClickListener {
ContextCompat.startActivity(
context,
Intent(context, MediaDetailsActivity::class.java).putExtra(
"mediaId", media.id
),
null
)
}
binding.deleteSubscription.setOnClickListener {
SubscriptionHelper.deleteSubscription(id, true)
adapter.remove(this)
}
}
override fun getLayout(): Int {
return R.layout.item_subscription
}
override fun initializeViewBinding(p0: View): ItemSubscriptionBinding {
return ItemSubscriptionBinding.bind(p0)
}
}

View file

@ -0,0 +1,56 @@
package ani.dantotsu.settings
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import ani.dantotsu.BottomSheetDialogFragment
import ani.dantotsu.R
import ani.dantotsu.databinding.BottomSheetRecyclerBinding
import ani.dantotsu.notifications.subscription.SubscriptionHelper
import com.xwray.groupie.GroupieAdapter
class SubscriptionsBottomDialog : BottomSheetDialogFragment() {
private var _binding: BottomSheetRecyclerBinding? = null
private val binding get() = _binding!!
private val adapter: GroupieAdapter = GroupieAdapter()
private var subscriptions: Map<Int, SubscriptionHelper.Companion.SubscribeMedia> = mapOf()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = BottomSheetRecyclerBinding.inflate(inflater, container, false)
return _binding?.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
binding.repliesRecyclerView.adapter = adapter
binding.repliesRecyclerView.layoutManager = LinearLayoutManager(
context,
LinearLayoutManager.VERTICAL,
false
)
val context = requireContext()
binding.title.text = context.getString(R.string.subscriptions)
binding.replyButton.visibility = View.GONE
subscriptions.forEach { (id, media) ->
adapter.add(SubscriptionItem(id, media, adapter))
}
}
override fun onDestroyView() {
_binding = null
super.onDestroyView()
}
companion object {
fun newInstance(subscriptions: Map<Int, SubscriptionHelper.Companion.SubscribeMedia>): SubscriptionsBottomDialog {
val dialog = SubscriptionsBottomDialog()
dialog.subscriptions = subscriptions
return dialog
}
}
}

View file

@ -395,9 +395,11 @@ object PrefManager {
val obj = ois.readObject() as T?
obj
} else {
Logger.log("Serialized data is null (key: $key)")
default
}
} catch (e: java.io.InvalidClassException) {
Logger.log(e)
try {
getPrefLocation(location).edit().remove(key).apply()
default