OSDN Git Service

Merge "Show a disclaimer about enabling vpn lockdown"
[android-x86/packages-apps-Settings.git] / src / com / android / settings / fingerprint / FingerprintEnrollSidecar.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.annotation.Nullable;
20 import android.app.Activity;
21 import android.content.Intent;
22 import android.hardware.fingerprint.FingerprintManager;
23 import android.os.Bundle;
24 import android.os.CancellationSignal;
25 import android.os.Handler;
26 import android.os.UserHandle;
27
28 import com.android.internal.logging.MetricsProto.MetricsEvent;
29 import com.android.settings.ChooseLockSettingsHelper;
30 import com.android.settings.Utils;
31 import com.android.settings.core.InstrumentedFragment;
32
33 /**
34  * Sidecar fragment to handle the state around fingerprint enrollment.
35  */
36 public class FingerprintEnrollSidecar extends InstrumentedFragment {
37
38     private int mEnrollmentSteps = -1;
39     private int mEnrollmentRemaining = 0;
40     private Listener mListener;
41     private boolean mEnrolling;
42     private CancellationSignal mEnrollmentCancel;
43     private Handler mHandler = new Handler();
44     private byte[] mToken;
45     private boolean mDone;
46     private int mUserId;
47     private FingerprintManager mFingerprintManager;
48
49     @Override
50     public void onCreate(@Nullable Bundle savedInstanceState) {
51         super.onCreate(savedInstanceState);
52         setRetainInstance(true);
53     }
54
55     @Override
56     public void onAttach(Activity activity) {
57         super.onAttach(activity);
58         mFingerprintManager = Utils.getFingerprintManagerOrNull(activity);
59         mToken = activity.getIntent().getByteArrayExtra(
60                 ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
61         mUserId = activity.getIntent().getIntExtra(Intent.EXTRA_USER_ID, UserHandle.USER_NULL);
62     }
63
64     @Override
65     public void onStart() {
66         super.onStart();
67         if (!mEnrolling) {
68             startEnrollment();
69         }
70     }
71
72     @Override
73     public void onStop() {
74         super.onStop();
75         if (!getActivity().isChangingConfigurations()) {
76             cancelEnrollment();
77         }
78     }
79
80     private void startEnrollment() {
81         mHandler.removeCallbacks(mTimeoutRunnable);
82         mEnrollmentSteps = -1;
83         mEnrollmentCancel = new CancellationSignal();
84         if (mUserId != UserHandle.USER_NULL) {
85             mFingerprintManager.setActiveUser(mUserId);
86         }
87         mFingerprintManager.enroll(mToken, mEnrollmentCancel,
88                 0 /* flags */, mUserId, mEnrollmentCallback);
89         mEnrolling = true;
90     }
91
92     boolean cancelEnrollment() {
93         mHandler.removeCallbacks(mTimeoutRunnable);
94         if (mEnrolling) {
95             mEnrollmentCancel.cancel();
96             mEnrolling = false;
97             mEnrollmentSteps = -1;
98             return true;
99         }
100         return false;
101     }
102
103     public void setListener(Listener listener) {
104         mListener = listener;
105     }
106
107     public int getEnrollmentSteps() {
108         return mEnrollmentSteps;
109     }
110
111     public int getEnrollmentRemaining() {
112         return mEnrollmentRemaining;
113     }
114
115     public boolean isDone() {
116         return mDone;
117     }
118
119     private FingerprintManager.EnrollmentCallback mEnrollmentCallback
120             = new FingerprintManager.EnrollmentCallback() {
121
122         @Override
123         public void onEnrollmentProgress(int remaining) {
124             if (mEnrollmentSteps == -1) {
125                 mEnrollmentSteps = remaining;
126             }
127             mEnrollmentRemaining = remaining;
128             mDone = remaining == 0;
129             if (mListener != null) {
130                 mListener.onEnrollmentProgressChange(mEnrollmentSteps, remaining);
131             }
132         }
133
134         @Override
135         public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) {
136             if (mListener != null) {
137                 mListener.onEnrollmentHelp(helpString);
138             }
139         }
140
141         @Override
142         public void onEnrollmentError(int errMsgId, CharSequence errString) {
143             if (mListener != null) {
144                 mListener.onEnrollmentError(errMsgId, errString);
145             }
146             mEnrolling = false;
147         }
148     };
149
150     private final Runnable mTimeoutRunnable = new Runnable() {
151         @Override
152         public void run() {
153             cancelEnrollment();
154         }
155     };
156
157     @Override
158     public int getMetricsCategory() {
159         return MetricsEvent.FINGERPRINT_ENROLL_SIDECAR;
160     }
161
162     public interface Listener {
163         void onEnrollmentHelp(CharSequence helpString);
164         void onEnrollmentError(int errMsgId, CharSequence errString);
165         void onEnrollmentProgressChange(int steps, int remaining);
166     }
167
168     public boolean isEnrolling() {
169         return mEnrolling;
170     }
171 }