Merge "Track app visibility updates on the client" into oc-mr1-dev

This commit is contained in:
Andrii Kulian
2017-08-23 18:06:50 +00:00
committed by Android (Google) Code Review

View File

@@ -259,6 +259,9 @@ public final class ViewRootImpl implements ViewParent,
// visibility to control drawing. The decor view visibility will get adjusted when the app get
// stopped and that's when the app will stop drawing further frames.
private boolean mForceDecorViewVisibility = false;
// Used for tracking app visibility updates separately in case we get double change. This will
// make sure that we always call relayout for the corresponding window.
private boolean mAppVisibilityChanged;
int mOrigWindowType = -1;
/** Whether the window had focus during the most recent traversal. */
@@ -1058,6 +1061,7 @@ public final class ViewRootImpl implements ViewParent,
void handleAppVisibility(boolean visible) {
if (mAppVisible != visible) {
mAppVisible = visible;
mAppVisibilityChanged = true;
scheduleTraversals();
if (!mAppVisible) {
WindowManagerGlobal.trimForeground();
@@ -1600,7 +1604,11 @@ public final class ViewRootImpl implements ViewParent,
final int viewVisibility = getHostVisibility();
final boolean viewVisibilityChanged = !mFirst
&& (mViewVisibility != viewVisibility || mNewSurfaceNeeded);
&& (mViewVisibility != viewVisibility || mNewSurfaceNeeded
// Also check for possible double visibility update, which will make current
// viewVisibility value equal to mViewVisibility and we may miss it.
|| mAppVisibilityChanged);
mAppVisibilityChanged = false;
final boolean viewUserVisibilityChanged = !mFirst &&
((mViewVisibility == View.VISIBLE) != (viewVisibility == View.VISIBLE));