Fix keyboard not showing when search fragment shows #955
This commit is contained in:
parent
f3affb76d7
commit
2d9d12f0bf
2 changed files with 44 additions and 8 deletions
|
@ -15,9 +15,12 @@
|
||||||
package code.name.monkey.retromusic.extensions
|
package code.name.monkey.retromusic.extensions
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
|
import android.content.Context
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.view.ViewTreeObserver
|
||||||
|
import android.view.inputmethod.InputMethodManager
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import androidx.annotation.LayoutRes
|
import androidx.annotation.LayoutRes
|
||||||
import androidx.core.animation.doOnEnd
|
import androidx.core.animation.doOnEnd
|
||||||
|
@ -76,3 +79,38 @@ fun BottomSheetBehavior<*>.peekHeightAnimate(value: Int) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun View.focusAndShowKeyboard() {
|
||||||
|
/**
|
||||||
|
* This is to be called when the window already has focus.
|
||||||
|
*/
|
||||||
|
fun View.showTheKeyboardNow() {
|
||||||
|
if (isFocused) {
|
||||||
|
post {
|
||||||
|
// We still post the call, just in case we are being notified of the windows focus
|
||||||
|
// but InputMethodManager didn't get properly setup yet.
|
||||||
|
val imm =
|
||||||
|
context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||||
|
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
requestFocus()
|
||||||
|
if (hasWindowFocus()) {
|
||||||
|
// No need to wait for the window to get focus.
|
||||||
|
showTheKeyboardNow()
|
||||||
|
} else {
|
||||||
|
// We need to wait until the window gets focus.
|
||||||
|
viewTreeObserver.addOnWindowFocusChangeListener(
|
||||||
|
object : ViewTreeObserver.OnWindowFocusChangeListener {
|
||||||
|
override fun onWindowFocusChanged(hasFocus: Boolean) {
|
||||||
|
// This notification will arrive just before the InputMethodManager gets set up.
|
||||||
|
if (hasFocus) {
|
||||||
|
this@focusAndShowKeyboard.showTheKeyboardNow()
|
||||||
|
// It’s very important to remove this listener once we are done.
|
||||||
|
viewTreeObserver.removeOnWindowFocusChangeListener(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,8 +21,6 @@ import android.speech.RecognizerIntent
|
||||||
import android.text.Editable
|
import android.text.Editable
|
||||||
import android.text.TextWatcher
|
import android.text.TextWatcher
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.inputmethod.InputMethodManager
|
|
||||||
import androidx.core.content.ContextCompat.getSystemService
|
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
@ -32,6 +30,7 @@ import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.adapter.SearchAdapter
|
import code.name.monkey.retromusic.adapter.SearchAdapter
|
||||||
import code.name.monkey.retromusic.extensions.accentColor
|
import code.name.monkey.retromusic.extensions.accentColor
|
||||||
import code.name.monkey.retromusic.extensions.dipToPix
|
import code.name.monkey.retromusic.extensions.dipToPix
|
||||||
|
import code.name.monkey.retromusic.extensions.focusAndShowKeyboard
|
||||||
import code.name.monkey.retromusic.extensions.showToast
|
import code.name.monkey.retromusic.extensions.showToast
|
||||||
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
|
import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment
|
||||||
import com.google.android.material.textfield.TextInputEditText
|
import com.google.android.material.textfield.TextInputEditText
|
||||||
|
@ -54,17 +53,16 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa
|
||||||
mainActivity.setSupportActionBar(toolbar)
|
mainActivity.setSupportActionBar(toolbar)
|
||||||
libraryViewModel.clearSearchResult()
|
libraryViewModel.clearSearchResult()
|
||||||
setupRecyclerView()
|
setupRecyclerView()
|
||||||
searchView.addTextChangedListener(this)
|
searchView.apply {
|
||||||
|
addTextChangedListener(this@SearchFragment)
|
||||||
|
focusAndShowKeyboard()
|
||||||
|
}
|
||||||
voiceSearch.setOnClickListener { startMicSearch() }
|
voiceSearch.setOnClickListener { startMicSearch() }
|
||||||
clearText.setOnClickListener { searchView.clearText() }
|
clearText.setOnClickListener { searchView.clearText() }
|
||||||
keyboardPopup.apply {
|
keyboardPopup.apply {
|
||||||
accentColor()
|
accentColor()
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
val inputManager = getSystemService(
|
searchView.focusAndShowKeyboard()
|
||||||
requireContext(),
|
|
||||||
InputMethodManager::class.java
|
|
||||||
)
|
|
||||||
inputManager?.showSoftInput(searchView, InputMethodManager.SHOW_IMPLICIT)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
|
|
Loading…
Reference in a new issue