优化
This commit is contained in:
@@ -11,10 +11,10 @@ interface RssStarDao {
|
|||||||
val all: List<RssStar>
|
val all: List<RssStar>
|
||||||
|
|
||||||
@Query("select `group` from rssStars group by `group` order by `group`")
|
@Query("select `group` from rssStars group by `group` order by `group`")
|
||||||
fun groupList(): Flow<List<String>>
|
fun flowGroups(): Flow<List<String>>
|
||||||
|
|
||||||
@Query("select * from rssStars where `group` = :group order by starTime desc")
|
@Query("select * from rssStars where `group` = :group order by starTime desc")
|
||||||
fun getByGroup(group: String): Flow<List<RssStar>>
|
fun flowByGroup(group: String): Flow<List<RssStar>>
|
||||||
|
|
||||||
@Query("select * from rssStars where origin = :origin and link = :link")
|
@Query("select * from rssStars where origin = :origin and link = :link")
|
||||||
fun get(origin: String, link: String): RssStar?
|
fun get(origin: String, link: String): RssStar?
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
package io.legado.app.ui.rss.favorites
|
package io.legado.app.ui.rss.favorites
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentStatePagerAdapter
|
import androidx.fragment.app.FragmentStatePagerAdapter
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
@@ -16,34 +15,36 @@ import io.legado.app.utils.gone
|
|||||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||||
import io.legado.app.utils.visible
|
import io.legado.app.utils.visible
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.Job
|
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
import kotlinx.coroutines.flow.flowOn
|
import kotlinx.coroutines.flow.flowOn
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 收藏夹
|
* 收藏夹
|
||||||
*/
|
*/
|
||||||
class RssFavoritesActivity : BaseActivity<ActivityRssFavoritesBinding>(){
|
class RssFavoritesActivity : BaseActivity<ActivityRssFavoritesBinding>() {
|
||||||
|
|
||||||
override val binding by viewBinding(ActivityRssFavoritesBinding::inflate)
|
override val binding by viewBinding(ActivityRssFavoritesBinding::inflate)
|
||||||
private val adapter by lazy { TabFragmentPageAdapter() }
|
private val adapter by lazy { TabFragmentPageAdapter() }
|
||||||
private var groupList = mutableListOf<String>()
|
private var groupList = mutableListOf<String>()
|
||||||
private var rssStarFlowJob: Job? = null
|
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
binding.viewPager.adapter = adapter
|
initView()
|
||||||
binding.tabLayout.setupWithViewPager(binding.viewPager)
|
|
||||||
binding.tabLayout.setSelectedTabIndicatorColor(accentColor)
|
|
||||||
upFragments()
|
upFragments()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun initView() {
|
||||||
|
binding.viewPager.adapter = adapter
|
||||||
|
binding.tabLayout.setupWithViewPager(binding.viewPager)
|
||||||
|
binding.tabLayout.setSelectedTabIndicatorColor(accentColor)
|
||||||
|
}
|
||||||
|
|
||||||
private fun upFragments() {
|
private fun upFragments() {
|
||||||
rssStarFlowJob?.cancel()
|
lifecycleScope.launch {
|
||||||
rssStarFlowJob = lifecycleScope.launch {
|
appDb.rssStarDao.flowGroups().catch {
|
||||||
appDb.rssStarDao.groupList().catch {
|
|
||||||
AppLog.put("订阅分组数据获取失败\n${it.localizedMessage}", it)
|
AppLog.put("订阅分组数据获取失败\n${it.localizedMessage}", it)
|
||||||
}.flowOn(IO).collect {
|
}.distinctUntilChanged().flowOn(IO).collect {
|
||||||
groupList.clear()
|
groupList.clear()
|
||||||
groupList.addAll(it)
|
groupList.addAll(it)
|
||||||
if (groupList.size == 1) {
|
if (groupList.size == 1) {
|
||||||
@@ -76,9 +77,5 @@ class RssFavoritesActivity : BaseActivity<ActivityRssFavoritesBinding>(){
|
|||||||
return groupList.size
|
return groupList.size
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun instantiateItem(container: ViewGroup, position: Int): Any {
|
|
||||||
val fragment = super.instantiateItem(container, position) as Fragment
|
|
||||||
return fragment
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,20 +1,17 @@
|
|||||||
package io.legado.app.ui.rss.favorites
|
package io.legado.app.ui.rss.favorites
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.TextUtils
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.lifecycle.lifecycleScope
|
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.base.BaseDialogFragment
|
import io.legado.app.base.BaseDialogFragment
|
||||||
import io.legado.app.data.entities.RssArticle
|
import io.legado.app.data.entities.RssArticle
|
||||||
import io.legado.app.databinding.DialogRssfavoritesBinding
|
import io.legado.app.databinding.DialogRssFavoriteConfigBinding
|
||||||
import io.legado.app.lib.theme.primaryColor
|
import io.legado.app.lib.theme.primaryColor
|
||||||
import io.legado.app.utils.setLayout
|
import io.legado.app.utils.setLayout
|
||||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
|
|
||||||
class RssFavoritesDialog() : BaseDialogFragment(R.layout.dialog_rssfavorites, true) {
|
class RssFavoritesDialog() : BaseDialogFragment(R.layout.dialog_rss_favorite_config, true) {
|
||||||
|
|
||||||
constructor(rssArticle: RssArticle) : this() {
|
constructor(rssArticle: RssArticle) : this() {
|
||||||
arguments = Bundle().apply {
|
arguments = Bundle().apply {
|
||||||
@@ -23,7 +20,7 @@ class RssFavoritesDialog() : BaseDialogFragment(R.layout.dialog_rssfavorites, tr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val binding by viewBinding(DialogRssfavoritesBinding::bind)
|
private val binding by viewBinding(DialogRssFavoriteConfigBinding::bind)
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super.onStart()
|
super.onStart()
|
||||||
@@ -47,23 +44,19 @@ class RssFavoritesDialog() : BaseDialogFragment(R.layout.dialog_rssfavorites, tr
|
|||||||
}
|
}
|
||||||
tvOk.setOnClickListener {
|
tvOk.setOnClickListener {
|
||||||
val editTitle = editTitle.text.toString()
|
val editTitle = editTitle.text.toString()
|
||||||
if(!TextUtils.isEmpty(editTitle)){
|
if (editTitle.isNotBlank()) {
|
||||||
title = editTitle
|
title = editTitle
|
||||||
}
|
}
|
||||||
val editGroup = editGroup.text.toString()
|
val editGroup = editGroup.text.toString()
|
||||||
if(!TextUtils.isEmpty(editGroup)){
|
if (editGroup.isNotBlank()) {
|
||||||
group = editGroup
|
group = editGroup
|
||||||
}
|
}
|
||||||
lifecycleScope.launch {
|
callback?.updateFavorite(title, group)
|
||||||
callback?.updateFavorite(title, group)
|
dismiss()
|
||||||
dismiss()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
tvFooterLeft.setOnClickListener {
|
tvFooterLeft.setOnClickListener {
|
||||||
lifecycleScope.launch {
|
callback?.deleteFavorite()
|
||||||
callback?.deleteFavorite()
|
dismiss()
|
||||||
dismiss()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import io.legado.app.utils.setEdgeEffectColor
|
|||||||
import io.legado.app.utils.startActivity
|
import io.legado.app.utils.startActivity
|
||||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.Job
|
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
import kotlinx.coroutines.flow.flowOn
|
import kotlinx.coroutines.flow.flowOn
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -38,28 +37,26 @@ class RssFavoritesFragment() : VMBaseFragment<RssFavoritesViewModel>(R.layout.fr
|
|||||||
private val adapter: RssFavoritesAdapter by lazy {
|
private val adapter: RssFavoritesAdapter by lazy {
|
||||||
RssFavoritesAdapter(requireContext(), this@RssFavoritesFragment)
|
RssFavoritesAdapter(requireContext(), this@RssFavoritesFragment)
|
||||||
}
|
}
|
||||||
private var articlesFlowJob: Job? = null
|
|
||||||
|
|
||||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
initView()
|
initView()
|
||||||
|
loadArticles()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initView() = binding.run {
|
private fun initView() = binding.run {
|
||||||
refreshLayout.setEnabled(false)
|
refreshLayout.isEnabled = false
|
||||||
recyclerView.setEdgeEffectColor(primaryColor)
|
recyclerView.setEdgeEffectColor(primaryColor)
|
||||||
recyclerView.layoutManager = run {
|
recyclerView.layoutManager = run {
|
||||||
recyclerView.addItemDecoration(VerticalDivider(requireContext()))
|
recyclerView.addItemDecoration(VerticalDivider(requireContext()))
|
||||||
LinearLayoutManager(requireContext())
|
LinearLayoutManager(requireContext())
|
||||||
}
|
}
|
||||||
recyclerView.adapter = adapter
|
recyclerView.adapter = adapter
|
||||||
loadArticles()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadArticles() {
|
private fun loadArticles() {
|
||||||
articlesFlowJob?.cancel()
|
lifecycleScope.launch {
|
||||||
articlesFlowJob = lifecycleScope.launch {
|
|
||||||
val group = arguments?.getString("group") ?: "默认分组"
|
val group = arguments?.getString("group") ?: "默认分组"
|
||||||
appDb.rssStarDao.getByGroup(group).catch {
|
appDb.rssStarDao.flowByGroup(group).catch {
|
||||||
AppLog.put("订阅文章界面获取数据失败\n${it.localizedMessage}", it)
|
AppLog.put("订阅文章界面获取数据失败\n${it.localizedMessage}", it)
|
||||||
}.flowOn(IO).collect {
|
}.flowOn(IO).collect {
|
||||||
adapter.setItems(it)
|
adapter.setItems(it)
|
||||||
|
|||||||
@@ -72,7 +72,8 @@ import java.util.regex.PatternSyntaxException
|
|||||||
/**
|
/**
|
||||||
* rss阅读界面
|
* rss阅读界面
|
||||||
*/
|
*/
|
||||||
class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>(), RssFavoritesDialog.Callback {
|
class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>(),
|
||||||
|
RssFavoritesDialog.Callback {
|
||||||
|
|
||||||
override val binding by viewBinding(ActivityRssReadBinding::inflate)
|
override val binding by viewBinding(ActivityRssReadBinding::inflate)
|
||||||
override val viewModel by viewModels<ReadRssViewModel>()
|
override val viewModel by viewModels<ReadRssViewModel>()
|
||||||
@@ -153,12 +154,14 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
|
|||||||
R.id.menu_rss_refresh -> viewModel.refresh {
|
R.id.menu_rss_refresh -> viewModel.refresh {
|
||||||
binding.webView.reload()
|
binding.webView.reload()
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.menu_rss_star -> {
|
R.id.menu_rss_star -> {
|
||||||
viewModel.addFavorite()
|
viewModel.addFavorite()
|
||||||
viewModel.rssArticle?.let {
|
viewModel.rssArticle?.let {
|
||||||
showDialogFragment(RssFavoritesDialog(it))
|
showDialogFragment(RssFavoritesDialog(it))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.menu_share_it -> {
|
R.id.menu_share_it -> {
|
||||||
binding.webView.url?.let {
|
binding.webView.url?.let {
|
||||||
share(it)
|
share(it)
|
||||||
|
|||||||
Reference in New Issue
Block a user