@ -17,7 +17,9 @@ import android.view.ViewGroup
import android.view.ViewStub
import android.view.ViewStub
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AlertDialog
import androidx.core.view.isVisible
import androidx.core.view.isVisible
import androidx.core.view.marginStart
import androidx.fragment.app.Fragment
import androidx.fragment.app.Fragment
import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.findNavController
import androidx.transition.TransitionInflater
import androidx.transition.TransitionInflater
import kotlinx.android.synthetic.main.fragment_search.*
import kotlinx.android.synthetic.main.fragment_search.*
@ -111,7 +113,8 @@ class SearchFragment : Fragment(), UserInteractionHandler {
showBookmarkSuggestions = requireContext ( ) . settings ( ) . shouldShowBookmarkSuggestions ,
showBookmarkSuggestions = requireContext ( ) . settings ( ) . shouldShowBookmarkSuggestions ,
session = session ,
session = session ,
pastedText = pastedText ,
pastedText = pastedText ,
searchAccessPoint = searchAccessPoint
searchAccessPoint = searchAccessPoint ,
isAnimatingOut = false
)
)
)
)
}
}
@ -199,7 +202,7 @@ class SearchFragment : Fragment(), UserInteractionHandler {
}
}
view . back _button . setOnClickListener {
view . back _button . setOnClickListener {
findNavController( ) . navigateUp ( )
searchInteractor. onEditingCanceled ( )
}
}
val stubListener = ViewStub . OnInflateListener { _ , inflated ->
val stubListener = ViewStub . OnInflateListener { _ , inflated ->
@ -253,6 +256,7 @@ class SearchFragment : Fragment(), UserInteractionHandler {
updateSearchWithLabel ( it )
updateSearchWithLabel ( it )
updateClipboardSuggestion ( it , requireContext ( ) . components . clipboardHandler . url )
updateClipboardSuggestion ( it , requireContext ( ) . components . clipboardHandler . url )
updateSearchSuggestionsHintVisibility ( it )
updateSearchSuggestionsHintVisibility ( it )
updateBackButton ( it )
}
}
startPostponedEnterTransition ( )
startPostponedEnterTransition ( )
@ -316,6 +320,13 @@ class SearchFragment : Fragment(), UserInteractionHandler {
clipboard _url . text = clipboardUrl
clipboard _url . text = clipboardUrl
}
}
private fun updateBackButton ( searchState : SearchFragmentState ) {
if ( searchState . isAnimatingOut ) {
searchStore . dispatch ( SearchFragmentAction . ConsumeEditingCancelled )
animateBackButtonAway ( )
}
}
override fun onRequestPermissionsResult (
override fun onRequestPermissionsResult (
requestCode : Int ,
requestCode : Int ,
permissions : Array < String > ,
permissions : Array < String > ,
@ -352,6 +363,18 @@ class SearchFragment : Fragment(), UserInteractionHandler {
}
}
}
}
private fun animateBackButtonAway ( ) {
val backButton = requireView ( ) . back _button
val xTranslation = with ( backButton ) {
- ( width + marginStart + paddingStart ) . toFloat ( )
}
backButton
. animate ( )
. translationX ( xTranslation )
. interpolator = FastOutSlowInInterpolator ( )
}
companion object {
companion object {
private const val SHARED _TRANSITION _MS = 200L
private const val SHARED _TRANSITION _MS = 200L
private const val REQUEST _CODE _CAMERA _PERMISSIONS = 1
private const val REQUEST _CODE _CAMERA _PERMISSIONS = 1