Handle searchview backpress in separated callback

This commit is contained in:
tarsin committed 2022-12-30 13:43:39 +08:00
1 parent b570eeef93
commit 675a6b863e
3 files changed
+27 -16

No files matched your search

@@ -426,8 +426,6 @@ public class FavoritesScene extends SearchBarScene implements
mFabLayout.toggle();
} else if (mSearchMode) {
exitSearchMode();
} else if (isSearchViewShown()) {
hideSearchView();
} else {
finish();
}
@@ -783,17 +783,11 @@ public final class GalleryListScene extends SearchBarScene
if (null != mFabLayout && mFabLayout.isExpanded()) {
return false;
}
if (isSearchViewShown())
return false;
return mState == STATE_NORMAL && getStackIndex() == 0;
}
@Override
public void onBackPressed() {
if (isSearchViewShown()) {
hideSearchView();
return;
}
if (null != mFabLayout && mFabLayout.isExpanded()) {
mFabLayout.setExpanded(false);
return;
@@ -9,6 +9,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.activity.OnBackPressedCallback
import androidx.annotation.CallSuper
import androidx.core.view.GravityCompat
import androidx.core.widget.addTextChangedListener
@@ -18,6 +19,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.search.SearchBar
import com.google.android.material.search.SearchView
import com.google.android.material.search.SearchView.TransitionListener
import com.google.android.material.shape.MaterialShapeDrawable
import com.hippo.app.BaseDialogBuilder
import com.hippo.ehviewer.R
@@ -75,10 +77,17 @@ abstract class SearchBarScene : ToolbarScene() {
else if (newState == SearchView.TransitionState.HIDING)
onSearchViewHidden()
}
mSearchView?.addTransitionListener(mSearchViewOnBackPressedCallback)
requireActivity().onBackPressedDispatcher.addCallback(mSearchViewOnBackPressedCallback)
val contentView = onCreateViewWithToolbar(inflater, view, savedInstanceState)
return view.apply { addView(contentView, 0) }
}
override fun onDestroyView() {
super.onDestroyView()
mSearchViewOnBackPressedCallback.remove()
}
private var privLockModeStart: Int? = null
private var privLockModeEnd: Int? = null
@@ -152,14 +161,6 @@ abstract class SearchBarScene : ToolbarScene() {
mAllowEmptySearch = allowEmptySearch
}
fun isSearchViewShown(): Boolean {
return mSearchView?.isShowing ?: false
}
fun hideSearchView() {
mSearchView?.hide()
}
private fun wrapTagKeyword(keyword: String): String {
var keyword = keyword
keyword = keyword.trim { it <= ' ' }
@@ -355,4 +356,22 @@ abstract class SearchBarScene : ToolbarScene() {
fun showSearchBar() {
mAppBarLayout?.setExpanded(true)
}
private val mSearchViewOnBackPressedCallback =
object : OnBackPressedCallback(false), TransitionListener {
override fun handleOnBackPressed() {
mSearchView?.hide()
}
override fun onStateChanged(
searchView: SearchView,
previousState: SearchView.TransitionState,
newState: SearchView.TransitionState
) {
if (newState == SearchView.TransitionState.SHOWING)
isEnabled = true
else if (newState == SearchView.TransitionState.HIDING)
isEnabled = false
}
}
}