Personalizar Centro de Segurança

Ativar ou desativar a Central de Segurança

Para ativar ou desativar o Safety Center, use o campo booleano sobreposto config_enableSafetyCenter no arquivo frameworks/base/core/res/res/values/config.xml .

Na maioria dos dispositivos, o Safety Center é compatível por padrão, por exemplo, em telefones e tablets. Em alguns formatos, a Central de segurança está desabilitada por padrão, por exemplo, em Automático, TV e Wear.

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <!-- ... -->
   <!-- Determines whether SafetyCenter feature is enabled. -->
    <bool name="config_enableSafetyCenter">true</bool>
    <!-- ... -->
</resources>

Para oferecer suporte ao Safety Center, defina config_enableSafetyCenter como true . Se você não quiser oferecer suporte ao Safety Center, defina esse valor como false para desativá-lo.

Quando a Central de Segurança está desativada, qualquer tentativa de redirecionar para a página Segurança e Privacidade abre o aplicativo Configurações. Qualquer tentativa de interagir com as APIs é ignorada silenciosamente ou retorna um valor padrão. O bloco Configurações rápidas associado e a entrada Configurações também são expostos ou ocultos dependendo se a Central de segurança está habilitada.

Sinalizador DeviceConfig

Além de ativar o Safety Center usando a configuração config_enableSafetyCenter , um sinalizador DeviceConfig ( safety_center_is_enabled ) é usado para ativar ou desativar remotamente o Safety Center.

No Android 14 e versões posteriores, nenhuma ação adicional é necessária, pois esse sinalizador é true por padrão.

No Android 13, a Central de Segurança é desabilitada por padrão no servidor e habilitada pela lista de permissões usando esta sinalização. Envie as impressões digitais do seu dispositivo e entre em contato com o seu TAM para ser adicionado à lista de permissões. Observe que a versão principal M-2022-11 ou superior deve ser adicionada à lista de permissões. Para desenvolvimento e testes locais, o sinalizador pode ser ativado ou desativado localmente (até uma reinicialização) com um comando adb . Por exemplo, para ativar o sinalizador:

adb root
adb shell device_config set_sync_disabled_for_tests until_reboot
adb shell device_config put privacy safety_center_is_enabled true

E para confirmar se o Safety Center está ativado:

adb root
adb shell cmd safety_center enabled

A saída retornará se o Safety Center está habilitado corretamente no dispositivo.

Atualizar o arquivo de configuração

Use o arquivo de configuração safety_center_config.xml para modificar o conteúdo da tela do Safety Center. Você pode sobrepor esse arquivo presumindo que atendeu aos Requisitos de personalização .

Sobreponha o arquivo de configuração

Para sobrepor o arquivo safety_center_config.xml , consulte Alterar o valor dos recursos de um aplicativo em tempo de execução para obter informações sobre como modificar sobreposições de recursos de tempo de execução (RROs).

No Android 14, certifique-se de sobrepor o arquivo res/raw-v34/safety_center_config.xml e não o res/raw/safety_center_config.xml pois o primeiro tem precedência (isso também se aplica a outros arquivos com escopo para v34 , por exemplo, res/values-v34/strings.xml ). O pacote de sobreposição deve ter um SDK mínimo inferior a 34 , caso contrário, o qualificador v34 poderá ser removido durante a otimização. Certifique-se também de usar uma sobreposição estática, pois esse valor é carregado durante a inicialização.

Para dispositivos Android Open Source Project (AOSP), direcione o pacote com.android.safetycenter.resources . Não há configuração de sobreposição para segmentar. Todos os recursos podem ser sobrepostos sem restrição de conteúdo.

Para dispositivos GMS configurados para receber atualizações do Mainline, direcione o pacote com.google.android.safetycenter.resources . Direcione a configuração SafetyCenterConfig . Esta configuração requer que o pacote de sobreposição esteja na partição product , system ou vendor . Os OEMs do GMS devem copiar o arquivo safety_center_config.xml fornecido pelo Google e limitar as modificações àquelas permitidas pelos testes do GTS . A definição da sobreposição deve ser próxima a esta:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.overlay.package"
    android:versionCode="1"
    android:versionName="1.0">
    <application android:hasCode="false" />
    <overlay
      android:targetPackage="com.google.android.safetycenter.resources"
      android:targetName="SafetyCenterConfig"
      android:isStatic="true"
      android:priority="0"/>
</manifest>

Para dispositivos GMS que não estão configurados para receber atualizações do Mainline, direcione o pacote com.android.safetycenter.resources . Não há configuração de sobreposição para segmentar. O pacote de sobreposição deve usar o nome do pacote com.google.android.safetycenter.resources .

Os OEMs do GMS devem copiar o arquivo safety_center_config.xml fornecido pelo Google e limitar as modificações àquelas permitidas pelos testes do GTS. Os OEMs de GMS também devem definir as strings usadas na configuração XML.

Estrutura de arquivo

Em um nível superior, o arquivo safety_center_config.xml é uma lista de fontes de segurança. Essas fontes de segurança são organizadas em grupos para gerenciar os sinais na tela da Central de Segurança, por exemplo, App Security ou Screen Lock. A ordem desta lista define a ordem de exibição:

<safety-center-config> <!-- Wrapper for the Safety Center configuration -->
    <safety-sources-config>< !-- Wrapper for the safety sources groups -->
        <safety-sources-group> <!-- Contains information about a safety sources group -->
            <dynamic-safety-source /> <!-- Contains information about a safety source -->
            <!-- More safety sources in the group -->
        </safety-sources-group> <!-- More safety sources groups -->
    </safety-sources-config>
</safety-center-config>

Arquivo de configuração do Google

O arquivo de configuração AOSP está localizado em packages/modules/Permission/SafetyCenter/Resources/res/raw/safety_center_config.xml .

No Android 13, o arquivo de configuração do Google é:

<safety-center-config>
    <safety-sources-config>
        <safety-sources-group
            id="GoogleAppSecuritySources"
            title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
            <dynamic-safety-source
                id="GooglePlayProtect"
                packageName="com.android.vending"
                profile="all_profiles"
                intentAction="com.google.android.finsky.PLAY_PROTECT"
                title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GoogleAppProtectionService"
                packageName="com.google.android.odad"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                loggingAllowed="false"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidLockScreenSources"
            title="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_summary">
            <dynamic-safety-source
                id="AndroidLockScreen"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
                summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
                initialDisplayState="disabled"
                maxSeverityLevel="300"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="AndroidBiometrics"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_biometrics_title"
                summary="@com.google.android.safetycenter.resources:string/google_biometrics_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_biometrics_search_terms"
                initialDisplayState="@com.google.android.safetycenter.resources:string/google_biometrics_initial_display_state"
                maxSeverityLevel="0"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleAccountsSources"
            title="@com.google.android.safetycenter.resources:string/google_accounts_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_accounts_sources_summary">
            <dynamic-safety-source
                id="GoogleSecurityCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                intentAction="com.google.android.gms.accountsettings.action.SAFETY_CENTER_SECURITY_CHECKUP"
                title="@com.google.android.safetycenter.resources:string/google_security_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_security_checkup_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_security_checkup_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_checkup_search_terms"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleDeviceFinderSources"
            title="@com.google.android.safetycenter.resources:string/google_device_finder_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_device_finder_sources_summary">
            <dynamic-safety-source
                id="GoogleFindMyDevice"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="com.google.android.gms.settings.FIND_MY_DEVICE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_find_my_device_title"
                summary="@com.google.android.safetycenter.resources:string/google_find_my_device_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_find_my_device_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GoogleRogueTag"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleUpdateSources"
            title="@com.google.android.safetycenter.resources:string/google_updates_title"
            summary="@com.google.android.safetycenter.resources:string/google_updates_summary">
            <dynamic-safety-source
                id="GoogleSecurityUpdates"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="@com.google.android.safetycenter.resources:string/google_security_updates_intent"
                title="@com.google.android.safetycenter.resources:string/google_security_updates_title"
                summary="@com.google.android.safetycenter.resources:string/google_security_updates_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_updates_search_terms"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GooglePlaySystemUpdate"
                packageName="com.android.vending"
                profile="primary_profile_only"
                intentAction="android.settings.MODULE_UPDATE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_play_system_update_title"
                summary="@com.google.android.safetycenter.resources:string/google_play_system_update_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_system_update_search_terms"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidPrivacySources"
            title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary"
            statelessIconType="privacy">
            <static-safety-source
                id="AndroidPermissionUsage"
                profile="primary_profile_only"
                intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
                title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
            <static-safety-source
                id="AndroidPermissionManager"
                profile="primary_profile_only"
                intentAction="android.intent.action.MANAGE_PERMISSIONS"
                title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
            <static-safety-source
                id="AndroidPrivacyControls"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
                summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
            <issue-only-safety-source
                id="AndroidAccessibility"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidNotificationListener"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidBackgroundLocation"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidPermissionAutoRevoke"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidAdvancedSources"
            title="@com.google.android.safetycenter.resources:string/google_advanced_title">
            <dynamic-safety-source
                id="AndroidWorkPolicyInfo"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
            <static-safety-source
                id="AndroidAdvancedSecurity"
                profile="primary_profile_only"
                intentAction="com.android.settings.security.SECURITY_ADVANCED_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_advanced_security_title"
                summary="@com.google.android.safetycenter.resources:string/google_advanced_security_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_security_search_terms"/>
            <static-safety-source
                id="AndroidAdvancedPrivacy"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_ADVANCED_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_advanced_privacy_title"
                summary="@com.google.android.safetycenter.resources:string/google_advanced_privacy_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_privacy_search_terms"/>
        </safety-sources-group>
    </safety-sources-config>
</safety-center-config>

No Android 14, o arquivo de configuração do Google é:

<safety-center-config>
    <safety-sources-config>
        <safety-sources-group
            id="GoogleAppSecuritySources"
            title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
            <dynamic-safety-source
                id="GooglePlayProtect"
                packageName="com.android.vending"
                profile="all_profiles"
                intentAction="com.google.android.finsky.PLAY_PROTECT"
                title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
                notificationsAllowed="true"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                deduplicationGroup="AppSecurity"/>
            <issue-only-safety-source
                id="GoogleAppProtectionService"
                packageName="com.google.android.odad"
                profile="primary_profile_only"
                loggingAllowed="false"
                deduplicationGroup="AppSecurity"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidLockScreenSources"
            title="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_lock_screen_sources_summary">
            <dynamic-safety-source
                id="AndroidLockScreen"
                packageName="com.android.settings"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
                summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
                initialDisplayState="disabled"
                notificationsAllowed="true"
                maxSeverityLevel="300"/>
            <dynamic-safety-source
                id="AndroidBiometrics"
                packageName="com.android.settings"
                profile="all_profiles"
                title="@com.google.android.safetycenter.resources:string/google_biometrics_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_biometrics_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_biometrics_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_biometrics_search_terms"
                initialDisplayState="@com.google.android.safetycenter.resources:string/google_biometrics_initial_display_state"
                maxSeverityLevel="0"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleAccountsSources"
            title="@com.google.android.safetycenter.resources:string/google_accounts_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_accounts_sources_summary">
            <dynamic-safety-source
                id="GoogleSecurityCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                intentAction="com.google.android.gms.accountsettings.action.SAFETY_CENTER_SECURITY_CHECKUP"
                title="@com.google.android.safetycenter.resources:string/google_security_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_security_checkup_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_security_checkup_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_checkup_search_terms"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                refreshOnPageOpenAllowed="true"/>
            <dynamic-safety-source
                id="GooglePasswordCheckup"
                packageName="com.google.android.gms"
                profile="all_profiles"
                title="@com.google.android.safetycenter.resources:string/google_password_checkup_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_password_checkup_title_for_work"
                searchTerms="@com.google.android.safetycenter.resources:string/google_password_checkup_search_terms"
                initialDisplayState="hidden"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                refreshOnPageOpenAllowed="false"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleDeviceFinderSources"
            title="@com.google.android.safetycenter.resources:string/google_device_finder_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_device_finder_sources_summary">
            <dynamic-safety-source
                id="GoogleFindMyDevice"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="com.google.android.gms.settings.FIND_MY_DEVICE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_find_my_device_title"
                summary="@com.google.android.safetycenter.resources:string/google_find_my_device_summary"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_find_my_device_search_terms"/>
            <dynamic-safety-source
                id="GoogleRogueTag"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                initialDisplayState="hidden"/>
        </safety-sources-group>
        <safety-sources-group
            id="GoogleUpdateSources"
            title="@com.google.android.safetycenter.resources:string/google_updates_title"
            summary="@com.google.android.safetycenter.resources:string/google_updates_summary">
            <dynamic-safety-source
                id="GoogleSecurityUpdates"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                intentAction="@com.google.android.safetycenter.resources:string/google_security_updates_intent"
                title="@com.google.android.safetycenter.resources:string/google_security_updates_title"
                summary="@com.google.android.safetycenter.resources:string/google_security_updates_summary"
                notificationsAllowed="true"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_security_updates_search_terms"/>
            <dynamic-safety-source
                id="GooglePlaySystemUpdate"
                packageName="com.android.vending"
                profile="primary_profile_only"
                intentAction="android.settings.MODULE_UPDATE_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_play_system_update_title"
                summary="@com.google.android.safetycenter.resources:string/google_play_system_update_summary"
                notificationsAllowed="true"
                deduplicationGroup="AccountRequired"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_play_system_update_search_terms"/>
            <dynamic-safety-source
                id="GoogleBackupAndRestore"
                packageName="com.google.android.gms"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                title="@com.google.android.safetycenter.resources:string/google_backup_title"
                packageCertificateHashes="1975b2f17177bc89a5dff31f9e64a6cae281a53dc1d1d59b1d147fe1c82afa00,f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83,d22cc500299fb22873a01a010de1c82fbe4d061119b94814dd301dab50cb7678,7ce83c1b71f3d572fed04c8d40c5cb10ff75e6d87d9df6fbd53f0468c2905053"
                searchTerms="@com.google.android.safetycenter.resources:string/google_backup_search_terms"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidPrivacySources"
            title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
            summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary"
            statelessIconType="privacy">
            <static-safety-source
                id="AndroidPermissionManager"
                profile="primary_profile_only"
                intentAction="android.intent.action.MANAGE_PERMISSIONS"
                title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
            <static-safety-source
                id="AndroidPermissionUsage"
                profile="primary_profile_only"
                intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
                title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
                summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
            <static-safety-source
                id="GoogleAdsIdentity"
                profile="all_profiles"
                packageName="com.google.android.gms"
                intentAction="com.google.android.gms.adsidentity.ACTION_ADS_IDENTITY_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_ads_identity_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_ads_identity_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_ads_identity_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_ads_identity_search_terms"/>
            <dynamic-safety-source
                id="AndroidHealthConnect"
                profile="primary_profile_only"
                packageName="com.google.android.healthconnect.controller"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="false"
                title="@com.google.android.safetycenter.resources:string/google_health_connect_title"
                searchTerms="@com.google.android.safetycenter.resources:string/google_health_connect_search_terms"/>
            <dynamic-safety-source
                id="AndroidPrivacyAppDataSharingUpdates"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"
                title="@com.google.android.safetycenter.resources:string/google_app_data_sharing_updates_title"
                searchTerms="@com.google.android.safetycenter.resources:string/google_app_data_sharing_updates_search_terms"/>
            <static-safety-source
                id="AndroidPrivacyControls"
                profile="primary_profile_only"
                intentAction="android.settings.PRIVACY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
                summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
            <static-safety-source
                id="GoogleActivityControls"
                profile="all_profiles"
                packageName="com.google.android.gms"
                intentAction="com.google.android.gms.accountsettings.action.ACTIVITY_CONTROLS"
                title="@com.google.android.safetycenter.resources:string/google_activity_controls_title"
                titleForWork="@com.google.android.safetycenter.resources:string/google_activity_controls_title_for_work"
                summary="@com.google.android.safetycenter.resources:string/google_activity_controls_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_activity_controls_search_terms"/>
            <issue-only-safety-source
                id="AndroidAccessibility"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidNotificationListener"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidBackgroundLocation"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
            <issue-only-safety-source
                id="AndroidPermissionAutoRevoke"
                packageName="com.google.android.permissioncontroller"
                profile="all_profiles"
                notificationsAllowed="true"
                refreshOnPageOpenAllowed="true"/>
        </safety-sources-group>
        <safety-sources-group
            id="AndroidAdvancedSources"
            title="@com.google.android.safetycenter.resources:string/google_advanced_title">
            <dynamic-safety-source
                id="AndroidWorkPolicyInfo"
                packageName="com.google.android.permissioncontroller"
                profile="primary_profile_only"
                title="@com.google.android.safetycenter.resources:string/google_work_policy_title"
                initialDisplayState="hidden"
                refreshOnPageOpenAllowed="true"/>
            <static-safety-source
                id="AndroidMoreSettings"
                profile="primary_profile_only"
                intentAction="com.android.settings.MORE_SECURITY_PRIVACY_SETTINGS"
                title="@com.google.android.safetycenter.resources:string/google_more_settings_title"
                summary="@com.google.android.safetycenter.resources:string/google_more_settings_summary"
                searchTerms="@com.google.android.safetycenter.resources:string/google_more_settings_search_terms"/>
        </safety-sources-group>
    </safety-sources-config>
</safety-center-config>

Personalizar fontes do Safety Center

Tipos de origem do Safety Center

As fontes podem ser dinâmicas, somente relacionadas a problemas ou estáticas, com base no tipo de dados que fornecem ao Safety Center.

Fontes dinâmicas

Marque a fonte de segurança como dynamic-safety-source se ela puder fornecer dados dinâmicos ao Centro de Segurança tanto para sua entrada quanto para possíveis cartões de alerta:

<dynamic-safety-source
    id="AndroidLockScreen"
    packageName="com.android.settings"
    profile="primary_profile_only"
    title="@com.google.android.safetycenter.resources:string/google_lock_screen_title"
    summary="@com.google.android.safetycenter.resources:string/google_lock_screen_summary"
    searchTerms="@com.google.android.safetycenter.resources:string/google_lock_screen_search_terms"
    initialDisplayState="disabled"
    maxSeverityLevel="300"
    refreshOnPageOpenAllowed="true"/>

Fontes somente de emissão

Marque a fonte como issue-only-safety-source se não houver nenhuma entrada de configurações associada, mas avisos ainda forem fornecidos. Você pode fornecer apenas avisos; fornecer uma entrada de configurações resulta em um erro:

<issue-only-safety-source
    id="AndroidAccessibility"
    packageName="com.google.android.permissioncontroller"
    profile="all_profiles"
    refreshOnPageOpenAllowed="true"/>

Fontes estáticas

Marque a fonte como static-safety-source se for uma entrada de redirecionamento sem dados dinâmicos:

<static-safety-source
    id="AndroidAdvancedSecurity"
    profile="primary_profile_only"
    intentAction="com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS"
    title="@com.google.android.safetycenter.resources:string/google_advanced_security_title"
    summary="@com.google.android.safetycenter.resources:string/google_advanced_security_summary"
    searchTerms="@com.google.android.safetycenter.resources:string/google_advanced_security_search_terms"/>

Configuração de origem do Safety Center

Dependendo do tipo de fonte do Safety Center e de outras invariantes, os campos do arquivo de configuração são opcionais, obrigatórios ou proibidos e podem ser personalizados:

  • id
    • Identificador exclusivo para a fonte de segurança, deve ser exclusivo em todo o arquivo e deve ser composto apenas por caracteres alfabéticos (az, AZ) e diferencia maiúsculas de minúsculas
    • Tipo de string
    • Obrigatório para todos os tipos de fontes de segurança
  • packageName
    • Nome do pacote que possui esta fonte de segurança, por exemplo, com.google.android.permissioncontroller
    • Tipo de string
    • Obrigatório para fontes de segurança dinâmicas e somente relacionadas a problemas
    • Proibido para fontes de segurança estáticas no Android 13; no Android 14, isso pode ser opcionalmente definido para direcionar o intentAction da fonte explicitamente, em vez de implicitamente (consulte a documentação de resolução de intent para obter mais detalhes)
  • initialDisplayState
    • Como a entrada da IU é exibida quando nenhum dado é fornecido pela fonte de segurança
    • O tipo de enum representado como uma string deve ser um dos seguintes:
      • enabled (padrão, exibe normalmente)
      • disabled (exibe em cinza, não pode ser clicado)
      • hidden (não é exibido)
    • Opcional para fontes de segurança dinâmicas (o padrão é enabled )
    • Proibido para fontes de segurança estáticas e somente de emissão
  • profile
    • Se esta fonte de segurança interage com o perfil gerenciado do usuário
    • O tipo de enum representado como uma string deve ser um dos seguintes:
      • primary_profile_only (interage apenas com o perfil pai)
      • all_profiles (também pode interagir com os perfis gerenciados)
    • Em all_profiles , diversas entradas de UI são geradas (uma para o perfil pai e uma para cada perfil gerenciado); a fonte de segurança pode fornecer dados diferentes para cada perfil
    • Obrigatório para todas as fontes de segurança
  • searchTerms
    • Lista de termos de pesquisa mapeados para a entrada da Central de segurança ao usar a pesquisa no aplicativo Configurações
    • ID do recurso representado como um nome de recurso totalmente qualificado, por exemplo, @package:string/my_search_terms
    • Opcional para fontes de segurança dinâmicas e estáticas (o padrão é nenhum termo de pesquisa)
    • Proibido para fontes de segurança somente para problemas
  • title
    • Título padrão da entrada da UI, usado quando nenhum dado é fornecido dinamicamente pela fonte
    • ID do recurso representado como um nome de recurso totalmente qualificado, por exemplo, @package:string/my_title
    • Obrigatório para fontes de segurança dinâmicas e estáticas (a menos que initialDisplayState="hidden" sem searchTerms )
    • Proibido para fontes de segurança somente para problemas
  • titleForWork
    • Título padrão da entrada da UI para o perfil gerenciado usado quando os dados não são fornecidos dinamicamente pela origem
    • ID do recurso representado como um nome de recurso totalmente qualificado, por exemplo, @package:string/my_title_for_work
    • Obrigatório para fontes de segurança dinâmicas e estáticas que especificaram profile="all_profiles" (a menos que initialDisplayState="hidden" sem searchTerms )
    • Proibido para fontes de segurança somente para problemas ou fontes com profile="primary_profile_only"
  • summary
    • Resumo padrão da entrada da UI (esta é uma descrição de texto mais longa exibida abaixo do título), usado quando os dados não são fornecidos dinamicamente pela fonte
    • ID do recurso representado como um nome de recurso totalmente qualificado, por exemplo, @package:string/my_summary
    • Opcional para fontes de segurança estáticas (o padrão é sem resumo)
    • Obrigatório para fontes de segurança dinâmicas (a menos que initialDisplayState esteja hidden )
    • Proibido para fontes de segurança somente para problemas
  • intentAction
    • Ação a ser acionada quando a entrada da UI é clicada
    • Tipo de string, por exemplo, com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS ou ID de recurso representado como um nome de recurso totalmente qualificado, por exemplo, @package:string/my_intent_action
    • Se esta ação de intenção não for resolvida para o packageName fornecido (se houver), a entrada da UI se comportará da mesma maneira que initialDisplayState="disabled"
    • Obrigatório para fontes de segurança estáticas e fontes de segurança dynamic que possuem initialDisplayState="enabled"
    • Proibido para fontes de segurança somente para problemas
  • maxSeverityLevel
    • Nível máximo de gravidade que esta fonte do Safety Center pode fornecer
    • Inteiro representado como uma string, por exemplo, 300
    • Opcional para fontes de segurança dinâmicas e somente de problemas (o padrão não é máximo)
    • Proibido para fontes de segurança estáticas
  • loggingAllowed
    • Se o Safety Center pode registrar interações ou dados relacionados a esta fonte
    • Booleano representado como uma string, por exemplo false
    • Opcional para fontes de segurança dinâmicas e somente de problemas (o padrão é true )
    • Proibido para fontes de segurança estáticas
  • refreshOnPageOpenAllowed
    • Se um sinal deve ser enviado à fonte de segurança para atualizar seus dados quando a tela do Safety Center for aberta
    • Booleano representado como uma string, por exemplo, true
    • Opcional para fontes de segurança dinâmicas e somente de problemas (o padrão é false )
    • Proibido para fontes de segurança estáticas
  • notificationsAllowed (a partir do Android 14)
    • Se a fonte de segurança pode, opcionalmente, fornecer uma notificação ao relatar um problema
    • Booleano representado como uma string, por exemplo, true
    • Opcional para fontes de segurança dinâmicas e somente de problemas (o padrão é false )
    • Proibido para fontes de segurança estáticas
  • deduplicationGroup (a partir do Android 14)
    • Um potencial identificador exclusivo que pode ser usado para desduplicar problemas provenientes de diferentes fontes. Origens dentro do mesmo grupo de desduplicação podem enviar problemas com um ID de desduplicação opcional. Problemas com o mesmo ID de desduplicação serão mostrados apenas uma vez na IU, mesmo que sejam enviados por várias fontes.
    • Tipo de string
    • Opcional para fontes de segurança dinâmicas e somente de problemas (o padrão é sem desduplicação)
    • Proibido para fontes de segurança estáticas
  • packageCertificateHashes (a partir do Android 14)
    • Uma lista separada por vírgulas de hashes de certificado para o packageName fornecido. Se isto for definido, uma verificação de certificado será executada em relação ao packageCertificateHashes fornecido para o packageName fornecido ao interagir com a fonte de segurança, para fins de segurança.
    • Tipo de string
    • Opcional para fontes de segurança dinâmicas e somente de emissão (o padrão é nenhuma verificação de certificado)
    • Proibido para fontes de segurança estáticas

Personalizar grupos de fontes do Safety Center

As fontes do Safety Center devem estar contidas em um grupo de fontes do Safety Center. Cada grupo de origem é exibido na UI na ordem em que os grupos de origem são listados no arquivo. Cada fonte é exibida no grupo na ordem em que as fontes são listadas no arquivo. Se o grupo contiver uma única fonte de segurança, ele será exibido como uma única entrada em vez de um grupo.

Configuração do grupo de fontes do Safety Center

Use as seguintes variáveis ​​para personalizar grupos de origem do Safety Center:

  • id
    • Identificador único do grupo de fontes de segurança; deve ser único em todo o arquivo
    • Tipo de string
    • Obrigatório
  • title
    • Título do grupo na IU
    • ID do recurso representado como um nome de recurso totalmente qualificado, por exemplo, @package:string/my_title
    • Obrigatório se houver pelo menos uma fonte de segurança dinâmica ou estática dentro do grupo (ou seja, o grupo não é do type="hidden" )
  • summary
    • Breve descrição do grupo na IU, exibida abaixo do título. Exibido sob condições específicas, normalmente quando os dados não são fornecidos; caso contrário, o resumo é calculado com base nos dados fornecidos pelas fontes do grupo.
    • ID do recurso representado como um nome de recurso totalmente qualificado, por exemplo, @package:string/my_summary
    • Opcional (o padrão é sem resumo)
  • statelessIconType
    • Tipo de ícone exibido para o grupo quando nenhum estado é fornecido pelas fontes de segurança, por exemplo, entradas estáticas
    • Tipo de enumeração representado como uma string que deve ser none ou privacy (o tipo de ícone de privacidade)
    • Opcional (o padrão é none )
  • type (a partir do Android 14)
    • Um tipo explícito para qualificar como este grupo interage com o Safety Center
    • O tipo de enum representado como uma string deve ser um dos seguintes:
      • stateful (exibe e contribui para o status geral do Safety Center)
      • stateless (exibe e não contribui para o status geral do Safety Center)
      • hidden (não é exibido, todas as fontes devem ser apenas do problema)
    • Opcional, inferido por padrão usando as fontes de segurança contidas no grupo, bem como summary e statelessIconType . Se o type for especificado, algumas invariantes adicionais serão impostas para garantir que correspondam às fontes encontradas no grupo (por exemplo, o grupo não pode ser hidden se contiver entradas visíveis ao usuário)

Tipos de grupos de fontes do Safety Center

Os grupos de origem do Safety Center são classificados como com estado, sem estado ou ocultos, com base no estado de determinados campos.

Grupo com estado

Um grupo que tem um título e um resumo, ou stateLessIconType="privacy" é considerado com estado e contribui para o status geral da Central de Segurança:

<safety-sources-group
    id="GoogleAppSecuritySources"
    title="@com.google.android.safetycenter.resources:string/google_app_security_sources_title"
    summary="@com.google.android.safetycenter.resources:string/google_app_security_sources_summary">
    <dynamic-safety-source
        id="GooglePlayProtect"
        packageName="com.android.vending"
        profile="all_profiles"
        intentAction="com.google.android.finsky.PLAY_PROTECT"
        title="@com.google.android.safetycenter.resources:string/google_play_protect_title"
        titleForWork="@com.google.android.safetycenter.resources:string/google_play_protect_title_for_work"
        summary="@com.google.android.safetycenter.resources:string/google_play_protect_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_play_protect_search_terms"
        refreshOnPageOpenAllowed="true"/>
    <dynamic-safety-source
        id="GoogleAppProtectionService"
        packageName="com.google.android.odad"
        profile="primary_profile_only"
        initialDisplayState="hidden"
        loggingAllowed="false"/>
</safety-sources-group>

No Android 13, esse grupo será exibido como uma entrada recolhível na IU. No Android 14, ele será exibido como uma entrada com status próprio que redireciona para a subpágina.

Grupo apátrida

Um grupo que tem um título, mas sem resumo, e stateLessIconType="none" é considerado sem estado e não contribui para o status geral da Central de Segurança:

<safety-sources-group
    id="AndroidPrivacySources"
    title="@com.google.android.safetycenter.resources:string/google_privacy_sources_title"
    summary="@com.google.android.safetycenter.resources:string/google_privacy_sources_summary"
    statelessIconType="privacy">
    <static-safety-source
        id="AndroidPermissionUsage"
        profile="primary_profile_only"
        intentAction="android.intent.action.REVIEW_PERMISSION_USAGE"
        title="@com.google.android.safetycenter.resources:string/google_permission_usage_title"
        summary="@com.google.android.safetycenter.resources:string/google_permission_usage_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_permission_usage_search_terms"/>
    <static-safety-source
        id="AndroidPermissionManager"
        profile="primary_profile_only"
        intentAction="android.intent.action.MANAGE_PERMISSIONS"
        title="@com.google.android.safetycenter.resources:string/google_permission_manager_title"
        summary="@com.google.android.safetycenter.resources:string/google_permission_manager_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_permission_manager_search_terms"/>
    <static-safety-source
        id="AndroidPrivacyControls"
        profile="primary_profile_only"
        intentAction="android.settings.PRIVACY_CONTROLS"
        title="@com.google.android.safetycenter.resources:string/google_privacy_controls_title"
        summary="@com.google.android.safetycenter.resources:string/google_privacy_controls_summary"
        searchTerms="@com.google.android.safetycenter.resources:string/google_privacy_controls_search_terms"/>
    <issue-only-safety-source
        id="AndroidAccessibility"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
    <issue-only-safety-source
        id="AndroidNotificationListener"
        packageName="com.google.android.permissioncontroller"
        profile="primary_profile_only"
        refreshOnPageOpenAllowed="true"/>
    <issue-only-safety-source
        id="AndroidBackgroundLocation"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
    <issue-only-safety-source
        id="AndroidPermissionAutoRevoke"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
</safety-sources-group>

Esse grupo será exibido como uma lista rígida de entradas na IU.

Grupo oculto

Um grupo oculto contém apenas fontes de segurança somente para problemas e não possui título. Grupos ocultos não aparecem na IU:

<safety-sources-group
    id="HiddenGroup">
    <issue-only-safety-source
        id="AndroidAccessibility"
        packageName="com.google.android.permissioncontroller"
        profile="all_profiles"
        refreshOnPageOpenAllowed="true"/>
</safety-sources-group>

Dados dinâmicos para uma entrada estática

Você pode exibir a fonte dinâmica do Safety Center como uma entrada estática, o que permite enviar entradas de redirecionamento dependendo de algumas condições e personalizar seu conteúdo em tempo de execução. Defina a origem dinâmica dentro de um grupo sem estado, por exemplo, dependendo da entrada de informações da sua política de trabalho.

Este exemplo mostra uma fonte de segurança dinâmica que não fornece um sinal de segurança porque está em um grupo sem estado:

<safety-sources-group
    id="AndroidAdvancedSources"
    title="@com.google.android.safetycenter.resources:string/google_advanced_title">
    <dynamic-safety-source
        id="AndroidWorkPolicyInfo"
        packageName="com.google.android.permissioncontroller"
        profile="primary_profile_only"
        initialDisplayState="hidden"
        refreshOnPageOpenAllowed="true"/>
            <!-- … -->
</safety-sources-group>

Neste exemplo, a fonte pode enviar apenas cartões de alerta verdes e fornecer um status não especificado. Para poder fornecer outros dados, a fonte deve estar dentro de um grupo com estado.

Personalize strings e campos de sobreposição

Para dispositivos GMS que não estão configurados para receber atualizações do Mainline, em vez de sobrepor todo o arquivo de configuração, você pode sobrepor seis recursos de string para atender a todas as necessidades de personalização. Os recursos de sequência de caracteres sobrepostos estão listados na tabela.

Recurso de string Descrição
google_lock_screen_sources_summary Sobreponha esse valor para definir um resumo estático que será exibido para o grupo AndroidLockScreenSources quando todas as fontes do grupo estiverem em bom estado (informações ou nível de gravidade não especificado). Por padrão, o Safety Center exibe o título de todas as fontes do grupo concatenado como o resumo do grupo.
google_biometrics_title Sobreponha esse valor para definir um título estático para a fonte biométrica pertencente ao pacote com.android.settings usado quando nenhum dado dinâmico é fornecido pela fonte. Sobreponha isso ao sobrepor também o título fornecido dinamicamente pela fonte no pacote com.android.settings . Isso é ignorado por padrão porque o estado de exibição inicial da fonte está hidden .
google_biometrics_summary Sobreponha esse valor para definir um resumo estático para a fonte biométrica pertencente ao pacote com.android.settings usado quando nenhum dado dinâmico é fornecido pela fonte. Isso é ignorado por padrão porque o estado de exibição inicial da fonte está hidden .
google_biometrics_search_terms Sobreponha esse valor para definir uma lista de termos de pesquisa para a fonte biométrica pertencente ao pacote com.android.settings .
google_biometrics_initial_display_state Sobreponha esse valor para mostrar uma entrada de UI para a fonte biométrica pertencente ao pacote com.android.settings quando nenhum dado dinâmico for fornecido pela fonte. O valor padrão está hidden .
google_security_updates_intent Sobreponha esse valor para alterar a intenção necessária para abrir a atividade que permite ao usuário verificar e instalar atualizações de segurança. Esta ação de intenção deve estar associada a uma atividade exportada. O valor padrão é android.settings.SYSTEM_UPDATE_SETTINGS .

Nenhuma outra string no pacote com.google.android.safetycenter.resources pode ser sobreposta.

Para dispositivos AOSP, todos os recursos do pacote com.android.safetycenter.resources podem ser sobrepostos sem restrição de conteúdo.

Para dispositivos GMS que não estão configurados para receber atualizações do Mainline, crie um pacote com.google.android.safetycenter.resources substituindo ou sobrepondo com.android.safetycenter.resources definindo todas as strings esperadas pelos testes GTS.

Essas cadeias são:

  • google_app_security_sources_title
  • google_app_security_sources_summary
  • google_play_protect_title
  • google_play_protect_title_for_work
  • google_play_protect_summary
  • google_play_protect_search_terms
  • google_lock_screen_sources_title
  • google_lock_screen_sources_summary
  • google_lock_screen_title
  • google_lock_screen_summary
  • google_lock_screen_search_terms
  • google_biometrics_title
  • google_biometrics_summary
  • google_biometrics_search_terms
  • google_biometrics_initial_display_state
  • google_accounts_sources_title
  • google_accounts_sources_summary
  • google_security_checkup_title
  • google_security_checkup_title_for_work
  • google_security_checkup_summary
  • google_security_checkup_search_terms
  • google_device_finder_sources_title
  • google_device_finder_sources_summary
  • google_find_my_device_title
  • google_find_my_device_summary
  • google_find_my_device_search_terms
  • google_updates_title
  • google_updates_summary
  • google_security_updates_title
  • google_security_updates_summary
  • google_security_updates_search_terms
  • google_security_updates_intent
  • google_play_system_update_title
  • google_play_system_update_summary
  • google_play_system_update_search_terms
  • google_privacy_sources_title
  • google_privacy_sources_summary
  • google_permission_usage_title
  • google_permission_usage_summary
  • google_permission_usage_search_terms
  • google_permission_manager_title
  • google_permission_manager_summary
  • google_permission_manager_search_terms
  • google_privacy_controls_title
  • google_privacy_controls_summary
  • google_privacy_controls_search_terms
  • google_advanced_title
  • google_advanced_security_title
  • google_advanced_security_summary
  • google_advanced_security_search_terms
  • google_advanced_privacy_title
  • google_advanced_privacy_summary
  • google_advanced_privacy_search_terms

Requisitos de personalização

Requisitos de formato de arquivo

O arquivo de configuração deve ser um arquivo XML e seguir o formato descrito em Atualizar o arquivo de configuração . O arquivo deve estar na pasta raw . Ele deve atender às invariantes descritas em Personalizar fontes do Safety Center e Personalizar grupos de fontes do Safety Center . Se o arquivo de configuração não estiver bem formado de acordo com os requisitos acima, o recurso será completamente desativado. A análise desse arquivo também é apoiada por testes CTS e GTS que podem fornecer contexto adicional caso o arquivo não esteja bem formado (além dos logs do dispositivo logcat ).

Dispositivos de serviços do Google

Nos dispositivos GMS, algumas restrições são impostas a este arquivo. Isto é apoiado por testes GTS .

Dispositivos AOSP

Em dispositivos AOSP, o arquivo de configuração deve estar bem formado e passar nos testes CTS do Safety Center. Os testes verificam se o arquivo está bem formado. Os dispositivos GMS também devem passar nesses testes.