OSDN Git Service

23a81bc5666828169735b2aa1fcee21674064765
[android-x86/packages-apps-Settings.git] / src / com / android / settings / fingerprint / FingerprintEnrollIntroduction.java
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16
17 package com.android.settings.fingerprint;
18
19 import android.app.admin.DevicePolicyManager;
20 import android.content.Intent;
21 import android.hardware.fingerprint.FingerprintManager;
22 import android.os.Bundle;
23 import android.os.UserHandle;
24 import android.view.View;
25
26 import com.android.internal.logging.MetricsProto.MetricsEvent;
27 import com.android.settings.ChooseLockGeneric;
28 import com.android.settings.ChooseLockSettingsHelper;
29 import com.android.settings.HelpUtils;
30 import com.android.settings.R;
31
32 /**
33  * Onboarding activity for fingerprint enrollment.
34  */
35 public class FingerprintEnrollIntroduction extends FingerprintEnrollBase {
36
37     private static final int CHOOSE_LOCK_GENERIC_REQUEST = 1;
38     private static final int FINGERPRINT_FIND_SENSOR_REQUEST = 2;
39
40     private boolean mHasPassword;
41
42     @Override
43     protected void onCreate(Bundle savedInstanceState) {
44         super.onCreate(savedInstanceState);
45         setContentView(R.layout.fingerprint_enroll_introduction);
46         setHeaderText(R.string.security_settings_fingerprint_enroll_introduction_title);
47         findViewById(R.id.cancel_button).setOnClickListener(this);
48         findViewById(R.id.learn_more_button).setOnClickListener(this);
49         updatePasswordQuality();
50     }
51
52     private void updatePasswordQuality() {
53         final int passwordQuality = new ChooseLockSettingsHelper(this).utils()
54                 .getActivePasswordQuality(mUserId);
55         mHasPassword = passwordQuality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
56     }
57
58     @Override
59     protected void onNextButtonClick() {
60         if (!mHasPassword) {
61             // No fingerprints registered, launch into enrollment wizard.
62             launchChooseLock();
63         } else {
64             // Lock thingy is already set up, launch directly into find sensor step from wizard.
65             launchFindSensor(null);
66         }
67     }
68
69     private void launchChooseLock() {
70         Intent intent = getChooseLockIntent();
71         long challenge = getSystemService(FingerprintManager.class).preEnroll();
72         intent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.MINIMUM_QUALITY_KEY,
73                 DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
74         intent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.HIDE_DISABLED_PREFS, true);
75         intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true);
76         intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
77         intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, true);
78         if (mUserId != UserHandle.USER_NULL) {
79             intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
80         }
81         startActivityForResult(intent, CHOOSE_LOCK_GENERIC_REQUEST);
82     }
83
84     private void launchFindSensor(byte[] token) {
85         Intent intent = getFindSensorIntent();
86         if (token != null) {
87             intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
88         }
89         if (mUserId != UserHandle.USER_NULL) {
90             intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
91         }
92         startActivityForResult(intent, FINGERPRINT_FIND_SENSOR_REQUEST);
93     }
94
95     protected Intent getChooseLockIntent() {
96         return new Intent(this, ChooseLockGeneric.class);
97     }
98
99     protected Intent getFindSensorIntent() {
100         Intent intent = new Intent(this, FingerprintEnrollFindSensor.class);
101         return intent;
102     }
103
104     @Override
105     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
106         if (resultCode == RESULT_FINISHED) {
107             if (requestCode == FINGERPRINT_FIND_SENSOR_REQUEST) {
108                 setResult(RESULT_OK);
109                 finish();
110             } else if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST) {
111                 updatePasswordQuality();
112                 byte[] token = data.getByteArrayExtra(
113                         ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
114                 launchFindSensor(token);
115             }
116         } else {
117             super.onActivityResult(requestCode, resultCode, data);
118         }
119     }
120
121     @Override
122     public void onClick(View v) {
123         if (v.getId() == R.id.cancel_button) {
124             finish();
125         }
126         if (v.getId() == R.id.learn_more_button) {
127             launchFingerprintHelp();
128         }
129         super.onClick(v);
130     }
131
132     private void launchFingerprintHelp() {
133         Intent helpIntent = HelpUtils.getHelpIntent(this,
134                 getString(R.string.help_url_fingerprint), getClass().getName());
135         startActivity(helpIntent);
136     }
137
138     @Override
139     protected int getMetricsCategory() {
140         return MetricsEvent.FINGERPRINT_ENROLL_INTRO;
141     }
142 }