Fix UDFPS enrollment shadow

Add padding to the layoutparams which the UdfpsView is created with.
When drawing in UdfpsAnimationView, translate by the padded amount.

Fixes: 179083247
Test: manual
Change-Id: I2f9d677809ce03702edd68710c8e20e38c1777e9
This commit is contained in:
Kevin Chyn
2021-02-02 15:45:47 -08:00
parent 45bc1fc352
commit a5f7aadf07
4 changed files with 40 additions and 8 deletions

View File

@@ -52,4 +52,18 @@ public abstract class UdfpsAnimation extends Drawable {
public void setAlpha(int alpha) {
mFingerprintDrawable.setAlpha(alpha);
}
/**
* @return The amount of padding that's needed on each side of the sensor, in pixels.
*/
public int getPaddingX() {
return 0;
}
/**
* @return The amount of padding that's needed on each side of the sensor, in pixels.
*/
public int getPaddingY() {
return 0;
}
}

View File

@@ -70,6 +70,9 @@ public class UdfpsAnimationEnroll extends UdfpsAnimation {
@Override
public void draw(@NonNull Canvas canvas) {
canvas.save();
canvas.translate(getPaddingX(), getPaddingY());
final boolean isNightMode = (mContext.getResources().getConfiguration().uiMode
& Configuration.UI_MODE_NIGHT_YES) != 0;
if (!isNightMode) {
@@ -78,6 +81,18 @@ public class UdfpsAnimationEnroll extends UdfpsAnimation {
}
}
mFingerprintDrawable.draw(canvas);
canvas.restore();
}
@Override
public int getPaddingX() {
return (int) Math.ceil(SHADOW_RADIUS);
}
@Override
public int getPaddingY() {
return (int) Math.ceil(SHADOW_RADIUS);
}
@Override

View File

@@ -242,12 +242,15 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
}
}
private WindowManager.LayoutParams computeLayoutParams() {
private WindowManager.LayoutParams computeLayoutParams(@Nullable UdfpsAnimation animation) {
final int paddingX = animation != null ? animation.getPaddingX() : 0;
final int paddingY = animation != null ? animation.getPaddingY() : 0;
// Default dimensions assume portrait mode.
mCoreLayoutParams.x = mSensorProps.sensorLocationX - mSensorProps.sensorRadius;
mCoreLayoutParams.y = mSensorProps.sensorLocationY - mSensorProps.sensorRadius;
mCoreLayoutParams.height = 2 * mSensorProps.sensorRadius;
mCoreLayoutParams.width = 2 * mSensorProps.sensorRadius;
mCoreLayoutParams.x = mSensorProps.sensorLocationX - mSensorProps.sensorRadius - paddingX;
mCoreLayoutParams.y = mSensorProps.sensorLocationY - mSensorProps.sensorRadius - paddingY;
mCoreLayoutParams.height = 2 * mSensorProps.sensorRadius + 2 * paddingX;
mCoreLayoutParams.width = 2 * mSensorProps.sensorRadius + 2 * paddingY;
Point p = new Point();
// Gets the size based on the current rotation of the display.
@@ -289,8 +292,9 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
if (!mIsOverlayShowing) {
try {
Log.v(TAG, "showUdfpsOverlay | adding window");
mView.setUdfpsAnimation(getUdfpsAnimationForReason(reason));
mWindowManager.addView(mView, computeLayoutParams());
final UdfpsAnimation animation = getUdfpsAnimationForReason(reason);
mView.setUdfpsAnimation(animation);
mWindowManager.addView(mView, computeLayoutParams(animation));
mView.setOnTouchListener(mOnTouchListener);
mIsOverlayShowing = true;
} catch (RuntimeException e) {

View File

@@ -56,7 +56,6 @@ public class UdfpsView extends FrameLayout implements DozeReceiver, UdfpsIllumin
@NonNull private final RectF mSensorRect;
@NonNull private final Paint mDebugTextPaint;
// Used to obtain the sensor location.
@NonNull private FingerprintSensorPropertiesInternal mSensorProps;