# Conflicts:
#	app/src/main/java/io/legado/app/ui/rss/article/RssArticlesAdapter.kt
#	app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt
pull/219/head
yangyxd 5 years ago
commit 467caf3d23
  1. 13
      app/src/main/java/io/legado/app/help/AppConfig.kt
  2. 26
      app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt
  3. 32
      app/src/main/java/io/legado/app/ui/rss/article/RssArticlesAdapter.kt
  4. 16
      app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt
  5. 15
      app/src/main/java/io/legado/app/utils/ContextExtensions.kt
  6. BIN
      app/src/main/res/drawable/image_rss_article.jpg
  7. 1
      app/src/main/res/layout/item_rss_article.xml
  8. 10
      app/src/main/res/menu/theme_config.xml

@ -2,7 +2,6 @@ package io.legado.app.help
import android.annotation.SuppressLint
import android.content.Context
import android.content.pm.PackageManager
import io.legado.app.App
import io.legado.app.R
import io.legado.app.constant.PreferKey
@ -141,15 +140,3 @@ object AppConfig {
}
val Context.channel: String
get() {
try {
val pm = packageManager
val appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
return appInfo.metaData.getString("channel") ?: ""
} catch (e: Exception) {
e.printStackTrace();
}
return ""
}

@ -4,6 +4,9 @@ import android.annotation.SuppressLint
import android.content.SharedPreferences
import android.os.Build
import android.os.Bundle
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
@ -20,7 +23,6 @@ import io.legado.app.lib.theme.ATH
import io.legado.app.lib.theme.ColorUtils
import io.legado.app.ui.widget.number.NumberPickerDialog
import io.legado.app.ui.widget.prefs.IconListPreference
import io.legado.app.ui.widget.prefs.NameListPreference
import io.legado.app.utils.*
@ -35,18 +37,13 @@ class ThemeConfigFragment : PreferenceFragmentCompat(), SharedPreferences.OnShar
preferenceScreen.removePreference(it)
}
}
findPreference<NameListPreference>(PreferKey.themeMode)?.let {
it.setOnPreferenceChangeListener { _, _ ->
view?.post { App.INSTANCE.applyDayNight() }
true
}
}
upPreferenceSummary("barElevation", AppConfig.elevation.toString())
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
ATH.applyEdgeEffectColor(listView)
setHasOptionsMenu(true)
}
override fun onResume() {
@ -59,6 +56,21 @@ class ThemeConfigFragment : PreferenceFragmentCompat(), SharedPreferences.OnShar
super.onPause()
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.theme_config, menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_theme_mode -> {
AppConfig.isNightTheme = !AppConfig.isNightTheme
App.INSTANCE.applyDayNight()
}
}
return super.onOptionsItemSelected(item)
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
sharedPreferences ?: return
when (key) {

@ -1,9 +1,8 @@
package io.legado.app.ui.rss.article
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.drawable.Drawable
import android.widget.ImageView
import androidx.core.content.ContextCompat
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
@ -20,33 +19,30 @@ import org.jetbrains.anko.sdk27.listeners.onClick
import org.jetbrains.anko.textColorResource
class RssArticlesAdapter(context: Context, layoutId: Int, private val isGridLayout: Boolean, val callBack: CallBack) :
class RssArticlesAdapter(context: Context, layoutId: Int, val callBack: CallBack) :
SimpleRecyclerAdapter<RssArticle>(context, layoutId) {
fun emptyImage(image_view: ImageView) {
if (isGridLayout)
image_view.setImageResource(R.drawable.rss_img_default)
else
image_view.gone()
}
@SuppressLint("CheckResult")
override fun convert(holder: ItemViewHolder, item: RssArticle, payloads: MutableList<Any>) {
with(holder.itemView) {
tv_title.text = item.title
tv_pub_date.text = item.pubDate
if (item.image.isNullOrBlank()) {
emptyImage(image_view)
if (item.image.isNullOrBlank() && !callBack.isGridLayout) {
image_view.gone()
} else {
ImageLoader.load(context, item.image)
.addListener(object : RequestListener<Drawable> {
val imageLoader = ImageLoader.load(context, item.image)
if (callBack.isGridLayout) {
imageLoader.placeholder(R.drawable.image_rss_article)
} else {
imageLoader.addListener(object : RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean
): Boolean {
emptyImage(image_view)
return true
image_view.gone()
return false
}
override fun onResourceReady(
@ -61,7 +57,8 @@ class RssArticlesAdapter(context: Context, layoutId: Int, private val isGridLayo
}
})
.into(image_view)
}
imageLoader.into(image_view)
}
if (item.read) {
tv_title.textColorResource = R.color.tv_text_summary
@ -80,6 +77,7 @@ class RssArticlesAdapter(context: Context, layoutId: Int, private val isGridLayo
}
interface CallBack {
val isGridLayout: Boolean
fun readRss(rssArticle: RssArticle)
}
}

@ -43,6 +43,8 @@ class RssArticlesFragment : VMBaseFragment<RssArticlesViewModel>(R.layout.fragme
lateinit var adapter: RssArticlesAdapter
private lateinit var loadMoreView: LoadMoreView
private var rssArticlesData: LiveData<List<RssArticle>>? = null
override val isGridLayout: Boolean
get() = activityViewModel.isGridLayout
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
viewModel.init(arguments)
@ -54,17 +56,15 @@ class RssArticlesFragment : VMBaseFragment<RssArticlesViewModel>(R.layout.fragme
private fun initView() {
ATH.applyEdgeEffectColor(recycler_view)
if (activityViewModel.isGridLayout) {
recycler_view.setPadding(8,0,8,0)
recycler_view.layoutManager = GridLayoutManager(requireContext(), 2)
while (recycler_view.itemDecorationCount > 0)
recycler_view.removeItemDecorationAt(0)
recycler_view.layoutManager = if (activityViewModel.isGridLayout) {
recycler_view.setPadding(8, 0, 8, 0)
GridLayoutManager(requireContext(), 2)
} else {
recycler_view.setPadding(0,0,0,0)
recycler_view.layoutManager = LinearLayoutManager(requireContext())
recycler_view.addItemDecoration(VerticalDivider(requireContext()))
LinearLayoutManager(requireContext())
}
adapter = RssArticlesAdapter(requireContext(), activityViewModel.layoutId, activityViewModel.isGridLayout, this)
adapter = RssArticlesAdapter(requireContext(), activityViewModel.layoutId, this)
recycler_view.adapter = adapter
loadMoreView = LoadMoreView(requireContext())
adapter.addFooterView(loadMoreView)

@ -3,6 +3,7 @@ package io.legado.app.utils
import android.annotation.SuppressLint
import android.content.*
import android.content.pm.PackageManager
import android.content.res.ColorStateList
import android.content.res.Configuration
import android.graphics.Bitmap
@ -178,4 +179,16 @@ fun Context.openUrl(uri: Uri) {
toast(e.localizedMessage ?: "open url error")
}
}
}
}
val Context.channel: String
get() {
try {
val pm = packageManager
val appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
return appInfo.metaData.getString("channel") ?: ""
} catch (e: Exception) {
e.printStackTrace();
}
return ""
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@ -43,6 +43,7 @@
android:paddingLeft="16dp"
android:visibility="gone"
android:scaleType="centerCrop"
android:src="@drawable/image_rss_article"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="RtlHardcoded,RtlSymmetry" />

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_theme_mode"
android:title="@string/theme_mode"
app:showAsAction="always" />
</menu>
Loading…
Cancel
Save