private boolean mCurrentDreamCanDoze;
private boolean mCurrentDreamIsDozing;
private boolean mCurrentDreamIsWaking;
+ private Runnable mStopDreamRunnable;
private int mCurrentDreamDozeScreenState = Display.STATE_UNKNOWN;
private int mCurrentDreamDozeScreenBrightness = PowerManager.BRIGHTNESS_DEFAULT;
&& mCurrentDreamCanDoze == canDoze
&& mCurrentDreamUserId == userId) {
Slog.i(TAG, "Already in target dream.");
+ // If dream is waking, cancel the wake.
+ mCurrentDreamIsWaking = false;
+ if (mStopDreamRunnable != null) {
+ mHandler.removeCallbacks(mStopDreamRunnable);
+ mStopDreamRunnable = null;
+ }
return;
}
mCurrentDreamIsWaking = true;
}
- mHandler.post(new Runnable() {
+ if (mStopDreamRunnable != null) {
+ mHandler.removeCallbacks(mStopDreamRunnable);
+ mStopDreamRunnable = null;
+ }
+ mStopDreamRunnable = new Runnable() {
@Override
public void run() {
- Slog.i(TAG, "Performing gentle wake from dream.");
- mController.stopDream(immediate);
+ synchronized (mLock) {
+ Slog.i(TAG, "Performing gentle wake from dream.");
+ mController.stopDream(immediate);
+ if (mStopDreamRunnable == this) {
+ mStopDreamRunnable = null;
+ }
+ }
}
- });
+ };
+ mHandler.post(mStopDreamRunnable);
}
}