Loading packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricUdfpsView.java +26 −0 Original line number Diff line number Diff line Loading @@ -21,12 +21,19 @@ import android.annotation.Nullable; import android.content.Context; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.util.AttributeSet; import android.util.Log; import android.widget.FrameLayout; import android.widget.TextView; import com.android.systemui.R; /** * Manages the layout for under-display fingerprint sensors (UDFPS). Ensures that UI elements * do not overlap with */ public class AuthBiometricUdfpsView extends AuthBiometricFingerprintView { private static final String TAG = "AuthBiometricUdfpsView"; @Nullable private UdfpsDialogMeasureAdapter mMeasureAdapter; public AuthBiometricUdfpsView(Context context) { Loading @@ -51,4 +58,23 @@ public class AuthBiometricUdfpsView extends AuthBiometricFingerprintView { ? mMeasureAdapter.onMeasureInternal(width, height, layoutParams) : layoutParams; } @Override void onLayoutInternal() { super.onLayoutInternal(); // Move the UDFPS icon and indicator text if necessary. This probably only needs to happen // for devices where the UDFPS sensor is too low. // TODO(b/201510778): Update this logic to support cases where the sensor or text overlap // the button bar area. final int bottomSpacerHeight = mMeasureAdapter.getBottomSpacerHeight(); Log.w(TAG, "bottomSpacerHeight: " + bottomSpacerHeight); if (bottomSpacerHeight < 0) { FrameLayout iconFrame = findViewById(R.id.biometric_icon_frame); iconFrame.setTranslationY(-bottomSpacerHeight); TextView indicator = findViewById(R.id.indicator); indicator.setTranslationY(-bottomSpacerHeight); } } } packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java +14 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ public class UdfpsDialogMeasureAdapter { @NonNull private final FingerprintSensorPropertiesInternal mSensorProps; @Nullable private WindowManager mWindowManager; private int mBottomSpacerHeight; public UdfpsDialogMeasureAdapter( @NonNull ViewGroup view, @NonNull FingerprintSensorPropertiesInternal sensorProps) { Loading Loading @@ -74,6 +75,16 @@ public class UdfpsDialogMeasureAdapter { } } /** * @return the actual (and possibly negative) bottom spacer height. If negative, this indicates * that the UDFPS sensor is too low. Our current xml and custom measurement logic is very hard * too cleanly support this case. So, let's have the onLayout code translate the sensor location * instead. */ int getBottomSpacerHeight() { return mBottomSpacerHeight; } @NonNull private AuthDialog.LayoutParams onMeasureInternalPortrait(int width, int height) { // Get the height of the everything below the icon. Currently, that's the indicator and Loading @@ -86,7 +97,7 @@ public class UdfpsDialogMeasureAdapter { final int dialogMargin = getDialogMarginPx(); final int displayHeight = getWindowBounds().height(); final Insets navbarInsets = getNavbarInsets(); final int bottomSpacerHeight = calculateBottomSpacerHeightForPortrait( mBottomSpacerHeight = calculateBottomSpacerHeightForPortrait( mSensorProps, displayHeight, textIndicatorHeight, buttonBarHeight, dialogMargin, navbarInsets.bottom); Loading Loading @@ -122,9 +133,10 @@ public class UdfpsDialogMeasureAdapter { MeasureSpec.EXACTLY)); } else if (child.getId() == R.id.space_below_icon) { // Set the spacer height so the fingerprint icon is on the physical sensor area final int clampedSpacerHeight = Math.max(mBottomSpacerHeight, 0); child.measure( MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(bottomSpacerHeight, MeasureSpec.EXACTLY)); MeasureSpec.makeMeasureSpec(clampedSpacerHeight, MeasureSpec.EXACTLY)); } else { child.measure( MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), Loading Loading
packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricUdfpsView.java +26 −0 Original line number Diff line number Diff line Loading @@ -21,12 +21,19 @@ import android.annotation.Nullable; import android.content.Context; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.util.AttributeSet; import android.util.Log; import android.widget.FrameLayout; import android.widget.TextView; import com.android.systemui.R; /** * Manages the layout for under-display fingerprint sensors (UDFPS). Ensures that UI elements * do not overlap with */ public class AuthBiometricUdfpsView extends AuthBiometricFingerprintView { private static final String TAG = "AuthBiometricUdfpsView"; @Nullable private UdfpsDialogMeasureAdapter mMeasureAdapter; public AuthBiometricUdfpsView(Context context) { Loading @@ -51,4 +58,23 @@ public class AuthBiometricUdfpsView extends AuthBiometricFingerprintView { ? mMeasureAdapter.onMeasureInternal(width, height, layoutParams) : layoutParams; } @Override void onLayoutInternal() { super.onLayoutInternal(); // Move the UDFPS icon and indicator text if necessary. This probably only needs to happen // for devices where the UDFPS sensor is too low. // TODO(b/201510778): Update this logic to support cases where the sensor or text overlap // the button bar area. final int bottomSpacerHeight = mMeasureAdapter.getBottomSpacerHeight(); Log.w(TAG, "bottomSpacerHeight: " + bottomSpacerHeight); if (bottomSpacerHeight < 0) { FrameLayout iconFrame = findViewById(R.id.biometric_icon_frame); iconFrame.setTranslationY(-bottomSpacerHeight); TextView indicator = findViewById(R.id.indicator); indicator.setTranslationY(-bottomSpacerHeight); } } }
packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java +14 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ public class UdfpsDialogMeasureAdapter { @NonNull private final FingerprintSensorPropertiesInternal mSensorProps; @Nullable private WindowManager mWindowManager; private int mBottomSpacerHeight; public UdfpsDialogMeasureAdapter( @NonNull ViewGroup view, @NonNull FingerprintSensorPropertiesInternal sensorProps) { Loading Loading @@ -74,6 +75,16 @@ public class UdfpsDialogMeasureAdapter { } } /** * @return the actual (and possibly negative) bottom spacer height. If negative, this indicates * that the UDFPS sensor is too low. Our current xml and custom measurement logic is very hard * too cleanly support this case. So, let's have the onLayout code translate the sensor location * instead. */ int getBottomSpacerHeight() { return mBottomSpacerHeight; } @NonNull private AuthDialog.LayoutParams onMeasureInternalPortrait(int width, int height) { // Get the height of the everything below the icon. Currently, that's the indicator and Loading @@ -86,7 +97,7 @@ public class UdfpsDialogMeasureAdapter { final int dialogMargin = getDialogMarginPx(); final int displayHeight = getWindowBounds().height(); final Insets navbarInsets = getNavbarInsets(); final int bottomSpacerHeight = calculateBottomSpacerHeightForPortrait( mBottomSpacerHeight = calculateBottomSpacerHeightForPortrait( mSensorProps, displayHeight, textIndicatorHeight, buttonBarHeight, dialogMargin, navbarInsets.bottom); Loading Loading @@ -122,9 +133,10 @@ public class UdfpsDialogMeasureAdapter { MeasureSpec.EXACTLY)); } else if (child.getId() == R.id.space_below_icon) { // Set the spacer height so the fingerprint icon is on the physical sensor area final int clampedSpacerHeight = Math.max(mBottomSpacerHeight, 0); child.measure( MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(bottomSpacerHeight, MeasureSpec.EXACTLY)); MeasureSpec.makeMeasureSpec(clampedSpacerHeight, MeasureSpec.EXACTLY)); } else { child.measure( MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), Loading