From 54003698b181450e784cf3a1d78b709175ff9c5e Mon Sep 17 00:00:00 2001 From: Hao Dong Date: Thu, 2 Feb 2023 12:08:37 +0800 Subject: [PATCH] Do not show udfps enrollment page in multi window mode. In multi window mode, finish FingerprintEnrollEnrolling activity and show a toast. Test: atest FingerprintEnrollEnrollingTest Bug: 184118847 Change-Id: I8cfa61b334c029185e1bbf46fdbf158bb493a1e0 --- res/values/strings.xml | 3 +++ .../FingerprintEnrollEnrolling.java | 9 +++++++ .../FingerprintEnrollEnrollingTest.java | 25 ++++++++++++++++--- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 8be46b8b32d..cc8baf0f63a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -11793,4 +11793,7 @@ Done Cancel + + + "This app can only be opened in 1 window" diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java index 17377e07ac7..7e4fca76282 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java @@ -66,6 +66,7 @@ import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.IdRes; import androidx.appcompat.app.AlertDialog; @@ -249,6 +250,14 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (isInMultiWindowMode()) { + final Toast splitUnsupportedToast = Toast.makeText(this, + R.string.dock_multi_instances_not_supported_text, Toast.LENGTH_SHORT); + splitUnsupportedToast.show(); + finish(); + return; + } + if (savedInstanceState != null) { restoreSavedState(savedInstanceState); } 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 a0bdf65fcfd..ab99cb1d3e1 100644 --- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java +++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java @@ -74,6 +74,7 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.android.controller.ActivityController; +import org.robolectric.shadows.ShadowToast; import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; @@ -113,6 +114,16 @@ public class FingerprintEnrollEnrollingTest { FakeFeatureFactory.setupForTest(); } + @Test + public void fingerprintMultiWindowMode() { + initializeActivityWithoutCreate(TYPE_UDFPS_OPTICAL); + when(mActivity.isInMultiWindowMode()).thenReturn(true); + createActivity(); + + assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo( + mContext.getString(R.string.dock_multi_instances_not_supported_text)); + } + @Test public void fingerprintUdfpsEnrollSuccessProgress_shouldNotVibrate() { initializeActivityFor(TYPE_UDFPS_OPTICAL); @@ -438,7 +449,7 @@ public class FingerprintEnrollEnrollingTest { assertThat(appliedThemes.contains("SetupWizardPartnerResource")).isTrue(); } - private void initializeActivityFor(int sensorType) { + private void initializeActivityWithoutCreate(int sensorType) { final List componentInfo = new ArrayList<>(); final FingerprintSensorPropertiesInternal prop = new FingerprintSensorPropertiesInternal( @@ -449,8 +460,6 @@ public class FingerprintEnrollEnrollingTest { sensorType, true /* resetLockoutRequiresHardwareAuthToken */); final ArrayList props = new ArrayList<>(); - final Bundle savedInstanceState = new Bundle(); - savedInstanceState.putInt(KEY_STATE_PREVIOUS_ROTATION, Surface.ROTATION_90); props.add(prop); when(mFingerprintManager.getSensorPropertiesInternal()).thenReturn(props); mContext = spy(RuntimeEnvironment.application); @@ -483,11 +492,21 @@ public class FingerprintEnrollEnrollingTest { } doReturn(true).when(mSidecar).isEnrolling(); } + } + + private void createActivity() { + final Bundle savedInstanceState = new Bundle(); + savedInstanceState.putInt(KEY_STATE_PREVIOUS_ROTATION, Surface.ROTATION_90); ActivityController.of(mActivity).create(savedInstanceState); mTheme = mActivity.getTheme(); } + private void initializeActivityFor(int sensorType) { + initializeActivityWithoutCreate(sensorType); + createActivity(); + } + private EnrollmentCallback verifyAndCaptureEnrollmentCallback() { ArgumentCaptor callbackCaptor = ArgumentCaptor.forClass(EnrollmentCallback.class);