Update the light center when the root view's layout changed
b/26208900
Change-Id: I0594b2801d54a489e7d858b7a0f9549fcc30f9a0
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 4e7d1914..10ee1f5 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -22841,6 +22841,11 @@
boolean mKeepScreenOn;
/**
+ * Set during a traveral if the light center needs to be updated.
+ */
+ boolean mNeedsUpdateLightCenter;
+
+ /**
* Bitwise-or of all of the values that views have passed to setSystemUiVisibility().
*/
int mSystemUiVisibility;
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 8cabf42..e2bad64 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -80,7 +80,6 @@
import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Interpolator;
-import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.widget.Scroller;
@@ -916,6 +915,11 @@
// Recompute system ui visibility.
mAttachInfo.mRecomputeGlobalAttributes = true;
}
+ if ((mWindowAttributesChangesFlag
+ & WindowManager.LayoutParams.LAYOUT_CHANGED) != 0) {
+ // Request to update light center.
+ mAttachInfo.mNeedsUpdateLightCenter = true;
+ }
if (mWindowAttributes.packageName == null) {
mWindowAttributes.packageName = mBasePackageName;
}
@@ -2222,13 +2226,16 @@
}
mAttachInfo.mWindowLeft = frame.left;
mAttachInfo.mWindowTop = frame.top;
-
- // Update the light position for the new window offsets.
+ }
+ if (windowMoved || mAttachInfo.mNeedsUpdateLightCenter) {
+ // Update the light position for the new offsets.
if (mAttachInfo.mHardwareRenderer != null) {
mAttachInfo.mHardwareRenderer.setLightCenter(mAttachInfo);
}
+ mAttachInfo.mNeedsUpdateLightCenter = false;
}
}
+
private void handleOutOfResourcesException(Surface.OutOfResourcesException e) {
Log.e(mTag, "OutOfResourcesException initializing HW surface", e);
try {