Workaround for BTF2 cursor not showing

This commit is contained in:
FooIbar committed 2023-11-16 23:07:29 +08:00
1 parent c51a26b9b7
commit fa2933df7c
1 file changed
+52 -40
@@ -41,6 +41,7 @@ import androidx.compose.material3.Scaffold
import androidx.compose.material3.SearchBar
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
@@ -56,6 +57,8 @@ import androidx.compose.ui.layout.layout
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalWindowInfo
import androidx.compose.ui.platform.WindowInfo
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidViewBinding
@@ -352,48 +355,52 @@ abstract class SearchBarScene : BaseScene() {
val density = LocalDensity.current
val fabPadding = with(density) { 16.dp.roundToPx() }
val margin = with(density) { 8.dp.roundToPx() }
SearchBarScreen(
title = searchBarTitle,
searchFieldState = searchFieldState,
searchFieldHint = searchFieldHint,
showSearchFab = showSearchFab,
onApplySearch = onApplySearch,
onSearchExpanded = ::onSearchViewExpanded,
onSearchHidden = ::onSearchViewHidden,
suggestionProvider = mSuggestionProvider,
searchBarOffsetY = ofs,
trailingIcon = {
TrailingIcon()
},
) { contentPadding ->
val topPadding = with(density) { contentPadding.calculateTopPadding().roundToPx() }
val bottomPadding = with(density) { contentPadding.calculateBottomPadding().roundToPx() }
AndroidViewBinding(
modifier = Modifier.fillMaxSize(),
factory = { inflater, parent, _ ->
onCreateViewWithToolbar(inflater, parent, savedInstanceState).also {
recyclerView.addOnScrollListener(onScrollListener)
createDrawerView(savedInstanceState)?.apply {
if (this is ComposeView) {
val owner = viewLifecycleOwner
setViewTreeLifecycleOwner(owner)
setViewTreeViewModelStoreOwner(owner as ViewModelStoreOwner)
setViewTreeSavedStateRegistryOwner(owner as SavedStateRegistryOwner)
setParentCompositionContext(compositionContext)
}
sideSheetDialog = SideSheetDialog(parent.context).also {
it.setContentView(this)
// Workaround for BTF2 cursor not showing
// https://issuetracker.google.com/issues/307323842
CompositionLocalProvider(LocalWindowInfo provides FocusedWindowInfo) {
SearchBarScreen(
title = searchBarTitle,
searchFieldState = searchFieldState,
searchFieldHint = searchFieldHint,
showSearchFab = showSearchFab,
onApplySearch = onApplySearch,
onSearchExpanded = ::onSearchViewExpanded,
onSearchHidden = ::onSearchViewHidden,
suggestionProvider = mSuggestionProvider,
searchBarOffsetY = ofs,
trailingIcon = {
TrailingIcon()
},
) { contentPadding ->
val topPadding = with(density) { contentPadding.calculateTopPadding().roundToPx() }
val bottomPadding = with(density) { contentPadding.calculateBottomPadding().roundToPx() }
AndroidViewBinding(
modifier = Modifier.fillMaxSize(),
factory = { inflater, parent, _ ->
onCreateViewWithToolbar(inflater, parent, savedInstanceState).also {
recyclerView.addOnScrollListener(onScrollListener)
createDrawerView(savedInstanceState)?.apply {
if (this is ComposeView) {
val owner = viewLifecycleOwner
setViewTreeLifecycleOwner(owner)
setViewTreeViewModelStoreOwner(owner as ViewModelStoreOwner)
setViewTreeSavedStateRegistryOwner(owner as SavedStateRegistryOwner)
setParentCompositionContext(compositionContext)
}
sideSheetDialog = SideSheetDialog(parent.context).also {
it.setContentView(this)
}
}
}
}
},
onRelease = {
onRelease()
},
) {
fabLayout.updatePadding(bottom = fabPadding + bottomPadding)
fastScroller.updatePadding(top = topPadding + margin, bottom = bottomPadding)
recyclerView.updatePadding(top = topPadding + margin, bottom = bottomPadding)
},
onRelease = {
onRelease()
},
) {
fabLayout.updatePadding(bottom = fabPadding + bottomPadding)
fastScroller.updatePadding(top = topPadding + margin, bottom = bottomPadding)
recyclerView.updatePadding(top = topPadding + margin, bottom = bottomPadding)
}
}
}
}
@@ -499,4 +506,9 @@ fun wrapTagKeyword(keyword: String, translate: Boolean = false): String {
}
}
private val FocusedWindowInfo = object : WindowInfo {
override val isWindowFocused: Boolean
get() = true
}
const val SEARCH_VIEW_ANIMATE_TIME = 300L