Provide a way to customize biometric SafetySourceIssue
Add a new FeatureProvider for biometrics in FeatureFactory to provide a way to customize biometric SafetySourceIssue Bug: 370940762 Test: m Settings Test: m SettingsGoogle Test: m SettingsSpaUnitTests Test: m SettingsRoboTests Flag: com.android.settings.flags.biometrics_onboarding_education Change-Id: I4d11f3d3522ce5ac2f975cca7c041339f3ea6031
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (C) 2025 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.biometrics;
|
||||
|
||||
import android.safetycenter.SafetySourceIssue;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
public interface BiometricsFeatureProvider {
|
||||
|
||||
/** Returns a SafetySourceIssue for biometrics. */
|
||||
@Nullable
|
||||
SafetySourceIssue getSafetySourceIssue(@NonNull String sourceId);
|
||||
|
||||
/** Notifies that the action of an issue is launched */
|
||||
void notifySafetyIssueActionLaunched();
|
||||
}
|
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (C) 2025 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.biometrics;
|
||||
|
||||
import android.safetycenter.SafetySourceIssue;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
public class BiometricsFeatureProviderImpl implements BiometricsFeatureProvider {
|
||||
@Nullable
|
||||
@Override
|
||||
public SafetySourceIssue getSafetySourceIssue(@NonNull String sourceId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifySafetyIssueActionLaunched() {}
|
||||
}
|
@@ -20,6 +20,7 @@ import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider
|
||||
import com.android.settings.accessibility.AccessibilitySearchFeatureProvider
|
||||
import com.android.settings.accounts.AccountFeatureProvider
|
||||
import com.android.settings.applications.ApplicationFeatureProvider
|
||||
import com.android.settings.biometrics.BiometricsFeatureProvider
|
||||
import com.android.settings.biometrics.face.FaceFeatureProvider
|
||||
import com.android.settings.biometrics.fingerprint.FingerprintFeatureProvider
|
||||
import com.android.settings.bluetooth.BluetoothFeatureProvider
|
||||
@@ -107,6 +108,11 @@ abstract class FeatureFactory {
|
||||
*/
|
||||
abstract val bluetoothFeatureProvider: BluetoothFeatureProvider
|
||||
|
||||
/**
|
||||
* Retrieves implementation for Biometrics feature.
|
||||
*/
|
||||
abstract val biometricsFeatureProvider: BiometricsFeatureProvider
|
||||
|
||||
/**
|
||||
* Retrieves implementation for Face feature.
|
||||
*/
|
||||
|
@@ -27,6 +27,8 @@ import com.android.settings.accessibility.AccessibilitySearchFeatureProviderImpl
|
||||
import com.android.settings.accounts.AccountFeatureProvider
|
||||
import com.android.settings.accounts.AccountFeatureProviderImpl
|
||||
import com.android.settings.applications.ApplicationFeatureProviderImpl
|
||||
import com.android.settings.biometrics.BiometricsFeatureProvider
|
||||
import com.android.settings.biometrics.BiometricsFeatureProviderImpl
|
||||
import com.android.settings.biometrics.face.FaceFeatureProvider
|
||||
import com.android.settings.biometrics.face.FaceFeatureProviderImpl
|
||||
import com.android.settings.biometrics.fingerprint.FingerprintFeatureProvider
|
||||
@@ -145,6 +147,10 @@ open class FeatureFactoryImpl : FeatureFactory() {
|
||||
BluetoothFeatureProviderImpl()
|
||||
}
|
||||
|
||||
override val biometricsFeatureProvider: BiometricsFeatureProvider by lazy {
|
||||
BiometricsFeatureProviderImpl()
|
||||
}
|
||||
|
||||
override val faceFeatureProvider: FaceFeatureProvider by lazy { FaceFeatureProviderImpl() }
|
||||
|
||||
override val fingerprintFeatureProvider: FingerprintFeatureProvider by lazy {
|
||||
|
@@ -21,6 +21,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.safetycenter.SafetyEvent;
|
||||
import android.safetycenter.SafetySourceData;
|
||||
import android.safetycenter.SafetySourceIssue;
|
||||
import android.safetycenter.SafetySourceStatus;
|
||||
|
||||
/** Static helpers for setting SafetyCenter data for biometric safety sources. */
|
||||
@@ -42,6 +43,30 @@ public final class BiometricSourcesUtils {
|
||||
boolean enabled,
|
||||
boolean hasEnrolled,
|
||||
SafetyEvent safetyEvent) {
|
||||
setBiometricSafetySourceData(
|
||||
safetySourceId,
|
||||
context,
|
||||
title,
|
||||
summary,
|
||||
pendingIntent,
|
||||
enabled,
|
||||
hasEnrolled,
|
||||
safetyEvent,
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
/** Sets data for one of the biometrics sources */
|
||||
public static void setBiometricSafetySourceData(
|
||||
String safetySourceId,
|
||||
Context context,
|
||||
String title,
|
||||
String summary,
|
||||
PendingIntent pendingIntent,
|
||||
boolean enabled,
|
||||
boolean hasEnrolled,
|
||||
SafetyEvent safetyEvent,
|
||||
SafetySourceIssue safetySourceIssue) {
|
||||
int severityLevel =
|
||||
enabled && hasEnrolled
|
||||
? SafetySourceData.SEVERITY_LEVEL_INFORMATION
|
||||
@@ -52,8 +77,13 @@ public final class BiometricSourcesUtils {
|
||||
.setPendingIntent(pendingIntent)
|
||||
.setEnabled(enabled)
|
||||
.build();
|
||||
SafetySourceData safetySourceData =
|
||||
new SafetySourceData.Builder().setStatus(status).build();
|
||||
|
||||
SafetySourceData.Builder builder = new SafetySourceData.Builder().setStatus(status);
|
||||
if (safetySourceIssue != null) {
|
||||
builder.addIssue(safetySourceIssue);
|
||||
}
|
||||
SafetySourceData safetySourceData = builder.build();
|
||||
|
||||
|
||||
SafetyCenterManagerWrapper.get()
|
||||
.setSafetySourceData(context, safetySourceId, safetySourceData, safetyEvent);
|
||||
|
@@ -29,6 +29,7 @@ import android.safetycenter.SafetyEvent;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.biometrics.BiometricNavigationUtils;
|
||||
import com.android.settings.biometrics.face.FaceStatusUtils;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.RestrictedLockUtils;
|
||||
|
||||
/** Face biometrics Safety Source for Safety Center. */
|
||||
@@ -87,7 +88,9 @@ public final class FaceSafetySource {
|
||||
REQUEST_CODE_FACE_SETTING),
|
||||
disablingAdmin == null /* enabled */,
|
||||
faceStatusUtils.hasEnrolled(),
|
||||
safetyEvent);
|
||||
safetyEvent,
|
||||
FeatureFactory.getFeatureFactory().getBiometricsFeatureProvider()
|
||||
.getSafetySourceIssue(SAFETY_SOURCE_ID));
|
||||
|
||||
return;
|
||||
}
|
||||
|
@@ -29,6 +29,7 @@ import android.safetycenter.SafetyEvent;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.biometrics.BiometricNavigationUtils;
|
||||
import com.android.settings.biometrics.fingerprint.FingerprintStatusUtils;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.RestrictedLockUtils;
|
||||
|
||||
/** Fingerprint biometrics Safety Source for Safety Center. */
|
||||
@@ -89,7 +90,9 @@ public final class FingerprintSafetySource {
|
||||
REQUEST_CODE_FINGERPRINT_SETTING),
|
||||
disablingAdmin == null /* enabled */,
|
||||
fingerprintStatusUtils.hasEnrolled(),
|
||||
safetyEvent);
|
||||
safetyEvent,
|
||||
FeatureFactory.getFeatureFactory().getBiometricsFeatureProvider()
|
||||
.getSafetySourceIssue(SAFETY_SOURCE_ID));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -23,6 +23,7 @@ import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider;
|
||||
import com.android.settings.accessibility.AccessibilitySearchFeatureProvider;
|
||||
import com.android.settings.accounts.AccountFeatureProvider;
|
||||
import com.android.settings.applications.ApplicationFeatureProvider;
|
||||
import com.android.settings.biometrics.BiometricsFeatureProvider;
|
||||
import com.android.settings.biometrics.face.FaceFeatureProvider;
|
||||
import com.android.settings.biometrics.fingerprint.FingerprintFeatureProvider;
|
||||
import com.android.settings.bluetooth.BluetoothFeatureProvider;
|
||||
@@ -80,6 +81,7 @@ public class FakeFeatureFactory extends FeatureFactory {
|
||||
public final UserFeatureProvider userFeatureProvider;
|
||||
public final AccountFeatureProvider mAccountFeatureProvider;
|
||||
public final BluetoothFeatureProvider mBluetoothFeatureProvider;
|
||||
public final BiometricsFeatureProvider mBiometricsFeatureProvider;
|
||||
public final FaceFeatureProvider mFaceFeatureProvider;
|
||||
public final FingerprintFeatureProvider mFingerprintFeatureProvider;
|
||||
|
||||
@@ -135,6 +137,7 @@ public class FakeFeatureFactory extends FeatureFactory {
|
||||
mContextualCardFeatureProvider = mock(ContextualCardFeatureProvider.class);
|
||||
panelFeatureProvider = mock(PanelFeatureProvider.class);
|
||||
mBluetoothFeatureProvider = mock(BluetoothFeatureProvider.class);
|
||||
mBiometricsFeatureProvider = mock(BiometricsFeatureProvider.class);
|
||||
mFaceFeatureProvider = mock(FaceFeatureProvider.class);
|
||||
mFingerprintFeatureProvider = mock(FingerprintFeatureProvider.class);
|
||||
wifiTrackerLibProvider = mock(WifiTrackerLibProvider.class);
|
||||
@@ -258,6 +261,11 @@ public class FakeFeatureFactory extends FeatureFactory {
|
||||
return mBluetoothFeatureProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiometricsFeatureProvider getBiometricsFeatureProvider() {
|
||||
return mBiometricsFeatureProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FaceFeatureProvider getFaceFeatureProvider() {
|
||||
return mFaceFeatureProvider;
|
||||
|
@@ -21,6 +21,7 @@ import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider
|
||||
import com.android.settings.accessibility.AccessibilitySearchFeatureProvider
|
||||
import com.android.settings.accounts.AccountFeatureProvider
|
||||
import com.android.settings.applications.ApplicationFeatureProvider
|
||||
import com.android.settings.biometrics.BiometricsFeatureProvider
|
||||
import com.android.settings.biometrics.face.FaceFeatureProvider
|
||||
import com.android.settings.biometrics.fingerprint.FingerprintFeatureProvider
|
||||
import com.android.settings.bluetooth.BluetoothFeatureProvider
|
||||
@@ -114,6 +115,8 @@ class FakeFeatureFactory : FeatureFactory() {
|
||||
|
||||
override val bluetoothFeatureProvider: BluetoothFeatureProvider
|
||||
get() = TODO("Not yet implemented")
|
||||
override val biometricsFeatureProvider: BiometricsFeatureProvider
|
||||
get() = TODO("Not yet implemented")
|
||||
override val faceFeatureProvider: FaceFeatureProvider
|
||||
get() = TODO("Not yet implemented")
|
||||
override val fingerprintFeatureProvider: FingerprintFeatureProvider
|
||||
|
@@ -23,6 +23,7 @@ import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider;
|
||||
import com.android.settings.accessibility.AccessibilitySearchFeatureProvider;
|
||||
import com.android.settings.accounts.AccountFeatureProvider;
|
||||
import com.android.settings.applications.ApplicationFeatureProvider;
|
||||
import com.android.settings.biometrics.BiometricsFeatureProvider;
|
||||
import com.android.settings.biometrics.face.FaceFeatureProvider;
|
||||
import com.android.settings.biometrics.fingerprint.FingerprintFeatureProvider;
|
||||
import com.android.settings.bluetooth.BluetoothFeatureProvider;
|
||||
@@ -79,6 +80,7 @@ public class FakeFeatureFactory extends FeatureFactory {
|
||||
public final UserFeatureProvider userFeatureProvider;
|
||||
public final AccountFeatureProvider mAccountFeatureProvider;
|
||||
public final BluetoothFeatureProvider mBluetoothFeatureProvider;
|
||||
public final BiometricsFeatureProvider mBiometricsFeatureProvider;
|
||||
public final FaceFeatureProvider mFaceFeatureProvider;
|
||||
public final FingerprintFeatureProvider mFingerprintFeatureProvider;
|
||||
|
||||
@@ -136,6 +138,7 @@ public class FakeFeatureFactory extends FeatureFactory {
|
||||
mContextualCardFeatureProvider = mock(ContextualCardFeatureProvider.class);
|
||||
panelFeatureProvider = mock(PanelFeatureProvider.class);
|
||||
mBluetoothFeatureProvider = mock(BluetoothFeatureProvider.class);
|
||||
mBiometricsFeatureProvider = mock(BiometricsFeatureProvider.class);
|
||||
mFaceFeatureProvider = mock(FaceFeatureProvider.class);
|
||||
mFingerprintFeatureProvider = mock(FingerprintFeatureProvider.class);
|
||||
wifiTrackerLibProvider = mock(WifiTrackerLibProvider.class);
|
||||
@@ -259,6 +262,11 @@ public class FakeFeatureFactory extends FeatureFactory {
|
||||
return mBluetoothFeatureProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BiometricsFeatureProvider getBiometricsFeatureProvider() {
|
||||
return mBiometricsFeatureProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FaceFeatureProvider getFaceFeatureProvider() {
|
||||
return mFaceFeatureProvider;
|
||||
|
Reference in New Issue
Block a user