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

View File

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

View File

@@ -39,7 +39,19 @@
app:layout_scrollFlags="scroll|enterAlways"
app:titleTextAppearance="@style/TextAppearance.Kotatsu.PersistentToolbarTitle"
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>

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>