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.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))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
|
||||||
Reference in New Issue
Block a user