diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt index 17db1d0e9..fd87dc928 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/ReadBookActivity.kt @@ -60,7 +60,6 @@ import io.legato.kazusa.lib.dialogs.alert import io.legato.kazusa.lib.dialogs.selector import io.legato.kazusa.model.ReadAloud import io.legato.kazusa.model.ReadBook -import io.legato.kazusa.model.ReadManga import io.legato.kazusa.model.analyzeRule.AnalyzeRule import io.legato.kazusa.model.analyzeRule.AnalyzeRule.Companion.setChapter import io.legato.kazusa.model.analyzeRule.AnalyzeRule.Companion.setCoroutineContext diff --git a/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt index 614c10b9f..ab0b75aed 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/search/SearchActivity.kt @@ -9,6 +9,7 @@ import android.view.MenuItem import android.view.View.VISIBLE import android.view.inputmethod.EditorInfo import androidx.activity.viewModels +import androidx.appcompat.widget.PopupMenu import androidx.core.os.bundleOf import androidx.core.view.isVisible import androidx.core.widget.doAfterTextChanged @@ -88,13 +89,12 @@ class SearchActivity : VMBaseActivity { - putPrefBoolean( - PreferKey.precisionSearch, - !getPrefBoolean(PreferKey.precisionSearch) - ) - precisionSearchMenuItem?.isChecked = getPrefBoolean(PreferKey.precisionSearch) - searchView.text.toString().trim().let { - searchView.setText(it) + val newValue = !getPrefBoolean(PreferKey.precisionSearch) + putPrefBoolean(PreferKey.precisionSearch, newValue) + precisionSearchMenuItem?.isChecked = newValue + binding.chipPrecisionSearch.isChecked = newValue + binding.searchView.text.toString().trim().let { + binding.searchView.setText(it) } } R.id.menu_search_scope -> alertSearchScope() R.id.menu_source_manage -> startActivity() R.id.menu_log -> showDialogFragment(AppLogDialog()) - R.id.menu_1 -> viewModel.searchScope.update("") + R.id.menu_1 -> { + viewModel.searchScope.update("") + updateSelectedGroup() + } else -> { if (item.groupId == R.id.menu_group_1) { viewModel.searchScope.remove(item.title.toString()) } else if (item.groupId == R.id.menu_group_2) { viewModel.searchScope.update(item.title.toString()) } + updateSelectedGroup() } } return super.onCompatOptionsItemSelected(item) } private fun initMaterialSearch() { + binding.chipPrecisionSearch.isChecked = getPrefBoolean(PreferKey.precisionSearch) + binding.chipPrecisionSearch.setOnCheckedChangeListener { chip, isChecked -> + putPrefBoolean(PreferKey.precisionSearch, isChecked) + precisionSearchMenuItem?.isChecked = isChecked + binding.searchView.text.toString().trim().let { + binding.searchView.setText(it) + } + } + binding.chipSearchScope.setOnClickListener { + alertSearchScope() + } + binding.chipGroup.setOnClickListener { view -> + val popup = PopupMenu(this, view) + val menu = popup.menu + buildSearchScopeMenu(menu) + popup.setOnMenuItemClickListener { item -> + when (item.groupId) { + R.id.menu_group_1 -> item.title.toString() + R.id.menu_group_2 -> { + if (item.itemId == R.id.menu_1) { + "" + } else { + item.title.toString() + } + } + else -> item.title.toString() + } + if (item.groupId == R.id.menu_group_1) { + viewModel.searchScope.remove(item.title.toString()) + } else { + if (item.itemId == R.id.menu_1) { + viewModel.searchScope.update("") + } else { + viewModel.searchScope.update(item.title.toString()) + } + } + updateSelectedGroup() + true + } - - - - + popup.show() + } searchBar.setOnMenuItemClickListener { item -> onCompatOptionsItemSelected(item) } @@ -236,6 +241,60 @@ class SearchActivity : VMBaseActivity + if (searchScopeNames.contains(groupName)) { + menu.add(R.id.menu_group_1, Menu.NONE, Menu.NONE, groupName).apply { + isChecked = true + hasChecked = true + } + } else { + menu.add(R.id.menu_group_2, Menu.NONE, Menu.NONE, groupName) + } + } + + if (!hasChecked) { + viewModel.searchScope.update("") + allSourceMenu.isChecked = true + } + + menu.setGroupCheckable(R.id.menu_group_1, true, false) + menu.setGroupCheckable(R.id.menu_group_2, true, true) + } + } + + private fun initRecyclerView() { binding.rvBookshelfSearch.layoutManager = FlexboxLayoutManager(this) binding.rvBookshelfSearch.adapter = bookAdapter diff --git a/app/src/main/res/layout/activity_book_search.xml b/app/src/main/res/layout/activity_book_search.xml index d15b22f52..d685ebf78 100644 --- a/app/src/main/res/layout/activity_book_search.xml +++ b/app/src/main/res/layout/activity_book_search.xml @@ -109,6 +109,7 @@ android:id="@+id/search_view" android:layout_width="match_parent" android:layout_height="match_parent" + app:menu="@menu/book_search" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -123,6 +124,31 @@ android:orientation="vertical" android:visibility="visible"> + + + + + + + android:paddingHorizontal="16dp"> 切换至自定义主题或调整自定义设置时,部分选项需要重启。 此更改需要重启应用才能生效,是否立即重启? 更改将在下次启动应用时生效 + 选择书源分组 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5ce75af79..f19bcb339 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1300,4 +1300,5 @@ 切换至自定义主题或调整自定义设置时,部分选项需要重启。 修改该选项需要重启 稍后重启 + 选择书源分组