Use expanded SearchView in Toolbar instead of an menu option

This commit is contained in:
ztimms73
2021-06-21 14:06:08 +03:00
parent 445128f462
commit 0b9013e8b2
4 changed files with 51 additions and 43 deletions

View File

@@ -44,13 +44,12 @@ import org.koitharu.kotatsu.settings.SettingsActivity
import org.koitharu.kotatsu.settings.onboard.OnboardDialogFragment import org.koitharu.kotatsu.settings.onboard.OnboardDialogFragment
import org.koitharu.kotatsu.tracker.ui.FeedFragment import org.koitharu.kotatsu.tracker.ui.FeedFragment
import org.koitharu.kotatsu.tracker.work.TrackWorker import org.koitharu.kotatsu.tracker.work.TrackWorker
import org.koitharu.kotatsu.utils.ext.getDisplayMessage import org.koitharu.kotatsu.utils.ext.*
import org.koitharu.kotatsu.utils.ext.navigationItemBackground
import org.koitharu.kotatsu.utils.ext.resolveDp
class MainActivity : BaseActivity<ActivityMainBinding>(), class MainActivity : BaseActivity<ActivityMainBinding>(),
NavigationView.OnNavigationItemSelectedListener, 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 viewModel by viewModel<MainViewModel>(mode = LazyThreadSafetyMode.NONE)
private val searchSuggestionViewModel by viewModel<SearchSuggestionViewModel>( private val searchSuggestionViewModel by viewModel<SearchSuggestionViewModel>(
@@ -66,15 +65,20 @@ class MainActivity : BaseActivity<ActivityMainBinding>(),
setContentView(ActivityMainBinding.inflate(layoutInflater)) setContentView(ActivityMainBinding.inflate(layoutInflater))
navHeaderBinding = NavigationHeaderBinding.inflate(layoutInflater) navHeaderBinding = NavigationHeaderBinding.inflate(layoutInflater)
drawerToggle = ActionBarDrawerToggle( drawerToggle = ActionBarDrawerToggle(
this, this,
binding.drawer, binding.drawer,
binding.toolbar, binding.toolbar,
R.string.open_menu, R.string.open_menu,
R.string.close_menu R.string.close_menu
) )
binding.drawer.addDrawerListener(drawerToggle) binding.drawer.addDrawerListener(drawerToggle)
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
binding.searchView.apply {
setOnQueryTextFocusChangeListener(this@MainActivity)
searchUi = SearchUI.from(this, this@MainActivity)
}
binding.navigationView.apply { binding.navigationView.apply {
val menuView = findViewById<RecyclerView>(com.google.android.material.R.id.design_navigation_view) val menuView = findViewById<RecyclerView>(com.google.android.material.R.id.design_navigation_view)
navHeaderBinding.root.setOnApplyWindowInsetsListener { v, insets -> navHeaderBinding.root.setOnApplyWindowInsetsListener { v, insets ->
@@ -121,23 +125,19 @@ class MainActivity : BaseActivity<ActivityMainBinding>(),
} }
override fun onBackPressed() { override fun onBackPressed() {
if (binding.drawer.isDrawerOpen(binding.navigationView)) { val fragment = supportFragmentManager.findFragmentByTag(TAG_SEARCH)
binding.drawer.closeDrawer(binding.navigationView) binding.searchView.setQuery(resources.getString(R.string._empty), false)
} else { when {
super.onBackPressed() 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 { override fun onOptionsItemSelected(item: MenuItem): Boolean {
return drawerToggle.onOptionsItemSelected(item) || when (item.itemId) { return drawerToggle.onOptionsItemSelected(item) || when (item.itemId) {
else -> super.onOptionsItemSelected(item) 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) { override fun onMangaClick(manga: Manga) {
startActivity(DetailsActivity.newIntent(this, manga)) startActivity(DetailsActivity.newIntent(this, manga))
} }

View File

@@ -42,10 +42,8 @@ class SearchUI(
companion object { companion object {
fun from( fun from(
menuItem: MenuItem, searchView: SearchView,
listener: SearchSuggestionListener, listener: SearchSuggestionListener,
): SearchUI? = (menuItem.actionView as? SearchView)?.let { ): SearchUI = SearchUI(searchView, listener)
SearchUI(it, listener)
}
} }
} }

View File

@@ -39,7 +39,19 @@
app:layout_scrollFlags="scroll|enterAlways" app:layout_scrollFlags="scroll|enterAlways"
app:titleTextAppearance="@style/TextAppearance.Kotatsu.PersistentToolbarTitle" app:titleTextAppearance="@style/TextAppearance.Kotatsu.PersistentToolbarTitle"
app:titleTextColor="?android:colorControlNormal" app:titleTextColor="?android:colorControlNormal"
tools:title="@string/app_name" /> android:focusableInTouchMode="true"
android:focusable="true"
tools:title="@string/app_name">
<androidx.appcompat.widget.SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:iconifiedByDefault="false"
app:queryHint="@string/search_manga"
android:paddingStart="-12dp"/>
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>

View File

@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_search"
android:orderInCategory="0"
android:title="@string/search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always|collapseActionView" />
</menu>