Merge "Provide fingerprint options for SET_NEW_PASSWORD intent"
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.password;
|
||||
|
||||
import static android.content.pm.PackageManager.FEATURE_FINGERPRINT;
|
||||
import static com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment.HIDE_DISABLED_PREFS;
|
||||
import static com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment.MINIMUM_QUALITY_KEY;
|
||||
import static com.android.settings.ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE;
|
||||
import static com.android.settings.ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT;
|
||||
import static com.android.settings.ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.android.settings.TestConfig;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.annotation.Config;
|
||||
|
||||
/**
|
||||
* Tests for {@link SetNewPasswordController}.
|
||||
*/
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
||||
public final class SetNewPasswordControllerTest {
|
||||
private static final int CURRENT_UID = 101;
|
||||
private static final long FINGERPRINT_CHALLENGE = -9876512313131L;
|
||||
|
||||
@Mock PackageManager mPackageManager;
|
||||
@Mock FingerprintManager mFingerprintManager;
|
||||
@Mock DevicePolicyManager mDevicePolicyManager;
|
||||
|
||||
@Mock private SetNewPasswordController.Ui mUi;
|
||||
private SetNewPasswordController mSetNewPasswordController;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mSetNewPasswordController = new SetNewPasswordController(
|
||||
CURRENT_UID, mPackageManager, mFingerprintManager, mDevicePolicyManager, mUi);
|
||||
|
||||
when(mFingerprintManager.preEnroll()).thenReturn(FINGERPRINT_CHALLENGE);
|
||||
when(mPackageManager.hasSystemFeature(eq(FEATURE_FINGERPRINT))).thenReturn(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void launchChooseLockWithFingerprint() {
|
||||
// GIVEN the device supports fingerprint.
|
||||
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
|
||||
// GIVEN there are no enrolled fingerprints.
|
||||
when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(false);
|
||||
// GIVEN DPC does not disallow fingerprint for keyguard usage.
|
||||
when(mDevicePolicyManager.getKeyguardDisabledFeatures(any(ComponentName.class)))
|
||||
.thenReturn(0);
|
||||
|
||||
// WHEN the controller dispatches a set new password intent.
|
||||
mSetNewPasswordController.dispatchSetNewPasswordIntent();
|
||||
|
||||
// THEN the choose lock activity is launched with fingerprint extras.
|
||||
ArgumentCaptor<Bundle> bundleArgumentCaptor = ArgumentCaptor.forClass(Bundle.class);
|
||||
verify(mUi).launchChooseLock(bundleArgumentCaptor.capture());
|
||||
// THEN the extras have all values for fingerprint setup.
|
||||
compareFingerprintExtras(bundleArgumentCaptor.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void launchChooseLockWithoutFingerprint_noFingerprintFeature() {
|
||||
// GIVEN the device does NOT support fingerprint feature.
|
||||
when(mPackageManager.hasSystemFeature(eq(FEATURE_FINGERPRINT))).thenReturn(false);
|
||||
|
||||
// WHEN the controller dispatches a set new password intent.
|
||||
mSetNewPasswordController.dispatchSetNewPasswordIntent();
|
||||
|
||||
// THEN the choose lock activity is launched without fingerprint extras.
|
||||
verify(mUi).launchChooseLock(null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void launchChooseLockWithoutFingerprint_noFingerprintSensor() {
|
||||
// GIVEN the device does NOT support fingerprint.
|
||||
when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
|
||||
// GIVEN there are no enrolled fingerprints.
|
||||
when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(false);
|
||||
// GIVEN DPC does not disallow fingerprint for keyguard usage.
|
||||
when(mDevicePolicyManager.getKeyguardDisabledFeatures(any(ComponentName.class)))
|
||||
.thenReturn(0);
|
||||
|
||||
// WHEN the controller dispatches a set new password intent.
|
||||
mSetNewPasswordController.dispatchSetNewPasswordIntent();
|
||||
|
||||
// THEN the choose lock activity is launched without fingerprint extras.
|
||||
verify(mUi).launchChooseLock(null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void launchChooseLockWithoutFingerprint_hasFingerprintEnrolled() {
|
||||
// GIVEN the device supports fingerprint.
|
||||
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
|
||||
// GIVEN there are no enrolled fingerprints.
|
||||
when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(true);
|
||||
// GIVEN DPC does not disallow fingerprint for keyguard usage.
|
||||
when(mDevicePolicyManager.getKeyguardDisabledFeatures(any(ComponentName.class)))
|
||||
.thenReturn(0);
|
||||
|
||||
// WHEN the controller dispatches a set new password intent.
|
||||
mSetNewPasswordController.dispatchSetNewPasswordIntent();
|
||||
|
||||
// THEN the choose lock activity is launched without fingerprint extras.
|
||||
verify(mUi).launchChooseLock(null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void launchChooseLockWithoutFingerprint_deviceAdminDisallowFingerprintForKeyguard() {
|
||||
// GIVEN the device supports fingerprint.
|
||||
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
|
||||
// GIVEN there is an enrolled fingerprint.
|
||||
when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(true);
|
||||
// GIVEN DPC disallows fingerprint for keyguard usage.
|
||||
when(mDevicePolicyManager.getKeyguardDisabledFeatures(any(ComponentName.class)))
|
||||
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
|
||||
|
||||
// WHEN the controller dispatches a set new password intent.
|
||||
mSetNewPasswordController.dispatchSetNewPasswordIntent();
|
||||
|
||||
// THEN the choose lock activity is launched without fingerprint extras.
|
||||
verify(mUi).launchChooseLock(null);
|
||||
}
|
||||
|
||||
private void compareFingerprintExtras(Bundle actualBundle) {
|
||||
assertEquals(
|
||||
"Password quality must be something in order to config fingerprint.",
|
||||
DevicePolicyManager.PASSWORD_QUALITY_SOMETHING,
|
||||
actualBundle.getInt(MINIMUM_QUALITY_KEY));
|
||||
assertTrue(
|
||||
"All disabled preference should be removed.",
|
||||
actualBundle.getBoolean(HIDE_DISABLED_PREFS));
|
||||
assertTrue(
|
||||
"There must be a fingerprint challenge.",
|
||||
actualBundle.getBoolean(EXTRA_KEY_HAS_CHALLENGE));
|
||||
assertEquals(
|
||||
"The fingerprint challenge must come from the FingerprintManager",
|
||||
FINGERPRINT_CHALLENGE,
|
||||
actualBundle.getLong(EXTRA_KEY_CHALLENGE));
|
||||
assertTrue(
|
||||
"The request must be a fingerprint set up request.",
|
||||
actualBundle.getBoolean(EXTRA_KEY_FOR_FINGERPRINT));
|
||||
assertEquals(
|
||||
"User id must be equaled to the input one.",
|
||||
CURRENT_UID,
|
||||
actualBundle.getInt(Intent.EXTRA_USER_ID));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user