4040import android .content .pm .ResolveInfo ;
4141import android .content .res .Configuration ;
4242import android .graphics .drawable .Drawable ;
43+ import android .hardware .biometrics .BiometricSourceType ;
4344import android .os .AsyncTask ;
4445import android .os .Bundle ;
4546import android .os .IBinder ;
6364import android .widget .TextView ;
6465
6566import com .android .internal .annotations .VisibleForTesting ;
67+ import com .android .internal .util .nad .fod .FodUtils ;
6668import com .android .internal .widget .LockPatternUtils ;
6769import com .android .keyguard .KeyguardUpdateMonitor ;
6870import com .android .keyguard .KeyguardUpdateMonitorCallback ;
@@ -143,6 +145,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
143145
144146 private boolean mUserSetupComplete ;
145147 private boolean mPrewarmBound ;
148+ private boolean mIsFingerprintRunning ;
146149 private Messenger mPrewarmMessenger ;
147150 private final ServiceConnection mPrewarmConnection = new ServiceConnection () {
148151
@@ -168,6 +171,7 @@ public void onServiceDisconnected(ComponentName name) {
168171 private String mLeftButtonStr ;
169172 private boolean mDozing ;
170173 private int mIndicationBottomMargin ;
174+ private int mIndicationBottomMarginFod ;
171175 private float mDarkAmount ;
172176 private int mBurnInXOffset ;
173177 private int mBurnInYOffset ;
@@ -244,6 +248,8 @@ protected void onFinishInflate() {
244248 mIndicationText = findViewById (R .id .keyguard_indication_text );
245249 mIndicationBottomMargin = getResources ().getDimensionPixelSize (
246250 R .dimen .keyguard_indication_margin_bottom );
251+ mIndicationBottomMarginFod = getResources ().getDimensionPixelSize (
252+ R .dimen .keyguard_indication_margin_bottom_fingerprint_in_display );
247253 mBurnInYOffset = getResources ().getDimensionPixelSize (
248254 R .dimen .default_burn_in_prevention_offset );
249255 updateCameraVisibility ();
@@ -260,6 +266,7 @@ protected void onFinishInflate() {
260266 mAccessibilityController = Dependency .get (AccessibilityController .class );
261267 mActivityIntentHelper = new ActivityIntentHelper (getContext ());
262268 updateLeftAffordance ();
269+ updateIndicationAreaPadding ();
263270 }
264271
265272 @ Override
@@ -307,15 +314,9 @@ private void initAccessibility() {
307314 @ Override
308315 protected void onConfigurationChanged (Configuration newConfig ) {
309316 super .onConfigurationChanged (newConfig );
310- mIndicationBottomMargin = getResources ().getDimensionPixelSize (
311- R .dimen .keyguard_indication_margin_bottom );
312- mBurnInYOffset = getResources ().getDimensionPixelSize (
313- R .dimen .default_burn_in_prevention_offset );
314- MarginLayoutParams mlp = (MarginLayoutParams ) mIndicationArea .getLayoutParams ();
315- if (mlp .bottomMargin != mIndicationBottomMargin ) {
316- mlp .bottomMargin = mIndicationBottomMargin ;
317- mIndicationArea .setLayoutParams (mlp );
318- }
317+
318+ // Update the bottom margin of the indication area
319+ updateIndicationAreaPadding ();
319320
320321 // Respect font size setting.
321322 mEnterpriseDisclosure .setTextSize (TypedValue .COMPLEX_UNIT_PX ,
@@ -385,6 +386,23 @@ private void updateCameraVisibility() {
385386 && mRightButton .getIcon ().isVisible ? View .VISIBLE : View .GONE );
386387 }
387388
389+ private void updateIndicationAreaPadding () {
390+ mIndicationBottomMargin = getResources ().getDimensionPixelSize (
391+ R .dimen .keyguard_indication_margin_bottom );
392+ mIndicationBottomMarginFod = getResources ().getDimensionPixelSize (
393+ R .dimen .keyguard_indication_margin_bottom_fingerprint_in_display );
394+ mBurnInYOffset = getResources ().getDimensionPixelSize (
395+ R .dimen .default_burn_in_prevention_offset );
396+ MarginLayoutParams mlp = (MarginLayoutParams ) mIndicationArea .getLayoutParams ();
397+
398+ int bottomMargin = hasInDisplayFingerprint () ? mIndicationBottomMarginFod : mIndicationBottomMargin ;
399+ boolean newLp = mlp .bottomMargin != bottomMargin ;
400+ if (newLp ) {
401+ mlp .bottomMargin = bottomMargin ;
402+ mIndicationArea .setLayoutParams (mlp );
403+ }
404+ }
405+
388406 /**
389407 * Set an alternate icon for the left assist affordance (replace the mic icon)
390408 */
@@ -407,6 +425,10 @@ private void updateLeftAffordanceIcon() {
407425 mLeftAffordanceView .setContentDescription (state .contentDescription );
408426 }
409427
428+ private boolean hasInDisplayFingerprint () {
429+ return FodUtils .hasFodSupport (mContext ) && mIsFingerprintRunning ;
430+ }
431+
410432 public boolean isLeftVoiceAssist () {
411433 return mLeftIsVoiceAssist ;
412434 }
@@ -716,6 +738,12 @@ public void onUserUnlocked() {
716738 updateCameraVisibility ();
717739 updateLeftAffordance ();
718740 }
741+ @ Override
742+ public void onBiometricRunningStateChanged (boolean running ,
743+ BiometricSourceType biometricSourceType ) {
744+ mIsFingerprintRunning = running ;
745+ updateIndicationAreaPadding ();
746+ }
719747 };
720748
721749 public void updateLeftAffordance () {
0 commit comments