blob: 791d38fc4cbdacd698d4609f0760fda3892a13e3 [file] [log] [blame]
/*
* Copyright 2019 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 androidx.biometric;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.res.Resources;
import android.os.Build;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.MediumTest;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@MediumTest
@RunWith(AndroidJUnit4.class)
public class DeviceUtilsTest {
@Mock private Context mContext;
@Mock private Resources mResources;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testShouldUseFingerprintForCrypto() {
final String[] vendors = {"hooli", "pied piper"};
final String[] modelPrefixes = {"foo", "bar"};
when(mContext.getResources()).thenReturn(mResources);
when(mResources.getStringArray(R.array.crypto_fingerprint_fallback_vendors))
.thenReturn(vendors);
when(mResources.getStringArray(R.array.crypto_fingerprint_fallback_prefixes))
.thenReturn(modelPrefixes);
final boolean isApi28 = Build.VERSION.SDK_INT == Build.VERSION_CODES.P;
assertThat(DeviceUtils.shouldUseFingerprintForCrypto(mContext, "hooli", "foobar"))
.isEqualTo(isApi28);
assertThat(DeviceUtils.shouldUseFingerprintForCrypto(mContext, "hooli", "baz"))
.isEqualTo(isApi28);
assertThat(DeviceUtils.shouldUseFingerprintForCrypto(mContext, "hooli.xyz", "foobar"))
.isEqualTo(isApi28);
assertThat(DeviceUtils.shouldUseFingerprintForCrypto(mContext, "hooli.xyz", "baz"))
.isFalse();
assertThat(DeviceUtils.shouldUseFingerprintForCrypto(mContext, "Pied Piper", "bar baz"))
.isEqualTo(isApi28);
assertThat(DeviceUtils.shouldUseFingerprintForCrypto(mContext, "Pied Piper", "qox"))
.isEqualTo(isApi28);
assertThat(DeviceUtils.shouldUseFingerprintForCrypto(mContext, "Aviato", "bar baz"))
.isEqualTo(isApi28);
assertThat(DeviceUtils.shouldUseFingerprintForCrypto(mContext, "Aviato", "qox"))
.isFalse();
}
@Test
public void testShouldHideFingerprintDialog() {
final String[] modelPrefixes = {"foo", "bar"};
when(mContext.getResources()).thenReturn(mResources);
when(mResources.getStringArray(R.array.hide_fingerprint_instantly_prefixes))
.thenReturn(modelPrefixes);
final boolean isApi28 = Build.VERSION.SDK_INT == Build.VERSION_CODES.P;
assertThat(DeviceUtils.shouldHideFingerprintDialog(mContext, "foo")).isEqualTo(isApi28);
assertThat(DeviceUtils.shouldHideFingerprintDialog(mContext, "bar")).isEqualTo(isApi28);
assertThat(DeviceUtils.shouldHideFingerprintDialog(mContext, "foobar")).isEqualTo(isApi28);
assertThat(DeviceUtils.shouldHideFingerprintDialog(mContext, "bar123")).isEqualTo(isApi28);
assertThat(DeviceUtils.shouldHideFingerprintDialog(mContext, "baz")).isFalse();
assertThat(DeviceUtils.shouldHideFingerprintDialog(mContext, "abcxyz")).isFalse();
assertThat(DeviceUtils.shouldHideFingerprintDialog(mContext, "bazfoo")).isFalse();
assertThat(DeviceUtils.shouldHideFingerprintDialog(mContext, "FooBar")).isFalse();
}
@Test
public void testShouldDelayShowingPrompt() {
final String[] modelNames = {"S", "flame", "My phone"};
when(mContext.getResources()).thenReturn(mResources);
when(mResources.getStringArray(R.array.delay_showing_prompt_models)).thenReturn(modelNames);
final boolean isApi29 = Build.VERSION.SDK_INT == Build.VERSION_CODES.Q;
assertThat(DeviceUtils.shouldDelayShowingPrompt(mContext, "S")).isEqualTo(isApi29);
assertThat(DeviceUtils.shouldDelayShowingPrompt(mContext, "flame")).isEqualTo(isApi29);
assertThat(DeviceUtils.shouldDelayShowingPrompt(mContext, "My phone")).isEqualTo(isApi29);
assertThat(DeviceUtils.shouldDelayShowingPrompt(mContext, "s")).isFalse();
assertThat(DeviceUtils.shouldDelayShowingPrompt(mContext, "Y")).isFalse();
assertThat(DeviceUtils.shouldDelayShowingPrompt(mContext, "Flame")).isFalse();
assertThat(DeviceUtils.shouldDelayShowingPrompt(mContext, "coral")).isFalse();
assertThat(DeviceUtils.shouldDelayShowingPrompt(mContext, "My Phone")).isFalse();
assertThat(DeviceUtils.shouldDelayShowingPrompt(mContext, "Myphone")).isFalse();
assertThat(DeviceUtils.shouldDelayShowingPrompt(mContext, "My phone2")).isFalse();
}
@Test
public void testCanAssumeStrongBiometrics() {
final String[] modelNames = {"S", "flame", "My phone"};
when(mContext.getResources()).thenReturn(mResources);
when(mResources.getStringArray(R.array.assume_strong_biometrics_models))
.thenReturn(modelNames);
final boolean isPreApi30 = Build.VERSION.SDK_INT < Build.VERSION_CODES.R;
assertThat(DeviceUtils.canAssumeStrongBiometrics(mContext, "S")).isEqualTo(isPreApi30);
assertThat(DeviceUtils.canAssumeStrongBiometrics(mContext, "flame")).isEqualTo(isPreApi30);
assertThat(DeviceUtils.canAssumeStrongBiometrics(mContext, "My phone"))
.isEqualTo(isPreApi30);
assertThat(DeviceUtils.canAssumeStrongBiometrics(mContext, "s")).isFalse();
assertThat(DeviceUtils.canAssumeStrongBiometrics(mContext, "Y")).isFalse();
assertThat(DeviceUtils.canAssumeStrongBiometrics(mContext, "Flame")).isFalse();
assertThat(DeviceUtils.canAssumeStrongBiometrics(mContext, "coral")).isFalse();
assertThat(DeviceUtils.canAssumeStrongBiometrics(mContext, "My Phone")).isFalse();
assertThat(DeviceUtils.canAssumeStrongBiometrics(mContext, "Myphone")).isFalse();
assertThat(DeviceUtils.canAssumeStrongBiometrics(mContext, "My phone2")).isFalse();
}
}