DO NOT MERGE Do not call drawableChanged pre Q
Some apps rely on not updating the window format when changing the background of the DecorView. To keep the compatibilty with these app we add only call DecoreView.drawableChanged() when the window background is changed on app targetting Q and above. Test: Manually test by lunching Instagram TV and pressing return twice. The window should aninate with no flickering. Bug: 136987724 Change-Id: I3593d30dc6f10519008151974e475f0dad86fc64
This commit is contained in:
@@ -967,6 +967,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
*/
|
||||
static boolean sBrokenInsetsDispatch;
|
||||
|
||||
/**
|
||||
* Prior to Q, calling
|
||||
* {@link com.android.internal.policy.DecorView#setBackgroundDrawable(Drawable)}
|
||||
* did not call update the window format so the opacity of the background was not correctly
|
||||
* applied to the window. Some applications rely on this misbehavior to work properly.
|
||||
* <p>
|
||||
* From Q, {@link com.android.internal.policy.DecorView#setBackgroundDrawable(Drawable)} is
|
||||
* the same as {@link com.android.internal.policy.DecorView#setWindowBackground(Drawable)}
|
||||
* which updates the window format.
|
||||
* @hide
|
||||
*/
|
||||
protected static boolean sBrokenWindowBackground;
|
||||
|
||||
/** @hide */
|
||||
@IntDef({NOT_FOCUSABLE, FOCUSABLE, FOCUSABLE_AUTO})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@@ -5104,6 +5117,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
sBrokenInsetsDispatch = ViewRootImpl.sNewInsetsMode != NEW_INSETS_MODE_FULL
|
||||
|| targetSdkVersion < Build.VERSION_CODES.Q;
|
||||
|
||||
sBrokenWindowBackground = targetSdkVersion < Build.VERSION_CODES.Q;
|
||||
|
||||
sCompatibilityDone = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -983,13 +983,14 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
|
||||
@Override
|
||||
public void setBackgroundDrawable(Drawable background) {
|
||||
|
||||
// TODO: This should route through setWindowBackground, but late in the release to make this
|
||||
// change.
|
||||
if (mOriginalBackgroundDrawable != background) {
|
||||
mOriginalBackgroundDrawable = background;
|
||||
updateBackgroundDrawable();
|
||||
drawableChanged();
|
||||
if (!View.sBrokenWindowBackground) {
|
||||
drawableChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user