Fix pulse wake-up transition

ScrimController was transitioning to the wrong state because
fingerprint would take the device to a dozing but not pulsing
state before unlocking. And since I was already touching this
area, I used the oportunity to remove ScrimController references
from DozeScrimController.

Change-Id: Iaa1274eedc9cfb808a71b49a9184de39009e981c
Fixes: 115305153
Test: Manually unlock with fp while pulsing
Test: Unlock with fp
Test: Unlock with bouncer
Test: Wait for pulse to go away
Test: atest DozeScrimControllerTest
This commit is contained in:
Lucas Dupin
2018-10-02 17:57:17 -07:00
parent 9b74c07517
commit 61331ceab2
3 changed files with 21 additions and 45 deletions

View File

@@ -17,7 +17,6 @@
package com.android.systemui.statusbar.phone;
import android.annotation.NonNull;
import android.content.Context;
import android.os.Handler;
import android.util.Log;
@@ -33,7 +32,6 @@ public class DozeScrimController {
private final DozeParameters mDozeParameters;
private final Handler mHandler = new Handler();
private final ScrimController mScrimController;
private boolean mDozing;
private DozeHost.PulseCallback mPulseCallback;
@@ -83,9 +81,7 @@ public class DozeScrimController {
}
};
public DozeScrimController(ScrimController scrimController, Context context,
DozeParameters dozeParameters) {
mScrimController = scrimController;
public DozeScrimController(DozeParameters dozeParameters) {
mDozeParameters = dozeParameters;
}
@@ -117,8 +113,6 @@ public class DozeScrimController {
// be invoked when we're done so that the caller can drop the pulse wakelock.
mPulseCallback = callback;
mPulseReason = reason;
mScrimController.transitionTo(ScrimState.PULSING, mScrimCallback);
}
public void pulseOutNow() {
@@ -180,13 +174,11 @@ public class DozeScrimController {
mHandler.removeCallbacks(mPulseOutExtended);
if (DEBUG) Log.d(TAG, "Pulse out, mDozing=" + mDozing);
if (!mDozing) return;
mScrimController.transitionTo(ScrimState.AOD,
new ScrimController.Callback() {
@Override
public void onDisplayBlanked() {
pulseFinished();
}
});
pulseFinished();
}
};
public ScrimController.Callback getScrimCallback() {
return mScrimCallback;
}
}

View File

@@ -882,8 +882,7 @@ public class StatusBar extends SystemUI implements DemoMode,
mContext.getSystemService(AlarmManager.class));
mNotificationPanel.initDependencies(this, mGroupManager, mNotificationShelf,
mHeadsUpManager, mNotificationIconAreaController, mScrimController);
mDozeScrimController = new DozeScrimController(mScrimController, context,
DozeParameters.getInstance(context));
mDozeScrimController = new DozeScrimController(DozeParameters.getInstance(context));
mBackdrop = mStatusBarWindow.findViewById(R.id.backdrop);
mBackdropFront = mBackdrop.findViewById(R.id.backdrop_front);
@@ -1519,7 +1518,7 @@ public class StatusBar extends SystemUI implements DemoMode,
}
public boolean isPulsing() {
return mDozeScrimController != null && mDozeScrimController.isPulsing();
return mAmbientPulseManager.hasNotifications();
}
public boolean isLaunchTransitionFadingAway() {
@@ -3648,7 +3647,6 @@ public class StatusBar extends SystemUI implements DemoMode,
mNotificationPanel.setTouchAndAnimationDisabled(false);
updateVisibleToUser();
updateIsKeyguard();
updateScrimController();
}
};
@@ -3834,8 +3832,9 @@ public class StatusBar extends SystemUI implements DemoMode,
} else if (mBrightnessMirrorVisible) {
mScrimController.transitionTo(ScrimState.BRIGHTNESS_MIRROR);
} else if (isPulsing()) {
// Handled in DozeScrimController#setPulsing
} else if (mDozing) {
mScrimController.transitionTo(ScrimState.PULSING,
mDozeScrimController.getScrimCallback());
} else if (mDozing && !wakeAndUnlocking) {
mScrimController.transitionTo(ScrimState.AOD);
} else if (mIsKeyguard && !wakeAndUnlocking) {
mScrimController.transitionTo(mNotificationPanel.isSemiAwake()
@@ -3928,8 +3927,12 @@ public class StatusBar extends SystemUI implements DemoMode,
mNotificationPanel.setPulsing(pulsing);
mVisualStabilityManager.setPulsing(pulsing);
mIgnoreTouchWhilePulsing = false;
updateScrimController();
}
}, reason);
// DozeScrimController is in pulse state, now let's ask ScrimController to start
// pulsing and draw the black frame, if necessary.
updateScrimController();
}
@Override

View File

@@ -16,14 +16,10 @@
package com.android.systemui.statusbar.phone;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import android.os.Debug;
import android.support.test.filters.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -42,8 +38,6 @@ import org.mockito.MockitoAnnotations;
@SmallTest
public class DozeScrimControllerTest extends SysuiTestCase {
@Mock
private ScrimController mScrimController;
@Mock
private DozeParameters mDozeParameters;
private DozeScrimController mDozeScrimController;
@@ -51,33 +45,20 @@ public class DozeScrimControllerTest extends SysuiTestCase {
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
// Make sure callbacks will be invoked to complete the lifecycle.
doAnswer(invocationOnMock -> {
ScrimController.Callback callback = invocationOnMock.getArgument(1);
callback.onStart();
callback.onDisplayBlanked();
callback.onFinished();
return null;
}).when(mScrimController).transitionTo(any(ScrimState.class),
any(ScrimController.Callback.class));
mDozeScrimController = new DozeScrimController(mScrimController, getContext(),
mDozeParameters);
mDozeScrimController = new DozeScrimController(mDozeParameters);
mDozeScrimController.setDozing(true);
}
@Test
public void changesScrimControllerState() {
mDozeScrimController.pulse(mock(DozeHost.PulseCallback.class), 0);
verify(mScrimController).transitionTo(eq(ScrimState.PULSING),
any(ScrimController.Callback.class));
}
@Test
public void callsPulseCallback() {
DozeHost.PulseCallback callback = mock(DozeHost.PulseCallback.class);
mDozeScrimController.pulse(callback, 0);
// Manually simulate a scrim lifecycle
mDozeScrimController.getScrimCallback().onStart();
mDozeScrimController.getScrimCallback().onDisplayBlanked();
mDozeScrimController.getScrimCallback().onFinished();
verify(callback).onPulseStarted();
mDozeScrimController.pulseOutNow();
verify(callback).onPulseFinished();