• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.settings;
2 
3 
4 import android.app.Activity;
5 import android.app.admin.DevicePolicyManager;
6 import android.content.ComponentName;
7 import android.content.Context;
8 import android.content.Intent;
9 import android.os.UserHandle;
10 import android.os.UserManager;
11 import android.test.AndroidTestCase;
12 
13 import com.android.internal.widget.LockPatternUtils;
14 
15 import org.mockito.ArgumentCaptor;
16 
17 import java.util.List;
18 
19 import static org.mockito.Matchers.anyInt;
20 import static org.mockito.Matchers.eq;
21 import static org.mockito.Mockito.mock;
22 import static org.mockito.Mockito.times;
23 import static org.mockito.Mockito.verify;
24 import static org.mockito.Mockito.when;
25 
26 public class ChooseLockSettingsHelperTest extends AndroidTestCase {
27 
28     private static final String SYSTEM_PROPERTY_DEXMAKER_DEXCACHE = "dexmaker.dexcache";
29 
30     @Override
setUp()31     protected void setUp() throws Exception {
32         super.setUp();
33         System.setProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE, getContext().getCacheDir().getPath());
34     }
35 
36     @Override
tearDown()37     protected void tearDown() throws Exception {
38         super.tearDown();
39         System.clearProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE);
40     }
41 
testlaunchConfirmationActivityWithExternalAndChallenge()42     public void testlaunchConfirmationActivityWithExternalAndChallenge() {
43 
44         final int userId = UserHandle.myUserId();
45         final int request = 100;
46         final long challenge = 10000L;
47         {
48             // Test external == true
49             final boolean external = true;
50 
51             final Activity mockActivity = getMockActivity();
52             ChooseLockSettingsHelper helper = getChooseLockSettingsHelper(mockActivity);
53             helper.launchConfirmationActivityWithExternalAndChallenge(
54                     request, // request
55                     "title",
56                     "header",
57                     "description",
58                     external,
59                     challenge,
60                     userId
61             );
62             final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
63             verify(mockActivity, times(1)).startActivity(intentCaptor.capture());
64             Intent capturedIntent = getResultIntent(intentCaptor);
65 
66             assertEquals(new ComponentName("com.android.settings",
67                             ConfirmLockPattern.InternalActivity.class.getName()),
68                     capturedIntent.getComponent());
69             assertFalse(capturedIntent.getBooleanExtra(
70                     ChooseLockSettingsHelper.EXTRA_KEY_RETURN_CREDENTIALS, false));
71             assertTrue(capturedIntent.getBooleanExtra(
72                     ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false));
73             assertEquals(challenge, capturedIntent.getLongExtra(
74                     ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L));
75             assertEquals(external,
76                     (capturedIntent.getFlags() & Intent.FLAG_ACTIVITY_FORWARD_RESULT) != 0);
77             assertEquals(external, capturedIntent.getBooleanExtra(
78                     ConfirmDeviceCredentialBaseFragment.ALLOW_FP_AUTHENTICATION, false));
79             assertEquals(external, capturedIntent.getBooleanExtra(
80                     ConfirmDeviceCredentialBaseFragment.DARK_THEME, false));
81             assertEquals(external, capturedIntent.getBooleanExtra(
82                     ConfirmDeviceCredentialBaseFragment.SHOW_CANCEL_BUTTON, false));
83             assertEquals(external, capturedIntent.getBooleanExtra(
84                     ConfirmDeviceCredentialBaseFragment.SHOW_WHEN_LOCKED, false));
85         }
86 
87         {
88             // Test external == false
89             final boolean external = false;
90 
91             final Activity mockActivity = getMockActivity();
92             ChooseLockSettingsHelper helper = getChooseLockSettingsHelper(mockActivity);
93             helper.launchConfirmationActivityWithExternalAndChallenge(
94                     request, // request
95                     "title",
96                     "header",
97                     "description",
98                     external,
99                     challenge,
100                     userId
101             );
102             final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
103             verify(mockActivity, times(1)).startActivityForResult(intentCaptor.capture(),
104                     eq(request));
105             Intent capturedIntent = getResultIntent(intentCaptor);
106 
107 
108             assertEquals(new ComponentName("com.android.settings",
109                             ConfirmLockPattern.InternalActivity.class.getName()),
110                     capturedIntent.getComponent());
111             assertFalse(capturedIntent.getBooleanExtra(
112                     ChooseLockSettingsHelper.EXTRA_KEY_RETURN_CREDENTIALS, false));
113             assertTrue(capturedIntent.getBooleanExtra(
114                     ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false));
115             assertEquals(challenge, capturedIntent.getLongExtra(
116                     ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L));
117             assertEquals(external,
118                     (capturedIntent.getFlags() & Intent.FLAG_ACTIVITY_FORWARD_RESULT) != 0);
119             assertEquals(external, capturedIntent.getBooleanExtra(
120                     ConfirmDeviceCredentialBaseFragment.ALLOW_FP_AUTHENTICATION, false));
121             assertEquals(external, capturedIntent.getBooleanExtra(
122                     ConfirmDeviceCredentialBaseFragment.DARK_THEME, false));
123             assertEquals(external, capturedIntent.getBooleanExtra(
124                     ConfirmDeviceCredentialBaseFragment.SHOW_CANCEL_BUTTON, false));
125             assertEquals(external, capturedIntent.getBooleanExtra(
126                     ConfirmDeviceCredentialBaseFragment.SHOW_WHEN_LOCKED, false));
127         }
128     }
129 
130 
getChooseLockSettingsHelper(Activity mockActivity)131     private ChooseLockSettingsHelper getChooseLockSettingsHelper(Activity mockActivity) {
132         LockPatternUtils mockLockPatternUtils = mock(LockPatternUtils.class);
133         when(mockLockPatternUtils.getKeyguardStoredPasswordQuality(anyInt()))
134                 .thenReturn(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
135 
136         ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(mockActivity);
137         helper.mLockPatternUtils = mockLockPatternUtils;
138         return helper;
139     }
140 
getMockActivity()141     private Activity getMockActivity() {
142         Activity mockActivity = mock(Activity.class);
143         when(mockActivity.getSystemService(Context.USER_SERVICE))
144                 .thenReturn(getContext().getSystemService(UserManager.class));
145         when(mockActivity.getContentResolver()).thenReturn(getContext().getContentResolver());
146         when(mockActivity.getIntent()).thenReturn(new Intent());
147         return mockActivity;
148     }
149 
150 
151 
getResultIntent(ArgumentCaptor<Intent> intentCaptor)152     private static Intent getResultIntent(ArgumentCaptor<Intent> intentCaptor) {
153         List<Intent> capturedIntents = intentCaptor.getAllValues();
154         assertEquals(1, capturedIntents.size());
155         return capturedIntents.get(0);
156     }
157 }
158