Files
app_Settings/tests/unit/src/com/android/settings/ChooseLockSettingsHelperTest.java
Victor Chang 5e0a46bff6 Fix Continous loop in unifed screenlock when trying to Trust a CA cert
Cause: with unified screenlock, ConfirmDeviceCredentialActivity didn't
forward result with FLAG_ACTIVITY_FORWARD_RESULT

Also, fixed that ConfirmDeviceCredentialActivity didn't allow fingerprint
authenication in unified screenlock after keystore unlocked.

In ChooseLockSettingsHelper, add one new util function to allow
extra option to set returnCredentials to false while external to true.

Set StrongAuth to "not required" when it has been successfully unlocked.

Test:
1. PO Unified Screenlock/Work Challenge x fingerprint -> ok to trust cert
   (Also, no credential is returned in intent)
2. WorkMode off -> Reboot -> turn on Work mode
   -> no fingerprint option, PIN unlock successful to turn work mode on

Bug: 28752364
Change-Id: I6dc8865e8f005545f8577d7731afb4495647062b
2016-05-20 19:10:33 +01:00

158 lines
6.7 KiB
Java

package com.android.settings;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.UserHandle;
import android.os.UserManager;
import android.test.AndroidTestCase;
import com.android.internal.widget.LockPatternUtils;
import org.mockito.ArgumentCaptor;
import java.util.List;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class ChooseLockSettingsHelperTest extends AndroidTestCase {
private static final String SYSTEM_PROPERTY_DEXMAKER_DEXCACHE = "dexmaker.dexcache";
@Override
protected void setUp() throws Exception {
super.setUp();
System.setProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE, getContext().getCacheDir().getPath());
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
System.clearProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE);
}
public void testlaunchConfirmationActivityWithExternalAndChallenge() {
final int userId = UserHandle.myUserId();
final int request = 100;
final long challenge = 10000L;
{
// Test external == true
final boolean external = true;
final Activity mockActivity = getMockActivity();
ChooseLockSettingsHelper helper = getChooseLockSettingsHelper(mockActivity);
helper.launchConfirmationActivityWithExternalAndChallenge(
request, // request
"title",
"header",
"description",
external,
challenge,
userId
);
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mockActivity, times(1)).startActivity(intentCaptor.capture());
Intent capturedIntent = getResultIntent(intentCaptor);
assertEquals(new ComponentName("com.android.settings",
ConfirmLockPattern.InternalActivity.class.getName()),
capturedIntent.getComponent());
assertFalse(capturedIntent.getBooleanExtra(
ChooseLockSettingsHelper.EXTRA_KEY_RETURN_CREDENTIALS, false));
assertTrue(capturedIntent.getBooleanExtra(
ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false));
assertEquals(challenge, capturedIntent.getLongExtra(
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L));
assertEquals(external,
(capturedIntent.getFlags() & Intent.FLAG_ACTIVITY_FORWARD_RESULT) != 0);
assertEquals(external, capturedIntent.getBooleanExtra(
ConfirmDeviceCredentialBaseFragment.ALLOW_FP_AUTHENTICATION, false));
assertEquals(external, capturedIntent.getBooleanExtra(
ConfirmDeviceCredentialBaseFragment.DARK_THEME, false));
assertEquals(external, capturedIntent.getBooleanExtra(
ConfirmDeviceCredentialBaseFragment.SHOW_CANCEL_BUTTON, false));
assertEquals(external, capturedIntent.getBooleanExtra(
ConfirmDeviceCredentialBaseFragment.SHOW_WHEN_LOCKED, false));
}
{
// Test external == false
final boolean external = false;
final Activity mockActivity = getMockActivity();
ChooseLockSettingsHelper helper = getChooseLockSettingsHelper(mockActivity);
helper.launchConfirmationActivityWithExternalAndChallenge(
request, // request
"title",
"header",
"description",
external,
challenge,
userId
);
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mockActivity, times(1)).startActivityForResult(intentCaptor.capture(),
eq(request));
Intent capturedIntent = getResultIntent(intentCaptor);
assertEquals(new ComponentName("com.android.settings",
ConfirmLockPattern.InternalActivity.class.getName()),
capturedIntent.getComponent());
assertFalse(capturedIntent.getBooleanExtra(
ChooseLockSettingsHelper.EXTRA_KEY_RETURN_CREDENTIALS, false));
assertTrue(capturedIntent.getBooleanExtra(
ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false));
assertEquals(challenge, capturedIntent.getLongExtra(
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L));
assertEquals(external,
(capturedIntent.getFlags() & Intent.FLAG_ACTIVITY_FORWARD_RESULT) != 0);
assertEquals(external, capturedIntent.getBooleanExtra(
ConfirmDeviceCredentialBaseFragment.ALLOW_FP_AUTHENTICATION, false));
assertEquals(external, capturedIntent.getBooleanExtra(
ConfirmDeviceCredentialBaseFragment.DARK_THEME, false));
assertEquals(external, capturedIntent.getBooleanExtra(
ConfirmDeviceCredentialBaseFragment.SHOW_CANCEL_BUTTON, false));
assertEquals(external, capturedIntent.getBooleanExtra(
ConfirmDeviceCredentialBaseFragment.SHOW_WHEN_LOCKED, false));
}
}
private ChooseLockSettingsHelper getChooseLockSettingsHelper(Activity mockActivity) {
LockPatternUtils mockLockPatternUtils = mock(LockPatternUtils.class);
when(mockLockPatternUtils.getKeyguardStoredPasswordQuality(anyInt()))
.thenReturn(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(mockActivity);
helper.mLockPatternUtils = mockLockPatternUtils;
return helper;
}
private Activity getMockActivity() {
Activity mockActivity = mock(Activity.class);
when(mockActivity.getSystemService(Context.USER_SERVICE))
.thenReturn(getContext().getSystemService(UserManager.class));
when(mockActivity.getContentResolver()).thenReturn(getContext().getContentResolver());
when(mockActivity.getIntent()).thenReturn(new Intent());
return mockActivity;
}
private static Intent getResultIntent(ArgumentCaptor<Intent> intentCaptor) {
List<Intent> capturedIntents = intentCaptor.getAllValues();
assertEquals(1, capturedIntents.size());
return capturedIntents.get(0);
}
}