pull/35/head^2
kunfei 5 years ago
parent d6fc96ca19
commit 8a284c2b04
  1. 3
      app/src/main/java/io/legado/app/data/AppDatabase.kt
  2. 14
      app/src/main/java/io/legado/app/data/dao/RssArticleDao.kt
  3. 91
      app/src/main/java/io/legado/app/ui/rss/article/RssArticlesActivity.kt
  4. 27
      app/src/main/java/io/legado/app/ui/rss/article/RssArticlesAdapter.kt
  5. 10
      app/src/main/java/io/legado/app/ui/rss/article/RssArticlesViewModel.kt
  6. 26
      app/src/main/res/layout/activity_rss_artivles.xml

@ -12,7 +12,7 @@ import io.legado.app.data.entities.*
@Database( @Database(
entities = [Book::class, BookGroup::class, BookSource::class, BookChapter::class, ReplaceRule::class, SearchBook::class, entities = [Book::class, BookGroup::class, BookSource::class, BookChapter::class, ReplaceRule::class, SearchBook::class,
SearchKeyword::class, SourceCookie::class, RssSource::class, Bookmark::class], SearchKeyword::class, SourceCookie::class, RssSource::class, Bookmark::class, RssArticle::class],
version = 1, version = 1,
exportSchema = true exportSchema = true
) )
@ -58,4 +58,5 @@ abstract class AppDatabase : RoomDatabase() {
abstract fun sourceCookieDao(): SourceCookieDao abstract fun sourceCookieDao(): SourceCookieDao
abstract fun rssSourceDao(): RssSourceDao abstract fun rssSourceDao(): RssSourceDao
abstract fun bookmarkDao(): BookmarkDao abstract fun bookmarkDao(): BookmarkDao
abstract fun rssArtivleDao(): RssArticleDao
} }

@ -0,0 +1,14 @@
package io.legado.app.data.dao
import androidx.lifecycle.LiveData
import androidx.room.Query
import io.legado.app.data.entities.RssArticle
interface RssArticleDao {
@Query("select * from rssArticles where origin = :origin")
fun liveByOrigin(origin: String): LiveData<List<RssArticle>>
}

@ -1,75 +1,44 @@
package io.legado.app.ui.rss.article package io.legado.app.ui.rss.article
import android.app.ProgressDialog
import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import androidx.lifecycle.LiveData
import android.view.View import androidx.lifecycle.Observer
import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager
import android.widget.BaseAdapter import io.legado.app.App
import androidx.appcompat.app.AppCompatActivity
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.data.entities.RssArticle import io.legado.app.data.entities.RssArticle
import io.legado.app.model.rss.RssParser import io.legado.app.lib.theme.ATH
import io.legado.app.ui.rss.read.ReadRssActivity import io.legado.app.utils.getViewModel
import kotlinx.android.synthetic.main.item_rss_article.view.* import kotlinx.android.synthetic.main.activity_rss_artivles.*
import org.jetbrains.anko.listView
import org.jetbrains.anko.sdk27.listeners.onItemClick
import org.jetbrains.anko.startActivity
import java.net.URL
class RssArticlesActivity : AppCompatActivity() { class RssArticlesActivity : VMBaseActivity<RssArticlesViewModel>(R.layout.activity_rss_artivles) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (intent.hasExtra("url")) {
// 处理从 快速添加并预览 跳转到这个页面
val urlString = intent.getStringExtra("url")
val adapter = ArticleAdapter(mutableListOf<RssArticle>(), this)
listView {
this.adapter = adapter
onItemClick { p0, p1, p2, p3 ->
startActivity<ReadRssActivity>("description" to adapter.articles[p2].description)
}
}
val loading = ProgressDialog(this@RssArticlesActivity)
loading.setMessage("加载中...")
loading.show()
Thread {
val xml = URL(urlString).readText()
val articles = RssParser.parseXML(xml)
runOnUiThread {
adapter.articles = articles
adapter.notifyDataSetChanged()
loading.dismiss()
}
}.start()
}
}
}
class ArticleAdapter(var articles: MutableList<RssArticle>, var context: Context) : BaseAdapter() { override val viewModel: RssArticlesViewModel
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { get() = getViewModel(RssArticlesViewModel::class.java)
val item_rss = LayoutInflater.from(context).inflate(R.layout.item_rss_article, null)
val article = articles[position]
item_rss.title.text = article.title
item_rss.pub_date.text = article.pubDate
if (article.author != null && article.author != "") {
item_rss.author.text = article.author
} else {
item_rss.author.text = article.link
}
return item_rss
}
override fun getItem(position: Int): Any { private var adapter: RssArticlesAdapter? = null
return articles[position] private var rssArticlesData: LiveData<List<RssArticle>>? = null
override fun onActivityCreated(savedInstanceState: Bundle?) {
initView()
intent.getStringExtra("url")?.let {
initData(it)
}
} }
override fun getItemId(position: Int): Long { private fun initView() {
return 1 ATH.applyEdgeEffectColor(recycler_view)
recycler_view.layoutManager = LinearLayoutManager(this)
adapter = RssArticlesAdapter(this)
recycler_view.adapter = adapter
} }
override fun getCount(): Int { private fun initData(origin: String) {
return articles.size rssArticlesData?.removeObservers(this)
rssArticlesData = App.db.rssArtivleDao().liveByOrigin(origin)
rssArticlesData?.observe(this, Observer {
adapter?.setItems(it)
})
} }
} }

@ -0,0 +1,27 @@
package io.legado.app.ui.rss.article
import android.content.Context
import io.legado.app.R
import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.SimpleRecyclerAdapter
import io.legado.app.data.entities.RssArticle
import kotlinx.android.synthetic.main.item_rss_article.view.*
class RssArticlesAdapter(context: Context) :
SimpleRecyclerAdapter<RssArticle>(context, R.layout.item_rss_article) {
override fun convert(holder: ItemViewHolder, item: RssArticle, payloads: MutableList<Any>) {
with(holder.itemView) {
title.text = item.title
pub_date.text = item.pubDate
if (item.author.isNullOrBlank()) {
author.text = item.link
} else {
author.text = item.author
}
}
}
}

@ -0,0 +1,10 @@
package io.legado.app.ui.rss.article
import android.app.Application
import io.legado.app.base.BaseViewModel
class RssArticlesViewModel(application: Application) : BaseViewModel(application) {
}

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<io.legado.app.ui.widget.TitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentInsetStartWithNavigation="0dp"
app:displayHomeAsUp="true" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<io.legado.app.ui.widget.recycler.scroller.FastScrollRecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
</LinearLayout>
Loading…
Cancel
Save