Close windows on ACTION_UP when touched outside
If a window is touched inside the touchable region, but outside of the physical frame, the setting closeOnTouchOutside=True for this window would mean that the window would close. Currently, the window would close when ACTION_DOWN on the touchable region happens. However, with the new gesture nav, the KEYCODE_BACK would also be injected. Normally, the KEYCODE_BACK would also close the window. But if the window is already closed in response to ACTION_DOWN, the KEYCODE_BACK event would cause the underlying window to close. This could be confusing to the user, because in this case a single action (swiping back outside of the dialog) causes 2 actions to occur: the dismissal of the window, and the navigation back to the previous screen of the underlying window. To avoid this poor user experience, we instead dismiss the window when ACTION_UP inside the touchable area happens. UX impact: This CL would not change the user experience for tapping to dismiss the dialogs, because tap has a short duration between down and up (most common usecase). This CL would now allow the user to maintain the finger on the screen outside of the dialog for an arbitrary amount of time, without the dialog disappearing. When the finger is lifted, the dialog would be dismissed. This CL improves the user experience for gesturing back to dismiss the dialog, because the dialog most of the time will dismiss and nothing else will happen. However, there still exists opportunity to cause the old behaviour. The window can receive ACTION_UP before KEYCODE_BACK is injected by gesture nav. Important! If BACK is received by the app after ACTION_UP is received (can happen occasionally), then the we would still see 2 actions happen in response to a single swipe. This issue is tracked in b/132735993, but it is likely that it will remain in Q. Bug: 131410670 Test: open any dialog (for example, go to settings->display->screen timeout), then press outside of the dialog and hold. Watch that the window is not dismissed. Then release finger. Watch that the dialog dismisses. Also, gesture back outside of the dialog area. Watch that the dialog disappears and nothing else happens (but see the important note above for exceptions to this). Change-Id: I2e7c1bab986f019dc2f4640ff9f4151ebb96479c
Loading
Please register or sign in to comment