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