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);