Fix DMD setting IUdfpsHbmListener before SysUI is ready
Bug: 190573336 Bug: 181682258 Test: atest DisplayModeDirectorTest Test: Behaves correctly when delaying SysUI boot by 20 sec Change-Id: Ib9ba4f5266acad37fd42f9505a8bf477d97023ff
This commit is contained in:
@@ -43,6 +43,7 @@ import android.hardware.face.FaceSensorPropertiesInternal;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
||||
import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback;
|
||||
import android.hardware.fingerprint.IUdfpsHbmListener;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
@@ -100,6 +101,8 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
|
||||
@Nullable
|
||||
private UdfpsController mUdfpsController;
|
||||
@Nullable
|
||||
private IUdfpsHbmListener mUdfpsHbmListener;
|
||||
@Nullable
|
||||
private SidefpsController mSidefpsController;
|
||||
@VisibleForTesting
|
||||
TaskStackListener mTaskStackListener;
|
||||
@@ -470,6 +473,24 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
|
||||
mActivityTaskManager.registerTaskStackListener(mTaskStackListener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stores the listener received from {@link com.android.server.display.DisplayModeDirector}.
|
||||
*
|
||||
* DisplayModeDirector implements {@link IUdfpsHbmListener} and registers it with this class by
|
||||
* calling {@link CommandQueue#setUdfpsHbmListener(IUdfpsHbmListener)}.
|
||||
*/
|
||||
@Override
|
||||
public void setUdfpsHbmListener(IUdfpsHbmListener listener) {
|
||||
mUdfpsHbmListener = listener;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return IUdfpsHbmListener that can be set by DisplayModeDirector.
|
||||
*/
|
||||
@Nullable public IUdfpsHbmListener getUdfpsHbmListener() {
|
||||
return mUdfpsHbmListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showAuthenticationDialog(PromptInfo promptInfo, IBiometricSysuiReceiver receiver,
|
||||
int[] sensorIds, boolean credentialAllowed, boolean requireConfirmation,
|
||||
|
||||
@@ -512,6 +512,8 @@ public final class DisplayManagerService extends SystemService {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (phase == PHASE_BOOT_COMPLETED) {
|
||||
mDisplayModeDirector.onBootCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -155,7 +155,6 @@ public class DisplayModeDirector {
|
||||
mSettingsObserver.observe();
|
||||
mDisplayObserver.observe();
|
||||
mBrightnessObserver.observe(sensorManager);
|
||||
mUdfpsObserver.observe();
|
||||
synchronized (mLock) {
|
||||
// We may have a listener already registered before the call to start, so go ahead and
|
||||
// notify them to pick up our newly initialized state.
|
||||
@@ -163,6 +162,16 @@ public class DisplayModeDirector {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as {@link #start(SensorManager)}, but for observers that need to be delayed even more,
|
||||
* for example until SystemUI is ready.
|
||||
*/
|
||||
public void onBootCompleted() {
|
||||
// UDFPS observer registers a listener with SystemUI which might not be ready until the
|
||||
// system is fully booted.
|
||||
mUdfpsObserver.observe();
|
||||
}
|
||||
|
||||
public void setLoggingEnabled(boolean loggingEnabled) {
|
||||
if (mLoggingEnabled == loggingEnabled) {
|
||||
return;
|
||||
|
||||
@@ -854,7 +854,7 @@ public class DisplayModeDirectorTest {
|
||||
createDirectorFromRefreshRateArray(new float[] {60.f, 90.f, 110.f}, 0);
|
||||
verify(mStatusBarMock, never()).setUdfpsHbmListener(any());
|
||||
|
||||
director.start(createMockSensorManager());
|
||||
director.onBootCompleted();
|
||||
verify(mStatusBarMock).setUdfpsHbmListener(eq(director.getUdpfsObserver()));
|
||||
}
|
||||
|
||||
@@ -863,6 +863,7 @@ public class DisplayModeDirectorTest {
|
||||
DisplayModeDirector director =
|
||||
createDirectorFromRefreshRateArray(new float[] {60.f, 90.f, 110.f}, 0);
|
||||
director.start(createMockSensorManager());
|
||||
director.onBootCompleted();
|
||||
ArgumentCaptor<IUdfpsHbmListener> captor =
|
||||
ArgumentCaptor.forClass(IUdfpsHbmListener.class);
|
||||
verify(mStatusBarMock).setUdfpsHbmListener(captor.capture());
|
||||
|
||||
Reference in New Issue
Block a user