From 0b9013e8b2232c226d9345446acc807551c4d53b Mon Sep 17 00:00:00 2001 From: ztimms73 Date: Mon, 21 Jun 2021 14:06:08 +0300 Subject: [PATCH] Use expanded SearchView in Toolbar instead of an menu option --- .../koitharu/kotatsu/main/ui/MainActivity.kt | 60 +++++++++++-------- .../kotatsu/search/ui/suggestion/SearchUI.kt | 6 +- app/src/main/res/layout/activity_main.xml | 14 ++++- app/src/main/res/menu/opt_main.xml | 14 ----- 4 files changed, 51 insertions(+), 43 deletions(-) delete mode 100644 app/src/main/res/menu/opt_main.xml diff --git a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt index 06c5e4d36..109009f3a 100644 --- a/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/main/ui/MainActivity.kt @@ -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(), NavigationView.OnNavigationItemSelectedListener, - View.OnClickListener, SearchSuggestionListener, MenuItem.OnActionExpandListener { + View.OnClickListener, View.OnFocusChangeListener, SearchSuggestionListener, + MenuItem.OnActionExpandListener { private val viewModel by viewModel(mode = LazyThreadSafetyMode.NONE) private val searchSuggestionViewModel by viewModel( @@ -66,15 +65,20 @@ class MainActivity : BaseActivity(), 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(com.google.android.material.R.id.design_navigation_view) navHeaderBinding.root.setOnApplyWindowInsetsListener { v, insets -> @@ -121,23 +125,19 @@ class MainActivity : BaseActivity(), } 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(), } } + 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)) } diff --git a/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchUI.kt b/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchUI.kt index fb9f79847..6ed23e736 100644 --- a/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchUI.kt +++ b/app/src/main/java/org/koitharu/kotatsu/search/ui/suggestion/SearchUI.kt @@ -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) } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 9fd2cfeb8..79a2eeb48 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -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"> + + + + diff --git a/app/src/main/res/menu/opt_main.xml b/app/src/main/res/menu/opt_main.xml deleted file mode 100644 index e7c152f16..000000000 --- a/app/src/main/res/menu/opt_main.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file