Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ac1d25c authored by Curtis Belmonte's avatar Curtis Belmonte
Browse files

Finish biometric enroll screens when backgrounded

Currently, there are some biometric security setting and enrollment
screens which remain open after the user has backgrounded them. This
means that they can later be resumed without requiring the user to
confirm their device credential as normal.

This commit fixes the issue in AOSP by adding logic to the affected
biometric enrollment/setting activities in to finish() with
RESULT_TIMEOUT in onStop(). We don't want to finish() these activities
prematurely if the user is currently in a wizard setup flow, however. In
that case, this commit ensures that the newly added logic will not run.

Test: Pixel 3 - Background at each step of fingerprint enroll => finish
Test: Pixel 3 - Rotate at each step of fingerprint enroll => no finish
Test: Pixel 3 - Proceed though fingerprint setup wizard => no change

Bug: 142544519
Change-Id: I8ec0fa1e30bafe097d9dc82991ff786ebf24844b
parent 6b7b92ce
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import com.android.settings.password.ChooseLockSettingsHelper;

import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupcompat.util.WizardManagerHelper;
import com.google.android.setupdesign.GlifLayout;

/**
@@ -120,6 +121,19 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity {
        initViews();
    }

    @Override
    protected void onStop() {
        super.onStop();
        if (!isChangingConfigurations() && shouldFinishWhenBackgrounded()) {
            setResult(RESULT_TIMEOUT);
            finish();
        }
    }

    protected boolean shouldFinishWhenBackgrounded() {
        return !WizardManagerHelper.isAnySetupWizard(getIntent());
    }

    protected void initViews() {
        getWindow().setStatusBarColor(Color.TRANSPARENT);
    }
+7 −1
Original line number Diff line number Diff line
@@ -178,6 +178,11 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
        }
    }

    @Override
    protected boolean shouldFinishWhenBackgrounded() {
        return super.shouldFinishWhenBackgrounded() && !mConfirmingCredentials && !mNextClicked;
    }

    private void updatePasswordQuality() {
        final int passwordQuality = new ChooseLockSettingsHelper(this).utils()
                .getActivePasswordQuality(mUserManager.getCredentialOwnerProfile(mUserId));
@@ -243,7 +248,8 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST) {
            if (resultCode == RESULT_FINISHED || resultCode == RESULT_SKIP) {
            if (resultCode == RESULT_FINISHED || resultCode == RESULT_SKIP
                    || resultCode == RESULT_TIMEOUT) {
                setResult(resultCode, data);
                finish();
                return;
+5 −1
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import android.view.View;
import com.android.settings.R;
import com.android.settings.password.ChooseLockSettingsHelper;

import com.google.android.setupcompat.util.WizardManagerHelper;

/**
 * Abstract base activity which handles the actual enrolling for biometrics.
 */
@@ -58,7 +60,6 @@ public abstract class BiometricsEnrollEnrolling extends BiometricEnrollBase

    @Override
    protected void onStop() {
        super.onStop();
        if (mSidecar != null) {
            mSidecar.setListener(null);
        }
@@ -69,6 +70,9 @@ public abstract class BiometricsEnrollEnrolling extends BiometricEnrollBase
                getSupportFragmentManager()
                        .beginTransaction().remove(mSidecar).commitAllowingStateLoss();
            }
            if (!WizardManagerHelper.isAnySetupWizard(getIntent())) {
                setResult(RESULT_TIMEOUT);
            }
            finish();
        }
    }
+6 −14
Original line number Diff line number Diff line
@@ -16,17 +16,13 @@

package com.android.settings.biometrics.face;

import static android.security.KeyStore.getApplicationContext;

import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.hardware.face.FaceManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.View;
import android.view.accessibility.AccessibilityManager;
@@ -173,14 +169,8 @@ public class FaceEnrollEducation extends BiometricEnrollBase {
    }

    @Override
    protected void onStop() {
        super.onStop();

        if (!isChangingConfigurations() && !WizardManagerHelper.isAnySetupWizard(getIntent())
                && !mNextClicked) {
            setResult(RESULT_SKIP);
            finish();
        }
    protected boolean shouldFinishWhenBackgrounded() {
        return super.shouldFinishWhenBackgrounded() && !mNextClicked;
    }

    @Override
@@ -216,11 +206,13 @@ public class FaceEnrollEducation extends BiometricEnrollBase {

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        mResultIntent = data;
        if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST) {
            // If the user finished or skipped enrollment, finish this activity
            if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED) {
                setResult(resultCode);
            if (resultCode == RESULT_FINISHED || resultCode == RESULT_SKIP
                    || resultCode == RESULT_TIMEOUT) {
                setResult(resultCode, data);
                finish();
            }
        }
+0 −10
Original line number Diff line number Diff line
@@ -99,16 +99,6 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
        footer2.setText(footer2TextResource);
    }

    @Override
    protected void onStop() {
        super.onStop();

        if (!isChangingConfigurations() && !mConfirmingCredentials && !mNextClicked
                && !WizardManagerHelper.isAnySetupWizard(getIntent())) {
            finish();
        }
    }

    @Override
    protected boolean isDisabledByAdmin() {
        return RestrictedLockUtilsInternal.checkIfKeyguardFeaturesDisabled(
Loading