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:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user