Convert settings main and search views to full Compose

This commit is contained in:
arkon
2022-08-29 16:39:35 -04:00
parent 761635b572
commit f5c7aa1142
12 changed files with 148 additions and 294 deletions

View File

@@ -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.
*/

View File

@@ -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) {

View File

@@ -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()) },
)
}
}

View File

@@ -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)
}
}

View File

@@ -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)