• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.biometrics;
18 
19 import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE;
20 import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT;
21 
22 import static com.google.common.truth.Truth.assertThat;
23 
24 import android.content.DialogInterface;
25 import android.hardware.biometrics.BiometricAuthenticator;
26 import android.os.Looper;
27 import android.widget.Button;
28 
29 import androidx.appcompat.app.AlertDialog;
30 import androidx.fragment.app.FragmentActivity;
31 
32 import com.android.settings.R;
33 import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
34 
35 import org.junit.After;
36 import org.junit.Before;
37 import org.junit.Rule;
38 import org.junit.Test;
39 import org.junit.runner.RunWith;
40 import org.mockito.junit.MockitoJUnit;
41 import org.mockito.junit.MockitoRule;
42 import org.robolectric.Robolectric;
43 import org.robolectric.RobolectricTestRunner;
44 import org.robolectric.Shadows;
45 import org.robolectric.annotation.Config;
46 
47 @RunWith(RobolectricTestRunner.class)
48 @Config(shadows = ShadowAlertDialogCompat.class)
49 public class BiometricsSplitScreenDialogTest {
50     @Rule
51     public final MockitoRule mocks = MockitoJUnit.rule();
52     private FragmentActivity mActivity;
53     private BiometricsSplitScreenDialog mFragment;
54 
55     @Before
setUp()56     public void setUp() {
57         ShadowAlertDialogCompat.reset();
58         mActivity = Robolectric.buildActivity(FragmentActivity.class).setup().get();
59     }
60 
61     @After
tearDown()62     public void tearDown() {
63         ShadowAlertDialogCompat.reset();
64     }
65 
66     @Test
testTexts_face()67     public void testTexts_face() {
68         final AlertDialog dialog = setUpFragment(TYPE_FACE, false /*destroyActivity*/);
69 
70         final ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(dialog);
71         assertThat(shadowAlertDialog.getTitle().toString()).isEqualTo(
72                 mActivity.getString(R.string.biometric_settings_add_face_in_split_mode_title));
73         assertThat(shadowAlertDialog.getMessage().toString()).isEqualTo(
74                 mActivity.getString(R.string.biometric_settings_add_face_in_split_mode_message));
75     }
76 
77     @Test
testTexts_fingerprint()78     public void testTexts_fingerprint() {
79         final AlertDialog dialog = setUpFragment(TYPE_FINGERPRINT, false /*destroyActivity*/);
80 
81         final ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(dialog);
82         assertThat(shadowAlertDialog.getTitle().toString()).isEqualTo(
83                 mActivity.getString(
84                         R.string.biometric_settings_add_fingerprint_in_split_mode_title));
85         assertThat(shadowAlertDialog.getMessage().toString()).isEqualTo(
86                 mActivity.getString(
87                         R.string.biometric_settings_add_fingerprint_in_split_mode_message));
88     }
89 
90     @Test
testButton_destroyActivity()91     public void testButton_destroyActivity() {
92         final AlertDialog dialog = setUpFragment(TYPE_FACE, true /*destroyActivity*/);
93         final Button button = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
94 
95         assertThat(button).isNotNull();
96         button.performClick();
97         Shadows.shadowOf(Looper.getMainLooper()).idle();
98 
99         assertThat(dialog.isShowing()).isFalse();
100         assertThat(mActivity.isFinishing()).isTrue();
101     }
102 
103     @Test
testButton_notDestroyActivity()104     public void testButton_notDestroyActivity() {
105         final AlertDialog dialog = setUpFragment(TYPE_FACE, false /*destroyActivity*/);
106         final Button button = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
107 
108         assertThat(button).isNotNull();
109         button.performClick();
110         Shadows.shadowOf(Looper.getMainLooper()).idle();
111 
112         assertThat(dialog.isShowing()).isFalse();
113         assertThat(mActivity.isFinishing()).isFalse();
114     }
115 
setUpFragment( @iometricAuthenticator.Modality int biometricsModality, boolean destroyActivity)116     private AlertDialog setUpFragment(
117             @BiometricAuthenticator.Modality int biometricsModality, boolean destroyActivity) {
118         mFragment = BiometricsSplitScreenDialog.newInstance(biometricsModality, destroyActivity);
119         mFragment.show(mActivity.getSupportFragmentManager(), null);
120         Shadows.shadowOf(Looper.getMainLooper()).idle();
121 
122         final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
123         assertThat(dialog).isNotNull();
124         return dialog;
125     }
126 }
127