From 8d315cb83369087b17ea57e1421c8baf31637cb0 Mon Sep 17 00:00:00 2001 From: mabdc <747455334@qq.com> Date: Wed, 2 Oct 2019 03:24:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95RSS=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../io/legado/app/constant/RSSKeywords.kt | 2 +- .../io/legado/app/ui/main/rss/RssFragment.kt | 4 + .../app/ui/rss/article/RssArticlesActivity.kt | 93 ++++++++++++++++++- .../legado/app/ui/rss/read/ReadRssActivity.kt | 18 ++-- app/src/main/res/layout/activity_read_rss.xml | 5 +- app/src/main/res/layout/fragment_rss.xml | 1 - app/src/main/res/layout/item_rss.xml | 41 +++++++- app/src/main/res/menu/main_rss.xml | 5 + 9 files changed, 153 insertions(+), 18 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 96e2b7ea2..98701bba5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,7 +70,7 @@ - + diff --git a/app/src/main/java/io/legado/app/constant/RSSKeywords.kt b/app/src/main/java/io/legado/app/constant/RSSKeywords.kt index 5a4119e05..bb8d4207a 100644 --- a/app/src/main/java/io/legado/app/constant/RSSKeywords.kt +++ b/app/src/main/java/io/legado/app/constant/RSSKeywords.kt @@ -5,7 +5,7 @@ object RSSKeywords { const val RSS_ITEM = "item" const val RSS_ITEM_TITLE = "title" const val RSS_ITEM_LINK = "link" - const val RSS_ITEM_AUTHOR = "dc:creator" + const val RSS_ITEM_AUTHOR = "author" const val RSS_ITEM_CATEGORY = "category" const val RSS_ITEM_THUMBNAIL = "media:thumbnail" const val RSS_ITEM_ENCLOSURE = "enclosure" diff --git a/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt b/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt index 79c82bf1d..347b95a23 100644 --- a/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/rss/RssFragment.kt @@ -10,6 +10,7 @@ import io.legado.app.App import io.legado.app.R import io.legado.app.base.BaseFragment import io.legado.app.lib.theme.ATH +import io.legado.app.ui.rss.article.RssArticlesActivity import io.legado.app.ui.rss.source.manage.RssSourceActivity import io.legado.app.utils.startActivity import kotlinx.android.synthetic.main.fragment_rss.* @@ -34,6 +35,9 @@ class RssFragment : BaseFragment(R.layout.fragment_rss), super.onCompatOptionsItemSelected(item) when (item.itemId) { R.id.menu_rss_config -> startActivity() + R.id.menu_rss_add -> { + startActivity() + } } } diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesActivity.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesActivity.kt index a69c70fb5..6a52df7b3 100644 --- a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesActivity.kt @@ -1,3 +1,94 @@ package io.legado.app.ui.rss.article -class RssArticlesActivity \ No newline at end of file +import android.content.Context +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.BaseAdapter +import androidx.appcompat.app.AppCompatActivity +import io.legado.app.R +import io.legado.app.data.entities.RssArticle +import io.legado.app.model.rss.RssParser +import io.legado.app.ui.rss.read.ReadRssActivity +import kotlinx.android.synthetic.main.item_rss.view.* +import org.jetbrains.anko.* +import org.jetbrains.anko.sdk27.listeners.onClick +import org.jetbrains.anko.sdk27.listeners.onItemClick +import java.net.URL + +class RssArticlesActivity : AppCompatActivity() { + val zhihu_dayli = "https://rsshub.app/zhihu/daily" + val nytimes = "https://rsshub.app/nytimes/dual" + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + var articles = mutableListOf() + val adapter = ArticleAdapter(articles, this) + verticalLayout { + val url = editText { + hint = "请输入RSS地址" + } + fun loadRss(urlString:String){ + Thread { + val xml = URL(urlString).readText() + articles = RssParser.parseXML(xml) + runOnUiThread { + adapter.articles = articles + adapter.notifyDataSetChanged() + } + }.start() + } + button("解析") { + onClick { + val urlString = url.text.toString().trim() + if(urlString != ""){ + loadRss(urlString) + } + } + } + button("知乎日报") { + onClick { + loadRss(zhihu_dayli) + } + } + button("纽约时报") { + onClick { + loadRss(nytimes) + } + } + listView { + this.adapter = adapter + onItemClick { p0, p1, p2, p3 -> + startActivity("description" to articles[p2].description) + } + } + } + } +} + +class ArticleAdapter(var articles: List, var context: Context) : BaseAdapter() { + override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { + val item_rss= LayoutInflater.from(context).inflate(R.layout.item_rss, 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 { + return articles[position] + } + + override fun getItemId(position: Int): Long { + return 1 + } + + override fun getCount(): Int { + return articles.size + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt index 5e7972c6d..984cc0ea4 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt @@ -1,15 +1,15 @@ package io.legado.app.ui.rss.read import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import io.legado.app.R -import io.legado.app.base.BaseActivity - - -class ReadRssActivity : BaseActivity(R.layout.activity_read_rss) { - - override fun onActivityCreated(savedInstanceState: Bundle?) { - +import kotlinx.android.synthetic.main.activity_read_rss.* + +class ReadRssActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_read_rss) + val s = intent.getStringExtra("description") + webView.loadData(""+s,"text/html","utf-8") } - - } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_read_rss.xml b/app/src/main/res/layout/activity_read_rss.xml index d829e291c..0650007cf 100644 --- a/app/src/main/res/layout/activity_read_rss.xml +++ b/app/src/main/res/layout/activity_read_rss.xml @@ -3,5 +3,8 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> - + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_rss.xml b/app/src/main/res/layout/fragment_rss.xml index 3d9e9a4b5..f5a3b374c 100644 --- a/app/src/main/res/layout/fragment_rss.xml +++ b/app/src/main/res/layout/fragment_rss.xml @@ -11,7 +11,6 @@ android:layout_height="wrap_content" app:attachToActivity="false" app:title="@string/rss" /> - - + android:layout_height="wrap_content" + app:cardCornerRadius="2dp" + app:cardElevation="8dp"> - \ No newline at end of file + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main_rss.xml b/app/src/main/res/menu/main_rss.xml index 9c051a1d2..f1e39cae2 100644 --- a/app/src/main/res/menu/main_rss.xml +++ b/app/src/main/res/menu/main_rss.xml @@ -2,6 +2,11 @@ +