diff --git a/res/layout-land/udfps_enroll_enrolling.xml b/res/layout-land/udfps_enroll_enrolling.xml index f3237887e9a..743684fb02e 100644 --- a/res/layout-land/udfps_enroll_enrolling.xml +++ b/res/layout-land/udfps_enroll_enrolling.xml @@ -96,4 +96,6 @@ + + \ No newline at end of file diff --git a/res/layout/udfps_enroll_enrolling.xml b/res/layout/udfps_enroll_enrolling.xml index c97591d6d52..05556ffe46c 100644 --- a/res/layout/udfps_enroll_enrolling.xml +++ b/res/layout/udfps_enroll_enrolling.xml @@ -18,6 +18,7 @@ + android:layout_gravity="center_horizontal|bottom" + tools:ignore="Suspicious0dp"> + + + { + if (view.getVisibility() == View.VISIBLE + && hasOverlap(view, udfpsEnrollView)) { + view.setVisibility(View.GONE); + } + }); + setOnHoverListener(false, layout, udfpsEnrollView); setContentView(layout); break; case Surface.ROTATION_270: default: - if (FeatureFlagUtils.isEnabled(getApplicationContext(), - FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS)) { - final UdfpsEnrollView udfpsEnrollView = addUdfpsEnrollView(props.get(0)); - layout.addView(udfpsEnrollView); - setOnHoverListener(true, layout, udfpsEnrollView); - } - + setOnHoverListener(true, layout, udfpsEnrollView); setContentView(layout); break; } @@ -1235,10 +1223,8 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { } } - private UdfpsEnrollView addUdfpsEnrollView(FingerprintSensorPropertiesInternal udfpsProps) { - UdfpsEnrollView udfpsEnrollView = (UdfpsEnrollView) getLayoutInflater().inflate( - R.layout.udfps_enroll_view, null, false); - + private UdfpsEnrollView updateUdfpsEnrollView(UdfpsEnrollView udfpsEnrollView, + FingerprintSensorPropertiesInternal udfpsProps) { DisplayInfo displayInfo = new DisplayInfo(); getDisplay().getDisplayInfo(displayInfo); mScaleFactor = mUdfpsUtils.getScaleFactor(displayInfo); @@ -1305,6 +1291,24 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { : R.id.sud_layout_content).setOnHoverListener(onHoverListener); } + + @VisibleForTesting boolean hasOverlap(View view1, View view2) { + int[] firstPosition = new int[2]; + int[] secondPosition = new int[2]; + + view1.getLocationOnScreen(firstPosition); + view2.getLocationOnScreen(secondPosition); + + // Rect constructor parameters: left, top, right, bottom + Rect rectView1 = new Rect(firstPosition[0], firstPosition[1], + firstPosition[0] + view1.getMeasuredWidth(), + firstPosition[1] + view1.getMeasuredHeight()); + Rect rectView2 = new Rect(secondPosition[0], secondPosition[1], + secondPosition[0] + view2.getMeasuredWidth(), + secondPosition[1] + view2.getMeasuredHeight()); + return rectView1.intersect(rectView2); + } + public static class IconTouchDialog extends InstrumentedDialogFragment { @Override diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java index 6e42059395f..5ded91ec68c 100644 --- a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java +++ b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollView.java @@ -161,22 +161,20 @@ public class UdfpsEnrollView extends FrameLayout implements UdfpsEnrollHelper.Li MarginLayoutParams marginLayoutParams = (MarginLayoutParams) getLayoutParams(); FrameLayout.LayoutParams params = (LayoutParams) getLayoutParams(); if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) { - parentView.getViewTreeObserver().addOnDrawListener(() -> { - final int[] coords = parentView.getLocationOnScreen(); - final int parentLeft = coords[0]; - final int parentTop = coords[1]; - final int parentRight = parentLeft + parentView.getWidth(); - params.gravity = Gravity.RIGHT | Gravity.TOP; - final int rightMargin = parentRight - rotatedBounds.right - getPaddingX(); - final int topMargin = rotatedBounds.top - parentTop - getPaddingY(); - if (marginLayoutParams.rightMargin == rightMargin - && marginLayoutParams.topMargin == topMargin) { - return; - } - marginLayoutParams.rightMargin = rightMargin; - marginLayoutParams.topMargin = topMargin; - setLayoutParams(params); - }); + final int[] coords = parentView.getLocationOnScreen(); + final int parentLeft = coords[0]; + final int parentTop = coords[1]; + final int parentRight = parentLeft + parentView.getWidth(); + params.gravity = Gravity.RIGHT | Gravity.TOP; + final int rightMargin = parentRight - rotatedBounds.right - getPaddingX(); + final int topMargin = rotatedBounds.top - parentTop - getPaddingY(); + if (marginLayoutParams.rightMargin == rightMargin + && marginLayoutParams.topMargin == topMargin) { + return; + } + marginLayoutParams.rightMargin = rightMargin; + marginLayoutParams.topMargin = topMargin; + setLayoutParams(params); } else { final int[] coords = parentView.getLocationOnScreen(); final int parentLeft = coords[0]; diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java index 7282be357c1..959c6426894 100644 --- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java +++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java @@ -53,7 +53,6 @@ import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; import android.os.Bundle; import android.os.CancellationSignal; import android.os.Vibrator; -import android.util.FeatureFlagUtils; import android.view.Display; import android.view.Surface; import android.view.View; @@ -203,8 +202,6 @@ public class FingerprintEnrollEnrollingTest { @Test public void fingerprintUdfpsOverlayEnrollment_showOverlayPortrait() { - FeatureFlagUtils.setEnabled(mContext, - FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true); initializeActivityFor(TYPE_UDFPS_OPTICAL); when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_0); @@ -216,8 +213,6 @@ public class FingerprintEnrollEnrollingTest { @Test public void fingerprintUdfpsOverlayEnrollment_showOverlayLandscape() { - FeatureFlagUtils.setEnabled(mContext, - FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true); initializeActivityFor(TYPE_UDFPS_OPTICAL); when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_90); @@ -229,8 +224,6 @@ public class FingerprintEnrollEnrollingTest { @Test public void fingerprintUdfpsOverlayEnrollment_usesCorrectProgressBarFillColor() { - FeatureFlagUtils.setEnabled(mContext, - FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true); initializeActivityFor(TYPE_UDFPS_OPTICAL); final TypedArray ta = mActivity.obtainStyledAttributes(null, R.styleable.BiometricsEnrollView, R.attr.biometricsEnrollStyle, @@ -250,9 +243,7 @@ public class FingerprintEnrollEnrollingTest { @Test public void fingerprintUdfpsOverlayEnrollment_checkViewOverlapPortrait() { - FeatureFlagUtils.setEnabled(mContext, - FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true); - when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_90); + when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_0); initializeActivityFor(TYPE_UDFPS_OPTICAL); final GlifLayout defaultLayout = mActivity.findViewById(R.id.setup_wizard_layout); @@ -294,9 +285,9 @@ public class FingerprintEnrollEnrollingTest { udfpsEnrollView.getViewTreeObserver().addOnDrawListener(() -> { udfpsEnrollView.getLocationOnScreen(udfpsEnrollViewPosition); rectUdfpsEnrollView.set(new Rect(udfpsEnrollViewPosition[0], - udfpsEnrollViewPosition[1], udfpsEnrollViewPosition[0] - + udfpsEnrollView.getWidth(), udfpsEnrollViewPosition[1] - + udfpsEnrollView.getHeight())); + udfpsEnrollViewPosition[1], udfpsEnrollViewPosition[0] + + udfpsEnrollView.getWidth(), udfpsEnrollViewPosition[1] + + udfpsEnrollView.getHeight())); }); lottieAnimationContainer.getViewTreeObserver().addOnDrawListener(() -> { @@ -320,10 +311,36 @@ public class FingerprintEnrollEnrollingTest { .intersect(rectUdfpsEnrollView.get())).isFalse(); } + @Test + public void fingerprintUdfpsOverlayEnrollment_descriptionViewGoneWithOverlap() { + initializeActivityWithoutCreate(TYPE_UDFPS_OPTICAL); + doReturn(true).when(mActivity).hasOverlap(any(), any()); + when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_0); + createActivity(); + + final GlifLayout defaultLayout = spy(mActivity.findViewById(R.id.setup_wizard_layout)); + final TextView descriptionTextView = defaultLayout.getDescriptionTextView(); + + defaultLayout.getViewTreeObserver().dispatchOnDraw(); + assertThat(descriptionTextView.getVisibility()).isEqualTo(View.GONE); + } + + @Test + public void fingerprintUdfpsOverlayEnrollment_descriptionViewVisibleWithoutOverlap() { + initializeActivityWithoutCreate(TYPE_UDFPS_OPTICAL); + doReturn(false).when(mActivity).hasOverlap(any(), any()); + when(mMockDisplay.getRotation()).thenReturn(Surface.ROTATION_0); + createActivity(); + + final GlifLayout defaultLayout = spy(mActivity.findViewById(R.id.setup_wizard_layout)); + final TextView descriptionTextView = defaultLayout.getDescriptionTextView(); + + defaultLayout.getViewTreeObserver().dispatchOnDraw(); + assertThat(descriptionTextView.getVisibility()).isEqualTo(View.VISIBLE); + } + @Test public void forwardEnrollProgressEvents() { - FeatureFlagUtils.setEnabled(mContext, - FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true); initializeActivityFor(TYPE_UDFPS_OPTICAL); EnrollListener listener = new EnrollListener(mActivity); @@ -337,8 +354,6 @@ public class FingerprintEnrollEnrollingTest { @Test public void forwardEnrollHelpEvents() { - FeatureFlagUtils.setEnabled(mContext, - FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true); initializeActivityFor(TYPE_UDFPS_OPTICAL); EnrollListener listener = new EnrollListener(mActivity); @@ -352,8 +367,6 @@ public class FingerprintEnrollEnrollingTest { @Test public void forwardEnrollAcquiredEvents() { - FeatureFlagUtils.setEnabled(mContext, - FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true); initializeActivityFor(TYPE_UDFPS_OPTICAL); EnrollListener listener = new EnrollListener(mActivity); @@ -368,8 +381,6 @@ public class FingerprintEnrollEnrollingTest { @Test public void forwardEnrollPointerDownEvents() { - FeatureFlagUtils.setEnabled(mContext, - FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true); initializeActivityFor(TYPE_UDFPS_OPTICAL); EnrollListener listener = new EnrollListener(mActivity); @@ -383,8 +394,6 @@ public class FingerprintEnrollEnrollingTest { @Test public void forwardEnrollPointerUpEvents() { - FeatureFlagUtils.setEnabled(mContext, - FeatureFlagUtils.SETTINGS_SHOW_UDFPS_ENROLL_IN_SETTINGS, true); initializeActivityFor(TYPE_UDFPS_OPTICAL); EnrollListener listener = new EnrollListener(mActivity);