workspace/bottomsheetdialog-compose

v1.2.0 이후 키보드 관련 이슈.

dylan-kwon opened this issue · 10 comments

v1.2.0 이후로 키보드 동작이 이상해진 거 같습니다.

BottomSheetDialog 내부에 TextField가 있으면 키보드가 나타나지 않고,
팝업이 닫히면 그때서야 키보드가 올라옵니다.

아래 영상은 샘플 코드에서 TextField만 추가해서 테스트했습니다.

untitled.webm

아마 compose 1.4.0 문제로 보입니다.

안녕하세요. 제보 감사합니다. 확인 후 커멘트 드리겠습니다!

문제를 확인했습니다. 말씀하신 것과 같이 샘플 앱에 TextField을 추가하는 것만으로 재현이 되네요. BottomSheetDialog의 내부 구현은 95%이상 Dialog Composable과 동일하여 Dialog Composable에서도 같은 문제가 있는지 확인했으나 멀쩡하네요😢 좀 더 조사해봐야 할 것 같습니다.

@dylan-kwon 안녕하세요. 지난 주에 들여다보고 더 이슈 해결에 진전이 없는 상태입니다. 일단은 이슈 해결 데드라인을 compose 1.4.0 정식 출시 시점으로 잡아두겠습니다. 혹시나 이 문제를 해결해 라이브러리에 기여해주신다면 정말 기쁠 것 같습니다.

@dylan-kwon 안녕하세요. 오늘 compose 1.4.0이 출시되었습니다. (기존 배포는 alpha-beta-rc-stable로 이어졌던터라 beta -> stable은 좀 이례적인 것 같습니다.)

release note를 읽다보니 compose ui에 이런 언급이 있었습니다.

The focus system is rewritten using the new experimental Modifier.Node APIs.

그래서 관련 변경사항과 의도를 이해하고 본 이슈 해결을 시도했으나, 진전이 없었습니다.
그런데, 문득 구글 이슈 트래커에도 관련 이슈가 있지 않을까 생각이 들었고, 본 라이브러리 뿐만 아니라
material3 bottomsheet, popup도 같은 이슈가 있다는 것을 확인했습니다.

이 이슈는 accept되어 현재 해결 중인 것으로 보여집니다. 제 예상으로는 너무 큰 이슈라 compose 1.4.1과 1.5.0-alpha02에 포함이 될 것으로 예상이 됩니다. 시간이 좀 더 걸리겠지만, 위 이슈가 해결되는 것을 기다려 다음 버전을 배포해야할 것 같네요 🥲

안녕하세요? google issue가 여전히 in-progress이지만 오늘 새벽에 compose 출시가 있어 혹시나 하는 마음에 1.5.0-SNAPSHOT을 test해봤는데 여전히 문제가 존재하네요. (commit에 focus 뭐시기 있었는데...!) 문제가 좀 더 장기화 될 것 같습니다.

이 문제의 중요도가 높으신 분들은 위 댓글에서 언급한 이슈를 star 해두시면 이메일로 업데이트를 받아보실 수 있으니 참고 바랍니다.

BottomSheet + TextField 이슈에 대해 파본 미디엄 글이 있어 소개 드립니다. 알고보니 22년 12월 누군가 1.4.0-alpha03으로 테스트해보고 제보를 했던 이슈라고 하네요. stable 출시까지 3달이나 있었는데 아쉬운 부분입니다. 본문의 내용을 참고하여 곧 임시로 문제가 해결된 버전을 배포해보겠습니다. 👍

https://link.medium.com/qRO3dQcXQyb

하하 놀랍게도... 제가 좀만 더 신경 썼으면 아예 없었을 수도 있는 문제네요.
Dialog composable이 있는 AndroidDialog.android.kt 파일에서 필요한 만큼 가져왔는데

androidx.compose.ui.window.DialogWindowProvider도 재정의를 해버려서 적절한 window를 찾지 못했던 것이었습니다. 긴 시간 기다려주셔서 감사합니다. 곧 수정사항을 포함하여 배포하겠습니다.

// InputMethodManager.kt
private fun View.findWindow(): Window? =
    (parent as? DialogWindowProvider)?.window
        ?: context.findWindow()

image

compose 1.4용 해결된 버전이 1.2.1로 배포 되었습니다 🎉🙏👍🚀

감사합니다!