Profile Challenge Fingerprint Support
Change-Id: Ic83c479f645776dd0678721bfb732b399f09c992
This commit is contained in:
@@ -150,6 +150,23 @@ public final class ChooseLockSettingsHelper {
|
||||
false, false, true, challenge, Utils.getCredentialOwnerUserId(mActivity));
|
||||
}
|
||||
|
||||
/**
|
||||
* If a pattern, password or PIN exists, prompt the user before allowing them to change it.
|
||||
* @param message optional message to display about the action about to be done
|
||||
* @param details optional detail message to display
|
||||
* @param challenge a challenge to be verified against the device credential.
|
||||
* This method can only be called internally.
|
||||
* @param userId The userId for whom the lock should be confirmed.
|
||||
* @return true if one exists and we launched an activity to confirm it
|
||||
* @see #onActivityResult(int, int, android.content.Intent)
|
||||
*/
|
||||
public boolean launchConfirmationActivity(int request, @Nullable CharSequence title,
|
||||
@Nullable CharSequence header, @Nullable CharSequence description,
|
||||
long challenge, int userId) {
|
||||
return launchConfirmationActivity(request, title, header, description,
|
||||
false, false, true, challenge, Utils.enforceSameOwner(mActivity, userId));
|
||||
}
|
||||
|
||||
private boolean launchConfirmationActivity(int request, @Nullable CharSequence title,
|
||||
@Nullable CharSequence header, @Nullable CharSequence description,
|
||||
boolean returnCredentials, boolean external, boolean hasChallenge,
|
||||
|
@@ -22,6 +22,7 @@ import android.app.ActivityManagerNative;
|
||||
import android.app.ActivityOptions;
|
||||
import android.app.IActivityManager;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.trust.TrustManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentSender;
|
||||
@@ -63,12 +64,16 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
||||
private boolean mAllowFpAuthentication;
|
||||
protected Button mCancelButton;
|
||||
protected ImageView mFingerprintIcon;
|
||||
protected int mEffectiveUserId;
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mAllowFpAuthentication = getActivity().getIntent().getBooleanExtra(
|
||||
ALLOW_FP_AUTHENTICATION, false);
|
||||
// Only take this argument into account if it belongs to the current profile.
|
||||
Intent intent = getActivity().getIntent();
|
||||
mEffectiveUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -78,7 +83,7 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
||||
mFingerprintIcon = (ImageView) view.findViewById(R.id.fingerprintIcon);
|
||||
mFingerprintHelper = new FingerprintUiHelper(
|
||||
mFingerprintIcon,
|
||||
(TextView) view.findViewById(R.id.errorText), this);
|
||||
(TextView) view.findViewById(R.id.errorText), this, mEffectiveUserId);
|
||||
boolean showCancelButton = getActivity().getIntent().getBooleanExtra(
|
||||
SHOW_CANCEL_BUTTON, false);
|
||||
mCancelButton.setVisibility(showCancelButton ? View.VISIBLE : View.GONE);
|
||||
@@ -132,7 +137,12 @@ public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedFr
|
||||
public void onAuthenticated() {
|
||||
// Check whether we are still active.
|
||||
if (getActivity() != null && getActivity().isResumed()) {
|
||||
TrustManager trustManager =
|
||||
(TrustManager) getActivity().getSystemService(Context.TRUST_SERVICE);
|
||||
trustManager.setDeviceLockedForUser(mEffectiveUserId, false);
|
||||
authenticationSucceeded();
|
||||
authenticationSucceeded();
|
||||
checkForPendingIntent();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -99,7 +99,6 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
||||
private AppearAnimationUtils mAppearAnimationUtils;
|
||||
private DisappearAnimationUtils mDisappearAnimationUtils;
|
||||
private boolean mBlockImm;
|
||||
private int mEffectiveUserId;
|
||||
|
||||
// required constructor for fragments
|
||||
public ConfirmLockPasswordFragment() {
|
||||
@@ -110,9 +109,6 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mLockPatternUtils = new LockPatternUtils(getActivity());
|
||||
Intent intent = getActivity().getIntent();
|
||||
// Only take this argument into account if it belongs to the current profile.
|
||||
mEffectiveUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -183,14 +179,13 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
|
||||
private int getDefaultDetails() {
|
||||
boolean isProfile = Utils.isManagedProfile(
|
||||
UserManager.get(getActivity()), mEffectiveUserId);
|
||||
if (mIsAlpha && !isProfile) {
|
||||
return R.string.lockpassword_confirm_your_password_generic;
|
||||
} else if (mIsAlpha && isProfile) {
|
||||
return R.string.lockpassword_confirm_your_password_generic_profile;
|
||||
} else if (!isProfile) {
|
||||
return R.string.lockpassword_confirm_your_pin_generic;
|
||||
if (mIsAlpha) {
|
||||
return isProfile ? R.string.lockpassword_confirm_your_password_generic_profile
|
||||
: R.string.lockpassword_confirm_your_password_generic;
|
||||
} else {
|
||||
return isProfile ? R.string.lockpassword_confirm_your_pin_generic_profile
|
||||
: R.string.lockpassword_confirm_your_pin_generic;
|
||||
}
|
||||
return R.string.lockpassword_confirm_your_pin_generic_profile;
|
||||
}
|
||||
|
||||
private int getErrorMessage() {
|
||||
|
@@ -104,8 +104,6 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
|
||||
private AppearAnimationUtils mAppearAnimationUtils;
|
||||
private DisappearAnimationUtils mDisappearAnimationUtils;
|
||||
|
||||
private int mEffectiveUserId;
|
||||
|
||||
// required constructor for fragments
|
||||
public ConfirmLockPatternFragment() {
|
||||
|
||||
@@ -115,9 +113,6 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mLockPatternUtils = new LockPatternUtils(getActivity());
|
||||
Intent intent = getActivity().getIntent();
|
||||
// Only take this argument into account if it belongs to the current profile.
|
||||
mEffectiveUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -25,6 +25,8 @@ import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.hardware.fingerprint.Fingerprint;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
@@ -34,12 +36,15 @@ import android.support.v7.preference.ListPreference;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
|
||||
import android.support.v7.preference.Preference.OnPreferenceClickListener;
|
||||
import android.util.Log;
|
||||
import android.support.v7.preference.PreferenceCategory;
|
||||
import android.support.v7.preference.PreferenceGroup;
|
||||
import android.support.v7.preference.PreferenceScreen;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.settings.fingerprint.FingerprintEnrollIntroduction;
|
||||
import com.android.settings.fingerprint.FingerprintSettings;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
@@ -218,6 +223,7 @@ public class ProfileChallengePreferenceFragment extends SettingsPreferenceFragme
|
||||
PreferenceGroup securityCategory = (PreferenceGroup)
|
||||
root.findPreference(KEY_SECURITY_CATEGORY);
|
||||
if (securityCategory != null) {
|
||||
maybeAddFingerprintPreference(securityCategory);
|
||||
if (mLockPatternUtils.isSeparateProfileChallengeEnabled(mProfileUserId)) {
|
||||
maybeAddUnificationPreference(securityCategory);
|
||||
} else {
|
||||
@@ -241,6 +247,14 @@ public class ProfileChallengePreferenceFragment extends SettingsPreferenceFragme
|
||||
}
|
||||
}
|
||||
|
||||
private void maybeAddFingerprintPreference(PreferenceGroup securityCategory) {
|
||||
Preference fingerprintPreference =
|
||||
FingerprintSettings.getFingerprintPreferenceForUser(getActivity(), mProfileUserId);
|
||||
if (fingerprintPreference != null) {
|
||||
securityCategory.addPreference(fingerprintPreference);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeNonWhitelistedItems(PreferenceGroup prefScreen) {
|
||||
int numPreferences = prefScreen.getPreferenceCount();
|
||||
int i = 0;
|
||||
|
@@ -90,7 +90,6 @@ public class SecuritySettings extends SettingsPreferenceFragment
|
||||
private static final String KEY_OWNER_INFO_SETTINGS = "owner_info_settings";
|
||||
private static final String KEY_ADVANCED_SECURITY = "advanced_security";
|
||||
private static final String KEY_MANAGE_TRUST_AGENTS = "manage_trust_agents";
|
||||
private static final String KEY_FINGERPRINT_SETTINGS = "fingerprint_settings";
|
||||
|
||||
private static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST = 123;
|
||||
private static final int CHANGE_TRUST_AGENT_SETTINGS = 126;
|
||||
@@ -375,32 +374,12 @@ public class SecuritySettings extends SettingsPreferenceFragment
|
||||
}
|
||||
|
||||
private void maybeAddFingerprintPreference(PreferenceGroup securityCategory) {
|
||||
FingerprintManager fpm = (FingerprintManager) getActivity().getSystemService(
|
||||
Context.FINGERPRINT_SERVICE);
|
||||
if (!fpm.isHardwareDetected()) {
|
||||
Log.v(TAG, "No fingerprint hardware detected!!");
|
||||
return;
|
||||
Preference fingerprintPreference =
|
||||
FingerprintSettings.getFingerprintPreferenceForUser(
|
||||
securityCategory.getContext(), UserHandle.myUserId());
|
||||
if (fingerprintPreference != null) {
|
||||
securityCategory.addPreference(fingerprintPreference);
|
||||
}
|
||||
Preference fingerprintPreference = new Preference(securityCategory.getContext());
|
||||
fingerprintPreference.setKey(KEY_FINGERPRINT_SETTINGS);
|
||||
fingerprintPreference.setTitle(R.string.security_settings_fingerprint_preference_title);
|
||||
Intent intent = new Intent();
|
||||
final List<Fingerprint> items = fpm.getEnrolledFingerprints();
|
||||
final int fingerprintCount = items != null ? items.size() : 0;
|
||||
final String clazz;
|
||||
if (fingerprintCount > 0) {
|
||||
fingerprintPreference.setSummary(getResources().getQuantityString(
|
||||
R.plurals.security_settings_fingerprint_preference_summary,
|
||||
fingerprintCount, fingerprintCount));
|
||||
clazz = FingerprintSettings.class.getName();
|
||||
} else {
|
||||
fingerprintPreference.setSummary(
|
||||
R.string.security_settings_fingerprint_preference_summary_none);
|
||||
clazz = FingerprintEnrollIntroduction.class.getName();
|
||||
}
|
||||
intent.setClassName("com.android.settings", clazz);
|
||||
fingerprintPreference.setIntent(intent);
|
||||
securityCategory.addPreference(fingerprintPreference);
|
||||
}
|
||||
|
||||
private void addTrustAgentSettings(PreferenceGroup securityCategory) {
|
||||
|
@@ -20,6 +20,7 @@ import android.annotation.Nullable;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
@@ -42,6 +43,7 @@ public abstract class FingerprintEnrollBase extends InstrumentedActivity
|
||||
static final int RESULT_TIMEOUT = FingerprintSettings.RESULT_TIMEOUT;
|
||||
|
||||
protected byte[] mToken;
|
||||
protected int mUserId;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@@ -53,6 +55,7 @@ public abstract class FingerprintEnrollBase extends InstrumentedActivity
|
||||
mToken = savedInstanceState.getByteArray(
|
||||
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
|
||||
}
|
||||
mUserId = getIntent().getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -127,6 +130,9 @@ public abstract class FingerprintEnrollBase extends InstrumentedActivity
|
||||
Intent intent = new Intent();
|
||||
intent.setClassName("com.android.settings", FingerprintEnrollEnrolling.class.getName());
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken);
|
||||
if (mUserId != UserHandle.USER_NULL) {
|
||||
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
|
||||
}
|
||||
return intent;
|
||||
}
|
||||
}
|
||||
|
@@ -32,6 +32,7 @@ import android.graphics.drawable.AnimatedVectorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.animation.AnimationUtils;
|
||||
@@ -221,6 +222,9 @@ public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
|
||||
Intent intent = getFinishIntent();
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
|
||||
if (mUserId != UserHandle.USER_NULL) {
|
||||
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
|
||||
}
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
|
@@ -19,6 +19,7 @@ package com.android.settings.fingerprint;
|
||||
import android.content.Intent;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.settings.ChooseLockSettingsHelper;
|
||||
@@ -173,10 +174,17 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
|
||||
private void launchConfirmLock() {
|
||||
long challenge = getSystemService(FingerprintManager.class).preEnroll();
|
||||
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this);
|
||||
if (!helper.launchConfirmationActivity(CONFIRM_REQUEST,
|
||||
boolean launchedConfirmationActivity = false;
|
||||
if (mUserId == UserHandle.USER_NULL) {
|
||||
launchedConfirmationActivity = helper.launchConfirmationActivity(CONFIRM_REQUEST,
|
||||
getString(R.string.security_settings_fingerprint_preference_title),
|
||||
null, null, challenge)) {
|
||||
|
||||
null, null, challenge);
|
||||
} else {
|
||||
launchedConfirmationActivity = helper.launchConfirmationActivity(CONFIRM_REQUEST,
|
||||
getString(R.string.security_settings_fingerprint_preference_title),
|
||||
null, null, challenge, mUserId);
|
||||
}
|
||||
if (!launchedConfirmationActivity) {
|
||||
// This shouldn't happen, as we should only end up at this step if a lock thingy is
|
||||
// already set.
|
||||
finish();
|
||||
|
@@ -20,6 +20,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
@@ -39,7 +40,7 @@ public class FingerprintEnrollFinish extends FingerprintEnrollBase {
|
||||
Button addButton = (Button) findViewById(R.id.add_another_button);
|
||||
|
||||
FingerprintManager fpm = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
|
||||
int enrolled = fpm.getEnrolledFingerprints().size();
|
||||
int enrolled = fpm.getEnrolledFingerprints(mUserId).size();
|
||||
int max = getResources().getInteger(
|
||||
com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
|
||||
if (enrolled >= max) {
|
||||
|
@@ -46,14 +46,12 @@ public class FingerprintEnrollIntroduction extends FingerprintEnrollBase {
|
||||
setHeaderText(R.string.security_settings_fingerprint_enroll_introduction_title);
|
||||
findViewById(R.id.cancel_button).setOnClickListener(this);
|
||||
findViewById(R.id.learn_more_button).setOnClickListener(this);
|
||||
final int passwordQuality = new ChooseLockSettingsHelper(this).utils()
|
||||
.getActivePasswordQuality(UserHandle.myUserId());
|
||||
updatePasswordQuality();
|
||||
}
|
||||
|
||||
private void updatePasswordQuality() {
|
||||
final int passwordQuality = new ChooseLockSettingsHelper(this).utils()
|
||||
.getActivePasswordQuality(UserHandle.myUserId());
|
||||
.getActivePasswordQuality(mUserId);
|
||||
mHasPassword = passwordQuality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
|
||||
}
|
||||
|
||||
@@ -77,6 +75,9 @@ public class FingerprintEnrollIntroduction extends FingerprintEnrollBase {
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true);
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, true);
|
||||
if (mUserId != UserHandle.USER_NULL) {
|
||||
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
|
||||
}
|
||||
startActivityForResult(intent, CHOOSE_LOCK_GENERIC_REQUEST);
|
||||
}
|
||||
|
||||
@@ -93,7 +94,11 @@ public class FingerprintEnrollIntroduction extends FingerprintEnrollBase {
|
||||
}
|
||||
|
||||
protected Intent getFindSensorIntent() {
|
||||
return new Intent(this, FingerprintEnrollFindSensor.class);
|
||||
Intent intent = new Intent(this, FingerprintEnrollFindSensor.class);
|
||||
if (mUserId != UserHandle.USER_NULL) {
|
||||
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
|
||||
}
|
||||
return intent;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -20,6 +20,7 @@ import android.app.admin.DevicePolicyManager;
|
||||
import android.content.Intent;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.settings.ChooseLockGeneric;
|
||||
@@ -66,6 +67,9 @@ public class FingerprintEnrollOnboard extends FingerprintEnrollBase {
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true);
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, true);
|
||||
if (mUserId != UserHandle.USER_NULL) {
|
||||
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
|
||||
}
|
||||
startActivityForResult(intent, CHOOSE_LOCK_GENERIC_REQUEST);
|
||||
}
|
||||
|
||||
@@ -76,6 +80,9 @@ public class FingerprintEnrollOnboard extends FingerprintEnrollBase {
|
||||
private void launchFindSensor(byte[] token) {
|
||||
Intent intent = getFindSensorIntent();
|
||||
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
|
||||
if (mUserId != UserHandle.USER_NULL) {
|
||||
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
|
||||
}
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
|
@@ -18,10 +18,12 @@ package com.android.settings.fingerprint;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.CancellationSignal;
|
||||
import android.os.Handler;
|
||||
import android.os.UserHandle;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.settings.ChooseLockSettingsHelper;
|
||||
@@ -40,6 +42,8 @@ public class FingerprintEnrollSidecar extends InstrumentedFragment {
|
||||
private Handler mHandler = new Handler();
|
||||
private byte[] mToken;
|
||||
private boolean mDone;
|
||||
private int mUserId;
|
||||
private FingerprintManager mFingerprintManager;
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
@@ -50,8 +54,10 @@ public class FingerprintEnrollSidecar extends InstrumentedFragment {
|
||||
@Override
|
||||
public void onAttach(Activity activity) {
|
||||
super.onAttach(activity);
|
||||
mFingerprintManager = activity.getSystemService(FingerprintManager.class);
|
||||
mToken = activity.getIntent().getByteArrayExtra(
|
||||
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
|
||||
mUserId = activity.getIntent().getIntExtra(Intent.EXTRA_USER_ID, UserHandle.USER_NULL);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -74,8 +80,11 @@ public class FingerprintEnrollSidecar extends InstrumentedFragment {
|
||||
mHandler.removeCallbacks(mTimeoutRunnable);
|
||||
mEnrollmentSteps = -1;
|
||||
mEnrollmentCancel = new CancellationSignal();
|
||||
getActivity().getSystemService(FingerprintManager.class).enroll(mToken, mEnrollmentCancel,
|
||||
0 /* flags */, mEnrollmentCallback);
|
||||
if (mUserId != UserHandle.USER_NULL) {
|
||||
mFingerprintManager.setActiveUser(mUserId);
|
||||
}
|
||||
mFingerprintManager.enroll(mToken, mEnrollmentCancel,
|
||||
0 /* flags */, mEnrollmentCallback, mUserId);
|
||||
mEnrolling = true;
|
||||
}
|
||||
|
||||
|
@@ -72,6 +72,8 @@ import java.util.List;
|
||||
*/
|
||||
public class FingerprintSettings extends SubSettings {
|
||||
|
||||
private static final String TAG = "FingerprintSettings";
|
||||
|
||||
/**
|
||||
* Used by the choose fingerprint wizard to indicate the wizard is
|
||||
* finished, and each activity in the wizard should finish.
|
||||
@@ -98,6 +100,8 @@ public class FingerprintSettings extends SubSettings {
|
||||
|
||||
private static final long LOCKOUT_DURATION = 30000; // time we have to wait for fp to reset, ms
|
||||
|
||||
public static final String KEY_FINGERPRINT_SETTINGS = "fingerprint_settings";
|
||||
|
||||
@Override
|
||||
public Intent getIntent() {
|
||||
Intent modIntent = new Intent(super.getIntent());
|
||||
@@ -765,4 +769,34 @@ public class FingerprintSettings extends SubSettings {
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
|
||||
public static Preference getFingerprintPreferenceForUser(Context context, int userId) {
|
||||
FingerprintManager fpm = (FingerprintManager) context.getSystemService(
|
||||
Context.FINGERPRINT_SERVICE);
|
||||
if (!fpm.isHardwareDetected()) {
|
||||
Log.v(TAG, "No fingerprint hardware detected!!");
|
||||
return null;
|
||||
}
|
||||
Preference fingerprintPreference = new Preference(context);
|
||||
fingerprintPreference.setKey(KEY_FINGERPRINT_SETTINGS);
|
||||
fingerprintPreference.setTitle(R.string.security_settings_fingerprint_preference_title);
|
||||
Intent intent = new Intent();
|
||||
final List<Fingerprint> items = fpm.getEnrolledFingerprints(userId);
|
||||
final int fingerprintCount = items != null ? items.size() : 0;
|
||||
final String clazz;
|
||||
if (fingerprintCount > 0) {
|
||||
fingerprintPreference.setSummary(context.getResources().getQuantityString(
|
||||
R.plurals.security_settings_fingerprint_preference_summary,
|
||||
fingerprintCount, fingerprintCount));
|
||||
clazz = FingerprintSettings.class.getName();
|
||||
} else {
|
||||
fingerprintPreference.setSummary(
|
||||
R.string.security_settings_fingerprint_preference_summary_none);
|
||||
clazz = FingerprintEnrollIntroduction.class.getName();
|
||||
}
|
||||
intent.setClassName("com.android.settings", clazz);
|
||||
intent.putExtra(Intent.EXTRA_USER_ID, userId);
|
||||
fingerprintPreference.setIntent(intent);
|
||||
return fingerprintPreference;
|
||||
}
|
||||
}
|
||||
|
@@ -34,21 +34,26 @@ public class FingerprintUiHelper extends FingerprintManager.AuthenticationCallba
|
||||
private ImageView mIcon;
|
||||
private TextView mErrorTextView;
|
||||
private CancellationSignal mCancellationSignal;
|
||||
private int mUserId;
|
||||
|
||||
private Callback mCallback;
|
||||
private FingerprintManager mFingerprintManager;
|
||||
|
||||
public FingerprintUiHelper(ImageView icon, TextView errorTextView, Callback callback) {
|
||||
public FingerprintUiHelper(ImageView icon, TextView errorTextView, Callback callback,
|
||||
int userId) {
|
||||
mFingerprintManager = icon.getContext().getSystemService(FingerprintManager.class);
|
||||
mIcon = icon;
|
||||
mErrorTextView = errorTextView;
|
||||
mCallback = callback;
|
||||
mUserId = userId;
|
||||
}
|
||||
|
||||
public void startListening() {
|
||||
if (mFingerprintManager.getEnrolledFingerprints().size() > 0) {
|
||||
if (mFingerprintManager.getEnrolledFingerprints(mUserId).size() > 0) {
|
||||
mCancellationSignal = new CancellationSignal();
|
||||
mFingerprintManager.authenticate(null, mCancellationSignal, 0 /* flags */, this, null);
|
||||
mFingerprintManager.setActiveUser(mUserId);
|
||||
mFingerprintManager.authenticate(
|
||||
null, mCancellationSignal, 0 /* flags */, this, null, mUserId);
|
||||
setFingerprintIconVisibility(true);
|
||||
mIcon.setImageResource(R.drawable.ic_fingerprint);
|
||||
}
|
||||
|
Reference in New Issue
Block a user