The term "visibility" when applied to the virtual keyboard is currently unclear and inconsistent. For example, when KeyboardControllerObserver::OnVisiblityStateChanged(is_visible = false) is called, KeyboardController::IsKeyboardVisible is still true.
There are two notions of visibility, complicated bythe show keyboard animation:
A) Window visibility: whether the aura::Window is visible or not. The keyboard is "window visible" at the beginning of the show animation.
B) Visual visibility: whether visual_bounds_in_screen is empty or not. The keyboard is "visually visible" at the end of the show animation.
KeyboardController::IsKeyboardVisible uses A and KeyboardControllerObserver::OnVisiblityStateChanged uses B.
We should fix this inconsistency by either differentiating between the two types or just using one type.