diff options
3 files changed, 27 insertions, 3 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 6e93a3031de5..42402ebdc746 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -6621,6 +6621,19 @@ public final class ViewRootImpl implements ViewParent, return false; } + /** + * Force the window to report its next draw. + * <p> + * This method is only supposed to be used to speed up the interaction from SystemUI and window + * manager when waiting for the first frame to be drawn when turning on the screen. DO NOT USE + * unless you fully understand this interaction. + * @hide + */ + public void setReportNextDraw() { + mReportNextDraw = true; + invalidate(); + } + void changeCanvasOpacity(boolean opaque) { Log.d(TAG, "changeCanvasOpacity: opaque=" + opaque); if (mAttachInfo.mHardwareRenderer != null) { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 647b272d3445..d520072499a1 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -1445,6 +1445,15 @@ public class KeyguardViewMediator extends SystemUI { } mHiding = false; + if (mWakeAndUnlocking && mDrawnCallback != null) { + + // Hack level over 9000: To speed up wake-and-unlock sequence, force it to report + // the next draw from here so we don't have to wait for window manager to signal + // this to our ViewRootImpl. + mStatusBarKeyguardViewManager.getViewRootImpl().setReportNextDraw(); + notifyDrawn(mDrawnCallback); + } + // only play "unlock" noises if not on a call (since the incall UI // disables the keyguard) if (TelephonyManager.EXTRA_STATE_IDLE.equals(mPhoneState)) { @@ -1458,9 +1467,6 @@ public class KeyguardViewMediator extends SystemUI { updateActivityLockScreenState(); adjustStatusBarLocked(); sendUserPresentBroadcast(); - if (mWakeAndUnlocking && mDrawnCallback != null) { - notifyDrawn(mDrawnCallback); - } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index d0604c5e773a..e26f42301830 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -24,6 +24,7 @@ import android.os.Trace; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewRootImpl; import android.view.WindowManagerGlobal; import com.android.internal.widget.LockPatternUtils; @@ -533,4 +534,8 @@ public class StatusBarKeyguardViewManager { public void showBouncerMessage(String message, int color) { mBouncer.showMessage(message, color); } + + public ViewRootImpl getViewRootImpl() { + return mPhoneStatusBar.getStatusBarView().getViewRootImpl(); + } } |