From 7f7f7bf3b8f28a133820052931e0c88971eb86c8 Mon Sep 17 00:00:00 2001 From: ReChinX Date: Tue, 13 Nov 2018 12:25:07 +0800 Subject: [PATCH] feat: source switch support Signed-off-by: ReChinX --- .../meow/data/preference/PreferenceHelper.kt | 8 ++++++- .../rechinx/meow/ui/result/ResultPresenter.kt | 7 +++++- .../rechinx/meow/ui/source/SourceAdapter.kt | 22 +++++++++++++++++-- .../rechinx/meow/ui/source/SourceFragment.kt | 8 +++++++ 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/top/rechinx/meow/data/preference/PreferenceHelper.kt b/app/src/main/java/top/rechinx/meow/data/preference/PreferenceHelper.kt index 6e7ab6e..43111e4 100644 --- a/app/src/main/java/top/rechinx/meow/data/preference/PreferenceHelper.kt +++ b/app/src/main/java/top/rechinx/meow/data/preference/PreferenceHelper.kt @@ -9,7 +9,6 @@ class PreferenceHelper(context: Context) { private val prefs = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE) private val rxPrefs = RxSharedPreferences.create(prefs) - fun fullscreen() = rxPrefs.getBoolean(Constants.PREF_FULL_SCREEN, true) fun pageTransitions() = rxPrefs.getBoolean(Constants.PREF_ENABLE_TRANSITIONS, true) @@ -17,6 +16,13 @@ class PreferenceHelper(context: Context) { fun readerMode() = rxPrefs.getString(Constants.PREF_READER_MODE, "0") fun hiddenReaderInfo() = rxPrefs.getBoolean(Constants.PREF_HIDE_READER_INFO, false) + + fun sourceSwitch(sourceId: Long) = rxPrefs.getBoolean("source_switch_$sourceId", false) + + fun setSourceSwitch(sourceId: Long, switcher: Boolean) { + prefs.edit().putBoolean("source_switch_$sourceId", switcher) + .apply() + } companion object { private const val PREFERENCES_NAME = "meow_preferences" diff --git a/app/src/main/java/top/rechinx/meow/ui/result/ResultPresenter.kt b/app/src/main/java/top/rechinx/meow/ui/result/ResultPresenter.kt index e8cf878..dfaf79a 100644 --- a/app/src/main/java/top/rechinx/meow/ui/result/ResultPresenter.kt +++ b/app/src/main/java/top/rechinx/meow/ui/result/ResultPresenter.kt @@ -12,6 +12,7 @@ import top.rechinx.meow.core.source.Source import top.rechinx.meow.core.source.SourceManager import top.rechinx.meow.core.source.model.FilterList import top.rechinx.meow.data.database.model.Manga +import top.rechinx.meow.data.preference.PreferenceHelper import top.rechinx.meow.data.repository.CataloguePager import top.rechinx.meow.exception.NoMoreResultException import top.rechinx.meow.support.log.L @@ -24,6 +25,8 @@ class ResultPresenter(val query: String): BasePresenter(), KoinC private val sourceManager: SourceManager by inject() + private val preferences: PreferenceHelper by inject() + private var stateArray: ArrayList = ArrayList() var error = 0 @@ -35,7 +38,9 @@ class ResultPresenter(val query: String): BasePresenter(), KoinC private fun initStateArray() { stateArray = ArrayList() - for(source in sourceManager.getSources()) { + sourceManager.getSources().filter { + preferences.sourceSwitch(it.id).get() + }.forEach { source -> val state = State() state.state = State.STATE_NULL state.source = source diff --git a/app/src/main/java/top/rechinx/meow/ui/source/SourceAdapter.kt b/app/src/main/java/top/rechinx/meow/ui/source/SourceAdapter.kt index 1888616..07cae00 100644 --- a/app/src/main/java/top/rechinx/meow/ui/source/SourceAdapter.kt +++ b/app/src/main/java/top/rechinx/meow/ui/source/SourceAdapter.kt @@ -6,11 +6,22 @@ import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.item_source.view.* +import org.koin.standalone.KoinComponent +import org.koin.standalone.inject import top.rechinx.meow.R import top.rechinx.meow.core.source.Source +import top.rechinx.meow.data.preference.PreferenceHelper import top.rechinx.meow.ui.base.BaseAdapter -class SourceAdapter(context: Context, list: ArrayList): BaseAdapter(context, list) { +class SourceAdapter(context: Context, list: ArrayList): BaseAdapter(context, list), KoinComponent { + + private lateinit var onItemCheckedListener: OnItemCheckedListener + + private val preferences: PreferenceHelper by inject() + + fun setOnItemCheckedlistener(listener: OnItemCheckedListener) { + this.onItemCheckedListener = listener + } override fun getItemDecoration(): RecyclerView.ItemDecoration? { return object : RecyclerView.ItemDecoration() { @@ -25,12 +36,19 @@ class SourceAdapter(context: Context, list: ArrayList): BaseAdapter + onItemCheckedListener.onItemCheckedListener(isChecked, holder.adapterPosition) + } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return ViewHolder(inflater.inflate(R.layout.item_source, parent, false)) } + interface OnItemCheckedListener { + fun onItemCheckedListener(isChecked: Boolean, position: Int) + } + class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) } \ No newline at end of file diff --git a/app/src/main/java/top/rechinx/meow/ui/source/SourceFragment.kt b/app/src/main/java/top/rechinx/meow/ui/source/SourceFragment.kt index c145316..13a9b33 100644 --- a/app/src/main/java/top/rechinx/meow/ui/source/SourceFragment.kt +++ b/app/src/main/java/top/rechinx/meow/ui/source/SourceFragment.kt @@ -12,6 +12,7 @@ import kotlinx.android.synthetic.main.fragment_source.* import org.koin.android.ext.android.inject import top.rechinx.meow.R import top.rechinx.meow.core.source.SourceManager +import top.rechinx.meow.data.preference.PreferenceHelper import top.rechinx.meow.ui.base.BaseAdapter import top.rechinx.meow.ui.filter.FilterActivity import top.rechinx.rikka.ext.gone @@ -20,6 +21,7 @@ class SourceFragment: Fragment(), BaseAdapter.OnItemClickListener { private lateinit var adapter: SourceAdapter private val sourceManager: SourceManager by inject() + private val preferences: PreferenceHelper by inject() override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_source, container, false) @@ -29,6 +31,12 @@ class SourceFragment: Fragment(), BaseAdapter.OnItemClickListener { super.onViewCreated(view, savedInstanceState) adapter = SourceAdapter(activity!!, ArrayList()) adapter.setOnItemClickListener(this) + adapter.setOnItemCheckedlistener(object : SourceAdapter.OnItemCheckedListener { + override fun onItemCheckedListener(isChecked: Boolean, position: Int) { + val source = adapter.getItem(position) + preferences.setSourceSwitch(source.id, isChecked) + } + }) recyclerView.itemAnimator = null recyclerView.setHasFixedSize(true) adapter.getItemDecoration()?.let { recyclerView.addItemDecoration(it) }