From 5f137251732619957a5c94ee50d25faae7facc8a Mon Sep 17 00:00:00 2001 From: tarsin Date: Tue, 20 Jun 2023 11:55:25 +0800 Subject: [PATCH] Handle #1157 [2/2] --- .../hippo/ehviewer/ui/scene/SearchBarScene.kt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt index a8f907072..5c85db2df 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt @@ -1,6 +1,7 @@ package com.hippo.ehviewer.ui.scene import android.annotation.SuppressLint +import android.os.Build import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater @@ -8,6 +9,7 @@ import android.view.MenuItem 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 @@ -70,6 +72,10 @@ abstract class SearchBarScene : BaseScene(), ToolBarScene { onSearchViewHidden() } } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + binding.searchview.addTransitionListener(mSearchViewOnBackPressedCallback) + requireActivity().onBackPressedDispatcher.addCallback(mSearchViewOnBackPressedCallback) + } val contentView = onCreateViewWithToolbar(inflater, binding.root, savedInstanceState) return binding.root.apply { addView(contentView, 0) } } @@ -88,6 +94,7 @@ abstract class SearchBarScene : BaseScene(), ToolBarScene { override fun onDestroyView() { super.onDestroyView() + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) mSearchViewOnBackPressedCallback.remove() _binding = null } @@ -344,6 +351,25 @@ abstract class SearchBarScene : BaseScene(), ToolBarScene { _binding ?: return binding.appbar.setExpanded(true) } + + private val mSearchViewOnBackPressedCallback = + object : OnBackPressedCallback(false), SearchView.TransitionListener { + override fun handleOnBackPressed() { + binding.searchview.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 + } + } + } } fun wrapTagKeyword(keyword: String): String {