Revert "Implement SFPS “require screen on to auth”"
Revert submission 20298870-cherrypick-require-screen-on-to-auth-bx2kw8azs3 Reason for revert: broken KeyguardUpdateMonitorTest Bug: 256762678 Reverted Changes: Id58879642:Implement SFPS “require screen on to auth” Ibc55dfa66:Implement SFPS “require screen on to auth” Change-Id: I772f6a1b3fa366bc10b200f365df79417eceb8ef
This commit is contained in:
committed by
Android (Google) Code Review
parent
0f0f35b2dd
commit
e62d37bad6
@@ -55,20 +55,16 @@
|
|||||||
android:src="@drawable/sfps_enroll_finish" />
|
android:src="@drawable/sfps_enroll_finish" />
|
||||||
</com.google.android.setupdesign.view.FillContentLayout>
|
</com.google.android.setupdesign.view.FillContentLayout>
|
||||||
|
|
||||||
<Space
|
<!-- Added to align elements with fingerprint_enroll_enrolling_base -->
|
||||||
android:layout_width="0dp"
|
<TextView
|
||||||
android:layout_height="0dp"
|
style="@style/TextAppearance.ErrorText"
|
||||||
android:layout_weight="1" />
|
|
||||||
|
|
||||||
<com.android.settings.biometrics.fingerprint.FingerprintRequireScreenOnToAuthToggle
|
|
||||||
style="@style/SudSwitchStyle"
|
|
||||||
android:id="@+id/require_screen_on_to_auth_toggle"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_horizontal|bottom" />
|
android:layout_gravity="center_horizontal|bottom"
|
||||||
|
android:visibility="invisible" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</com.google.android.setupdesign.GlifLayout>
|
</com.google.android.setupdesign.GlifLayout>
|
||||||
|
@@ -1,79 +0,0 @@
|
|||||||
<!--
|
|
||||||
~ Copyright (C) 2022 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="?attr/fingerprint_layout_theme">
|
|
||||||
|
|
||||||
<!-- Top divider -->
|
|
||||||
<View
|
|
||||||
android:layout_alignParentTop="true"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:background="?android:attr/listDivider" />
|
|
||||||
|
|
||||||
<!-- Title -->
|
|
||||||
<com.google.android.setupdesign.view.RichTextView
|
|
||||||
android:id="@+id/title"
|
|
||||||
android:paddingHorizontal="8dp"
|
|
||||||
android:paddingTop="8dp"
|
|
||||||
android:paddingBottom="4dp"
|
|
||||||
android:gravity="start"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:layout_toStartOf="@+id/toggle"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/security_settings_require_screen_on_to_auth_title"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
android:textSize="@dimen/sud_description_text_size"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- Subtitle -->
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/subtitle"
|
|
||||||
android:paddingHorizontal="8dp"
|
|
||||||
android:paddingBottom="8dp"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:layout_toStartOf="@+id/toggle"
|
|
||||||
android:layout_below="@+id/title"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/security_settings_require_screen_on_to_auth_description"
|
|
||||||
android:textColor="?android:attr/textColorSecondary"/>
|
|
||||||
|
|
||||||
<!-- Vertical divider -->
|
|
||||||
<View
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:layout_alignTop="@+id/toggle"
|
|
||||||
android:layout_alignBottom="@+id/toggle"
|
|
||||||
android:layout_toStartOf="@+id/toggle"
|
|
||||||
android:layout_width="1dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?android:attr/listDivider" />
|
|
||||||
|
|
||||||
<!-- Toggle -->
|
|
||||||
<Switch
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:id="@+id/toggle"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:checked="false"/>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
@@ -783,8 +783,6 @@
|
|||||||
<!-- Note: Update FingerprintEnrollParentalConsent.CONSENT_STRING_RESOURCES when any _consent_ strings are added or removed. -->
|
<!-- Note: Update FingerprintEnrollParentalConsent.CONSENT_STRING_RESOURCES when any _consent_ strings are added or removed. -->
|
||||||
<!-- Title shown for menu item that launches fingerprint settings or enrollment [CHAR LIMIT=22] -->
|
<!-- Title shown for menu item that launches fingerprint settings or enrollment [CHAR LIMIT=22] -->
|
||||||
<string name="security_settings_fingerprint_preference_title">Fingerprint</string>
|
<string name="security_settings_fingerprint_preference_title">Fingerprint</string>
|
||||||
<!-- Title for a category shown for the fingerprint settings page, followed by items that the user can toggle on/off to require/disable. [CHAR LIMIT=50] -->
|
|
||||||
<string name="security_settings_fingerprint_settings_preferences_category">When using Fingerprint Unlock</string>
|
|
||||||
<!-- Title shown for work menu item that launches fingerprint settings or enrollment [CHAR LIMIT=22] -->
|
<!-- Title shown for work menu item that launches fingerprint settings or enrollment [CHAR LIMIT=22] -->
|
||||||
<string name="security_settings_work_fingerprint_preference_title">Fingerprint for work</string>
|
<string name="security_settings_work_fingerprint_preference_title">Fingerprint for work</string>
|
||||||
<!-- Preference to add another fingerprint -->
|
<!-- Preference to add another fingerprint -->
|
||||||
@@ -1038,12 +1036,6 @@
|
|||||||
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="device">Now you can use your fingerprint to unlock your device or verify it\u2019s you, like when you sign in to apps</string>
|
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="device">Now you can use your fingerprint to unlock your device or verify it\u2019s you, like when you sign in to apps</string>
|
||||||
<!-- Message shown in fingerprint enrollment dialog once enrollment is completed (default) [CHAR LIMIT=NONE] -->
|
<!-- Message shown in fingerprint enrollment dialog once enrollment is completed (default) [CHAR LIMIT=NONE] -->
|
||||||
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="default">Now you can use your fingerprint to unlock your phone or verify it\u2019s you, like when you sign in to apps</string>
|
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="default">Now you can use your fingerprint to unlock your phone or verify it\u2019s you, like when you sign in to apps</string>
|
||||||
<!-- Title for require screen on to auth toggle shown in fingerprint enrollment dialog once enrollment is completed. [CHAR LIMIT=NONE] -->
|
|
||||||
<string name="security_settings_require_screen_on_to_auth_title">Unlock only when screen is on</string>
|
|
||||||
<!-- Description for require screen on to auth toggle shown in fingerprint enrollment dialog once enrollment is completed. [CHAR LIMIT=NONE] -->
|
|
||||||
<string name="security_settings_require_screen_on_to_auth_description">The screen must be on before you can unlock with your fingerprint. This makes accidental unlocking less likely.</string>
|
|
||||||
<!-- Description for require screen on to auth toggle shown in fingerprint enrollment dialog once enrollment is completed. [CHAR LIMIT=NONE] -->
|
|
||||||
<string name="security_settings_require_screen_on_to_auth_keywords">Screen, Unlock</string>
|
|
||||||
<!-- Button text to skip enrollment of fingerprint [CHAR LIMIT=40] -->
|
<!-- Button text to skip enrollment of fingerprint [CHAR LIMIT=40] -->
|
||||||
<string name="security_settings_fingerprint_enroll_enrolling_skip">Do it later</string>
|
<string name="security_settings_fingerprint_enroll_enrolling_skip">Do it later</string>
|
||||||
<!-- Accessibility message for fingerprint enrollment asking the user to place the tip of their finger on the fingerprint sensor [CHAR LIMIT=NONE] -->
|
<!-- Accessibility message for fingerprint enrollment asking the user to place the tip of their finger on the fingerprint sensor [CHAR LIMIT=NONE] -->
|
||||||
|
@@ -16,20 +16,5 @@
|
|||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
android:title="@string/security_settings_fingerprint_preference_title"/>
|
||||||
android:title="@string/security_settings_fingerprint_preference_title">
|
|
||||||
|
|
||||||
<PreferenceCategory
|
|
||||||
android:key="security_settings_fingerprint_unlock_category"
|
|
||||||
android:title="@string/security_settings_fingerprint_settings_preferences_category"
|
|
||||||
settings:controller="com.android.settings.biometrics.fingerprint.FingerprintUnlockCategoryPreferenceController">
|
|
||||||
|
|
||||||
<com.android.settingslib.RestrictedSwitchPreference
|
|
||||||
android:key="security_settings_require_screen_on_to_auth"
|
|
||||||
android:title="@string/security_settings_require_screen_on_to_auth_title"
|
|
||||||
android:summary="@string/security_settings_require_screen_on_to_auth_description"
|
|
||||||
settings:keywords="@string/security_settings_require_screen_on_to_auth_keywords"
|
|
||||||
settings:controller="com.android.settings.biometrics.fingerprint.FingerprintSettingsRequireScreenOnToAuthPreferenceController" />
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
|
||||||
|
@@ -25,7 +25,6 @@ import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.CompoundButton;
|
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
@@ -45,24 +44,16 @@ import java.util.List;
|
|||||||
public class FingerprintEnrollFinish extends BiometricEnrollBase {
|
public class FingerprintEnrollFinish extends BiometricEnrollBase {
|
||||||
|
|
||||||
private static final String TAG = "FingerprintEnrollFinish";
|
private static final String TAG = "FingerprintEnrollFinish";
|
||||||
private static final String KEY_REQUIRE_SCREEN_ON_TO_AUTH = "require_screen_on_to_auth_toggle";
|
|
||||||
private static final String ACTION_FINGERPRINT_SETTINGS =
|
private static final String ACTION_FINGERPRINT_SETTINGS =
|
||||||
"android.settings.FINGERPRINT_SETTINGS";
|
"android.settings.FINGERPRINT_SETTINGS";
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final String FINGERPRINT_SUGGESTION_ACTIVITY =
|
static final String FINGERPRINT_SUGGESTION_ACTIVITY =
|
||||||
"com.android.settings.SetupFingerprintSuggestionActivity";
|
"com.android.settings.SetupFingerprintSuggestionActivity";
|
||||||
|
|
||||||
private FingerprintManager mFingerprintManager;
|
private FingerprintManager mFingerprintManager;
|
||||||
|
|
||||||
private FingerprintSettingsRequireScreenOnToAuthPreferenceController
|
|
||||||
mRequireScreenOnToAuthPreferenceController;
|
|
||||||
private FingerprintRequireScreenOnToAuthToggle mRequireScreenOnToAuthToggle;
|
|
||||||
private boolean mCanAssumeSfps;
|
private boolean mCanAssumeSfps;
|
||||||
|
|
||||||
private boolean mIsAddAnotherOrFinish;
|
private boolean mIsAddAnotherOrFinish;
|
||||||
|
|
||||||
private CompoundButton.OnCheckedChangeListener mRequireScreenOnToAuthToggleListener;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@@ -72,11 +63,6 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
|
|||||||
mCanAssumeSfps = props != null && props.size() == 1 && props.get(0).isAnySidefpsType();
|
mCanAssumeSfps = props != null && props.size() == 1 && props.get(0).isAnySidefpsType();
|
||||||
if (mCanAssumeSfps) {
|
if (mCanAssumeSfps) {
|
||||||
setContentView(R.layout.sfps_enroll_finish);
|
setContentView(R.layout.sfps_enroll_finish);
|
||||||
mRequireScreenOnToAuthPreferenceController =
|
|
||||||
new FingerprintSettingsRequireScreenOnToAuthPreferenceController(
|
|
||||||
getApplicationContext(),
|
|
||||||
KEY_REQUIRE_SCREEN_ON_TO_AUTH
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
setContentView(R.layout.fingerprint_enroll_finish);
|
setContentView(R.layout.fingerprint_enroll_finish);
|
||||||
}
|
}
|
||||||
@@ -104,20 +90,6 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
|
|||||||
.setTheme(R.style.SudGlifButton_Primary)
|
.setTheme(R.style.SudGlifButton_Primary)
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (mCanAssumeSfps) {
|
|
||||||
mRequireScreenOnToAuthToggleListener =
|
|
||||||
(buttonView, isChecked) -> {
|
|
||||||
mRequireScreenOnToAuthPreferenceController.setChecked(isChecked);
|
|
||||||
};
|
|
||||||
mRequireScreenOnToAuthToggle = findViewById(R.id.require_screen_on_to_auth_toggle);
|
|
||||||
mRequireScreenOnToAuthToggle.setChecked(
|
|
||||||
mRequireScreenOnToAuthPreferenceController.isChecked());
|
|
||||||
mRequireScreenOnToAuthToggle.setListener(mRequireScreenOnToAuthToggleListener);
|
|
||||||
mRequireScreenOnToAuthToggle.setOnClickListener(v -> {
|
|
||||||
mRequireScreenOnToAuthToggle.getSwitch().toggle();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -131,12 +103,6 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
|
|||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
if (mCanAssumeSfps) {
|
|
||||||
mRequireScreenOnToAuthToggleListener.onCheckedChanged(
|
|
||||||
mRequireScreenOnToAuthToggle.getSwitch(),
|
|
||||||
mRequireScreenOnToAuthToggle.isChecked()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
FooterButton addButton = mFooterBarMixin.getSecondaryButton();
|
FooterButton addButton = mFooterBarMixin.getSecondaryButton();
|
||||||
|
|
||||||
|
@@ -1,77 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2022 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.biometrics.fingerprint;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.widget.CompoundButton;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.Switch;
|
|
||||||
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A layout that contains a start-justified title, and an end-justified switch.
|
|
||||||
*/
|
|
||||||
public class FingerprintRequireScreenOnToAuthToggle extends LinearLayout {
|
|
||||||
private Switch mSwitch;
|
|
||||||
|
|
||||||
public FingerprintRequireScreenOnToAuthToggle(Context context) {
|
|
||||||
this(context, null /* attrs */);
|
|
||||||
}
|
|
||||||
|
|
||||||
public FingerprintRequireScreenOnToAuthToggle(Context context, AttributeSet attrs) {
|
|
||||||
this(context, attrs, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public FingerprintRequireScreenOnToAuthToggle(
|
|
||||||
Context context, AttributeSet attrs, int defStyleAttr) {
|
|
||||||
super(context, attrs, defStyleAttr);
|
|
||||||
|
|
||||||
LayoutInflater.from(context).inflate(R.layout.sfps_require_screen_on_to_auth_toggle,
|
|
||||||
this, true /* attachToRoot */);
|
|
||||||
|
|
||||||
mSwitch = findViewById(R.id.toggle);
|
|
||||||
mSwitch.setClickable(true);
|
|
||||||
mSwitch.setFocusable(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isChecked() {
|
|
||||||
return mSwitch.isChecked();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param checked
|
|
||||||
*/
|
|
||||||
public void setChecked(boolean checked) {
|
|
||||||
mSwitch.setChecked(checked);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param listener
|
|
||||||
*/
|
|
||||||
public void setListener(CompoundButton.OnCheckedChangeListener listener) {
|
|
||||||
mSwitch.setOnCheckedChangeListener(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Switch getSwitch() {
|
|
||||||
return mSwitch;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -56,24 +56,21 @@ import androidx.preference.Preference.OnPreferenceChangeListener;
|
|||||||
import androidx.preference.PreferenceGroup;
|
import androidx.preference.PreferenceGroup;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
import androidx.preference.PreferenceViewHolder;
|
import androidx.preference.PreferenceViewHolder;
|
||||||
import androidx.preference.SwitchPreference;
|
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.SettingsPreferenceFragment;
|
||||||
import com.android.settings.SubSettings;
|
import com.android.settings.SubSettings;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.biometrics.BiometricEnrollBase;
|
import com.android.settings.biometrics.BiometricEnrollBase;
|
||||||
import com.android.settings.biometrics.BiometricUtils;
|
import com.android.settings.biometrics.BiometricUtils;
|
||||||
import com.android.settings.core.SettingsBaseActivity;
|
import com.android.settings.core.SettingsBaseActivity;
|
||||||
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
||||||
import com.android.settings.dashboard.DashboardFragment;
|
|
||||||
import com.android.settings.password.ChooseLockGeneric;
|
import com.android.settings.password.ChooseLockGeneric;
|
||||||
import com.android.settings.password.ChooseLockSettingsHelper;
|
import com.android.settings.password.ChooseLockSettingsHelper;
|
||||||
import com.android.settingslib.HelpUtils;
|
import com.android.settingslib.HelpUtils;
|
||||||
import com.android.settingslib.RestrictedLockUtils;
|
import com.android.settingslib.RestrictedLockUtils;
|
||||||
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
||||||
import com.android.settingslib.RestrictedLockUtilsInternal;
|
import com.android.settingslib.RestrictedLockUtilsInternal;
|
||||||
import com.android.settingslib.RestrictedSwitchPreference;
|
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
|
||||||
import com.android.settingslib.transition.SettingsTransitionHelper;
|
import com.android.settingslib.transition.SettingsTransitionHelper;
|
||||||
import com.android.settingslib.widget.FooterPreference;
|
import com.android.settingslib.widget.FooterPreference;
|
||||||
import com.android.settingslib.widget.TwoTargetPreference;
|
import com.android.settingslib.widget.TwoTargetPreference;
|
||||||
@@ -118,26 +115,7 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
setTitle(msg);
|
setTitle(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public static class FingerprintSettingsFragment extends SettingsPreferenceFragment
|
||||||
* @param context
|
|
||||||
* @return true if the Fingerprint hardware is detected.
|
|
||||||
*/
|
|
||||||
public static boolean isFingerprintHardwareDetected(Context context) {
|
|
||||||
FingerprintManager manager = Utils.getFingerprintManagerOrNull(context);
|
|
||||||
boolean isHardwareDetected = false;
|
|
||||||
if (manager == null) {
|
|
||||||
Log.d(TAG, "FingerprintManager is null");
|
|
||||||
} else {
|
|
||||||
isHardwareDetected = manager.isHardwareDetected();
|
|
||||||
Log.d(TAG, "FingerprintManager is not null. Hardware detected: " + isHardwareDetected);
|
|
||||||
}
|
|
||||||
return manager != null && isHardwareDetected;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static class FingerprintSettingsFragment extends DashboardFragment
|
|
||||||
implements OnPreferenceChangeListener, FingerprintPreference.OnDeleteClickListener {
|
implements OnPreferenceChangeListener, FingerprintPreference.OnDeleteClickListener {
|
||||||
|
|
||||||
private static class FooterColumn {
|
private static class FooterColumn {
|
||||||
@@ -156,8 +134,6 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
private static final String KEY_LAUNCHED_CONFIRM = "launched_confirm";
|
private static final String KEY_LAUNCHED_CONFIRM = "launched_confirm";
|
||||||
private static final String KEY_HAS_FIRST_ENROLLED = "has_first_enrolled";
|
private static final String KEY_HAS_FIRST_ENROLLED = "has_first_enrolled";
|
||||||
private static final String KEY_IS_ENROLLING = "is_enrolled";
|
private static final String KEY_IS_ENROLLING = "is_enrolled";
|
||||||
private static final String KEY_REQUIRE_SCREEN_ON_TO_AUTH =
|
|
||||||
"security_settings_require_screen_on_to_auth";
|
|
||||||
|
|
||||||
private static final int MSG_REFRESH_FINGERPRINT_TEMPLATES = 1000;
|
private static final int MSG_REFRESH_FINGERPRINT_TEMPLATES = 1000;
|
||||||
private static final int MSG_FINGER_AUTH_SUCCESS = 1001;
|
private static final int MSG_FINGER_AUTH_SUCCESS = 1001;
|
||||||
@@ -173,11 +149,6 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
|
|
||||||
protected static final boolean DEBUG = false;
|
protected static final boolean DEBUG = false;
|
||||||
|
|
||||||
private List<AbstractPreferenceController> mControllers;
|
|
||||||
private FingerprintSettingsRequireScreenOnToAuthPreferenceController
|
|
||||||
mRequireScreenOnToAuthPreferenceController;
|
|
||||||
private RestrictedSwitchPreference mRequireScreenOnToAuthPreference;
|
|
||||||
|
|
||||||
private FingerprintManager mFingerprintManager;
|
private FingerprintManager mFingerprintManager;
|
||||||
private FingerprintUpdater mFingerprintUpdater;
|
private FingerprintUpdater mFingerprintUpdater;
|
||||||
private List<FingerprintSensorPropertiesInternal> mSensorProperties;
|
private List<FingerprintSensorPropertiesInternal> mSensorProperties;
|
||||||
@@ -243,7 +214,6 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateDialog() {
|
private void updateDialog() {
|
||||||
setRequireScreenOnToAuthVisibility();
|
|
||||||
RenameDialog renameDialog = (RenameDialog) getFragmentManager().
|
RenameDialog renameDialog = (RenameDialog) getFragmentManager().
|
||||||
findFragmentByTag(RenameDialog.class.getName());
|
findFragmentByTag(RenameDialog.class.getName());
|
||||||
if (renameDialog != null) {
|
if (renameDialog != null) {
|
||||||
@@ -478,36 +448,13 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
if (root != null) {
|
if (root != null) {
|
||||||
root.removeAll();
|
root.removeAll();
|
||||||
}
|
}
|
||||||
|
addPreferencesFromResource(R.xml.security_settings_fingerprint);
|
||||||
root = getPreferenceScreen();
|
root = getPreferenceScreen();
|
||||||
addFingerprintItemPreferences(root);
|
addFingerprintItemPreferences(root);
|
||||||
addPreferencesFromResource(getPreferenceScreenResId());
|
|
||||||
mRequireScreenOnToAuthPreference = findPreference(KEY_REQUIRE_SCREEN_ON_TO_AUTH);
|
|
||||||
for (AbstractPreferenceController controller : mControllers) {
|
|
||||||
((FingerprintSettingsPreferenceController) controller).setUserId(mUserId);
|
|
||||||
}
|
|
||||||
mRequireScreenOnToAuthPreference.setChecked(
|
|
||||||
mRequireScreenOnToAuthPreferenceController.isChecked());
|
|
||||||
mRequireScreenOnToAuthPreference.setOnPreferenceChangeListener(
|
|
||||||
(preference, newValue) -> {
|
|
||||||
boolean isChecked = ((SwitchPreference) preference).isChecked();
|
|
||||||
mRequireScreenOnToAuthPreferenceController.setChecked(!isChecked);
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
setPreferenceScreen(root);
|
setPreferenceScreen(root);
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setRequireScreenOnToAuthVisibility() {
|
|
||||||
int fingerprintsEnrolled = mFingerprintManager.getEnrolledFingerprints(mUserId).size();
|
|
||||||
final boolean removalInProgress = mRemovalSidecar.inProgress();
|
|
||||||
// Removing last remaining fingerprint
|
|
||||||
if (fingerprintsEnrolled == 0 && removalInProgress) {
|
|
||||||
mRequireScreenOnToAuthPreference.setVisible(false);
|
|
||||||
} else {
|
|
||||||
mRequireScreenOnToAuthPreference.setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addFingerprintItemPreferences(PreferenceGroup root) {
|
private void addFingerprintItemPreferences(PreferenceGroup root) {
|
||||||
root.removeAll();
|
root.removeAll();
|
||||||
final List<Fingerprint> items = mFingerprintManager.getEnrolledFingerprints(mUserId);
|
final List<Fingerprint> items = mFingerprintManager.getEnrolledFingerprints(mUserId);
|
||||||
@@ -530,7 +477,6 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
root.addPreference(pref);
|
root.addPreference(pref);
|
||||||
pref.setOnPreferenceChangeListener(this);
|
pref.setOnPreferenceChangeListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
Preference addPreference = new Preference(root.getContext());
|
Preference addPreference = new Preference(root.getContext());
|
||||||
addPreference.setKey(KEY_FINGERPRINT_ADD);
|
addPreference.setKey(KEY_FINGERPRINT_ADD);
|
||||||
addPreference.setTitle(R.string.fingerprint_add_title);
|
addPreference.setTitle(R.string.fingerprint_add_title);
|
||||||
@@ -622,16 +568,6 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getPreferenceScreenResId() {
|
|
||||||
return R.xml.security_settings_fingerprint;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getLogTag() {
|
|
||||||
return TAG;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSaveInstanceState(final Bundle outState) {
|
public void onSaveInstanceState(final Bundle outState) {
|
||||||
outState.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
|
outState.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
|
||||||
@@ -726,27 +662,6 @@ public class FingerprintSettings extends SubSettings {
|
|||||||
return R.string.help_url_fingerprint;
|
return R.string.help_url_fingerprint;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
|
||||||
if (!isFingerprintHardwareDetected(context)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
mControllers = buildPreferenceControllers(context);
|
|
||||||
return mControllers;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
|
|
||||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
|
||||||
mRequireScreenOnToAuthPreferenceController =
|
|
||||||
new FingerprintSettingsRequireScreenOnToAuthPreferenceController(
|
|
||||||
context,
|
|
||||||
KEY_REQUIRE_SCREEN_ON_TO_AUTH
|
|
||||||
);
|
|
||||||
controllers.add(mRequireScreenOnToAuthPreferenceController);
|
|
||||||
return controllers;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2022 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.biometrics.fingerprint;
|
|
||||||
|
|
||||||
import android.app.admin.DevicePolicyManager;
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import com.android.settings.core.TogglePreferenceController;
|
|
||||||
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
|
|
||||||
import com.android.settingslib.RestrictedLockUtilsInternal;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Abstract base class for all fingerprint settings toggles.
|
|
||||||
*/
|
|
||||||
public abstract class FingerprintSettingsPreferenceController extends TogglePreferenceController {
|
|
||||||
|
|
||||||
private int mUserId;
|
|
||||||
|
|
||||||
public FingerprintSettingsPreferenceController(Context context, String preferenceKey) {
|
|
||||||
super(context, preferenceKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserId(int userId) {
|
|
||||||
mUserId = userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected int getUserId() {
|
|
||||||
return mUserId;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected EnforcedAdmin getRestrictingAdmin() {
|
|
||||||
return RestrictedLockUtilsInternal.checkIfKeyguardFeaturesDisabled(
|
|
||||||
mContext, DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT, mUserId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final boolean isSliceable() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSliceHighlightMenuRes() {
|
|
||||||
// not needed since it's not sliceable
|
|
||||||
return NO_RES;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,102 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2022 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.biometrics.fingerprint;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.hardware.fingerprint.FingerprintManager;
|
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.provider.Settings;
|
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
|
||||||
import com.android.settings.Utils;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Preference controller that controls whether a SFPS device is required to be interactive for
|
|
||||||
* fingerprint authentication to unlock the device.
|
|
||||||
*/
|
|
||||||
public class FingerprintSettingsRequireScreenOnToAuthPreferenceController
|
|
||||||
extends FingerprintSettingsPreferenceController {
|
|
||||||
private static final String TAG =
|
|
||||||
"FingerprintSettingsRequireScreenOnToAuthPreferenceController";
|
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
protected FingerprintManager mFingerprintManager;
|
|
||||||
|
|
||||||
public FingerprintSettingsRequireScreenOnToAuthPreferenceController(
|
|
||||||
Context context, String prefKey) {
|
|
||||||
super(context, prefKey);
|
|
||||||
mFingerprintManager = Utils.getFingerprintManagerOrNull(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isChecked() {
|
|
||||||
if (!FingerprintSettings.isFingerprintHardwareDetected(mContext)) {
|
|
||||||
return false;
|
|
||||||
} else if (getRestrictingAdmin() != null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
int defaultValue = mContext.getResources().getBoolean(
|
|
||||||
com.android.internal.R.bool.config_requireScreenOnToAuthEnabled) ? 1 : 0;
|
|
||||||
|
|
||||||
return Settings.Secure.getIntForUser(
|
|
||||||
mContext.getContentResolver(),
|
|
||||||
Settings.Secure.SFPS_REQUIRE_SCREEN_ON_TO_AUTH_ENABLED,
|
|
||||||
defaultValue,
|
|
||||||
getUserHandle()) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean setChecked(boolean isChecked) {
|
|
||||||
Settings.Secure.putIntForUser(
|
|
||||||
mContext.getContentResolver(),
|
|
||||||
Settings.Secure.SFPS_REQUIRE_SCREEN_ON_TO_AUTH_ENABLED,
|
|
||||||
isChecked ? 1 : 0,
|
|
||||||
getUserHandle());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateState(Preference preference) {
|
|
||||||
super.updateState(preference);
|
|
||||||
if (!FingerprintSettings.isFingerprintHardwareDetected(mContext)) {
|
|
||||||
preference.setEnabled(false);
|
|
||||||
} else if (!mFingerprintManager.hasEnrolledTemplates(getUserId())) {
|
|
||||||
preference.setEnabled(false);
|
|
||||||
} else {
|
|
||||||
preference.setEnabled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getAvailabilityStatus() {
|
|
||||||
if (mFingerprintManager != null
|
|
||||||
&& mFingerprintManager.isHardwareDetected()
|
|
||||||
&& mFingerprintManager.isPowerbuttonFps()) {
|
|
||||||
return mFingerprintManager.hasEnrolledTemplates(getUserId())
|
|
||||||
? AVAILABLE : DISABLED_DEPENDENT_SETTING;
|
|
||||||
} else {
|
|
||||||
return UNSUPPORTED_ON_DEVICE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getUserHandle() {
|
|
||||||
return UserHandle.of(getUserId()).getIdentifier();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,149 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2022 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.biometrics.fingerprint;
|
|
||||||
|
|
||||||
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
|
|
||||||
import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
|
|
||||||
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
|
||||||
import static org.mockito.Mockito.eq;
|
|
||||||
import static org.mockito.Mockito.spy;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.hardware.fingerprint.FingerprintManager;
|
|
||||||
import android.provider.Settings;
|
|
||||||
|
|
||||||
import com.android.settings.testutils.shadow.ShadowUtils;
|
|
||||||
import com.android.settingslib.RestrictedSwitchPreference;
|
|
||||||
|
|
||||||
import org.junit.After;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.MockitoAnnotations;
|
|
||||||
import org.robolectric.RobolectricTestRunner;
|
|
||||||
import org.robolectric.RuntimeEnvironment;
|
|
||||||
import org.robolectric.annotation.Config;
|
|
||||||
import org.robolectric.util.ReflectionHelpers;
|
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
|
||||||
@Config(shadows = {ShadowUtils.class})
|
|
||||||
public class FingerprintSettingsRequireScreenOnToAuthPreferenceControllerTest {
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private FingerprintManager mFingerprintManager;
|
|
||||||
@Mock
|
|
||||||
private PackageManager mPackageManager;
|
|
||||||
@Mock
|
|
||||||
private RestrictedSwitchPreference mPreference;
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private FingerprintSettingsRequireScreenOnToAuthPreferenceController mController;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
MockitoAnnotations.initMocks(this);
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
|
||||||
when(mContext.getSystemService(eq(Context.FINGERPRINT_SERVICE))).thenReturn(
|
|
||||||
mFingerprintManager);
|
|
||||||
when(mContext.getPackageManager()).thenReturn(mPackageManager);
|
|
||||||
|
|
||||||
mController = spy(new FingerprintSettingsRequireScreenOnToAuthPreferenceController(mContext,
|
|
||||||
"test_key"));
|
|
||||||
ReflectionHelpers.setField(mController, "mFingerprintManager", mFingerprintManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
@After
|
|
||||||
public void tearDown() {
|
|
||||||
ShadowUtils.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void onPreferenceChange_settingIsUpdated() {
|
|
||||||
boolean state = Settings.Secure.getInt(mContext.getContentResolver(),
|
|
||||||
Settings.Secure.SFPS_REQUIRE_SCREEN_ON_TO_AUTH_ENABLED, 1) != 0;
|
|
||||||
|
|
||||||
assertThat(mController.isChecked()).isFalse();
|
|
||||||
assertThat(mController.onPreferenceChange(mPreference, !state)).isTrue();
|
|
||||||
boolean newState = Settings.Secure.getInt(mContext.getContentResolver(),
|
|
||||||
Settings.Secure.SFPS_REQUIRE_SCREEN_ON_TO_AUTH_ENABLED, 1) != 0;
|
|
||||||
assertThat(newState).isEqualTo(!state);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isAvailable_isEnabled_whenSfpsHardwareDetected_AndHasEnrolledFingerprints() {
|
|
||||||
assertThat(mController.isAvailable()).isEqualTo(false);
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
|
|
||||||
configure_hardwareDetected_isSfps_hasEnrolledTemplates(
|
|
||||||
true /* isHardwareDetected */,
|
|
||||||
true /* isPowerbuttonFps */,
|
|
||||||
true /* hasEnrolledTemplates */);
|
|
||||||
assertThat(mController.isAvailable()).isEqualTo(true);
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isAvailable_isDisabled_whenSfpsHardwareDetected_AndNoEnrolledFingerprints() {
|
|
||||||
assertThat(mController.isAvailable()).isEqualTo(false);
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
|
|
||||||
configure_hardwareDetected_isSfps_hasEnrolledTemplates(
|
|
||||||
true /* isHardwareDetected */,
|
|
||||||
true /* isPowerbuttonFps */,
|
|
||||||
false /* hasEnrolledTemplates */);
|
|
||||||
assertThat(mController.isAvailable()).isEqualTo(true);
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isUnavailable_whenHardwareNotDetected() {
|
|
||||||
assertThat(mController.isAvailable()).isFalse();
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
|
|
||||||
configure_hardwareDetected_isSfps_hasEnrolledTemplates(
|
|
||||||
false /* isHardwareDetected */,
|
|
||||||
true /* isPowerbuttonFps */,
|
|
||||||
true /* hasEnrolledTemplates */);
|
|
||||||
assertThat(mController.isAvailable()).isFalse();
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isUnavailable_onNonSfpsDevice() {
|
|
||||||
assertThat(mController.isAvailable()).isFalse();
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
|
|
||||||
configure_hardwareDetected_isSfps_hasEnrolledTemplates(
|
|
||||||
true /* isHardwareDetected */,
|
|
||||||
false /* isPowerbuttonFps */,
|
|
||||||
true /* hasEnrolledTemplates */);
|
|
||||||
assertThat(mController.isAvailable()).isFalse();
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void configure_hardwareDetected_isSfps_hasEnrolledTemplates(
|
|
||||||
boolean isHardwareDetected, boolean isPowerbuttonFps, boolean hasEnrolledTemplates) {
|
|
||||||
when(mFingerprintManager.isHardwareDetected()).thenReturn(isHardwareDetected);
|
|
||||||
when(mFingerprintManager.isPowerbuttonFps()).thenReturn(isPowerbuttonFps);
|
|
||||||
when(mFingerprintManager.hasEnrolledTemplates(anyInt())).thenReturn(hasEnrolledTemplates);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
Reference in New Issue
Block a user