mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-12 20:19:05 +01:00
Convert settings main and search views to full Compose
This commit is contained in:
@@ -51,28 +51,6 @@ abstract class ComposeController<P : Presenter<*>>(bundle: Bundle? = null) :
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Basic Compose controller without a presenter.
|
||||
*/
|
||||
abstract class BasicComposeController :
|
||||
BaseController<ComposeControllerBinding>(),
|
||||
ComposeContentController {
|
||||
|
||||
override fun createBinding(inflater: LayoutInflater) =
|
||||
ComposeControllerBinding.inflate(inflater)
|
||||
|
||||
override fun onViewCreated(view: View) {
|
||||
super.onViewCreated(view)
|
||||
|
||||
binding.root.apply {
|
||||
setComposeContent {
|
||||
val nestedScrollInterop = rememberNestedScrollInteropConnection()
|
||||
ComposeContent(nestedScrollInterop)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Basic Compose controller without a presenter.
|
||||
*/
|
||||
|
||||
@@ -37,7 +37,7 @@ class ExtensionDetailsPresenter(
|
||||
|
||||
presenterScope.launchIO {
|
||||
extensionManager.getInstalledExtensionsFlow()
|
||||
.map { it.firstOrNull { pkg-> pkg.pkgName == pkgName } }
|
||||
.map { it.firstOrNull { pkg -> pkg.pkgName == pkgName } }
|
||||
.collectLatest { extension ->
|
||||
// If extension is null it's most likely uninstalled
|
||||
if (extension == null) {
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
package eu.kanade.tachiyomi.ui.setting
|
||||
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.outlined.ChromeReaderMode
|
||||
import androidx.compose.material.icons.outlined.Code
|
||||
@@ -15,25 +11,18 @@ import androidx.compose.material.icons.outlined.Sync
|
||||
import androidx.compose.material.icons.outlined.Tune
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import eu.kanade.presentation.more.settings.SettingsMainScreen
|
||||
import eu.kanade.presentation.more.settings.SettingsSection
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.ui.base.controller.BasicComposeController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.BasicFullComposeController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.pushController
|
||||
import eu.kanade.tachiyomi.ui.setting.search.SettingsSearchController
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
class SettingsMainController : BasicComposeController() {
|
||||
|
||||
private val preferences: PreferencesHelper by injectLazy()
|
||||
|
||||
override fun getTitle() = resources?.getString(R.string.label_settings)
|
||||
class SettingsMainController : BasicFullComposeController() {
|
||||
|
||||
@Composable
|
||||
override fun ComposeContent(nestedScrollInterop: NestedScrollConnection) {
|
||||
override fun ComposeContent() {
|
||||
val settingsSections = listOf(
|
||||
SettingsSection(
|
||||
titleRes = R.string.pref_category_general,
|
||||
@@ -88,34 +77,9 @@ class SettingsMainController : BasicComposeController() {
|
||||
)
|
||||
|
||||
SettingsMainScreen(
|
||||
nestedScrollInterop = nestedScrollInterop,
|
||||
navigateUp = router::popCurrentController,
|
||||
sections = settingsSections,
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
inflater.inflate(R.menu.settings_main, menu)
|
||||
|
||||
// Initialize search option.
|
||||
val searchItem = menu.findItem(R.id.action_search)
|
||||
val searchView = searchItem.actionView as SearchView
|
||||
searchView.maxWidth = Int.MAX_VALUE
|
||||
|
||||
// Change hint to show global search.
|
||||
searchView.queryHint = applicationContext?.getString(R.string.action_search_settings)
|
||||
|
||||
searchItem.setOnActionExpandListener(
|
||||
object : MenuItem.OnActionExpandListener {
|
||||
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
|
||||
preferences.lastSearchQuerySearchSettings().set("") // reset saved search query
|
||||
router.pushController(SettingsSearchController())
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
|
||||
return true
|
||||
}
|
||||
},
|
||||
onClickSearch = { router.pushController(SettingsSearchController()) },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,80 +1,20 @@
|
||||
package eu.kanade.tachiyomi.ui.setting.search
|
||||
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
|
||||
import eu.kanade.presentation.more.settings.SettingsSearchScreen
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.ui.base.controller.ComposeController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.FullComposeController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.pushController
|
||||
|
||||
class SettingsSearchController : ComposeController<SettingsSearchPresenter>() {
|
||||
|
||||
private lateinit var searchView: SearchView
|
||||
|
||||
init {
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
override fun getTitle() = presenter.query
|
||||
class SettingsSearchController : FullComposeController<SettingsSearchPresenter>() {
|
||||
|
||||
override fun createPresenter() = SettingsSearchPresenter()
|
||||
|
||||
@Composable
|
||||
override fun ComposeContent(nestedScrollInterop: NestedScrollConnection) {
|
||||
override fun ComposeContent() {
|
||||
SettingsSearchScreen(
|
||||
nestedScroll = nestedScrollInterop,
|
||||
navigateUp = router::popCurrentController,
|
||||
presenter = presenter,
|
||||
onClickResult = { controller ->
|
||||
searchView.query.let {
|
||||
presenter.setLastSearchQuerySearchSettings(it.toString())
|
||||
}
|
||||
router.pushController(controller)
|
||||
},
|
||||
onClickResult = { router.pushController(it) },
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
inflater.inflate(R.menu.settings_main, menu)
|
||||
|
||||
// Initialize search menu
|
||||
val searchItem = menu.findItem(R.id.action_search)
|
||||
searchView = searchItem.actionView as SearchView
|
||||
searchView.maxWidth = Int.MAX_VALUE
|
||||
searchView.queryHint = applicationContext?.getString(R.string.action_search_settings)
|
||||
|
||||
searchItem.expandActionView()
|
||||
|
||||
searchItem.setOnActionExpandListener(
|
||||
object : MenuItem.OnActionExpandListener {
|
||||
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
|
||||
router.popCurrentController()
|
||||
return false
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
searchView.setOnQueryTextListener(
|
||||
object : SearchView.OnQueryTextListener {
|
||||
override fun onQueryTextSubmit(query: String?): Boolean {
|
||||
presenter.searchSettings(query)
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onQueryTextChange(newText: String?): Boolean {
|
||||
presenter.searchSettings(newText)
|
||||
return false
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
searchView.setQuery(presenter.getLastSearchQuerySearchSettings(), true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,14 +23,6 @@ class SettingsSearchPresenter(
|
||||
SettingsSearchHelper.initPreferenceSearchResults(preferences.context)
|
||||
}
|
||||
|
||||
fun getLastSearchQuerySearchSettings(): String {
|
||||
return preferences.lastSearchQuerySearchSettings().get()
|
||||
}
|
||||
|
||||
fun setLastSearchQuerySearchSettings(query: String) {
|
||||
preferences.lastSearchQuerySearchSettings().set(query)
|
||||
}
|
||||
|
||||
fun searchSettings(query: String?) {
|
||||
_state.value = if (!query.isNullOrBlank()) {
|
||||
SettingsSearchHelper.getFilteredResults(query)
|
||||
|
||||
Reference in New Issue
Block a user