From c712f05ddaf95e2c0a2dd0c55e253f8081419e48 Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester <32322857+jarnedemeulemeester@users.noreply.github.com> Date: Sun, 11 Dec 2022 00:53:33 +0100 Subject: [PATCH] Add search button to home fragment (#218) --- .../jdtech/jellyfin/fragments/HomeFragment.kt | 57 +++++++++++++++++++ app/src/main/res/menu/home_menu.xml | 11 +++- .../main/res/navigation/app_navigation.xml | 3 + 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt index b8b4bbe3..3e2c40a9 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt @@ -7,8 +7,10 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup +import android.view.WindowManager import android.widget.Toast import android.widget.Toast.LENGTH_LONG +import androidx.appcompat.widget.SearchView import androidx.core.view.MenuHost import androidx.core.view.MenuProvider import androidx.core.view.isVisible @@ -38,6 +40,8 @@ class HomeFragment : Fragment() { private lateinit var binding: FragmentHomeBinding private val viewModel: HomeViewModel by viewModels() + private var originalSoftInputMode: Int? = null + private lateinit var errorDialog: ErrorDialogFragment override fun onCreateView( @@ -61,6 +65,38 @@ class HomeFragment : Fragment() { object : MenuProvider { override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { menuInflater.inflate(R.menu.home_menu, menu) + + val settings = menu.findItem(R.id.action_settings) + val search = menu.findItem(R.id.action_search) + val searchView = search.actionView as SearchView + searchView.queryHint = getString(R.string.search_hint) + + search.setOnActionExpandListener( + object : MenuItem.OnActionExpandListener { + override fun onMenuItemActionExpand(item: MenuItem): Boolean { + settings.isVisible = false + return true + } + + override fun onMenuItemActionCollapse(item: MenuItem): Boolean { + settings.isVisible = true + return true + } + } + ) + + searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(p0: String?): Boolean { + if (p0 != null) { + navigateToSearchResultFragment(p0) + } + return true + } + + override fun onQueryTextChange(p0: String?): Boolean { + return false + } + }) } override fun onMenuItemSelected(menuItem: MenuItem): Boolean { @@ -77,12 +113,27 @@ class HomeFragment : Fragment() { ) } + override fun onStart() { + super.onStart() + + requireActivity().window.let { + originalSoftInputMode = it.attributes?.softInputMode + it.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) + } + } + override fun onResume() { super.onResume() viewModel.loadData() } + override fun onStop() { + super.onStop() + + originalSoftInputMode?.let { activity?.window?.setSoftInputMode(it) } + } + private fun setupView() { binding.refreshLayout.setOnRefreshListener { viewModel.loadData() @@ -194,4 +245,10 @@ class HomeFragment : Fragment() { HomeFragmentDirections.actionHomeFragmentToSettingsFragment() ) } + + private fun navigateToSearchResultFragment(query: String) { + findNavController().navigate( + HomeFragmentDirections.actionHomeFragmentToSearchResultFragment(query) + ) + } } diff --git a/app/src/main/res/menu/home_menu.xml b/app/src/main/res/menu/home_menu.xml index 8bf60bd1..afe5b5a0 100644 --- a/app/src/main/res/menu/home_menu.xml +++ b/app/src/main/res/menu/home_menu.xml @@ -1,7 +1,16 @@ -