From 621772f359a2cb1a4a081cbd3496ddebe9faf3b1 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Tue, 14 Feb 2023 21:08:31 +0800 Subject: [PATCH] Implement #646 --- .../ehviewer/ui/scene/GalleryListScene.kt | 11 +++++++---- .../com/hippo/ehviewer/widget/SearchLayout.kt | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt index 4370b59ba..3e463f9f9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt @@ -164,7 +164,6 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, SearchLayout.H } } private var mHasFirstRefresh = false - private var mNavCheckedId = 0 private val mDownloadManager: DownloadManager = downloadManager @SuppressLint("NotifyDataSetChanged") @@ -211,8 +210,9 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, SearchLayout.H ACTION_SUBSCRIPTION -> ListUrlBuilder(MODE_SUBSCRIPTION) ACTION_WHATS_HOT -> ListUrlBuilder(MODE_WHATS_HOT) ACTION_TOP_LIST -> ListUrlBuilder(MODE_TOPLIST, mKeyword = "11") - ACTION_LIST_URL_BUILDER -> args?.getParcelable(KEY_LIST_URL_BUILDER) - ?.copy() ?: ListUrlBuilder() + ACTION_LIST_URL_BUILDER -> + args?.getParcelableCompat(KEY_LIST_URL_BUILDER)?.copy() + ?: ListUrlBuilder() else -> throw IllegalStateException("Wrong KEY_ACTION:${args?.getString(KEY_ACTION)} when handle args!") } @@ -324,8 +324,11 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, SearchLayout.H binding.fabLayout.setSecondaryFabVisibilityAt(0, !isPopular) binding.fabLayout.setSecondaryFabVisibilityAt(2, !isPopular) - // Update normal search mode + // Update normal search mode and category binding.searchLayout.setNormalSearchMode(if (mode == MODE_SUBSCRIPTION) R.id.search_subscription_search else R.id.search_normal_search) + if (category != EhUtils.NONE) { + binding.searchLayout.setCategory(category) + } // Update search edit text if (!mIsTopList) { diff --git a/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.kt b/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.kt index c2182ca2d..10b741a40 100644 --- a/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.kt +++ b/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.kt @@ -29,6 +29,7 @@ import android.view.ViewGroup import android.widget.* import androidx.annotation.IntDef import androidx.core.content.edit +import androidx.core.view.forEach import androidx.preference.PreferenceManager import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager @@ -103,8 +104,8 @@ class SearchLayout @JvmOverloads constructor( mChip.isChecked = NumberUtils.int2boolean(mPair.first and mCategoryStored) mChip.setOnLongClickListener { if (mChip.isChecked) { - for (i in 0 until mCategoryGroup.childCount) { - (mCategoryGroup.getChildAt(i) as Chip).isChecked = true + mCategoryGroup.forEach { + (it as IdentifiedChip).isChecked = true } mChip.isChecked = false } else { @@ -115,10 +116,10 @@ class SearchLayout @JvmOverloads constructor( } mCategoryGroup.addView(mChip) } - mCategoryGroup.setOnCheckedStateChangeListener { _, checkedIds -> + mCategoryGroup.setOnCheckedStateChangeListener { group, checkedIds -> var mCategory = 0 for (index in checkedIds) { - mCategory = mCategory or findViewById(index).idt + mCategory = mCategory or group.findViewById(index).idt } mSharePref.edit { putInt(SEARCH_CATEGORY_PREF, mCategory) } } @@ -160,6 +161,14 @@ class SearchLayout @JvmOverloads constructor( mNormalSearchMode.check(id) } + fun setCategory(category: Int) { + mCategoryGroup.forEach { + (it as IdentifiedChip).apply { + isChecked = idt and category != 0 + } + } + } + override fun onSelectImage() { if (mHelper != null) { mHelper!!.onSelectImage() @@ -245,7 +254,7 @@ class SearchLayout @JvmOverloads constructor( post { setSearchMode(tab.position) } } - fun setSearchMode(@SearchMode mode: Int) { + private fun setSearchMode(@SearchMode mode: Int) { val oldItemCount = mAdapter.itemCount mSearchMode = mode val newItemCount = mAdapter.itemCount