添加识别rss分组中的频道信息,在菜单中可以切换频道(与之前的sortUrls不冲突)

pull/209/head
yangyxd 5 years ago
parent f42564facd
commit f4effb2ca7
  1. 42
      app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt
  2. 4
      app/src/main/res/menu/rss_articles.xml

@ -5,6 +5,7 @@ import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.SubMenu
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter import androidx.fragment.app.FragmentStatePagerAdapter
@ -17,6 +18,7 @@ import io.legado.app.utils.gone
import io.legado.app.utils.visible import io.legado.app.utils.visible
import kotlinx.android.synthetic.main.activity_rss_artivles.* import kotlinx.android.synthetic.main.activity_rss_artivles.*
import org.jetbrains.anko.startActivityForResult import org.jetbrains.anko.startActivityForResult
import java.util.LinkedHashMap
class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_artivles) { class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_artivles) {
@ -25,6 +27,8 @@ class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_a
private val editSource = 12319 private val editSource = 12319
private val fragments = linkedMapOf<String, RssArticlesFragment>() private val fragments = linkedMapOf<String, RssArticlesFragment>()
private lateinit var adapter: TabFragmentPageAdapter private lateinit var adapter: TabFragmentPageAdapter
private val channels = LinkedHashMap<String, String>()
private var groupMenu: Menu? = null
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
adapter = TabFragmentPageAdapter(supportFragmentManager) adapter = TabFragmentPageAdapter(supportFragmentManager)
@ -34,6 +38,7 @@ class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_a
title_bar.title = it title_bar.title = it
}) })
viewModel.initData(intent) { viewModel.initData(intent) {
upChannelMenu()
upFragments() upFragments()
} }
} }
@ -43,6 +48,12 @@ class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_a
return super.onCompatCreateOptionsMenu(menu) return super.onCompatCreateOptionsMenu(menu)
} }
override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
groupMenu = menu
upChannelMenu()
return super.onPrepareOptionsMenu(menu)
}
override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { override fun onCompatOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.menu_edit_source -> viewModel.rssSource?.sourceUrl?.let { R.id.menu_edit_source -> viewModel.rssSource?.sourceUrl?.let {
@ -54,15 +65,44 @@ class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_a
} }
} }
} }
if (item.groupId == R.id.source_channel) {
var key = item.title.toString();
var i = fragments.keys.indexOf(key)
if (i >= 0)
view_pager.currentItem = i
}
return super.onCompatOptionsItemSelected(item) return super.onCompatOptionsItemSelected(item)
} }
private fun upChannelMenu() {
// 加入频道列表
groupMenu?.removeGroup(R.id.source_channel)
var sourceChannel = viewModel.rssSource?.sourceGroup
channels.clear()
sourceChannel?.split("\n\n")?.forEach { c ->
val d = c.split("::")
if (d.size > 1) {
channels[d[0]] = d[1]
var item = groupMenu?.add(R.id.source_channel, Menu.NONE, Menu.NONE, d[0])
item?.isCheckable = true
var keys = fragments.keys
item?.isChecked = keys.indexOf(d[0]) == view_pager.currentItem
}
}
}
private fun upFragments() { private fun upFragments() {
fragments.clear() fragments.clear()
viewModel.rssSource?.sortUrls()?.forEach { viewModel.rssSource?.sortUrls()?.forEach {
fragments[it.key] = RssArticlesFragment.create(it.key, it.value) fragments[it.key] = RssArticlesFragment.create(it.key, it.value)
} }
if (fragments.size == 1) { var sortUrlsSize = fragments.size
if (sortUrlsSize <= 1) {
channels?.forEach {
fragments[it.key] = RssArticlesFragment.create(it.key, it.value)
}
}
if (sortUrlsSize == 1) {
tab_layout.gone() tab_layout.gone()
} else { } else {
tab_layout.visible() tab_layout.visible()

@ -12,4 +12,8 @@
android:title="@string/clear" android:title="@string/clear"
app:showAsAction="never" /> app:showAsAction="never" />
<group android:id="@+id/source_channel">
</group>
</menu> </menu>
Loading…
Cancel
Save