Fix bug where thumbnails flashed more often in Recents
Bug: 8867698
Change-Id: I2773601d83507dbb55c3a1d0b723e3853e22d352
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 3862c32..b63ccab 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -211,6 +211,7 @@
boolean mHasHadWindowFocus;
boolean mLastWasImTarget;
boolean mWindowsAnimating;
+ boolean mDrawDuringWindowsAnimating;
boolean mIsDrawing;
int mLastSystemUiVisibility;
int mClientWindowLayoutFlags;
@@ -1396,8 +1397,10 @@
final int surfaceGenerationId = mSurface.getGenerationId();
relayoutResult = relayoutWindow(params, viewVisibility, insetsPending);
- mWindowsAnimating |=
- (relayoutResult & WindowManagerGlobal.RELAYOUT_RES_ANIMATING) != 0;
+ if (!mDrawDuringWindowsAnimating) {
+ mWindowsAnimating |=
+ (relayoutResult & WindowManagerGlobal.RELAYOUT_RES_ANIMATING) != 0;
+ }
if (DEBUG_LAYOUT) Log.v(TAG, "relayout: frame=" + frame.toShortString()
+ " overscan=" + mPendingOverscanInsets.toShortString()
@@ -2572,6 +2575,16 @@
displayLists.clear();
}
+ /**
+ * @hide
+ */
+ public void setDrawDuringWindowsAnimating(boolean value) {
+ mDrawDuringWindowsAnimating = value;
+ if (value) {
+ handleDispatchDoneAnimating();
+ }
+ }
+
boolean scrollToRectOrFocus(Rect rectangle, boolean immediate) {
final View.AttachInfo attachInfo = mAttachInfo;
final Rect ci = attachInfo.mContentInsets;
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index 32759de..c64b954 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -46,6 +46,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewPropertyAnimator;
+import android.view.ViewRootImpl;
import android.view.accessibility.AccessibilityEvent;
import android.view.animation.AnimationUtils;
import android.view.animation.DecelerateInterpolator;
@@ -365,6 +366,14 @@
}
}
+ protected void onAttachedToWindow () {
+ super.onAttachedToWindow();
+ final ViewRootImpl root = getViewRootImpl();
+ if (root != null) {
+ root.setDrawDuringWindowsAnimating(true);
+ }
+ }
+
public void onUiHidden() {
mCallUiHiddenBeforeNextReload = false;
if (!mShowing && mRecentTaskDescriptions != null) {
@@ -562,7 +571,7 @@
!mRecentTasksLoader.isFirstScreenful()) {
int timeSinceWindowAnimation =
(int) (System.currentTimeMillis() - mWindowAnimationStartTime);
- final int minStartDelay = 125;
+ final int minStartDelay = 150;
final int startDelay = Math.max(0, Math.min(
minStartDelay - timeSinceWindowAnimation, minStartDelay));
final int duration = 250;