• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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.password;
18 
19 import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
20 
21 import static com.android.settings.password.ChooseLockPattern.ChooseLockPatternFragment.KEY_UI_STAGE;
22 
23 import static com.google.common.truth.Truth.assertThat;
24 import static com.google.common.truth.Truth.assertWithMessage;
25 
26 import static org.robolectric.RuntimeEnvironment.application;
27 
28 import android.content.Intent;
29 import android.os.Bundle;
30 import android.os.UserHandle;
31 import android.view.View;
32 
33 import com.android.internal.widget.LockPatternUtils;
34 import com.android.internal.widget.LockscreenCredential;
35 import com.android.settings.R;
36 import com.android.settings.password.ChooseLockPattern.ChooseLockPatternFragment;
37 import com.android.settings.password.ChooseLockPattern.IntentBuilder;
38 import com.android.settings.testutils.shadow.ShadowUtils;
39 
40 import com.google.android.setupdesign.GlifLayout;
41 
42 import org.junit.Ignore;
43 import org.junit.Test;
44 import org.junit.runner.RunWith;
45 import org.robolectric.Robolectric;
46 import org.robolectric.RobolectricTestRunner;
47 import org.robolectric.annotation.Config;
48 
49 @Ignore
50 @RunWith(RobolectricTestRunner.class)
51 @Config(shadows = ShadowUtils.class)
52 public class ChooseLockPatternTest {
53 
54     @Test
activityCreationTest()55     public void activityCreationTest() {
56         // Basic test for activity created without crashing
57         Robolectric.buildActivity(ChooseLockPattern.class, new IntentBuilder(application).build())
58                 .setup().get();
59     }
60 
61     @Test
intentBuilder_setPattern_shouldAddExtras()62     public void intentBuilder_setPattern_shouldAddExtras() {
63         Intent intent = new IntentBuilder(application)
64                 .setPattern(createPattern("1234"))
65                 .setUserId(123)
66                 .build();
67 
68         assertWithMessage("EXTRA_KEY_FORCE_VERIFY").that(intent
69                 .getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_FORCE_VERIFY, false))
70                 .isFalse();
71         assertWithMessage("EXTRA_KEY_PASSWORD").that((LockscreenCredential) intent
72                 .getParcelableExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD))
73                 .isEqualTo(createPattern("1234"));
74         assertWithMessage("EXTRA_USER_ID").that(intent.getIntExtra(Intent.EXTRA_USER_ID, 0))
75                 .isEqualTo(123);
76     }
77 
78     @Test
intentBuilder_setRequestGatekeeperPassword_shouldAddExtras()79     public void intentBuilder_setRequestGatekeeperPassword_shouldAddExtras() {
80         Intent intent = new IntentBuilder(application)
81                 .setRequestGatekeeperPasswordHandle(true)
82                 .setUserId(123)
83                 .build();
84 
85         assertWithMessage("EXTRA_KEY_REQUEST_GK_PW").that(intent
86                 .getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE, false))
87                 .isTrue();
88         assertWithMessage("EXTRA_USER_ID")
89                 .that(intent.getIntExtra(Intent.EXTRA_USER_ID, 0))
90                 .isEqualTo(123);
91     }
92 
93     @Test
intentBuilder_setProfileToUnify_shouldAddExtras()94     public void intentBuilder_setProfileToUnify_shouldAddExtras() {
95         Intent intent = new IntentBuilder(application)
96                 .setProfileToUnify(23, LockscreenCredential.createNone())
97                 .build();
98 
99         assertWithMessage("EXTRA_KEY_UNIFICATION_PROFILE_ID").that(intent
100                 .getIntExtra(ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_ID, 0))
101                 .isEqualTo(23);
102         assertWithMessage("EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL").that(
103                 (LockscreenCredential) intent.getParcelableExtra(
104                         ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL))
105                 .isNotNull();
106     }
107 
108     @Config(qualifiers = "sw300dp")
109     @Test
smallScreens_shouldHideIcon()110     public void smallScreens_shouldHideIcon() {
111         ChooseLockPattern activity = createActivity(true);
112         ChooseLockPatternFragment fragment = (ChooseLockPatternFragment)
113                 activity.getSupportFragmentManager().findFragmentById(R.id.main_content);
114 
115         View iconView = fragment.getView().findViewById(R.id.sud_layout_icon);
116         assertThat(iconView.getVisibility()).isEqualTo(View.GONE);
117     }
118 
119     @Test
activity_shouldHaveSecureFlag()120     public void activity_shouldHaveSecureFlag() {
121         final ChooseLockPattern activity = Robolectric.buildActivity(
122                 ChooseLockPattern.class, new IntentBuilder(application).build()).setup().get();
123         final int flags = activity.getWindow().getAttributes().flags;
124         assertThat(flags & FLAG_SECURE).isEqualTo(FLAG_SECURE);
125     }
126 
127     @Test
headerText_stageConfirmWrong()128     public void headerText_stageConfirmWrong() {
129         ChooseLockPattern activity = createActivity(true);
130         ChooseLockPatternFragment fragment = (ChooseLockPatternFragment)
131                 activity.getSupportFragmentManager().findFragmentById(R.id.main_content);
132         final GlifLayout layout = fragment.getView().findViewById(R.id.setup_wizard_layout);
133         Bundle savedInstanceState = new Bundle();
134         savedInstanceState.putInt(KEY_UI_STAGE,
135                 ChooseLockPatternFragment.Stage.ConfirmWrong.ordinal());
136 
137         fragment.onViewCreated(layout, savedInstanceState);
138         assertThat(layout.getHeaderText().toString()).isEqualTo(activity.getResources().getString(
139                 R.string.lockpassword_draw_your_pattern_again_header));
140     }
141 
createActivity(boolean addFingerprintExtra)142     private ChooseLockPattern createActivity(boolean addFingerprintExtra) {
143         return Robolectric.buildActivity(
144                 ChooseLockPattern.class,
145                 new IntentBuilder(application)
146                         .setUserId(UserHandle.myUserId())
147                         .setForFingerprint(addFingerprintExtra)
148                         .build())
149                 .setup().get();
150     }
151 
createPattern(String patternString)152     private LockscreenCredential createPattern(String patternString) {
153         return LockscreenCredential.createPattern(LockPatternUtils.byteArrayToPattern(
154                 patternString.getBytes()));
155     }
156 }
157