15ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi/* 25ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * Copyright (C) 2015 The Android Open Source Project 35ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * 45ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License"); 55ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * you may not use this file except in compliance with the License. 65ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * You may obtain a copy of the License at 75ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * 85ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * http://www.apache.org/licenses/LICENSE-2.0 95ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * 105ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * Unless required by applicable law or agreed to in writing, software 115ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS, 125ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * See the License for the specific language governing permissions and 145ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * limitations under the License 155ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi */ 165ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 175ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggipackage com.android.settings.fingerprint; 185ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 195ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggiimport android.annotation.Nullable; 205ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggiimport android.content.Intent; 219990f397220703f4d2c922560a8e29e60bcce39fMaurice Lamimport android.content.res.Resources; 225ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggiimport android.graphics.Color; 235ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggiimport android.os.Bundle; 2440db4bbbb5dd262d801b0247fbfac39c7ab383b0Clara Bayarriimport android.os.UserHandle; 25e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinekimport android.text.TextUtils; 265ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggiimport android.view.View; 275ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggiimport android.widget.Button; 28e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinekimport android.widget.TextView; 295ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 305ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggiimport com.android.settings.R; 319990f397220703f4d2c922560a8e29e60bcce39fMaurice Lamimport com.android.settings.SetupWizardUtils; 322eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lamimport com.android.settings.core.InstrumentedActivity; 332eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lamimport com.android.settings.password.ChooseLockSettingsHelper; 34190ec1c14acbe305ac38d7d584a66ea57b7392faMaurice Lamimport com.android.setupwizardlib.GlifLayout; 355ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 365ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi/** 375ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi * Base activity for all fingerprint enrollment steps. 385ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi */ 391b8d5ffb47b674dd67ae6d56baa9ab3f42c8c024Chris Wrenpublic abstract class FingerprintEnrollBase extends InstrumentedActivity 401b8d5ffb47b674dd67ae6d56baa9ab3f42c8c024Chris Wren implements View.OnClickListener { 414fdcec71dce130be3363dba93e685789797fee8eSteven Ng public static final int RESULT_FINISHED = FingerprintSettings.RESULT_FINISHED; 42457904634cdb657f1aff2b7da8cd7be68412e299Jim Miller static final int RESULT_SKIP = FingerprintSettings.RESULT_SKIP; 43457904634cdb657f1aff2b7da8cd7be68412e299Jim Miller static final int RESULT_TIMEOUT = FingerprintSettings.RESULT_TIMEOUT; 445f8d7dbe52a7fe93fd8c8a224776914b56e12707Maurice Lam 455ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi protected byte[] mToken; 4640db4bbbb5dd262d801b0247fbfac39c7ab383b0Clara Bayarri protected int mUserId; 475ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 485ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi @Override 495ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi protected void onCreate(Bundle savedInstanceState) { 505ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi super.onCreate(savedInstanceState); 515ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi setTheme(R.style.Theme_FingerprintEnroll); 525ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi mToken = getIntent().getByteArrayExtra( 535ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN); 545ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi if (savedInstanceState != null && mToken == null) { 555ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi mToken = savedInstanceState.getByteArray( 565ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN); 575ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 5840db4bbbb5dd262d801b0247fbfac39c7ab383b0Clara Bayarri mUserId = getIntent().getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId()); 595ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 605ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 615ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi @Override 629990f397220703f4d2c922560a8e29e60bcce39fMaurice Lam protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) { 639990f397220703f4d2c922560a8e29e60bcce39fMaurice Lam resid = SetupWizardUtils.getTheme(getIntent()); 649990f397220703f4d2c922560a8e29e60bcce39fMaurice Lam super.onApplyThemeResource(theme, resid, first); 659990f397220703f4d2c922560a8e29e60bcce39fMaurice Lam } 669990f397220703f4d2c922560a8e29e60bcce39fMaurice Lam 679990f397220703f4d2c922560a8e29e60bcce39fMaurice Lam @Override 685ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi protected void onSaveInstanceState(Bundle outState) { 695ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi super.onSaveInstanceState(outState); 705ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi outState.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken); 715ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 725ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 735ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi @Override 745ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi protected void onPostCreate(@Nullable Bundle savedInstanceState) { 755ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi super.onPostCreate(savedInstanceState); 768d1f9c9be50439fa3f5f50fbe473e43ba6b77eb6Maurice Lam initViews(); 778d1f9c9be50439fa3f5f50fbe473e43ba6b77eb6Maurice Lam } 788d1f9c9be50439fa3f5f50fbe473e43ba6b77eb6Maurice Lam 798d1f9c9be50439fa3f5f50fbe473e43ba6b77eb6Maurice Lam protected void initViews() { 805ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi getWindow().setStatusBarColor(Color.TRANSPARENT); 815ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi Button nextButton = getNextButton(); 825ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi if (nextButton != null) { 835ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi nextButton.setOnClickListener(this); 845ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 855ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 865ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 87190ec1c14acbe305ac38d7d584a66ea57b7392faMaurice Lam protected GlifLayout getLayout() { 88190ec1c14acbe305ac38d7d584a66ea57b7392faMaurice Lam return (GlifLayout) findViewById(R.id.setup_wizard_layout); 895ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 905ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 91e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek protected void setHeaderText(int resId, boolean force) { 92190ec1c14acbe305ac38d7d584a66ea57b7392faMaurice Lam TextView layoutTitle = getLayout().getHeaderTextView(); 93e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek CharSequence previousTitle = layoutTitle.getText(); 94e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek CharSequence title = getText(resId); 95e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek if (previousTitle != title || force) { 96e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek if (!TextUtils.isEmpty(previousTitle)) { 97e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek layoutTitle.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE); 98e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek } 99190ec1c14acbe305ac38d7d584a66ea57b7392faMaurice Lam getLayout().setHeaderText(title); 100e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek setTitle(title); 101e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek } 102e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek } 103e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek 1045ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi protected void setHeaderText(int resId) { 105e5fc0bae7315ea22417ad17d54821c28558cbd36Selim Cinek setHeaderText(resId, false /* force */); 1065ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 1075ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 1085ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi protected Button getNextButton() { 1095ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi return (Button) findViewById(R.id.next_button); 1105ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 1115ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 1125ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi @Override 1135ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi public void onClick(View v) { 1145ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi if (v == getNextButton()) { 1155ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi onNextButtonClick(); 1165ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 1175ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 1185ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 1195ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi protected void onNextButtonClick() { 1205ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 1215ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi 1225ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi protected Intent getEnrollingIntent() { 1235ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi Intent intent = new Intent(); 1245ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi intent.setClassName("com.android.settings", FingerprintEnrollEnrolling.class.getName()); 1255ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, mToken); 12640db4bbbb5dd262d801b0247fbfac39c7ab383b0Clara Bayarri if (mUserId != UserHandle.USER_NULL) { 12740db4bbbb5dd262d801b0247fbfac39c7ab383b0Clara Bayarri intent.putExtra(Intent.EXTRA_USER_ID, mUserId); 12840db4bbbb5dd262d801b0247fbfac39c7ab383b0Clara Bayarri } 1295ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi return intent; 1305ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi } 1315ad75f07b1861b802b75c720830db260b4f93417Jorim Jaggi} 132