@@ -479,11 +479,13 @@ private void updatePowerState() {
479479 if (mPowerRequest == null ) {
480480 mPowerRequest = new DisplayPowerRequest (mPendingRequestLocked );
481481 mWaitingForNegativeProximity = mPendingWaitForNegativeProximityLocked ;
482+ mPendingWaitForNegativeProximityLocked = false ;
482483 mPendingRequestChangedLocked = false ;
483484 mustInitialize = true ;
484485 } else if (mPendingRequestChangedLocked ) {
485486 mPowerRequest .copyFrom (mPendingRequestLocked );
486487 mWaitingForNegativeProximity |= mPendingWaitForNegativeProximityLocked ;
488+ mPendingWaitForNegativeProximityLocked = false ;
487489 mPendingRequestChangedLocked = false ;
488490 mDisplayReadyLocked = false ;
489491 }
@@ -496,24 +498,33 @@ private void updatePowerState() {
496498 initialize ();
497499 }
498500
499- // Clear a request to wait for negative proximity if needed.
500- if (mPowerRequest .screenState == DisplayPowerRequest .SCREEN_STATE_OFF
501- || mProximity == PROXIMITY_NEGATIVE
502- || mProximitySensor == null ) {
503- mWaitingForNegativeProximity = false ;
504- }
505-
506- // Turn on the proximity sensor if needed.
501+ // Apply the proximity sensor.
507502 if (mProximitySensor != null ) {
508- setProximitySensorEnabled (mPowerRequest .useProximitySensor
509- || mWaitingForNegativeProximity );
510- if (mProximitySensorEnabled && mProximity == PROXIMITY_POSITIVE ) {
511- mScreenOffBecauseOfProximity = true ;
512- setScreenOn (false );
513- } else if (mScreenOffBecauseOfProximity ) {
503+ if (mPowerRequest .useProximitySensor
504+ && mPowerRequest .screenState != DisplayPowerRequest .SCREEN_STATE_OFF ) {
505+ setProximitySensorEnabled (true );
506+ if (!mScreenOffBecauseOfProximity
507+ && mProximity == PROXIMITY_POSITIVE ) {
508+ mScreenOffBecauseOfProximity = true ;
509+ setScreenOn (false );
510+ }
511+ } else if (mWaitingForNegativeProximity
512+ && mScreenOffBecauseOfProximity
513+ && mProximity == PROXIMITY_POSITIVE
514+ && mPowerRequest .screenState != DisplayPowerRequest .SCREEN_STATE_OFF ) {
515+ setProximitySensorEnabled (true );
516+ } else {
517+ setProximitySensorEnabled (false );
518+ mWaitingForNegativeProximity = false ;
519+ }
520+ if (mScreenOffBecauseOfProximity
521+ && mProximity != PROXIMITY_POSITIVE ) {
514522 mScreenOffBecauseOfProximity = false ;
523+ setScreenOn (true );
515524 sendOnProximityNegative ();
516525 }
526+ } else {
527+ mWaitingForNegativeProximity = false ;
517528 }
518529
519530 // Turn on the light sensor if needed.
0 commit comments