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
This commit is contained in:
Hao Dong
2023-02-02 12:08:37 +08:00
parent 56f1eb0fbf
commit 54003698b1
3 changed files with 34 additions and 3 deletions

View File

@@ -11793,4 +11793,7 @@
<string name="color_selector_dialog_done">Done</string> <string name="color_selector_dialog_done">Done</string>
<!-- Button to close the dialog without saving in screen flash color selection dialog. [CHAR LIMIT=20] --> <!-- Button to close the dialog without saving in screen flash color selection dialog. [CHAR LIMIT=20] -->
<string name="color_selector_dialog_cancel">Cancel</string> <string name="color_selector_dialog_cancel">Cancel</string>
<!-- Warning message when we try to dock an app not supporting multiple instances split into multiple sides [CHAR LIMIT=NONE] -->
<string name="dock_multi_instances_not_supported_text">"This app can only be opened in 1 window"</string>
</resources> </resources>

View File

@@ -66,6 +66,7 @@ import android.widget.LinearLayout;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.IdRes; import androidx.annotation.IdRes;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
@@ -249,6 +250,14 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(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) { if (savedInstanceState != null) {
restoreSavedState(savedInstanceState); restoreSavedState(savedInstanceState);
} }

View File

@@ -74,6 +74,7 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.android.controller.ActivityController; import org.robolectric.android.controller.ActivityController;
import org.robolectric.shadows.ShadowToast;
import org.robolectric.util.ReflectionHelpers; import org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList; import java.util.ArrayList;
@@ -113,6 +114,16 @@ public class FingerprintEnrollEnrollingTest {
FakeFeatureFactory.setupForTest(); 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 @Test
public void fingerprintUdfpsEnrollSuccessProgress_shouldNotVibrate() { public void fingerprintUdfpsEnrollSuccessProgress_shouldNotVibrate() {
initializeActivityFor(TYPE_UDFPS_OPTICAL); initializeActivityFor(TYPE_UDFPS_OPTICAL);
@@ -438,7 +449,7 @@ public class FingerprintEnrollEnrollingTest {
assertThat(appliedThemes.contains("SetupWizardPartnerResource")).isTrue(); assertThat(appliedThemes.contains("SetupWizardPartnerResource")).isTrue();
} }
private void initializeActivityFor(int sensorType) { private void initializeActivityWithoutCreate(int sensorType) {
final List<ComponentInfoInternal> componentInfo = new ArrayList<>(); final List<ComponentInfoInternal> componentInfo = new ArrayList<>();
final FingerprintSensorPropertiesInternal prop = final FingerprintSensorPropertiesInternal prop =
new FingerprintSensorPropertiesInternal( new FingerprintSensorPropertiesInternal(
@@ -449,8 +460,6 @@ public class FingerprintEnrollEnrollingTest {
sensorType, sensorType,
true /* resetLockoutRequiresHardwareAuthToken */); true /* resetLockoutRequiresHardwareAuthToken */);
final ArrayList<FingerprintSensorPropertiesInternal> props = new ArrayList<>(); final ArrayList<FingerprintSensorPropertiesInternal> props = new ArrayList<>();
final Bundle savedInstanceState = new Bundle();
savedInstanceState.putInt(KEY_STATE_PREVIOUS_ROTATION, Surface.ROTATION_90);
props.add(prop); props.add(prop);
when(mFingerprintManager.getSensorPropertiesInternal()).thenReturn(props); when(mFingerprintManager.getSensorPropertiesInternal()).thenReturn(props);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
@@ -483,11 +492,21 @@ public class FingerprintEnrollEnrollingTest {
} }
doReturn(true).when(mSidecar).isEnrolling(); 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); ActivityController.of(mActivity).create(savedInstanceState);
mTheme = mActivity.getTheme(); mTheme = mActivity.getTheme();
} }
private void initializeActivityFor(int sensorType) {
initializeActivityWithoutCreate(sensorType);
createActivity();
}
private EnrollmentCallback verifyAndCaptureEnrollmentCallback() { private EnrollmentCallback verifyAndCaptureEnrollmentCallback() {
ArgumentCaptor<EnrollmentCallback> callbackCaptor = ArgumentCaptor<EnrollmentCallback> callbackCaptor =
ArgumentCaptor.forClass(EnrollmentCallback.class); ArgumentCaptor.forClass(EnrollmentCallback.class);