Use expanded SearchView in Toolbar instead of an menu option
This commit is contained in:
@@ -44,13 +44,12 @@ import org.koitharu.kotatsu.settings.SettingsActivity
|
||||
import org.koitharu.kotatsu.settings.onboard.OnboardDialogFragment
|
||||
import org.koitharu.kotatsu.tracker.ui.FeedFragment
|
||||
import org.koitharu.kotatsu.tracker.work.TrackWorker
|
||||
import org.koitharu.kotatsu.utils.ext.getDisplayMessage
|
||||
import org.koitharu.kotatsu.utils.ext.navigationItemBackground
|
||||
import org.koitharu.kotatsu.utils.ext.resolveDp
|
||||
import org.koitharu.kotatsu.utils.ext.*
|
||||
|
||||
class MainActivity : BaseActivity<ActivityMainBinding>(),
|
||||
NavigationView.OnNavigationItemSelectedListener,
|
||||
View.OnClickListener, SearchSuggestionListener, MenuItem.OnActionExpandListener {
|
||||
View.OnClickListener, View.OnFocusChangeListener, SearchSuggestionListener,
|
||||
MenuItem.OnActionExpandListener {
|
||||
|
||||
private val viewModel by viewModel<MainViewModel>(mode = LazyThreadSafetyMode.NONE)
|
||||
private val searchSuggestionViewModel by viewModel<SearchSuggestionViewModel>(
|
||||
@@ -66,15 +65,20 @@ class MainActivity : BaseActivity<ActivityMainBinding>(),
|
||||
setContentView(ActivityMainBinding.inflate(layoutInflater))
|
||||
navHeaderBinding = NavigationHeaderBinding.inflate(layoutInflater)
|
||||
drawerToggle = ActionBarDrawerToggle(
|
||||
this,
|
||||
binding.drawer,
|
||||
binding.toolbar,
|
||||
R.string.open_menu,
|
||||
R.string.close_menu
|
||||
)
|
||||
this,
|
||||
binding.drawer,
|
||||
binding.toolbar,
|
||||
R.string.open_menu,
|
||||
R.string.close_menu
|
||||
)
|
||||
binding.drawer.addDrawerListener(drawerToggle)
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
|
||||
binding.searchView.apply {
|
||||
setOnQueryTextFocusChangeListener(this@MainActivity)
|
||||
searchUi = SearchUI.from(this, this@MainActivity)
|
||||
}
|
||||
|
||||
binding.navigationView.apply {
|
||||
val menuView = findViewById<RecyclerView>(com.google.android.material.R.id.design_navigation_view)
|
||||
navHeaderBinding.root.setOnApplyWindowInsetsListener { v, insets ->
|
||||
@@ -121,23 +125,19 @@ class MainActivity : BaseActivity<ActivityMainBinding>(),
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
if (binding.drawer.isDrawerOpen(binding.navigationView)) {
|
||||
binding.drawer.closeDrawer(binding.navigationView)
|
||||
} else {
|
||||
super.onBackPressed()
|
||||
val fragment = supportFragmentManager.findFragmentByTag(TAG_SEARCH)
|
||||
binding.searchView.setQuery(resources.getString(R.string._empty), false)
|
||||
when {
|
||||
binding.drawer.isDrawerOpen(binding.navigationView) -> binding.drawer.closeDrawer(
|
||||
binding.navigationView)
|
||||
fragment != null -> supportFragmentManager.commit {
|
||||
remove(fragment)
|
||||
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
|
||||
}
|
||||
else -> super.onBackPressed()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.opt_main, menu)
|
||||
searchUi = menu.findItem(R.id.action_search)?.let { menuItem ->
|
||||
onMenuItemActionCollapse(menuItem)
|
||||
menuItem.setOnActionExpandListener(this)
|
||||
SearchUI.from(menuItem, this)
|
||||
}
|
||||
return super.onCreateOptionsMenu(menu)
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return drawerToggle.onOptionsItemSelected(item) || when (item.itemId) {
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
@@ -198,6 +198,18 @@ class MainActivity : BaseActivity<ActivityMainBinding>(),
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFocusChange(v: View?, hasFocus: Boolean) {
|
||||
val fragment = supportFragmentManager.findFragmentByTag(TAG_SEARCH)
|
||||
if (v?.id == R.id.searchView && hasFocus) {
|
||||
if (fragment == null) {
|
||||
supportFragmentManager.commit {
|
||||
add(R.id.container, SearchSuggestionFragment.newInstance(), TAG_SEARCH)
|
||||
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onMangaClick(manga: Manga) {
|
||||
startActivity(DetailsActivity.newIntent(this, manga))
|
||||
}
|
||||
|
||||
@@ -42,10 +42,8 @@ class SearchUI(
|
||||
companion object {
|
||||
|
||||
fun from(
|
||||
menuItem: MenuItem,
|
||||
searchView: SearchView,
|
||||
listener: SearchSuggestionListener,
|
||||
): SearchUI? = (menuItem.actionView as? SearchView)?.let {
|
||||
SearchUI(it, listener)
|
||||
}
|
||||
): SearchUI = SearchUI(searchView, listener)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user