diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 928c4d99d..8c0318cae 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,7 +71,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..0e0819ce5 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 @@ -1,19 +1,28 @@ package io.legado.app.ui.main.rss import android.os.Bundle +import android.util.Log +import android.view.Gravity import android.view.Menu import android.view.MenuItem import android.view.View +import android.widget.EditText +import android.widget.LinearLayout import androidx.lifecycle.Observer import androidx.recyclerview.widget.GridLayoutManager import io.legado.app.App import io.legado.app.R import io.legado.app.base.BaseFragment +import io.legado.app.lib.dialogs.alert +import io.legado.app.lib.dialogs.cancelButton +import io.legado.app.lib.dialogs.yesButton 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.* import kotlinx.android.synthetic.main.view_title_bar.* +import org.jetbrains.anko.padding class RssFragment : BaseFragment(R.layout.fragment_rss), RssAdapter.CallBack { @@ -34,6 +43,25 @@ class RssFragment : BaseFragment(R.layout.fragment_rss), super.onCompatOptionsItemSelected(item) when (item.itemId) { R.id.menu_rss_config -> startActivity() + R.id.menu_rss_add -> { + alert { + title = "快速添加并预览" + val layout = LinearLayout(activity) + val urlEdit = EditText(activity) + urlEdit.hint = "输入RSS地址" + urlEdit.width = 800 + layout.gravity = Gravity.CENTER + layout.addView(urlEdit) + customView = layout + cancelButton{ + Log.i("RSS","Quick Add URL cancel") + } + yesButton{ + Log.i("RSS","Quick Add URL: ${urlEdit.text}") + startActivity("QuickAddURL" to urlEdit.text.toString().trim()) + } + }.show() + } } } 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..3686dacdf 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,74 @@ package io.legado.app.ui.rss.article -class RssArticlesActivity \ No newline at end of file +import android.app.ProgressDialog +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.onItemClick +import java.net.URL + +class RssArticlesActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + if (intent.hasExtra("QuickAddURL")) { + // 处理从 快速添加并预览 跳转到这个页面 + val urlString = intent.getStringExtra("QuickAddURL") + val adapter = ArticleAdapter(mutableListOf(), this) + listView { + this.adapter = adapter + onItemClick { p0, p1, p2, p3 -> + startActivity("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, 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..e93f1e982 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 description = intent.getStringExtra("description") + webView.loadData("$description","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 @@ +