• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.Activity;
20 import android.app.KeyguardManager;
21 import android.app.admin.DevicePolicyManager;
22 import android.content.Intent;
23 import android.os.Bundle;
24 import android.os.UserHandle;
25 import android.widget.Button;
26 import android.widget.TextView;
27 
28 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
29 import com.android.internal.widget.LockPatternUtils;
30 import com.android.settings.R;
31 import com.android.settings.SetupWizardUtils;
32 import com.android.settings.password.ChooseLockGeneric.ChooseLockGenericFragment;
33 import com.android.settings.password.SetupChooseLockGeneric;
34 import com.android.settings.password.SetupSkipDialog;
35 import com.android.settings.password.StorageManagerWrapper;
36 
37 public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntroduction {
38     private static final String KEY_LOCK_SCREEN_PRESENT = "wasLockScreenPresent";
39     private boolean mAlreadyHadLockScreenSetup = false;
40 
41     @Override
onCreate(Bundle savedInstanceState)42     protected void onCreate(Bundle savedInstanceState) {
43         super.onCreate(savedInstanceState);
44         if (savedInstanceState == null) {
45             mAlreadyHadLockScreenSetup = isKeyguardSecure();
46         } else {
47             mAlreadyHadLockScreenSetup = savedInstanceState.getBoolean(
48                     KEY_LOCK_SCREEN_PRESENT, false);
49         }
50     }
51 
52     @Override
onSaveInstanceState(Bundle outState)53     protected void onSaveInstanceState(Bundle outState) {
54         super.onSaveInstanceState(outState);
55         outState.putBoolean(KEY_LOCK_SCREEN_PRESENT, mAlreadyHadLockScreenSetup);
56     }
57 
58     @Override
getChooseLockIntent()59     protected Intent getChooseLockIntent() {
60         Intent intent = new Intent(this, SetupChooseLockGeneric.class);
61 
62         if (StorageManagerWrapper.isFileEncryptedNativeOrEmulated()) {
63             intent.putExtra(
64                     LockPatternUtils.PASSWORD_TYPE_KEY,
65                     DevicePolicyManager.PASSWORD_QUALITY_NUMERIC);
66             intent.putExtra(ChooseLockGenericFragment.EXTRA_SHOW_OPTIONS_BUTTON, true);
67         }
68         SetupWizardUtils.copySetupExtras(getIntent(), intent);
69         return intent;
70     }
71 
72     @Override
getFindSensorIntent()73     protected Intent getFindSensorIntent() {
74         final Intent intent = new Intent(this, SetupFingerprintEnrollFindSensor.class);
75         SetupWizardUtils.copySetupExtras(getIntent(), intent);
76         return intent;
77     }
78 
79     @Override
initViews()80     protected void initViews() {
81         super.initViews();
82 
83         TextView description = (TextView) findViewById(R.id.description_text);
84         description.setText(
85                 R.string.security_settings_fingerprint_enroll_introduction_message_setup);
86 
87         Button nextButton = getNextButton();
88         nextButton.setText(
89                 R.string.security_settings_fingerprint_enroll_introduction_continue_setup);
90 
91         final Button cancelButton = (Button) findViewById(R.id.fingerprint_cancel_button);
92         cancelButton.setText(
93                 R.string.security_settings_fingerprint_enroll_introduction_cancel_setup);
94     }
95 
96     @Override
onActivityResult(int requestCode, int resultCode, Intent data)97     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
98         // if lock was already present, do not return intent data since it must have been
99         // reported in previous attempts
100         if (requestCode == FINGERPRINT_FIND_SENSOR_REQUEST && isKeyguardSecure()
101                 && !mAlreadyHadLockScreenSetup) {
102             data = getMetricIntent(data);
103         }
104         super.onActivityResult(requestCode, resultCode, data);
105     }
106 
getMetricIntent(Intent data)107     private Intent getMetricIntent(Intent data) {
108         if (data == null) {
109             data = new Intent();
110         }
111         LockPatternUtils lockPatternUtils = new LockPatternUtils(this);
112         data.putExtra(SetupChooseLockGeneric.
113                 SetupChooseLockGenericFragment.EXTRA_PASSWORD_QUALITY,
114                 lockPatternUtils.getKeyguardStoredPasswordQuality(UserHandle.myUserId()));
115         return data;
116     }
117 
118     @Override
onCancelButtonClick()119     protected void onCancelButtonClick() {
120         if (isKeyguardSecure()) {
121             // If the keyguard is already set up securely (maybe the user added a backup screen
122             // lock and skipped fingerprint), return RESULT_SKIP directly.
123             setResult(RESULT_SKIP, mAlreadyHadLockScreenSetup ? null : getMetricIntent(null));
124             finish();
125         } else {
126             setResult(SetupSkipDialog.RESULT_SKIP);
127             finish();
128         }
129     }
130 
131     /**
132      * Propagate lock screen metrics if the user goes back from the fingerprint setup screen
133      * after having added lock screen to his device.
134      */
135     @Override
onBackPressed()136     public void onBackPressed() {
137         if (!mAlreadyHadLockScreenSetup && isKeyguardSecure()) {
138             setResult(Activity.RESULT_CANCELED, getMetricIntent(null));
139         }
140         super.onBackPressed();
141     }
142 
isKeyguardSecure()143     private boolean isKeyguardSecure() {
144         return getSystemService(KeyguardManager.class).isKeyguardSecure();
145     }
146 
147     @Override
getMetricsCategory()148     public int getMetricsCategory() {
149         return MetricsEvent.FINGERPRINT_ENROLL_INTRO_SETUP;
150     }
151 }
152