diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesAdapter.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesAdapter.kt index 1c0915d32..1fdfcdaaa 100644 --- a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesAdapter.kt @@ -8,18 +8,16 @@ import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target 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 io.legado.app.help.ImageLoader import io.legado.app.utils.gone import io.legado.app.utils.visible import kotlinx.android.synthetic.main.item_rss_article.view.* -import org.jetbrains.anko.sdk27.listeners.onClick import org.jetbrains.anko.textColorResource -class RssArticlesAdapter(context: Context, private val layoutId: Int, val callBack: CallBack) : - SimpleRecyclerAdapter(context, layoutId) { +class RssArticlesAdapter(context: Context, private val layoutId: Int, callBack: CallBack) : + RssArticlesBaseAdapter(context, layoutId, callBack) { override fun convert(holder: ItemViewHolder, item: RssArticle, payloads: MutableList) { with(holder.itemView) { @@ -62,15 +60,4 @@ class RssArticlesAdapter(context: Context, private val layoutId: Int, val callBa } } - override fun registerListener(holder: ItemViewHolder) { - holder.itemView.onClick { - getItem(holder.layoutPosition)?.let { - callBack.readRss(it) - } - } - } - - interface CallBack { - fun readRss(rssArticle: RssArticle) - } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesBaseAdapter.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesBaseAdapter.kt new file mode 100644 index 000000000..385f19ae4 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesBaseAdapter.kt @@ -0,0 +1,24 @@ +package io.legado.app.ui.rss.article + +import android.content.Context +import io.legado.app.base.adapter.ItemViewHolder +import io.legado.app.base.adapter.SimpleRecyclerAdapter +import io.legado.app.data.entities.RssArticle +import org.jetbrains.anko.sdk27.listeners.onClick + + +abstract class RssArticlesBaseAdapter(context: Context, private val layoutId: Int, val callBack: CallBack) : + SimpleRecyclerAdapter(context, layoutId) { + + override fun registerListener(holder: ItemViewHolder) { + holder.itemView.onClick { + getItem(holder.layoutPosition)?.let { + callBack.readRss(it) + } + } + } + + interface CallBack { + fun readRss(rssArticle: RssArticle) + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt index 76d68d6c9..fe326edad 100644 --- a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.View import androidx.lifecycle.LiveData import androidx.lifecycle.Observer +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import io.legado.app.App @@ -21,9 +22,10 @@ import io.legado.app.utils.startActivity import kotlinx.android.synthetic.main.fragment_rss_articles.* import kotlinx.android.synthetic.main.view_load_more.view.* import kotlinx.android.synthetic.main.view_refresh_recycler.* +import org.jetbrains.anko.padding class RssArticlesFragment : VMBaseFragment(R.layout.fragment_rss_articles), - RssArticlesAdapter.CallBack { + RssArticlesBaseAdapter.CallBack { companion object { fun create(sortName: String, sortUrl: String): RssArticlesFragment { @@ -40,7 +42,7 @@ class RssArticlesFragment : VMBaseFragment(R.layout.fragme get() = getViewModelOfActivity(RssSortViewModel::class.java) override val viewModel: RssArticlesViewModel get() = getViewModel(RssArticlesViewModel::class.java) - lateinit var adapter: RssArticlesAdapter + lateinit var adapter: RssArticlesBaseAdapter private lateinit var loadMoreView: LoadMoreView private var rssArticlesData: LiveData>? = null @@ -59,8 +61,6 @@ class RssArticlesFragment : VMBaseFragment(R.layout.fragme private fun initView() { ATH.applyEdgeEffectColor(recycler_view) - recycler_view.layoutManager = LinearLayoutManager(requireContext()) - recycler_view.addItemDecoration(VerticalDivider(requireContext())) var rssLayoutConfig = AppConfig.rssLayout var layoutId = R.layout.item_rss_article @@ -69,7 +69,19 @@ class RssArticlesFragment : VMBaseFragment(R.layout.fragme else if (rssLayoutConfig == 2) layoutId = R.layout.item_rss_article_2 - adapter = RssArticlesAdapter(requireContext(), layoutId, this) + if (rssLayoutConfig == 2) { + recycler_view.padding = 8 + recycler_view.layoutManager = GridLayoutManager(requireContext(), 2) + while (recycler_view.itemDecorationCount > 0) + recycler_view.removeItemDecorationAt(0) + adapter = RssArticlesGridAdapter(requireContext(), layoutId, this) + } else { + recycler_view.padding = 0 + recycler_view.layoutManager = LinearLayoutManager(requireContext()) + recycler_view.addItemDecoration(VerticalDivider(requireContext())) + adapter = RssArticlesAdapter(requireContext(), layoutId, this) + } + recycler_view.adapter = adapter loadMoreView = LoadMoreView(requireContext()) adapter.addFooterView(loadMoreView) diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesGridAdapter.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesGridAdapter.kt new file mode 100644 index 000000000..16793bd66 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesGridAdapter.kt @@ -0,0 +1,63 @@ +package io.legado.app.ui.rss.article + +import android.content.Context +import android.graphics.drawable.Drawable +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.request.RequestListener +import com.bumptech.glide.request.target.Target +import io.legado.app.R +import io.legado.app.base.adapter.ItemViewHolder +import io.legado.app.data.entities.RssArticle +import io.legado.app.help.ImageLoader +import io.legado.app.utils.gone +import io.legado.app.utils.visible +import kotlinx.android.synthetic.main.item_rss_article.view.* +import org.jetbrains.anko.textColorResource + + +class RssArticlesGridAdapter(context: Context, private val layoutId: Int, callBack: CallBack) : + RssArticlesBaseAdapter(context, layoutId, callBack) { + + override fun convert(holder: ItemViewHolder, item: RssArticle, payloads: MutableList) { + with(holder.itemView) { + tv_title.text = item.title + tv_pub_date.text = item.pubDate + if (item.image.isNullOrBlank()) { + image_view.gone() + } else { + ImageLoader.load(context, item.image) + .addListener(object : RequestListener { + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target?, + isFirstResource: Boolean + ): Boolean { + image_view.gone() + return false + } + + override fun onResourceReady( + resource: Drawable?, + model: Any?, + target: Target?, + dataSource: DataSource?, + isFirstResource: Boolean + ): Boolean { + image_view.visible() + return false + } + + }) + .into(image_view) + } + if (item.read) { + tv_title.textColorResource = R.color.tv_text_summary + } else { + tv_title.textColorResource = R.color.tv_text_default + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt index 5abddf2e0..de460a6ce 100644 --- a/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt @@ -43,13 +43,10 @@ class RssSortActivity : VMBaseActivity(R.layout.activity_rss_a return super.onCompatCreateOptionsMenu(menu) } -<<<<<<< HEAD override fun onPrepareOptionsMenu(menu: Menu?): Boolean { return super.onPrepareOptionsMenu(menu) } -======= ->>>>>>> 6c28abcdcd7b57f40de92223ec9e6241805e2b7c override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.menu_edit_source -> viewModel.rssSource?.sourceUrl?.let { @@ -60,12 +57,9 @@ class RssSortActivity : VMBaseActivity(R.layout.activity_rss_a viewModel.clearArticles() } } -<<<<<<< HEAD R.id.menu_switch_layout -> { switchLayout() } -======= ->>>>>>> 6c28abcdcd7b57f40de92223ec9e6241805e2b7c } return super.onCompatOptionsItemSelected(item) } diff --git a/app/src/main/res/drawable/bg_img_border.xml b/app/src/main/res/drawable/bg_img_border.xml new file mode 100644 index 000000000..9eb8d9540 --- /dev/null +++ b/app/src/main/res/drawable/bg_img_border.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_rss_article.xml b/app/src/main/res/layout/item_rss_article.xml index df31c7d70..157ce57ed 100644 --- a/app/src/main/res/layout/item_rss_article.xml +++ b/app/src/main/res/layout/item_rss_article.xml @@ -39,7 +39,7 @@ android:id="@+id/image_view" android:layout_width="110dp" android:layout_height="68dp" - android:contentDescription="@string/img_cover" + android:contentDescription="@string/loading" android:paddingLeft="16dp" android:visibility="gone" android:scaleType="centerCrop" diff --git a/app/src/main/res/layout/item_rss_article_1.xml b/app/src/main/res/layout/item_rss_article_1.xml index ebabc57e2..5a5f903e4 100644 --- a/app/src/main/res/layout/item_rss_article_1.xml +++ b/app/src/main/res/layout/item_rss_article_1.xml @@ -3,17 +3,16 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:padding="14dp"> + android:layout_height="wrap_content"> @@ -38,14 +39,22 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" - android:layout_marginTop="16dp" android:text="@string/app_name" - android:textSize="12sp" + android:textSize="10sp" android:maxLines="1" + android:paddingLeft="12dp" + android:paddingRight="12dp" + android:paddingTop="10dp" app:layout_constraintTop_toBottomOf="@+id/tv_title" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/item_rss_article_2.xml b/app/src/main/res/layout/item_rss_article_2.xml index df31c7d70..ccd5d152c 100644 --- a/app/src/main/res/layout/item_rss_article_2.xml +++ b/app/src/main/res/layout/item_rss_article_2.xml @@ -2,49 +2,52 @@ + android:layout_height="wrap_content"> + + + app:layout_constraintRight_toRightOf="parent" /> - - + app:layout_constraintRight_toRightOf="parent" /> \ No newline at end of file