سفارشی کردن مرکز ایمنی

مرکز ایمنی را فعال یا غیرفعال کنید

برای فعال یا غیرفعال کردن Safety Center، از قسمت بولی config_enableSafetyCenter قابل پوشش در فایل frameworks/base/core/res/res/values/config.xml استفاده کنید.

در اکثر دستگاه‌ها، Safety Center به طور پیش‌فرض پشتیبانی می‌شود، به عنوان مثال، در تلفن‌ها و تبلت‌ها. در برخی از عوامل شکل، Safety Center به طور پیش‌فرض غیرفعال است، به عنوان مثال، در Auto، TV و 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>

برای پشتیبانی از Safety Center، config_enableSafetyCenter را روی true تنظیم کنید. اگر نمی‌خواهید از Safety Center پشتیبانی کنید، این مقدار را روی false تنظیم کنید تا غیرفعال شود.

وقتی مرکز ایمنی غیرفعال است، هر تلاشی برای تغییر مسیر به صفحه امنیت و حریم خصوصی، برنامه تنظیمات را باز می‌کند. هر تلاشی برای تعامل با APIها بی‌صدا نادیده گرفته می‌شود یا یک مقدار پیش‌فرض را برمی‌گرداند. کاشی تنظیمات سریع مرتبط و ورودی تنظیمات نیز بسته به فعال بودن مرکز ایمنی در معرض یا پنهان هستند.

پرچم DeviceConfig

علاوه بر فعال کردن Safety Center با استفاده از پیکربندی config_enableSafetyCenter ، از یک پرچم DeviceConfig ( safety_center_is_enabled ) برای فعال یا غیرفعال کردن Safety Center از راه دور استفاده می‌شود.

در اندروید 14 و بالاتر، هیچ اقدام دیگری لازم نیست زیرا این پرچم به طور پیش فرض true است.

در Android 13، Safety Center به‌طور پیش‌فرض سمت سرور غیرفعال است و توسط لیست مجاز با استفاده از این پرچم فعال می‌شود. اثر انگشت دستگاه خود را ارسال کنید و با TAM خود تماس بگیرید تا به لیست مجاز اضافه شود. توجه داشته باشید که نسخه اصلی M-2022-11 یا بالاتر باید به لیست مجاز اضافه شود. برای توسعه و آزمایش محلی، پرچم را می توان به صورت محلی (تا راه اندازی مجدد) با دستور adb فعال یا غیرفعال کرد. به عنوان مثال، برای فعال کردن پرچم:

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

و برای تأیید فعال بودن «مرکز ایمنی»:

adb root
adb shell cmd safety_center enabled

خروجی باز خواهد گشت که آیا مرکز ایمنی به درستی در دستگاه فعال شده باشد.

فایل پیکربندی را به روز کنید

از فایل پیکربندی safety_center_config.xml برای اصلاح محتویات صفحه Safety Center استفاده کنید. با فرض اینکه شرایط سفارشی‌سازی را برآورده کرده‌اید، می‌توانید این فایل را همپوشانی کنید.

روی فایل پیکربندی قرار دهید

برای همپوشانی فایل safety_center_config.xml ، به تغییر مقدار منابع یک برنامه در زمان اجرا برای اطلاعاتی در مورد اصلاح همپوشانی منابع زمان اجرا (RRO) مراجعه کنید.

در Android 14، مطمئن شوید که فایل res/raw-v34/safety_center_config.xml و نه res/raw/safety_center_config.xml را همپوشانی کنید زیرا اولی اولویت دارد (این مورد در مورد سایر فایل‌هایی که برای v34 برای مثال res/values-v34/strings.xml در نظر گرفته شده نیز صدق می‌کند. res/values-v34/strings.xml ). بسته همپوشانی باید حداقل SDK کمتر از 34 داشته باشد، در غیر این صورت ممکن است واجد شرایط v34 در طول بهینه‌سازی حذف شود. همچنین مطمئن شوید که از یک پوشش ثابت استفاده کنید، زیرا این مقدار در زمان بوت بارگذاری می شود.

برای دستگاه‌های پروژه منبع باز Android (AOSP)، بسته com.android.safetycenter.resources را هدف قرار دهید. هیچ پیکربندی همپوشانی برای هدف‌گیری وجود ندارد. همه منابع بدون محدودیت در محتوا قابل همپوشانی هستند.

برای دستگاه‌های GMS که برای دریافت به‌روزرسانی‌های خط اصلی پیکربندی شده‌اند، بسته com.google.android.safetycenter.resources را هدف قرار دهید. پیکربندی SafetyCenterConfig هدف قرار دهید. این پیکربندی مستلزم آن است که بسته پوششی در پارتیشن product ، system یا vendor باشد. OEM های GMS باید فایل safety_center_config.xml ارائه شده توسط Google را کپی کنند و تغییرات را به مواردی که توسط آزمایش های GTS مجاز است محدود کنند. تعریف همپوشانی باید نزدیک به این باشد:

<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>

برای دستگاه‌های GMS که برای دریافت به‌روزرسانی‌های خط اصلی پیکربندی نشده‌اند، بسته com.android.safetycenter.resources را هدف قرار دهید. هیچ پیکربندی همپوشانی برای هدف‌گیری وجود ندارد. بسته همپوشانی باید از نام بسته com.google.android.safetycenter.resources استفاده کند.

OEM های GMS باید فایل safety_center_config.xml ارائه شده توسط Google را کپی کنند و تغییرات را به مواردی که توسط آزمایش های GTS مجاز است محدود کنند. OEM های GMS باید رشته های مورد استفاده در پیکربندی XML را نیز تعریف کنند.

ساختار فایل

در سطح بالایی، فایل safety_center_config.xml فهرستی از منابع ایمنی است. این منابع ایمنی در گروه‌ها سازماندهی شده‌اند تا سیگنال‌های روی صفحه مرکز ایمنی را مدیریت کنند، به عنوان مثال، امنیت برنامه یا قفل صفحه. ترتیب این لیست ترتیب نمایش را مشخص می کند:

<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>

فایل پیکربندی گوگل

فایل پیکربندی AOSP در packages/modules/Permission/SafetyCenter/Resources/res/raw/safety_center_config.xml قرار دارد.

در اندروید 13، فایل پیکربندی گوگل به صورت زیر است:

<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>

در اندروید 14، فایل پیکربندی گوگل به صورت زیر است:

<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>

منابع مرکز ایمنی را سفارشی کنید

انواع منبع مرکز ایمنی

منابع بر اساس نوع داده ای که در اختیار مرکز ایمنی قرار می دهند، می توانند پویا، فقط مشکل دار یا ثابت باشند.

منابع پویا

منبع ایمنی را به عنوان dynamic-safety-source علامت گذاری کنید، اگر بتواند داده های پویا را هم برای کارت های ورود و هم برای کارت های هشدار احتمالی در اختیار مرکز ایمنی قرار دهد:

<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"/>

منابع فقط مسئله

اگر هیچ ورودی تنظیمات مرتبطی وجود ندارد اما هشدارها همچنان ارائه می شوند، منبع را به عنوان issue-only-safety-source علامت بزنید. شما می توانید فقط هشدارها را ارائه دهید. ارائه یک ورودی تنظیمات منجر به یک خطا می شود:

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

منابع استاتیک

اگر منبعی را به‌عنوان static-safety-source علامت‌گذاری کنید، اگر یک ورودی تغییر مسیر بدون داده‌های پویا باشد:

<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"/>

پیکربندی منبع مرکز ایمنی

بسته به نوع منبع مرکز ایمنی و سایر موارد ثابت، فیلدهای فایل پیکربندی اختیاری، ضروری یا ممنوع هستند و می‌توانند سفارشی شوند:

  • id
    • شناسه منحصر به فرد برای منبع ایمنی، باید در کل فایل منحصر به فرد باشد و باید فقط از حروف الفبای (az، AZ) تشکیل شده باشد و به حروف بزرگ و کوچک حساس است.
    • نوع رشته
    • برای همه انواع منبع ایمنی مورد نیاز است
  • packageName
    • نام بسته ای که این منبع ایمنی را در اختیار دارد، به عنوان مثال، com.google.android.permissioncontroller
    • نوع رشته
    • برای منابع ایمنی پویا و فقط با مشکل مورد نیاز است
    • برای منابع ایمنی ساکن در اندروید 13 ممنوع است. در اندروید 14 می‌توان به‌طور اختیاری تنظیم کرد که intentAction منبع را به طور صریح و نه ضمنی هدف قرار دهد (برای جزئیات بیشتر به مستندات وضوح هدف مراجعه کنید)
  • initialDisplayState
    • وقتی هیچ داده ای توسط منبع ایمنی ارائه نمی شود، ورودی UI چگونه نمایش داده می شود
    • نوع Enum که به عنوان یک رشته نمایش داده می شود، باید یکی از موارد زیر باشد:
      • enabled (پیش‌فرض، به طور معمول نمایش داده می‌شود)
      • disabled (نمایش خاکستری است، نمی توان روی آن کلیک کرد)
      • hidden (نمایش نمی دهد)
    • اختیاری برای منابع ایمنی پویا (پیش‌فرض enabled است)
    • برای منابع ایمنی فقط با مشکل و استاتیک ممنوع است
  • profile
    • اینکه آیا این منبع ایمنی با نمایه مدیریت شده کاربر تعامل دارد یا خیر
    • نوع Enum که به عنوان یک رشته نمایش داده می شود، باید یکی از موارد زیر باشد:
      • primary_profile_only (فقط با والد نمایه تعامل دارد)
      • all_profiles (همچنین می تواند با نمایه(های) مدیریت شده تعامل داشته باشد)
    • در all_profiles ، چندین ورودی UI ایجاد می شود (یکی برای والد نمایه، و یکی برای هر نمایه مدیریت شده). منبع ایمنی می تواند داده های متفاوتی را برای هر نمایه ارائه دهد
    • برای تمام منابع ایمنی مورد نیاز است
  • searchTerms
    • فهرست عبارات جستجویی که هنگام استفاده از جستجو در برنامه تنظیمات به ورودی مرکز ایمنی نگاشت می‌شوند
    • شناسه منبع به عنوان یک نام منبع کاملاً واجد شرایط نشان داده می شود، به عنوان مثال، @package:string/my_search_terms
    • اختیاری برای منابع ایمنی پویا و ایستا (پیش‌فرض عبارت جستجو نیست)
    • برای منابع ایمنی فقط موضوع ممنوع است
  • title
    • عنوان پیش‌فرض ورودی UI، زمانی استفاده می‌شود که هیچ داده‌ای به صورت پویا توسط منبع ارائه نشده باشد
    • شناسه منبع به عنوان یک نام منبع کاملاً واجد شرایط نشان داده می شود، به عنوان مثال، @package:string/my_title
    • برای منابع ایمنی پویا و ایستا مورد نیاز است (مگر اینکه initialDisplayState="hidden" بدون searchTerms )
    • برای منابع ایمنی فقط موضوع ممنوع است
  • titleForWork
    • عنوان پیش‌فرض ورودی رابط کاربری برای نمایه مدیریت‌شده که وقتی داده‌ها به صورت پویا توسط منبع ارائه نمی‌شوند استفاده می‌شود.
    • شناسه منبع به عنوان یک نام منبع کاملاً واجد شرایط نشان داده می‌شود، برای مثال @package:string/my_title_for_work
    • برای منابع ایمنی پویا و ایستا که profile="all_profiles" مشخص کرده اند مورد نیاز است (مگر اینکه initialDisplayState="hidden" بدون searchTerms )
    • برای منابع ایمنی فقط با مشکل یا منابع با profile="primary_profile_only" ممنوع است
  • summary
    • خلاصه پیش‌فرض ورودی UI (این یک توضیح متنی طولانی‌تر است که در زیر عنوان نمایش داده می‌شود)، زمانی که داده‌ها به صورت پویا توسط منبع ارائه نمی‌شوند استفاده می‌شود.
    • شناسه منبع به عنوان یک نام منبع کاملاً واجد شرایط نشان داده شده است، به عنوان مثال، @package:string/my_summary
    • اختیاری برای منابع ایمنی ساکن (پیش‌فرض خلاصه نیست)
    • برای منابع ایمنی پویا مورد نیاز است (مگر اینکه initialDisplayState hidden باشد)
    • برای منابع ایمنی فقط موضوع ممنوع است
  • intentAction
    • اقدامی برای فعال شدن با کلیک روی ورودی UI
    • نوع رشته، به عنوان مثال، com.google.android.settings.security.SECURITY_ADVANCED_SETTINGS ، یا شناسه منبع که به عنوان یک نام منبع کاملاً واجد شرایط نشان داده شده است، به عنوان مثال، @package:string/my_intent_action
    • اگر این اقدام قصد برای packageName داده شده حل نشود (در صورت وجود)، ورودی UI به همان شیوه ای عمل می کند که دارای initialDisplayState="disabled" است.
    • برای منابع ایمنی ایستا و منابع ایمنی dynamic که دارای initialDisplayState="enabled" هستند لازم است
    • برای منابع ایمنی فقط موضوع ممنوع است
  • maxSeverityLevel
    • حداکثر سطح شدتی که این منبع مرکز ایمنی می تواند ارائه دهد
    • عدد صحیح به عنوان یک رشته نمایش داده می شود، به عنوان مثال، 300
    • اختیاری برای منابع ایمنی پویا و فقط با مشکل (پیش‌فرض حداکثر نیست)
    • برای منابع ایمنی ساکن ممنوع است
  • loggingAllowed
    • آیا مرکز ایمنی می‌تواند تعاملات یا داده‌های مربوط به این منبع را ثبت کند
    • Boolean به عنوان یک رشته نمایش داده می شود، برای مثال false
    • اختیاری برای منابع ایمنی پویا و فقط مشکل دار (پیش فرض true است)
    • برای منابع ایمنی ساکن ممنوع است
  • refreshOnPageOpenAllowed
    • آیا باید سیگنالی به منبع ایمنی ارسال شود تا داده‌های آن هنگام باز شدن صفحه مرکز ایمنی باز شود.
    • به عنوان true ، Boolean به عنوان یک رشته نشان داده می شود
    • اختیاری برای منابع ایمنی پویا و فقط با مشکل (پیش‌فرض false است)
    • برای منابع ایمنی ساکن ممنوع است
  • notificationsAllowed (شروع اندروید 14)
    • آیا منبع ایمنی می تواند به صورت اختیاری هنگام گزارش یک مشکل اعلان ارائه دهد یا خیر
    • به عنوان true ، Boolean به عنوان یک رشته نشان داده می شود
    • اختیاری برای منابع ایمنی پویا و فقط با مشکل (پیش‌فرض false است)
    • برای منابع ایمنی ساکن ممنوع است
  • deduplicationGroup (شروع اندروید 14)
    • یک شناسه منحصر به فرد بالقوه که می تواند برای کپی کردن مسائلی که از منابع مختلف می آیند استفاده شود. منابع موجود در همان گروه کپی برداری می توانند مشکلات را با شناسه حذف تکراری اختیاری ارسال کنند. مشکلات مربوط به همان شناسه حذف تکراری فقط یک بار در UI نشان داده می شوند، حتی اگر چندین منبع آنها را ارسال کنند.
    • نوع رشته
    • اختیاری برای منابع ایمنی پویا و فقط با مشکل (پیش‌فرض بدون تکرار نیست)
    • برای منابع ایمنی ساکن ممنوع است
  • packageCertificateHashes (شروع اندروید 14)
    • فهرستی از هش های گواهی برای packageName داده شده با کاما جدا شده است. اگر این تنظیم شود، هنگام تعامل با منبع ایمنی، برای اهداف امنیتی، یک بررسی گواهی در برابر packageCertificateHashes داده شده برای packageName داده شده انجام می شود.
    • نوع رشته
    • اختیاری برای منابع ایمنی پویا و فقط با مشکل (پیش‌فرض بدون بررسی گواهی است)
    • برای منابع ایمنی ساکن ممنوع است

گروه های منابع مرکز ایمنی را سفارشی کنید

منابع مرکز ایمنی باید در یک گروه منابع مرکز ایمنی باشد. هر گروه منبع در UI به ترتیبی که گروه های منبع در فایل فهرست شده اند نمایش داده می شود. هر منبع در داخل گروه به ترتیب فهرست شده منابع در فایل نمایش داده می شود. اگر گروه حاوی یک منبع ایمنی واحد باشد، به جای یک گروه به عنوان یک ورودی نمایش داده می شود.

پیکربندی گروه منابع مرکز ایمنی

از متغیرهای زیر برای سفارشی کردن گروه های منبع مرکز ایمنی استفاده کنید:

  • id
    • شناسه منحصر به فرد برای گروه منابع ایمنی؛ باید در کل فایل منحصر به فرد باشد
    • نوع رشته
    • ضروری
  • title
    • عنوان گروه در UI
    • شناسه منبع به عنوان یک نام منبع کاملاً واجد شرایط نشان داده می شود، به عنوان مثال، @package:string/my_title
    • اگر حداقل یک منبع ایمنی پویا یا ایستا در گروه وجود داشته باشد (یعنی گروه از type="hidden" نباشد، الزامی است.
  • summary
    • شرح مختصری از گروه در رابط کاربری که در زیر عنوان نمایش داده شده است. تحت شرایط خاص نمایش داده می شود، معمولاً زمانی که داده ها ارائه نمی شوند. در غیر این صورت، خلاصه بر اساس داده های ارائه شده توسط منابع درون گروه محاسبه می شود.
    • شناسه منبع به عنوان یک نام منبع کاملاً واجد شرایط نشان داده شده است، به عنوان مثال، @package:string/my_summary
    • اختیاری (پیش‌فرض خلاصه نیست)
  • statelessIconType
    • نوع نماد برای گروه زمانی نمایش داده می شود که هیچ حالتی توسط منابع ایمنی ارائه نشده باشد، به عنوان مثال، ورودی های ایستا
    • نوع Enum به عنوان یک رشته نمایش داده می شود که باید یا none یا privacy باشد (نوع نماد حریم خصوصی)
    • اختیاری (پیش فرض none )
  • type (شروع اندروید 14)
    • یک نوع صریح برای واجد شرایط بودن نحوه تعامل این گروه با مرکز ایمنی
    • نوع Enum که به عنوان یک رشته نمایش داده می شود، باید یکی از موارد زیر باشد:
      • stateful (نمایش و کمک به وضعیت کلی مرکز ایمنی)
      • stateless (نمایش می‌دهد و به وضعیت کلی مرکز ایمنی کمک نمی‌کند)
      • hidden (نمایش داده نمی شود، همه منابع باید فقط مشکل دار باشند)
    • اختیاری، به طور پیش فرض با استفاده از منابع ایمنی موجود در گروه و همچنین summary و statelessIconType استنباط می شود. اگر type مشخص شده باشد، برخی متغیرهای ثابت اضافی اعمال می‌شوند تا اطمینان حاصل شود که با منابعی که در گروه وجود دارد مطابقت دارد (به عنوان مثال، اگر گروه حاوی ورودی‌های قابل مشاهده برای کاربر باشد، نمی‌توان آن را hidden کرد)

انواع گروه منابع مرکز ایمنی

بر اساس وضعیت فیلدهای خاص، گروه‌های منبع مرکز ایمنی به‌عنوان حالتی، بدون وضعیت یا پنهان طبقه‌بندی می‌شوند.

گروه دولتی

گروهی که هم عنوان و هم خلاصه دارد، یا stateLessIconType="privacy" حالتی در نظر گرفته می شود، به وضعیت کلی مرکز ایمنی کمک می کند:

<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>

در اندروید 13، چنین گروهی به عنوان ورودی تاشو در رابط کاربری نمایش داده می شود. در اندروید 14، به عنوان ورودی با وضعیت خاص خود نشان داده می شود که به صفحه فرعی هدایت می شود.

گروه بی تابعیت

گروهی که عنوان دارد، اما خلاصه ندارد، و stateLessIconType="none" بدون تابعیت در نظر گرفته می شود و به وضعیت کلی مرکز ایمنی کمکی نمی کند:

<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>

چنین گروهی به صورت فهرست سفت و سختی از ورودی ها در UI نشان داده می شود.

گروه پنهان

یک گروه پنهان فقط حاوی منابع ایمنی فقط مشکل است و عنوانی ندارد. گروه های پنهان در رابط کاربری ظاهر نمی شوند:

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

داده های پویا برای یک ورودی استاتیک

می‌توانید منبع پویا Safety Center را به‌عنوان یک ورودی ثابت نمایش دهید، که اجازه می‌دهد تا ورودی‌های تغییر مسیر را بسته به برخی شرایط فشار دهید و محتوای آن را در زمان اجرا سفارشی کنید. به عنوان مثال، بسته به ورودی اطلاعات خط مشی کاری خود، منبع پویا را در یک گروه بدون تابعیت تعریف کنید.

این مثال منبع ایمنی پویا را نشان می‌دهد که سیگنال ایمنی ارائه نمی‌کند، زیرا در یک گروه بدون حالت قرار دارد:

<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>

در این مثال، منبع می تواند فقط کارت های هشدار سبز را فشار دهد و وضعیت نامشخصی ارائه دهد. برای اینکه بتوان داده‌های دیگری را ارائه کرد، منبع باید در یک گروه Stateful باشد.

رشته ها و فیلدهای همپوشانی را سفارشی کنید

برای دستگاه‌های GMS که برای دریافت به‌روزرسانی‌های Mainline پیکربندی نشده‌اند، به‌جای پوشاندن کل فایل پیکربندی، می‌توانید شش منبع رشته را برای رفع تمام نیازهای سفارشی‌سازی پوشش دهید. منابع رشته ای که همپوشانی دارند در جدول فهرست شده اند.

منبع رشته شرح
google_lock_screen_sources_summary این مقدار را برای تعریف خلاصه ایستا قرار دهید که برای گروه AndroidLockScreenSources زمانی که همه منابع گروه در وضعیت خوبی هستند (اطلاعات یا سطح شدت نامشخص) نمایش داده می شود. به طور پیش‌فرض، Safety Center عنوان همه منابع گروه را به عنوان خلاصه گروه نمایش می‌دهد.
google_biometrics_title این مقدار را برای تعریف یک عنوان ثابت برای منبع بیومتریک متعلق به بسته com.android.settings قرار دهید که زمانی که هیچ داده پویا توسط منبع ارائه نمی شود استفاده می شود. هنگامی که عنوان به صورت پویا توسط منبع در بسته com.android.settings ارائه شده است، روی آن قرار دهید. این به طور پیش فرض نادیده گرفته می شود زیرا حالت نمایش اولیه برای منبع hidden است.
google_biometrics_summary این مقدار را برای تعریف یک خلاصه ایستا برای منبع بیومتریک متعلق به بسته com.android.settings قرار دهید که زمانی که هیچ داده پویا توسط منبع ارائه نمی شود استفاده می شود. این به طور پیش فرض نادیده گرفته می شود زیرا حالت نمایش اولیه برای منبع hidden است.
google_biometrics_search_terms این مقدار را پوشش دهید تا فهرستی از عبارات جستجو برای منبع بیومتریک متعلق به بسته com.android.settings تعریف شود.
google_biometrics_initial_display_state وقتی هیچ داده پویا توسط منبع ارائه نمی شود، این مقدار را پوشش دهید تا یک ورودی رابط کاربری برای منبع بیومتریک متعلق به بسته com.android.settings نشان داده شود. مقدار پیش فرض hidden است.
google_security_updates_intent برای تغییر هدف مورد نیاز برای باز کردن فعالیتی که به کاربر اجازه می‌دهد به‌روزرسانی‌های امنیتی را بررسی و نصب کند، این مقدار را همپوشانی کنید. این اقدام قصد باید با یک فعالیت صادراتی مرتبط باشد. مقدار پیش‌فرض android.settings.SYSTEM_UPDATE_SETTINGS است.

هیچ رشته دیگری در بسته com.google.android.safetycenter.resources قابل همپوشانی نیست.

برای دستگاه‌های AOSP، تمام منابع موجود در بسته com.android.safetycenter.resources بدون محدودیت در محتوا قابل همپوشانی هستند.

برای دستگاه‌های GMS که برای دریافت به‌روزرسانی‌های خط اصلی پیکربندی نشده‌اند، یک بسته com.google.android.safetycenter.resources ایجاد کنید که جایگزین یا همپوشانی با com.android.safetycenter.resources است که تمام رشته‌های مورد انتظار آزمایش‌های GTS را تعریف می‌کند.

این رشته ها عبارتند از:

  • 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

الزامات سفارشی سازی

الزامات فرمت فایل

فایل پیکربندی باید یک فایل XML باشد و از فرمت شرح داده شده در به روز رسانی فایل پیکربندی پیروی کند. فایل باید در پوشه raw باشد. باید با متغیرهای توضیح داده شده در منابع مرکز ایمنی سفارشی و گروه های منابع مرکز ایمنی سفارشی سازی مطابقت داشته باشد. اگر فایل پیکربندی مطابق با الزامات بالا به خوبی شکل نگرفته باشد، این ویژگی به طور کامل غیرفعال می شود. تجزیه این فایل همچنین توسط تست‌های CTS و GTS پشتیبانی می‌شود که می‌تواند زمینه اضافی را در صورتی که فایل به خوبی شکل نگرفته باشد (در بالای گزارش‌های دستگاه logcat ) ارائه می‌کند.

دستگاه های خدمات گوگل

در دستگاه های GMS، محدودیت هایی بر روی این فایل اعمال می شود. این توسط تست های GTS پشتیبانی می شود.

دستگاه های AOSP

در دستگاه‌های AOSP، فایل پیکربندی باید به خوبی تشکیل شده باشد و تست‌های CTS را برای Safety Center پشت سر بگذارد. آزمایش ها تأیید می کنند که پرونده به خوبی شکل گرفته است. دستگاه های GMS نیز باید این تست ها را پشت سر بگذارند.