Merge "Fix DMD setting IUdfpsHbmListener before SysUI is ready" into sc-dev

This commit is contained in:
Ilya Matyukhin
2021-06-15 19:07:35 +00:00
committed by Android (Google) Code Review
4 changed files with 35 additions and 2 deletions

View File

@@ -43,6 +43,7 @@ import android.hardware.face.FaceSensorPropertiesInternal;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback; import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback;
import android.hardware.fingerprint.IUdfpsHbmListener;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
@@ -100,6 +101,8 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
@Nullable @Nullable
private UdfpsController mUdfpsController; private UdfpsController mUdfpsController;
@Nullable @Nullable
private IUdfpsHbmListener mUdfpsHbmListener;
@Nullable
private SidefpsController mSidefpsController; private SidefpsController mSidefpsController;
@VisibleForTesting @VisibleForTesting
TaskStackListener mTaskStackListener; TaskStackListener mTaskStackListener;
@@ -470,6 +473,24 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
mActivityTaskManager.registerTaskStackListener(mTaskStackListener); 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 @Override
public void showAuthenticationDialog(PromptInfo promptInfo, IBiometricSysuiReceiver receiver, public void showAuthenticationDialog(PromptInfo promptInfo, IBiometricSysuiReceiver receiver,
int[] sensorIds, boolean credentialAllowed, boolean requireConfirmation, int[] sensorIds, boolean credentialAllowed, boolean requireConfirmation,

View File

@@ -512,6 +512,8 @@ public final class DisplayManagerService extends SystemService {
} }
} }
} }
} else if (phase == PHASE_BOOT_COMPLETED) {
mDisplayModeDirector.onBootCompleted();
} }
} }

View File

@@ -155,7 +155,6 @@ public class DisplayModeDirector {
mSettingsObserver.observe(); mSettingsObserver.observe();
mDisplayObserver.observe(); mDisplayObserver.observe();
mBrightnessObserver.observe(sensorManager); mBrightnessObserver.observe(sensorManager);
mUdfpsObserver.observe();
synchronized (mLock) { synchronized (mLock) {
// We may have a listener already registered before the call to start, so go ahead and // 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. // 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) { public void setLoggingEnabled(boolean loggingEnabled) {
if (mLoggingEnabled == loggingEnabled) { if (mLoggingEnabled == loggingEnabled) {
return; return;

View File

@@ -854,7 +854,7 @@ public class DisplayModeDirectorTest {
createDirectorFromRefreshRateArray(new float[] {60.f, 90.f, 110.f}, 0); createDirectorFromRefreshRateArray(new float[] {60.f, 90.f, 110.f}, 0);
verify(mStatusBarMock, never()).setUdfpsHbmListener(any()); verify(mStatusBarMock, never()).setUdfpsHbmListener(any());
director.start(createMockSensorManager()); director.onBootCompleted();
verify(mStatusBarMock).setUdfpsHbmListener(eq(director.getUdpfsObserver())); verify(mStatusBarMock).setUdfpsHbmListener(eq(director.getUdpfsObserver()));
} }
@@ -863,6 +863,7 @@ public class DisplayModeDirectorTest {
DisplayModeDirector director = DisplayModeDirector director =
createDirectorFromRefreshRateArray(new float[] {60.f, 90.f, 110.f}, 0); createDirectorFromRefreshRateArray(new float[] {60.f, 90.f, 110.f}, 0);
director.start(createMockSensorManager()); director.start(createMockSensorManager());
director.onBootCompleted();
ArgumentCaptor<IUdfpsHbmListener> captor = ArgumentCaptor<IUdfpsHbmListener> captor =
ArgumentCaptor.forClass(IUdfpsHbmListener.class); ArgumentCaptor.forClass(IUdfpsHbmListener.class);
verify(mStatusBarMock).setUdfpsHbmListener(captor.capture()); verify(mStatusBarMock).setUdfpsHbmListener(captor.capture());