Merge "Improve the boot animation fix" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
4f726c8c39
@@ -159,6 +159,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
|||||||
private Layout mCurrentLayout = null;
|
private Layout mCurrentLayout = null;
|
||||||
private int mDeviceState = DeviceStateManager.INVALID_DEVICE_STATE;
|
private int mDeviceState = DeviceStateManager.INVALID_DEVICE_STATE;
|
||||||
private int mPendingDeviceState = DeviceStateManager.INVALID_DEVICE_STATE;
|
private int mPendingDeviceState = DeviceStateManager.INVALID_DEVICE_STATE;
|
||||||
|
private int mDeviceStateToBeAppliedAfterBoot = DeviceStateManager.INVALID_DEVICE_STATE;
|
||||||
private boolean mBootCompleted = false;
|
private boolean mBootCompleted = false;
|
||||||
private boolean mInteractive;
|
private boolean mInteractive;
|
||||||
|
|
||||||
@@ -353,6 +354,12 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
|||||||
ipw.println("mDeviceStatesOnWhichToWakeUp=" + mDeviceStatesOnWhichToWakeUp);
|
ipw.println("mDeviceStatesOnWhichToWakeUp=" + mDeviceStatesOnWhichToWakeUp);
|
||||||
ipw.println("mDeviceStatesOnWhichToSleep=" + mDeviceStatesOnWhichToSleep);
|
ipw.println("mDeviceStatesOnWhichToSleep=" + mDeviceStatesOnWhichToSleep);
|
||||||
ipw.println("mInteractive=" + mInteractive);
|
ipw.println("mInteractive=" + mInteractive);
|
||||||
|
ipw.println("mBootCompleted=" + mBootCompleted);
|
||||||
|
|
||||||
|
ipw.println();
|
||||||
|
ipw.println("mDeviceState=" + mDeviceState);
|
||||||
|
ipw.println("mPendingDeviceState=" + mPendingDeviceState);
|
||||||
|
ipw.println("mDeviceStateToBeAppliedAfterBoot=" + mDeviceStateToBeAppliedAfterBoot);
|
||||||
|
|
||||||
final int logicalDisplayCount = mLogicalDisplays.size();
|
final int logicalDisplayCount = mLogicalDisplays.size();
|
||||||
ipw.println();
|
ipw.println();
|
||||||
@@ -370,10 +377,6 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setDeviceStateLocked(int state, boolean isOverrideActive) {
|
void setDeviceStateLocked(int state, boolean isOverrideActive) {
|
||||||
Slog.i(TAG, "Requesting Transition to state: " + state + ", from state=" + mDeviceState
|
|
||||||
+ ", interactive=" + mInteractive + ", mBootCompleted=" + mBootCompleted);
|
|
||||||
mPendingDeviceState = state;
|
|
||||||
|
|
||||||
if (!mBootCompleted) {
|
if (!mBootCompleted) {
|
||||||
// The boot animation might still be in progress, we do not want to switch states now
|
// The boot animation might still be in progress, we do not want to switch states now
|
||||||
// as the boot animation would end up with an incorrect size.
|
// as the boot animation would end up with an incorrect size.
|
||||||
@@ -381,14 +384,19 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
|||||||
Slog.d(TAG, "Postponing transition to state: " + mPendingDeviceState
|
Slog.d(TAG, "Postponing transition to state: " + mPendingDeviceState
|
||||||
+ " until boot is completed");
|
+ " until boot is completed");
|
||||||
}
|
}
|
||||||
|
mDeviceStateToBeAppliedAfterBoot = state;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Slog.i(TAG, "Requesting Transition to state: " + state + ", from state=" + mDeviceState
|
||||||
|
+ ", interactive=" + mInteractive + ", mBootCompleted=" + mBootCompleted);
|
||||||
// As part of a state transition, we may need to turn off some displays temporarily so that
|
// As part of a state transition, we may need to turn off some displays temporarily so that
|
||||||
// the transition is smooth. Plus, on some devices, only one internal displays can be
|
// the transition is smooth. Plus, on some devices, only one internal displays can be
|
||||||
// on at a time. We use LogicalDisplay.setIsInTransition to mark a display that needs to be
|
// on at a time. We use LogicalDisplay.setIsInTransition to mark a display that needs to be
|
||||||
// temporarily turned off.
|
// temporarily turned off.
|
||||||
resetLayoutLocked(mDeviceState, state, /* isStateChangeStarting= */ true);
|
resetLayoutLocked(mDeviceState, state, /* isStateChangeStarting= */ true);
|
||||||
|
mPendingDeviceState = state;
|
||||||
|
mDeviceStateToBeAppliedAfterBoot = DeviceStateManager.INVALID_DEVICE_STATE;
|
||||||
final boolean wakeDevice = shouldDeviceBeWoken(mPendingDeviceState, mDeviceState,
|
final boolean wakeDevice = shouldDeviceBeWoken(mPendingDeviceState, mDeviceState,
|
||||||
mInteractive, mBootCompleted);
|
mInteractive, mBootCompleted);
|
||||||
final boolean sleepDevice = shouldDeviceBePutToSleep(mPendingDeviceState, mDeviceState,
|
final boolean sleepDevice = shouldDeviceBePutToSleep(mPendingDeviceState, mDeviceState,
|
||||||
@@ -435,8 +443,9 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
|||||||
void onBootCompleted() {
|
void onBootCompleted() {
|
||||||
synchronized (mSyncRoot) {
|
synchronized (mSyncRoot) {
|
||||||
mBootCompleted = true;
|
mBootCompleted = true;
|
||||||
if (mPendingDeviceState != DeviceStateManager.INVALID_DEVICE_STATE) {
|
if (mDeviceStateToBeAppliedAfterBoot != DeviceStateManager.INVALID_DEVICE_STATE) {
|
||||||
setDeviceStateLocked(mPendingDeviceState, /* isOverrideActive= */ false);
|
setDeviceStateLocked(mDeviceStateToBeAppliedAfterBoot,
|
||||||
|
/* isOverrideActive= */ false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -491,7 +500,8 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
boolean shouldDeviceBePutToSleep(int pendingState, int currentState, boolean isOverrideActive,
|
boolean shouldDeviceBePutToSleep(int pendingState, int currentState, boolean isOverrideActive,
|
||||||
boolean isInteractive, boolean isBootCompleted) {
|
boolean isInteractive, boolean isBootCompleted) {
|
||||||
return mDeviceStatesOnWhichToSleep.get(pendingState)
|
return currentState != DeviceStateManager.INVALID_DEVICE_STATE
|
||||||
|
&& mDeviceStatesOnWhichToSleep.get(pendingState)
|
||||||
&& !mDeviceStatesOnWhichToSleep.get(currentState)
|
&& !mDeviceStatesOnWhichToSleep.get(currentState)
|
||||||
&& !isOverrideActive
|
&& !isOverrideActive
|
||||||
&& isInteractive && isBootCompleted;
|
&& isInteractive && isBootCompleted;
|
||||||
|
|||||||
@@ -591,6 +591,7 @@ public class LogicalDisplayMapperTest {
|
|||||||
// 2) Mark the displays as STATE_OFF so that it can continue with transition
|
// 2) Mark the displays as STATE_OFF so that it can continue with transition
|
||||||
// 3) Send DISPLAY_DEVICE_EVENT_CHANGE to inform the mapper of the new display state
|
// 3) Send DISPLAY_DEVICE_EVENT_CHANGE to inform the mapper of the new display state
|
||||||
// 4) Dispatch handler events.
|
// 4) Dispatch handler events.
|
||||||
|
mLogicalDisplayMapper.onBootCompleted();
|
||||||
mLogicalDisplayMapper.setDeviceStateLocked(0, false);
|
mLogicalDisplayMapper.setDeviceStateLocked(0, false);
|
||||||
mDisplayDeviceRepo.onDisplayDeviceEvent(device3, DISPLAY_DEVICE_EVENT_CHANGED);
|
mDisplayDeviceRepo.onDisplayDeviceEvent(device3, DISPLAY_DEVICE_EVENT_CHANGED);
|
||||||
mLooper.moveTimeForward(1000);
|
mLooper.moveTimeForward(1000);
|
||||||
|
|||||||
Reference in New Issue
Block a user