bug(keyboard): Android `WindowInsetsAnimationCompat.Callback` does not filter by `Type.ime()` — any inset animation re-emits keyboardWillShow/keyboardDidShow (or the hide pair) with the current IME state
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 72/100
Línea de trabajo
Empieza en Keyboard.java, cerca de onStart(animation, bounds) y onEnd(animation), donde el issue indica que no se comprueba la máscara del tipo de animación. Inspecciona cómo WindowInsetsAnimationCompat expone su máscara de tipos y cómo los callbacks existentes emiten eventos del teclado. El trabajo estará terminado cuando las animaciones que no estén relacionadas con Type.ime() no produzcan eventos del teclado, mientras que las animaciones IME sigan produciendo los eventos esperados de mostrar y ocultar.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Plugin
Keyboard 8.0.6
Current Behavior
Keyboard.java L90–128: onStart(animation, bounds) (L90) and onEnd(animation) (L114) never inspect animation.getTypeMask(). For every WindowInsetsAnimation dispatched to the root view they read insets.isVisible(Type.ime()) and emit:
keyboardWillShow+keyboardDidShow(with the current IME height) if the keyboard happens to be visible,keyboardWillHide+keyboardDidHideotherwise.
So an animation of the system bars (immersive mode toggling, navigation-bar hide/show, a status-bar animation triggered by an overlay) while the keyboard is open replays a full show sequence to JS although the keyboard did not move; with the keyboard closed it replays a hide sequence although nothing was open.
Observed on the Android 14 emulator (API 34, Pixel 6 profile, 1080×2400 @ 420 dpi, Gboard, 3-button navigation), app with @capacitor/keyboard 8.0.6 and @capacitor/status-bar 8.0.4, listeners on all four events, trigger = StatusBar.hide() followed 1.2 s later by StatusBar.show() (both animate the status-bar inset through WindowInsetsControllerCompat; the keyboard itself was not touched):
Keyboard open and settled (keyboardHeight: 336 had been reported once):
ms after hide() |
event | payload |
|---|---|---|
| 40 | keyboardWillShow |
{keyboardHeight: 336} |
| 1241 | keyboardDidShow |
{keyboardHeight: 336} |
| 1251 | keyboardWillShow |
{keyboardHeight: 336} |
| 1766 | keyboardDidShow |
{keyboardHeight: 336} |
Keyboard closed:
ms after hide() |
event |
|---|---|
| 30 | keyboardWillHide |
| 1219 | keyboardDidHide |
| 1230 | keyboardWillHide |
| 1747 | keyboardDidHide |
Four keyboard events per status-bar round trip in both states, with nothing having changed about the keyboard. An app that animates its composer on keyboardWillShow/keyboardWillHide re-runs that animation each time (and, with the keyboard closed, runs a hide ride for a keyboard that was never open).
Expected Behavior
Keyboard events describe the keyboard: an animation of the status or navigation bars, with the keyboard not moving, produces none.
- Lenguaje dominante
- Java
- Estrellas
- 685
- Forks
- 691
- Merge medio
- 16 h 33 min
- PR fusionados (30 d)
- 1
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ionic-team/capacitor-plugins
-
[@capacitor/app] iOS: 'Expression implicitly coerced from String? to Any' warning in getAppLanguageAbiertotriage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
ionic-team/capacitor-plugins#2604 ·
-
triage
Dificultad 3/5 1-2 días Aptitud para principiantes 66/100
ionic-team/capacitor-plugins#2615 ·
-
triage
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
ionic-team/capacitor-plugins#2614 ·
-
platform: android platform: ios
Dificultad 4/5 3-5 días Aptitud para principiantes 52/100
ionic-team/capacitor-plugins#2613 ·
-
bug(browser): Browser.close() on Android re-opens the last URL after a deep link back into the appPosiblemente ocupada @pramoth la tomó hace 5 días. Abiertoplatform: android platform: ios
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
ionic-team/capacitor-plugins#2610 ·
Todos los issues de ionic-team/capacitor-plugins
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
QuiltMC/update-quilt-meta#28 ·
-
awaiting triage Documentation P3
Dificultad 1/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
area/build area/maintainability component/camunda-process-test kind/tech-debt
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Kafka: Filter empty strings and whitespace in IcebergSinkConfig stringToListPosiblemente ocupada @mohamed-elbrik la tomó hoy. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
area/kotlin
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 1 día