Merge "Fix flicker while booting" into nyc-mr1-dev

This commit is contained in:
TreeHugger Robot
2016-08-29 19:51:29 +00:00
committed by Android (Google) Code Review
2 changed files with 25 additions and 3 deletions

View File

@@ -6397,6 +6397,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
} }
mWindowManagerDrawComplete = true; mWindowManagerDrawComplete = true;
if (mKeyguardDelegate != null) {
mKeyguardDelegate.onDrawCompleteLw();
}
} }
finishScreenTurningOn(); finishScreenTurningOn();
@@ -6866,7 +6869,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public void systemReady() { public void systemReady() {
mKeyguardDelegate = new KeyguardServiceDelegate(mContext); mKeyguardDelegate = new KeyguardServiceDelegate(mContext,
mWindowManagerFuncs.getWindowManagerLock());
mKeyguardDelegate.onSystemReady(); mKeyguardDelegate.onSystemReady();
readCameraLensCoverState(); readCameraLensCoverState();

View File

@@ -19,6 +19,7 @@ import android.view.ViewGroup;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.WindowManagerPolicy.OnKeyguardExitResult; import android.view.WindowManagerPolicy.OnKeyguardExitResult;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.policy.IKeyguardDrawnCallback; import com.android.internal.policy.IKeyguardDrawnCallback;
import com.android.internal.policy.IKeyguardExitCallback; import com.android.internal.policy.IKeyguardExitCallback;
import com.android.internal.policy.IKeyguardService; import com.android.internal.policy.IKeyguardService;
@@ -43,6 +44,7 @@ public class KeyguardServiceDelegate {
private static final int INTERACTIVE_STATE_AWAKE = 1; private static final int INTERACTIVE_STATE_AWAKE = 1;
private static final int INTERACTIVE_STATE_GOING_TO_SLEEP = 2; private static final int INTERACTIVE_STATE_GOING_TO_SLEEP = 2;
private final Object mWindowManagerLock;
protected KeyguardServiceWrapper mKeyguardService; protected KeyguardServiceWrapper mKeyguardService;
private final Context mContext; private final Context mContext;
private final View mScrim; // shown if keyguard crashes private final View mScrim; // shown if keyguard crashes
@@ -50,6 +52,9 @@ public class KeyguardServiceDelegate {
private final KeyguardState mKeyguardState = new KeyguardState(); private final KeyguardState mKeyguardState = new KeyguardState();
private DrawnListener mDrawnListenerWhenConnect; private DrawnListener mDrawnListenerWhenConnect;
@GuardedBy("mWindowManagerLock")
private boolean mHideScrimPending;
private static final class KeyguardState { private static final class KeyguardState {
KeyguardState() { KeyguardState() {
// Assume keyguard is showing and secure until we know for sure. This is here in // Assume keyguard is showing and secure until we know for sure. This is here in
@@ -92,10 +97,12 @@ public class KeyguardServiceDelegate {
@Override @Override
public void onDrawn() throws RemoteException { public void onDrawn() throws RemoteException {
if (DEBUG) Log.v(TAG, "**** SHOWN CALLED ****"); if (DEBUG) Log.v(TAG, "**** SHOWN CALLED ****");
synchronized (mWindowManagerLock) {
mHideScrimPending = true;
}
if (mDrawnListener != null) { if (mDrawnListener != null) {
mDrawnListener.onDrawn(); mDrawnListener.onDrawn();
} }
hideScrim();
} }
}; };
@@ -116,7 +123,8 @@ public class KeyguardServiceDelegate {
} }
}; };
public KeyguardServiceDelegate(Context context) { public KeyguardServiceDelegate(Context context, Object windowManagerLock) {
mWindowManagerLock = windowManagerLock;
mContext = context; mContext = context;
mScrimHandler = UiThread.getHandler(); mScrimHandler = UiThread.getHandler();
mScrim = createScrim(context, mScrimHandler); mScrim = createScrim(context, mScrimHandler);
@@ -355,6 +363,16 @@ public class KeyguardServiceDelegate {
} }
} }
/**
* Called when all windows were fully drawn.
*/
public void onDrawCompleteLw() {
if (mHideScrimPending) {
hideScrim();
mHideScrimPending = false;
}
}
private static View createScrim(Context context, Handler handler) { private static View createScrim(Context context, Handler handler) {
final View view = new View(context); final View view = new View(context);