Introduce Window.setContentOnApplyWindowInsetsListener
When root-level content containers fit insets, they used to just apply and consume the entire system insets. However, with the new Inset APIs, and with deprecating ADJUST_RESIZE IME flag, we want to give apps an easy way to customize this behavior. For that, we introduce Window.setOnContentApplyWindowInsetsListener that returns what kind of margins/padding should be applied and what should be dispatched to the content views. This is essentially a replacement for SYSTEM_UI_FLAG_LAYOUT_* as well as SOFT_INPUT_ADJUST_RESIZE: It allows apps to choose which insets should be handled on the window level vs view level. For that, we mark the window decor views as FRAMEWORK_OPTIONAL_FIT_SYSTEM_WINDOWS, in order to distinguish the case when support library calls makeOptionalFitSystemWindows(). This is because of two reasons: - We don't want the listener to be invoked twice. - We can not do the compat ping-pong between onApplyWindowInsets and fitSystemWindows. This is because during the ping-pong, the result of the OnContentApplyWindowInsetsListener would be lost. However, we still need to do the compat ping-pong for ActionBarOverlayLayout in the support library (until that gets migrated to use onApplyWindowInsets), so we have this separate dispatching path that only gets used for framework optional fitting views. Test: WindowTest Bug: 118118435 Change-Id: I4b514addd9e094163062d651972f85615b4a35db
Loading
Please register or sign in to comment