diff options
167 files changed, 4232 insertions, 462 deletions
diff --git a/PermissionController/Android.bp b/PermissionController/Android.bp index 596b2dbb5..397870c20 100644 --- a/PermissionController/Android.bp +++ b/PermissionController/Android.bp @@ -89,6 +89,7 @@ android_library { ], //javacflags: ["-Werror"], + kotlin_lang_version: "1.9", kotlincflags: [ "-Werror", "-opt-in=kotlinx.coroutines.DelicateCoroutinesApi", diff --git a/PermissionController/OWNERS b/PermissionController/OWNERS index 3872198cb..5a58ec2f5 100644 --- a/PermissionController/OWNERS +++ b/PermissionController/OWNERS @@ -19,5 +19,6 @@ per-file res/** = file:platform/packages/modules/Permission:/SafetyCenter/OWNERS per-file WEAR_OWNERS = file:/PermissionController/WEAR_OWNERS per-file src/com/android/permissioncontroller/permission/ui/wear/** = file:/PermissionController/WEAR_OWNERS per-file src/com/android/permissioncontroller/role/ui/wear/** = file:/PermissionController/WEAR_OWNERS +per-file src/com/android/permissioncontroller/incident/wear/** = file:/PermissionController/WEAR_OWNERS per-file res/*-watch/* = file:/PermissionController/WEAR_OWNERS per-file tests/permissionui/src/com/android/permissioncontroller/permissionui/ui/wear/** = file:/PermissionController/WEAR_OWNERS diff --git a/PermissionController/TEST_MAPPING b/PermissionController/TEST_MAPPING index 13f243d81..508105c46 100644 --- a/PermissionController/TEST_MAPPING +++ b/PermissionController/TEST_MAPPING @@ -224,6 +224,24 @@ "name": "CtsPermissionUiTestCases[com.google.android.permission.apex]" } ], + "wear-presubmit": [ + { + "name": "CtsPermissionUiTestCases", + "options": [ + { + "exclude-annotation": "androidx.test.filters.FlakyTest" + } + ] + }, + { + "name": "CtsRoleTestCases", + "options": [ + { + "exclude-annotation": "androidx.test.filters.FlakyTest" + } + ] + } + ], "imports": [ { "path": "vendor/xts/gts-tests/hostsidetests/permissioncontroller" diff --git a/PermissionController/res/layout/permission_history_widget.xml b/PermissionController/res/layout/permission_history_widget.xml index 9bdef7200..f98a1c14b 100644 --- a/PermissionController/res/layout/permission_history_widget.xml +++ b/PermissionController/res/layout/permission_history_widget.xml @@ -28,6 +28,8 @@ android:layout_height="wrap_content" android:minWidth="60dp" android:layout_marginTop="19dp" + android:textAppearance="?android:attr/textAppearanceListItemSecondary" + android:textColor="?android:attr/textColorSecondary" /> <LinearLayout diff --git a/PermissionController/res/values-eu/strings.xml b/PermissionController/res/values-eu/strings.xml index c7280999f..73c1015b6 100644 --- a/PermissionController/res/values-eu/strings.xml +++ b/PermissionController/res/values-eu/strings.xml @@ -279,7 +279,7 @@ <string name="post_drive_permission_decision_reminder_summary_1_app_2_permissions" msgid="671791184670801301">"Gidatu bitartean, <xliff:g id="PERMISSION_1">%2$s</xliff:g> eta <xliff:g id="PERMISSION_2">%3$s</xliff:g> erabiltzeko baimena eman diozu <xliff:g id="APP">%1$s</xliff:g> aplikazioari"</string> <string name="post_drive_permission_decision_reminder_summary_1_app_multi_permission" msgid="4080701771111456927">"Gidatu bitartean, <xliff:g id="COUNT">%1$d</xliff:g> baimen eman dizkiozu <xliff:g id="APP">%2$s</xliff:g> aplikazioari"</string> <string name="post_drive_permission_decision_reminder_summary_multi_apps" msgid="5253882771252863902">"{count,plural, =1{Gidatu bitartean, baimenak eman dizkiezu <xliff:g id="APP_0">%1$s</xliff:g> eta beste # aplikaziori}other{Gidatu bitartean, baimenak eman dizkiezu <xliff:g id="APP_1">%1$s</xliff:g> eta beste # aplikaziori}}"</string> - <string name="go_to_settings" msgid="1053735612211228335">"Joan ezarpenetara"</string> + <string name="go_to_settings" msgid="1053735612211228335">"Joan Ezarpenak atalera"</string> <string name="auto_revoke_setting_subtitle" msgid="8631720570723050460">"Aplikazio batzuk ez dira erabili zenbait hilabetez"</string> <string name="permissions_removed_category_title" msgid="1064754271178447643">"Baimenak kendu zaizkien aplikazioak"</string> <string name="permission_removed_page_title" msgid="2627436155091001209">"Baimenak kendu zaizkien aplikazioak"</string> diff --git a/PermissionController/res/values-fa/strings.xml b/PermissionController/res/values-fa/strings.xml index 307c1b5da..f04d8f4c9 100644 --- a/PermissionController/res/values-fa/strings.xml +++ b/PermissionController/res/values-fa/strings.xml @@ -320,7 +320,7 @@ <string name="permission_subtitle_only_in_foreground" msgid="9068389431267377564">"تنها هنگام استفاده از برنامه"</string> <string name="permission_subtitle_media_only" msgid="8917869683764720717">"رسانه"</string> <string name="permission_subtitle_all_files" msgid="4982613338298067862">"همه فایلها"</string> - <string name="permission_subtitle_background" msgid="8916750995309083180">"همیشه مجاز بودن"</string> + <string name="permission_subtitle_background" msgid="8916750995309083180">"همیشه مجاز است"</string> <string name="app_perms_24h_access" msgid="99069906850627181">"آخرین زمان دسترسی: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> <string name="app_perms_24h_access_yest" msgid="5411926024794555022">"آخرین زمان دسترسی دیروز ساعت <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> <string name="app_perms_7d_access" msgid="4945055548894683751">"آخرین دسترسی: <xliff:g id="TIME_DATE_0">%1$s</xliff:g> ساعت <xliff:g id="TIME_DATE_1">%2$s</xliff:g>"</string> @@ -601,7 +601,7 @@ <string name="active_app_usage_2_qs" msgid="6107866785243565283">"<xliff:g id="APP_NAME">%1$s</xliff:g> درحال استفاده از آن است (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string> <string name="recent_app_usage_2_qs" msgid="3591205954235694403">"اخیراً <xliff:g id="APP_NAME">%1$s</xliff:g> از آن استفاده کرده است (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>)"</string> <string name="media_confirm_dialog_positive_button" msgid="9020793594051526399">"تأیید"</string> - <string name="media_confirm_dialog_negative_button" msgid="226987376924861785">"برگشت"</string> + <string name="media_confirm_dialog_negative_button" msgid="226987376924861785">"برگشتن"</string> <string name="media_confirm_dialog_title_a_to_p_aural_allow" msgid="8560601114044699903">"دسترسی به فایلهای دیگر نیز مجاز میشود"</string> <string name="media_confirm_dialog_title_a_to_p_aural_deny" msgid="7841428716317307685">"دسترسی به فایلهای دیگر نیز مجاز نمیشود"</string> <string name="media_confirm_dialog_title_a_to_p_visual_allow" msgid="6469086448310893751">"دسترسی به فایلهای دیگر نیز مجاز میشود"</string> diff --git a/PermissionController/res/values-gu/strings.xml b/PermissionController/res/values-gu/strings.xml index 0ea95ae75..b97892c54 100644 --- a/PermissionController/res/values-gu/strings.xml +++ b/PermissionController/res/values-gu/strings.xml @@ -84,7 +84,7 @@ <string name="storage_supergroup_warning_allow" msgid="103093462784523190">"આ ઍપ Androidના જૂના વર્ઝન માટે ડિઝાઇન કરવામાં આવી હતી. જો તમે આ પરવાનગીને મંજૂરી આપશો, તો (ફોટા, વીડિયો, મ્યુઝિક, ઑડિયો અને અન્ય ફાઇલો સહિત) સંપૂર્ણ સ્ટોરેજના ઍક્સેસની મંજૂરી આપવામાં આવશે."</string> <string name="storage_supergroup_warning_deny" msgid="6420765672683284347">"આ ઍપ Androidના જૂના વર્ઝન માટે ડિઝાઇન કરવામાં આવી હતી. જો તમે આ પરવાનગી નકારો છો, તો (ફોટા, વીડિયો, મ્યુઝિક, ઑડિયો અને અન્ય ફાઇલો સહિત) સંપૂર્ણ સ્ટોરેજના ઍક્સેસની મંજૂરી નકારવામાં આવશે."</string> <string name="default_permission_description" msgid="4624464917726285203">"અજાણી ક્રિયા કરો"</string> - <string name="app_permissions_group_summary" msgid="8788419008958284002">"<xliff:g id="COUNT_1">%2$d</xliff:g> માંથી <xliff:g id="COUNT_0">%1$d</xliff:g> ઍપની મંજૂરી છે"</string> + <string name="app_permissions_group_summary" msgid="8788419008958284002">"<xliff:g id="COUNT_1">%2$d</xliff:g>માંથી <xliff:g id="COUNT_0">%1$d</xliff:g> ઍપને મંજૂરી છે"</string> <string name="app_permissions_group_summary2" msgid="4329922444840521150">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g> ઍપને મંજૂરી છે"</string> <string name="menu_show_system" msgid="4254021607027872504">"સિસ્ટમ બતાવો"</string> <string name="menu_hide_system" msgid="3855390843744028465">"સિસ્ટમ છુપાવો"</string> @@ -579,7 +579,7 @@ <string name="safety_status_preference_title_and_summary_content_description" msgid="3511373256505058464">"સુરક્ષા અને પ્રાઇવસીનું સ્ટેટસ. <xliff:g id="OVERALL_SAFETY_STATUS">%1$s</xliff:g>. <xliff:g id="SUMMARY_OF_DEVICE_STATUS">%2$s</xliff:g>"</string> <string name="security_settings" msgid="3808106921175271317">"સુરક્ષા સેટિંગ"</string> <string name="sensor_permissions_qs" msgid="1022267900031317472">"પરવાનગીઓ"</string> - <string name="safety_privacy_qs_tile_title" msgid="727301867710374052">"સુરક્ષા અને પ્રાઇવસી"</string> + <string name="safety_privacy_qs_tile_title" msgid="727301867710374052">"સિક્યુરિટી અને પ્રાઇવસી"</string> <string name="safety_privacy_qs_tile_subtitle" msgid="3621544532041936749">"સ્ટેટસ ચેક કરો"</string> <string name="privacy_controls_qs" msgid="5780144882040591169">"તમારી પ્રાઇવસીને લગતા નિયંત્રણો"</string> <string name="security_settings_button_label_qs" msgid="8280343822465962330">"વધુ સેટિંગ"</string> diff --git a/PermissionController/res/values-hr/strings.xml b/PermissionController/res/values-hr/strings.xml index 7275d1681..54e0cf989 100644 --- a/PermissionController/res/values-hr/strings.xml +++ b/PermissionController/res/values-hr/strings.xml @@ -251,7 +251,7 @@ <string name="app_permission_never_accessed_summary" msgid="401346181461975090">"Nikad pristupljeno"</string> <string name="app_permission_never_accessed_denied_summary" msgid="6596000497490905146">"Odbijeno/nikad pristupljeno"</string> <string name="allowed_header" msgid="7769277978004790414">"Imaju dopuštenje"</string> - <string name="allowed_always_header" msgid="6455903312589013545">"Imaju dopuštenje cijelo vrijeme"</string> + <string name="allowed_always_header" msgid="6455903312589013545">"Pristup je dopušten cijelo vrijeme"</string> <string name="allowed_foreground_header" msgid="6845655788447833353">"Imaju dopuštenje samo tijekom upotrebe"</string> <string name="allowed_storage_scoped" msgid="5383645873719086975">"Dopušten pristup samo medijima"</string> <string name="allowed_storage_full" msgid="5356699280625693530">"Dopušteno upravljanje svim datotekama"</string> diff --git a/PermissionController/res/values-it/strings.xml b/PermissionController/res/values-it/strings.xml index df7a62b8f..d2b42e28b 100644 --- a/PermissionController/res/values-it/strings.xml +++ b/PermissionController/res/values-it/strings.xml @@ -92,7 +92,7 @@ <string name="menu_show_24_hours_data" msgid="8228054833323380780">"Mostra ultime 24 ore"</string> <string name="manage_permission" msgid="2895385393037061964">"Gestisci autorizzazione"</string> <string name="no_apps" msgid="2412612731628386816">"Nessuna app"</string> - <string name="location_settings" msgid="3624412509133422562">"Geolocalizzazione"</string> + <string name="location_settings" msgid="3624412509133422562">"Impostazioni di localizzazione"</string> <string name="location_warning" msgid="2381649060929040962">"L\'app <xliff:g id="APP_NAME">%1$s</xliff:g> è un fornitore di servizi di geolocalizzazione per questo dispositivo. È possibile modificare l\'accesso alla posizione dalle impostazioni per la geolocalizzazione."</string> <string name="system_warning" msgid="1173400963234358816">"Se rifiuti questa autorizzazione, le funzionalità di base del dispositivo potrebbero non funzionare più come previsto."</string> <string name="deny_read_media_visual_warning" msgid="3982586279917232827">"Questa app è stata progettata per una versione precedente di Android. Se non consenti a questa app di accedere a foto e video, verrà negato anche l\'accesso a musica e altro audio."</string> diff --git a/PermissionController/res/values-iw/strings.xml b/PermissionController/res/values-iw/strings.xml index 9779e6c66..946b0c08b 100644 --- a/PermissionController/res/values-iw/strings.xml +++ b/PermissionController/res/values-iw/strings.xml @@ -207,9 +207,9 @@ <string name="auto_revoke_label" msgid="5068393642936571656">"הסרת ההרשאות כשלא בשימוש"</string> <string name="unused_apps_label" msgid="2595428768404901064">"הסרת הרשאות ופינוי מקום אחסון"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"השהיית הפעילות באפליקציה אם אין בה שימוש"</string> - <string name="unused_apps_label_v3" msgid="693340578642156657">"ניהול האפליקציה כשהיא לא בשימוש"</string> + <string name="unused_apps_label_v3" msgid="693340578642156657">"הגבלת האפליקציה כשהיא לא בשימוש"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"הסרת ההרשאות, מחיקה של הקבצים הזמניים, הפסקה של קבלת ההתראות"</string> - <string name="unused_apps_summary_v2" msgid="5011313200815115802">"הסרת ההרשאות, מחיקה של הקבצים הזמניים, הפסקה של קבלת ההתראות והעברת האפליקציה לארכיון"</string> + <string name="unused_apps_summary_v2" msgid="5011313200815115802">"ההרשאות יוסרו, הקבצים הזמניים יימחקו, ההתראות יופסקו והאפליקציה תעבור לארכיון"</string> <string name="auto_revoke_summary" msgid="5867548789805911683">"כדי להגן על הנתונים שלך, אם האפליקציה הזו לא תהיה בשימוש במשך מספר חודשים, ההרשאות שניתנו לה יוסרו."</string> <string name="auto_revoke_summary_with_permissions" msgid="389712086597285013">"כדי להגן על הנתונים שלך, אם האפליקציה לא תהיה בשימוש במשך מספר חודשים, ההרשאות הבאות יוסרו: <xliff:g id="PERMS">%1$s</xliff:g>"</string> <string name="auto_revoked_apps_page_summary" msgid="6594753657893756536">"כדי להגן על הנתונים שלך, הוסרו הרשאות מאפליקציות שלא השתמשת בהן במשך מספר חודשים."</string> @@ -266,11 +266,11 @@ <string name="permission_reminders" msgid="6528257957664832636">"תזכורות להרשאות"</string> <string name="auto_revoke_permission_reminder_notification_title_one" msgid="6690347469376854137">"אפליקציה אחת שמזמן לא השתמשת בה"</string> <string name="auto_revoke_permission_reminder_notification_title_many" msgid="6062217713645069960">"<xliff:g id="NUMBER_OF_APPS">%s</xliff:g> אפליקציות שמזמן לא השתמשת בהן"</string> - <string name="auto_revoke_permission_reminder_notification_content" msgid="4492228990462107487">"הוסרו הרשאות כדי להגן על הפרטיות שלך. יש להקיש כדי לבדוק"</string> + <string name="auto_revoke_permission_reminder_notification_content" msgid="4492228990462107487">"הוסרו הרשאות כדי להגן על הפרטיות שלך. יש ללחוץ כדי לבדוק"</string> <string name="auto_revoke_permission_notification_title" msgid="2629844160853454657">"הוסרו הרשאות לאפליקציות שמזמן לא השתמשת בהן"</string> - <string name="auto_revoke_permission_notification_content" msgid="5125990886047799375">"יש אפליקציות שלא נעשה בהן שימוש כבר כמה חודשים. אפשר להקיש כדי לבדוק."</string> + <string name="auto_revoke_permission_notification_content" msgid="5125990886047799375">"יש אפליקציות שלא נעשה בהן שימוש כבר כמה חודשים. אפשר ללחוץ כדי לבדוק."</string> <string name="unused_apps_notification_title" msgid="4314832015894238019">"{count,plural, =1{אפליקציה אחת שמזמן לא השתמשת בה}one{# אפליקציות שמזמן לא השתמשת בהן}two{# אפליקציות שמזמן לא השתמשת בהן}other{# אפליקציות שמזמן לא השתמשת בהן}}"</string> - <string name="unused_apps_notification_content" msgid="9195026773244581246">"ההרשאות בוטלו, הקבצים הזמניים הוסרו וההתראות הופסקו. יש להקיש כדי לבדוק."</string> + <string name="unused_apps_notification_content" msgid="9195026773244581246">"ההרשאות בוטלו, הקבצים הזמניים הוסרו וההתראות הופסקו. יש ללחוץ כדי לבדוק."</string> <string name="unused_apps_safety_center_card_title" msgid="5638409355530099149">"בדיקת אפליקציות שההרשאות שלהן הוסרו"</string> <string name="unused_apps_safety_center_card_content" msgid="1088557243627427820">"ההרשאות והקבצים הזמניים של אפליקציות שלא השתמשת בהן זמן מה הוסרו, וההתראות מהן הופסקו."</string> <string name="unused_apps_safety_center_action_title" msgid="8865914432518993194">"בדיקת האפליקציות"</string> @@ -287,7 +287,7 @@ <string name="months_ago" msgid="1766026492610646354">"לפני <xliff:g id="COUNT">%1$d</xliff:g> חודשים"</string> <string name="auto_revoke_preference_summary" msgid="5517958331781391481">"הוסרו הרשאות כדי להגן על הפרטיות שלך"</string> <string name="background_location_access_reminder_notification_title" msgid="1140797924301941262">"האפליקציה <xliff:g id="APP_NAME">%s</xliff:g> קיבלה גישה ברקע למיקום שלך"</string> - <string name="background_location_access_reminder_notification_content" msgid="7787084707336546245">"האפליקציה הזו יכולה תמיד לגשת למיקום שלך. יש להקיש כדי לשנות את ההגדרה הזו."</string> + <string name="background_location_access_reminder_notification_content" msgid="7787084707336546245">"האפליקציה הזו יכולה תמיד לגשת למיקום שלך. יש ללחוץ כדי לשנות את ההגדרה הזו."</string> <string name="notification_listener_reminder_notification_title" msgid="3747210460187479091">"בדיקת אפליקציה עם גישה להתראות"</string> <string name="notification_listener_reminder_notification_content" msgid="831476101108863427">"האפליקציה <xliff:g id="APP_NAME">%s</xliff:g> יכולה לסגור את ההתראות שלך, לפעול לפיהן ולגשת לתוכן בהתראות"</string> <string name="notification_listener_warning_card_content" msgid="7840973324284115893">"האפליקציה הזו יכולה לסגור את ההתראות שלך, לפעול לפיהן ולגשת לתוכן בהתראות. לחלק מהאפליקציות נדרשת גישה כזו כדי לתפקד כמו שצריך."</string> @@ -302,12 +302,12 @@ <string name="accessibility_remove_access_success_label" msgid="4380995302917014670">"הגישה הוסרה"</string> <string name="safety_center_notification_app_label" msgid="2457720616141926534">"מערכת Android"</string> <string name="auto_revoke_after_notification_title" msgid="5417761027669887431">"הוסרו הרשאות הניתנות לאפליקציה כדי להגן על הפרטיות"</string> - <string name="auto_revoke_after_notification_content_one" msgid="6804038707453662753">"כבר כמה חודשים לא נעשה שימוש באפליקציה <xliff:g id="APP_NAME">%s</xliff:g>. יש להקיש כדי לבדוק."</string> - <string name="auto_revoke_after_notification_content_two" msgid="9108709764831425172">"כבר כמה חודשים לא נעשה שימוש באפליקציה <xliff:g id="APP_NAME">%s</xliff:g> ובאפליקציה אחת נוספת. יש להקיש כדי לבדוק."</string> - <string name="auto_revoke_after_notification_content_many" msgid="4774106206289751220">"כבר כמה חודשים לא נעשה שימוש באפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> וב-<xliff:g id="NUMBER_OF_APPS">%2$s</xliff:g> אפליקציות נוספות. יש להקיש כדי לבדוק."</string> + <string name="auto_revoke_after_notification_content_one" msgid="6804038707453662753">"כבר כמה חודשים לא נעשה שימוש באפליקציה <xliff:g id="APP_NAME">%s</xliff:g>. יש ללחוץ כדי לבדוק."</string> + <string name="auto_revoke_after_notification_content_two" msgid="9108709764831425172">"כבר כמה חודשים לא נעשה שימוש באפליקציה <xliff:g id="APP_NAME">%s</xliff:g> ובאפליקציה אחת נוספת. יש ללחוץ כדי לבדוק."</string> + <string name="auto_revoke_after_notification_content_many" msgid="4774106206289751220">"כבר כמה חודשים לא נעשה שימוש באפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> וב-<xliff:g id="NUMBER_OF_APPS">%2$s</xliff:g> אפליקציות נוספות. יש ללחוץ כדי לבדוק."</string> <string name="auto_revoke_before_notification_title_one" msgid="6758024954464359876">"אפליקציה אחת לא נמצאת בשימוש"</string> <string name="auto_revoke_before_notification_title_many" msgid="4415543943846385685">"<xliff:g id="NUMBER_OF_APPS">%s</xliff:g> אפליקציות לא נמצאות בשימוש"</string> - <string name="auto_revoke_before_notification_content_one" msgid="1156635373417068822">"הרשאות יוסרו כדי להגן על הפרטיות שלך. יש להקיש כדי לבדוק."</string> + <string name="auto_revoke_before_notification_content_one" msgid="1156635373417068822">"הרשאות יוסרו כדי להגן על הפרטיות שלך. יש ללחוץ כדי לבדוק."</string> <string name="unused_apps_title" msgid="8589298917717872239">"אפליקציות שמזמן לא השתמשת בהן"</string> <string name="unused_apps_subtitle_after" msgid="2034267519506357898">"הרשאות הוסרו מהאפליקציות"</string> <string name="unused_apps_subtitle_before" msgid="5233302577076132427">"הרשאות יוסרו מהאפליקציות"</string> @@ -358,7 +358,7 @@ <string name="role_assistant_description" msgid="6622458130459922952">"אפליקציות עזרה יכולות לסייע על סמך המידע שמוצג לך במסך. אפליקציות מסוימות תומכות גם בשירותי מרכז אפליקציות וגם בקלט קולי כדי לספק סיוע משולב."</string> <string name="role_browser_label" msgid="2877796144554070207">"אפליקציית ברירת מחדל לדפדפן"</string> <string name="role_browser_short_label" msgid="6745009127123292296">"אפליקציית דפדפן"</string> - <string name="role_browser_description" msgid="3465253637499842671">"אפליקציות שמספקות לך גישה לאינטרנט ומציגות קישורים להקשה"</string> + <string name="role_browser_description" msgid="3465253637499842671">"אפליקציות שמספקות לך גישה לאינטרנט ומציגות קישורים ללחיצה"</string> <string name="role_browser_request_title" msgid="2895200507835937192">"להגדיר את <xliff:g id="APP_NAME">%1$s</xliff:g> כאפליקציית הדפדפן המשמשת כברירת מחדל?"</string> <string name="role_browser_request_description" msgid="5888803407905985941">"אין צורך בהרשאות"</string> <string name="role_dialer_label" msgid="1100224146343237968">"אפליקציית ברירת המחדל לטלפון"</string> diff --git a/PermissionController/res/values-kk/strings.xml b/PermissionController/res/values-kk/strings.xml index 0413f0b54..a5680c1e5 100644 --- a/PermissionController/res/values-kk/strings.xml +++ b/PermissionController/res/values-kk/strings.xml @@ -251,7 +251,7 @@ <string name="app_permission_never_accessed_summary" msgid="401346181461975090">"Ешқашан пайдаланбады"</string> <string name="app_permission_never_accessed_denied_summary" msgid="6596000497490905146">"Тыйым салынған/Ешқашан пайдаланбаған"</string> <string name="allowed_header" msgid="7769277978004790414">"Рұқсат берілгендер"</string> - <string name="allowed_always_header" msgid="6455903312589013545">"Біржола рұқсат берілгендер"</string> + <string name="allowed_always_header" msgid="6455903312589013545">"Біржола рұқсат берілген"</string> <string name="allowed_foreground_header" msgid="6845655788447833353">"Пайдаланғанда ғана рұқсат берілгендер"</string> <string name="allowed_storage_scoped" msgid="5383645873719086975">"Тек мультимедианы пайдалана алатын қолданбалар"</string> <string name="allowed_storage_full" msgid="5356699280625693530">"Барлық файлдарды басқара алатын қолданбалар"</string> diff --git a/PermissionController/res/values-ko/strings.xml b/PermissionController/res/values-ko/strings.xml index dac0845fb..35269a437 100644 --- a/PermissionController/res/values-ko/strings.xml +++ b/PermissionController/res/values-ko/strings.xml @@ -84,7 +84,7 @@ <string name="storage_supergroup_warning_allow" msgid="103093462784523190">"이 앱은 Android 이전 버전에 맞게 설계되었습니다. 저장소 액세스 권한을 부여하면 앱에서 모든 저장소(사진, 동영상, 음악, 오디오 및 기타 파일 포함)에 액세스할 수 있습니다."</string> <string name="storage_supergroup_warning_deny" msgid="6420765672683284347">"이 앱은 Android 이전 버전에 맞게 설계되었습니다. 저장소 액세스 권한을 부여하지 않으면 앱에서 모든 저장소(사진, 동영상, 음악, 오디오 및 기타 파일)에 액세스할 수 없습니다."</string> <string name="default_permission_description" msgid="4624464917726285203">"알 수 없는 작업 실행"</string> - <string name="app_permissions_group_summary" msgid="8788419008958284002">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>개 앱 허용됨"</string> + <string name="app_permissions_group_summary" msgid="8788419008958284002">"앱 <xliff:g id="COUNT_1">%2$d</xliff:g>개 중 <xliff:g id="COUNT_0">%1$d</xliff:g>개 허용됨"</string> <string name="app_permissions_group_summary2" msgid="4329922444840521150">"앱 <xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>개에 권한 부여됨"</string> <string name="menu_show_system" msgid="4254021607027872504">"시스템 표시"</string> <string name="menu_hide_system" msgid="3855390843744028465">"시스템 숨기기"</string> diff --git a/PermissionController/res/values-lv/strings.xml b/PermissionController/res/values-lv/strings.xml index f6f852bfd..131aeff27 100644 --- a/PermissionController/res/values-lv/strings.xml +++ b/PermissionController/res/values-lv/strings.xml @@ -456,7 +456,7 @@ <string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> vēlas augšupielādēt atkļūdošanas informāciju."</string> <string name="incident_report_dialog_title" msgid="669104389325204095">"Vai kopīgot atkļūdošanas datus?"</string> <string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistēmā tika konstatēta problēma."</string> - <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> pieprasa augšupielādēt kļūdas pārskatu no šīs ierīces, kas veikts: <xliff:g id="DATE">%2$s</xliff:g> plkst. <xliff:g id="TIME">%3$s</xliff:g>. Kļūdu pārskatos ir ietverta personas informācija par jūsu ierīci vai lietotnēs reģistrēta informācija, piemēram, lietotājvārdi, atrašanās vietas dati, ierīču identifikatori un tīkla informācija. Kopīgojiet kļūdu pārskatus tikai ar lietotājiem un lietotnēm, kuriem uzticat šo informāciju. Vai atļaut lietotnei <xliff:g id="APP_NAME_1">%4$s</xliff:g> augšupielādēt kļūdas pārskatu?"</string> + <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> pieprasa augšupielādēt kļūdas pārskatu no šīs ierīces, kas veikts: <xliff:g id="DATE">%2$s</xliff:g> plkst. <xliff:g id="TIME">%3$s</xliff:g>. Kļūdu pārskatos ir ietverta personas informācija par jūsu ierīci vai lietotnēs reģistrēta informācija, piemēram, lietotājvārdi, atrašanās vietas dati, ierīču identifikatori un tīkla informācija. Kopīgojiet kļūdu pārskatus tikai ar lietotājiem un lietotnēm, kuriem uzticat šo informāciju. Vai atļaut <xliff:g id="APP_NAME_1">%4$s</xliff:g> augšupielādēt kļūdas pārskatu?"</string> <string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Apstrādājot lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> kļūdas pārskatu, radās problēma. Tāpēc detalizēto atkļūdošanas datu kopīgošana tika liegta. Atvainojiet par traucējumu!"</string> <string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Atļaut"</string> <string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Neatļaut"</string> diff --git a/PermissionController/res/values-ne/strings.xml b/PermissionController/res/values-ne/strings.xml index 9a7a4739a..9fecf53b3 100644 --- a/PermissionController/res/values-ne/strings.xml +++ b/PermissionController/res/values-ne/strings.xml @@ -644,7 +644,7 @@ <string name="permission_rationale_data_sharing_varies_message" msgid="4224469559084489222">"एपको संस्करण, प्रयोगसम्बन्धी जानकारी, तपाईं बसोबास गर्ने क्षेत्र र तपाईंको उमेरका आधारमा जानकारीको व्यवस्थापनसम्बन्धी अभ्यासहरू फरक हुन सक्छन्। "<annotation id="link">"जानकारी सेयर गर्नेसम्बन्धी अभ्यासका बारेमा थप जानकारी"</annotation></string> <string name="permission_rationale_data_sharing_varies_message_without_link" msgid="4912763761399025094">"एपको संस्करण, प्रयोगसम्बन्धी जानकारी, तपाईं बसोबास गर्ने क्षेत्र र तपाईंको उमेरका आधारमा जानकारीको व्यवस्थापनसम्बन्धी अभ्यासहरू फरक हुन सक्छन्।"</string> <string name="permission_rationale_location_settings_title" msgid="7204145004850190953">"तपाईंको लोकेसन डेटा"</string> - <string name="permission_rationale_permission_settings_message" msgid="631286040979660267"><annotation id="link">"गोपनीयतासम्बन्धी सेटिङ"</annotation>"मा गई यो एपलाई दिइएको अनुमति परिवर्तन गर्नुहोस्"</string> + <string name="permission_rationale_permission_settings_message" msgid="631286040979660267"><annotation id="link">"गोपनीयतासम्बन्धी सेटिङ"</annotation>"मा गई यो एपलाई दिइएको एक्सेस परिवर्तन गर्नुहोस्"</string> <string name="permission_rationale_purpose_app_functionality" msgid="8397736681065841405">"एपका सुविधा उपलब्ध गराउने"</string> <string name="permission_rationale_purpose_analytics" msgid="2070800501189620712">"Analytics"</string> <string name="permission_rationale_purpose_developer_communications" msgid="6453047018892062374">"विकासकर्ताबाट जानकारी प्राप्त गर्ने"</string> diff --git a/PermissionController/res/values-ro/strings.xml b/PermissionController/res/values-ro/strings.xml index 6544022cf..d75d6c6de 100644 --- a/PermissionController/res/values-ro/strings.xml +++ b/PermissionController/res/values-ro/strings.xml @@ -456,7 +456,7 @@ <string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> dorește să încarce informațiile despre remedierea erorilor."</string> <string name="incident_report_dialog_title" msgid="669104389325204095">"Trimiți datele despre remedierea erorilor?"</string> <string name="incident_report_dialog_intro" msgid="5897733669850951832">"Sistemul a detectat o problemă."</string> - <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> solicită încărcarea unui raport de erori de pe acest dispozitiv creat în data de <xliff:g id="DATE">%2$s</xliff:g> la <xliff:g id="TIME">%3$s</xliff:g>. Rapoartele de erori conțin informații cu caracter personal despre dispozitiv sau înregistrate de aplicații, de exemplu: nume de utilizator, date privind locațiile, identificatori ai dispozitivului și informații despre rețea. Trimite rapoarte de erori doar persoanelor și aplicațiilor de încredere. Permiți ca <xliff:g id="APP_NAME_1">%4$s</xliff:g> să încarce un raport de erori?"</string> + <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> solicită încărcarea unui raport de eroare de pe acest dispozitiv creat în data de <xliff:g id="DATE">%2$s</xliff:g> la <xliff:g id="TIME">%3$s</xliff:g>. Rapoartele de erori conțin informații cu caracter personal despre dispozitiv sau înregistrate de aplicații, de exemplu: nume de utilizator, date privind locațiile, identificatori ai dispozitivului și informații despre rețea. Trimite rapoarte de erori doar persoanelor și aplicațiilor de încredere. Permiți ca <xliff:g id="APP_NAME_1">%4$s</xliff:g> să încarce un raport de eroare?"</string> <string name="incident_report_error_dialog_text" msgid="4189647113387092272">"A apărut o eroare la procesarea raportului de eroare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>. Astfel, accesul la datele detaliate de remedierea erorilor a fost refuzat. Ne cerem scuze pentru întrerupere."</string> <string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Permite"</string> <string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Refuz"</string> diff --git a/PermissionController/res/values-sk/strings.xml b/PermissionController/res/values-sk/strings.xml index d743a2237..4442bbc85 100644 --- a/PermissionController/res/values-sk/strings.xml +++ b/PermissionController/res/values-sk/strings.xml @@ -206,7 +206,7 @@ <string name="unused_apps_category_title" msgid="2988455616845243901">"Nastavenia nepoužívaných aplikácií"</string> <string name="auto_revoke_label" msgid="5068393642936571656">"Odstrániť povolenia, ak sa aplikácia nepoužíva"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Odstraňovať povol. a uvoľňovať priestor"</string> - <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pozastaviť aktivitu v nepoužívaných apl."</string> + <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pozastaviť aktivitu pri nepoužívaní"</string> <string name="unused_apps_label_v3" msgid="693340578642156657">"Spravovať aplikáciu, ak sa nepoužíva"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Odstrániť povolenia, vymazať dočasné súbory a zastaviť upozornenia"</string> <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Odstrániť povolenia, vymazať dočasné súbory, zastaviť upozornenia a archivovať aplikáciu"</string> diff --git a/PermissionController/res/values-uk/strings.xml b/PermissionController/res/values-uk/strings.xml index 7f94a193c..133c1f5e7 100644 --- a/PermissionController/res/values-uk/strings.xml +++ b/PermissionController/res/values-uk/strings.xml @@ -206,7 +206,7 @@ <string name="unused_apps_category_title" msgid="2988455616845243901">"Налаштування невикористовуваних додатків"</string> <string name="auto_revoke_label" msgid="5068393642936571656">"Відкликати дозволи, якщо додаток не використовується"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Вилучати дозволи й звільняти місце"</string> - <string name="unused_apps_label_v2" msgid="7058776770056517980">"Призупиняти роботу в неактивний період"</string> + <string name="unused_apps_label_v2" msgid="7058776770056517980">"Призупиняти, коли додаток неактивний"</string> <string name="unused_apps_label_v3" msgid="693340578642156657">"Керувати невикористовуваним додатком"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Вилучити дозволи, видалити тимчасові файли й зупинити сповіщення"</string> <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Вилучити дозволи, видалити тимчасові файли, зупинити сповіщення й архівувати додаток"</string> diff --git a/PermissionController/res/values-vi/strings.xml b/PermissionController/res/values-vi/strings.xml index fe798bab0..ecb94368c 100644 --- a/PermissionController/res/values-vi/strings.xml +++ b/PermissionController/res/values-vi/strings.xml @@ -206,7 +206,7 @@ <string name="unused_apps_category_title" msgid="2988455616845243901">"Chế độ cài đặt cho ứng dụng không dùng đến"</string> <string name="auto_revoke_label" msgid="5068393642936571656">"Thu hồi quyền nếu bạn không dùng ứng dụng"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Thu hồi quyền và giải phóng dung lượng"</string> - <string name="unused_apps_label_v2" msgid="7058776770056517980">"Tạm dừng hoạt động của ứng dụng nếu không dùng"</string> + <string name="unused_apps_label_v2" msgid="7058776770056517980">"Dừng hoạt động ứng dụng nếu không dùng"</string> <string name="unused_apps_label_v3" msgid="693340578642156657">"Quản lý ứng dụng nếu không dùng"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Loại bỏ quyền, xoá tệp tạm thời và dừng thông báo"</string> <string name="unused_apps_summary_v2" msgid="5011313200815115802">"Loại bỏ quyền, xoá tệp tạm thời, dừng thông báo và lưu trữ ứng dụng"</string> diff --git a/PermissionController/res/values-watch/donottranslate.xml b/PermissionController/res/values-watch/donottranslate.xml index 43830a93c..03038ddd1 100644 --- a/PermissionController/res/values-watch/donottranslate.xml +++ b/PermissionController/res/values-watch/donottranslate.xml @@ -71,7 +71,7 @@ <dimen name="wear_compose_material3_numeral_extra_large_font_size">60sp</dimen> <dimen name="wear_compose_material3_title_small_font_size">14sp</dimen> <dimen name="wear_compose_material3_title_medium_font_size">16sp</dimen> - <dimen name="wear_compose_material3_title_large_font_size">20sp</dimen> + <dimen name="wear_compose_material3_title_large_font_size">18sp</dimen> <dimen name="wear_compose_material3_shape_corner_extra_small_size">4dp</dimen> <dimen name="wear_compose_material3_shape_corner_small_size">8dp</dimen> diff --git a/PermissionController/res/xml/roles.xml b/PermissionController/res/xml/roles.xml index 69ea7b1b7..b5d4db798 100644 --- a/PermissionController/res/xml/roles.xml +++ b/PermissionController/res/xml/roles.xml @@ -720,8 +720,6 @@ minSdkVersion="35" /> <permission name="android.permission.MANAGE_DEVICE_POLICY_AUDIT_LOGGING" minSdkVersion="35" /> - <permission name="android.permission.EXECUTE_APP_FUNCTIONS" - featureFlag="android.app.appfunctions.flags.Flags.enableAppFunctionManager" /> <permission name="android.permission.EXECUTE_APP_FUNCTIONS_TRUSTED" featureFlag="android.app.appfunctions.flags.Flags.enableAppFunctionManager" /> </permissions> @@ -1832,7 +1830,7 @@ defaultHolders="config_defaultWallet" description="@string/role_wallet_description" exclusive="true" - exclusivity="user" + exclusivity="profileGroup" label="@string/role_wallet_label" minSdkVersion="35" overrideUserWhenGranting="true" @@ -1885,7 +1883,7 @@ shortLabel="@string/role_for_testing_profile_group_exclusivity_short_label" showNone="true" uiBehavior="ReservedForTestingProfileGroupExclusivityRoleUiBehavior" - visible="true"/> + visible="false"/> <!--- ~ A role for the vendor package that provides privacy-preserving intelligent processor for diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java index d025d1b03..a99b1ade2 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java @@ -17,7 +17,6 @@ package com.android.role.controller.behavior; import android.app.ActivityManager; -import android.app.appfunctions.flags.Flags; import android.app.role.RoleManager; import android.content.Context; import android.content.Intent; @@ -37,18 +36,15 @@ import android.util.Xml; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.android.role.controller.model.Permissions; import com.android.role.controller.model.Role; import com.android.role.controller.model.RoleBehavior; import com.android.role.controller.model.VisibilityMixin; -import com.android.role.controller.util.PackageUtils; import com.android.role.controller.util.UserUtils; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Set; @@ -59,14 +55,6 @@ public class AssistantRoleBehavior implements RoleBehavior { private static final String LOG_TAG = AssistantRoleBehavior.class.getSimpleName(); - /** - * Permissions to be granted if the application fulfilling the assistant role is also a system - * or preinstalled app. - */ - private static final List<String> SYSTEM_ASSISTANT_PERMISSIONS = Arrays.asList( - android.Manifest.permission.EXECUTE_APP_FUNCTIONS - ); - @Override public void onRoleAddedAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { @@ -88,28 +76,6 @@ public class AssistantRoleBehavior implements RoleBehavior { return !UserUtils.isProfile(user, context); } - @Override - public void grantAsUser(@NonNull Role role, @NonNull String packageName, - @NonNull UserHandle user, @NonNull Context context) { - if (Flags.enableAppFunctionManager()) { - if (PackageUtils.isSystemPackageAsUser(packageName, user, context)) { - Permissions.grantAsUser(packageName, SYSTEM_ASSISTANT_PERMISSIONS, false, false, - true, false, false, user, context); - } - } - } - - @Override - public void revokeAsUser(@NonNull Role role, @NonNull String packageName, - @NonNull UserHandle user, @NonNull Context context) { - if (Flags.enableAppFunctionManager()) { - if (PackageUtils.isSystemPackageAsUser(packageName, user, context)) { - Permissions.revokeAsUser(packageName, SYSTEM_ASSISTANT_PERMISSIONS, true, false, - false, user, context); - } - } - } - @Nullable @Override public List<String> getQualifyingPackagesAsUser(@NonNull Role role, @NonNull UserHandle user, @@ -230,7 +196,7 @@ public class AssistantRoleBehavior implements RoleBehavior { } @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { return VisibilityMixin.isVisible("config_showDefaultAssistant", false, user, context); } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java index 0261e1eee..95b86f0ca 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java @@ -157,7 +157,7 @@ public class BrowserRoleBehavior implements RoleBehavior { } @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { return VisibilityMixin.isVisible("config_showBrowserRole", true, user, context); } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java index 153f4a6b4..aa0902136 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java @@ -80,7 +80,7 @@ public class DialerRoleBehavior implements RoleBehavior { } @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { return VisibilityMixin.isVisible("config_showDialerRole", true, user, context); } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java index f19c86596..4a52b0b03 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java @@ -71,7 +71,7 @@ public class EmergencyRoleBehavior implements RoleBehavior { } @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { return VisibilityMixin.isVisible("config_showDefaultEmergency", false, user, context); } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java index 8c1446b50..b226674a0 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java @@ -186,7 +186,7 @@ public class HomeRoleBehavior implements RoleBehavior { } @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { return VisibilityMixin.isVisible("config_showDefaultHome", false, user, context); } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java index f02b4d90c..5299886f6 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java @@ -49,7 +49,7 @@ public class ReservedForTestingProfileGroupExclusivityRoleBehavior implements Ro } @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { if (RoleFlags.isProfileGroupExclusivityAvailable()) { Context userContext = UserUtils.getUserContext(context, user); diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java index 4aff8a163..ee429c10e 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java @@ -133,7 +133,7 @@ public class SmsRoleBehavior implements RoleBehavior { } @Override - public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { return VisibilityMixin.isVisible("config_showSmsRole", true, user, context); } diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/v35/WalletRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/v35/WalletRoleBehavior.java index d01e59456..aed71564d 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/behavior/v35/WalletRoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/v35/WalletRoleBehavior.java @@ -41,6 +41,7 @@ import com.android.modules.utils.build.SdkLevel; import com.android.role.controller.model.Role; import com.android.role.controller.model.RoleBehavior; import com.android.role.controller.util.CollectionUtils; +import com.android.role.controller.util.RoleFlags; import com.android.role.controller.util.UserUtils; import org.xmlpull.v1.XmlPullParserException; @@ -62,8 +63,25 @@ public class WalletRoleBehavior implements RoleBehavior { @Override public boolean isAvailableAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { - return SdkLevel.isAtLeastV() && Flags.walletRoleEnabled() - && !UserUtils.isProfile(user, context); + if (!(SdkLevel.isAtLeastV() && Flags.walletRoleEnabled())) { + return false; + } + + if (Flags.walletRoleCrossUserEnabled() && RoleFlags.isProfileGroupExclusivityAvailable()) { + return !UserUtils.isPrivateProfile(user, context); + } else { + return !UserUtils.isProfile(user, context); + } + } + + @Nullable + @Override + public Integer getExclusivity() { + if (Flags.walletRoleCrossUserEnabled() && RoleFlags.isProfileGroupExclusivityAvailable()) { + return Role.EXCLUSIVITY_PROFILE_GROUP; + } + + return Role.EXCLUSIVITY_USER; } @Nullable diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/Role.java b/PermissionController/role-controller/java/com/android/role/controller/model/Role.java index 9773b93a9..5109e505b 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/Role.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/Role.java @@ -1098,11 +1098,23 @@ public class Role { * @return whether this role should be visible to user */ public boolean isVisibleAsUser(@NonNull UserHandle user, @NonNull Context context) { - RoleBehavior behavior = getBehavior(); - if (behavior == null) { - return isVisible(); + if (mBehavior != null) { + Boolean isVisibleAsUser = mBehavior.isVisibleAsUser(this, user, context); + if (isVisibleAsUser != null) { + if (isVisibleAsUser && mStatic) { + throw new IllegalArgumentException("static=\"true\" is invalid for a visible " + + "role: " + mName); + } + if (isVisibleAsUser && (mDescriptionResource == 0 + || mLabelResource == 0 + || mShortLabelResource == 0)) { + throw new IllegalArgumentException("description, label, and shortLabel are " + + "required for a visible role: " + mName); + } + return isVisibleAsUser; + } } - return isVisible() && behavior.isVisibleAsUser(this, user, context); + return isVisible(); } /** diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java index 86ca8e2ce..3b08265d1 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java @@ -23,7 +23,6 @@ import android.os.UserHandle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import java.util.Collections; import java.util.List; /** @@ -129,11 +128,12 @@ public interface RoleBehavior { * @param user the user to check for * @param context the `Context` to retrieve system services * - * @return whether this role should be visible to user + * @return whether this role should be visible to user, or {@code null} if not overridden */ - default boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, + @Nullable + default Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user, @NonNull Context context) { - return true; + return null; } /** diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java b/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java index 4b05554e3..9c3746b79 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java @@ -413,6 +413,9 @@ public class RoleParser { skipCurrentTag(parser); return null; } + } else if (behavior != null) { + labelResource = getAttributeResourceValue(parser, ATTRIBUTE_LABEL, 0); + shortLabelResource = getAttributeResourceValue(parser, ATTRIBUTE_SHORT_LABEL, 0); } else { labelResource = 0; shortLabelResource = 0; diff --git a/PermissionController/role-controller/java/com/android/role/controller/util/UserUtils.java b/PermissionController/role-controller/java/com/android/role/controller/util/UserUtils.java index f3cb7926a..598057b16 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/util/UserUtils.java +++ b/PermissionController/role-controller/java/com/android/role/controller/util/UserUtils.java @@ -127,7 +127,7 @@ public final class UserUtils { /** Returns the parent of a given user. */ @Nullable - private static UserHandle getProfileParent(UserHandle user, @NonNull Context context) { + public static UserHandle getProfileParent(UserHandle user, @NonNull Context context) { Context userContext = getUserContext(context, user); UserManager userManager = userContext.getSystemService(UserManager.class); return userManager.getProfileParent(user); diff --git a/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt b/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt index e2d46e519..952274d4a 100644 --- a/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt +++ b/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt @@ -55,7 +55,6 @@ class EnhancedConfirmationDialogActivity : FragmentActivity() { companion object { private const val KEY_WAS_CLEAR_RESTRICTION_ALLOWED = "KEY_WAS_CLEAR_RESTRICTION_ALLOWED" private const val REASON_PHONE_STATE = "phone_state" - private const val REASON_APP_OP_RESTRICTED = "app_op_restricted" } private var wasClearRestrictionAllowed: Boolean = false diff --git a/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt b/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt index 116b52cfb..4c698cda3 100644 --- a/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/incident/wear/WearConfirmationScreen.kt @@ -30,7 +30,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ComposeView import androidx.wear.compose.material.CircularProgressIndicator -import com.android.permissioncontroller.permission.ui.wear.elements.material2.DialogButtonContent +import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionConfirmationDialog import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/GrantPermissionsWearViewHandler.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/GrantPermissionsWearViewHandler.java index 5100b08fd..69b57e362 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/GrantPermissionsWearViewHandler.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/GrantPermissionsWearViewHandler.java @@ -190,6 +190,7 @@ public class GrantPermissionsWearViewHandler implements GrantPermissionsViewHand || mLocationVisibilities[DIALOG_WITH_COARSE_LOCATION_ONLY]) { mViewModel.getPreciseLocationCheckedLiveData().setValue(false); } + mViewModel.getShowDialog().postValue(true); } private void onLocationSwitchChanged(boolean checked) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/LocationProviderDialogScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/LocationProviderDialogScreen.kt index 691ceae25..ff3c2cbc1 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/LocationProviderDialogScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/LocationProviderDialogScreen.kt @@ -18,49 +18,39 @@ package com.android.permissioncontroller.permission.ui.wear import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.wear.compose.foundation.SwipeToDismissValue -import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState -import androidx.wear.compose.material.ChipDefaults -import androidx.wear.compose.material.MaterialTheme -import androidx.wear.compose.material.SwipeToDismissBox -import com.android.permissioncontroller.permission.ui.wear.elements.material2.Chip +import androidx.wear.compose.material3.Dialog +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButtonStyle import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionScaffold import com.android.permissioncontroller.permission.ui.wear.model.LocationProviderInterceptDialogArgs -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion @Composable -fun LocationProviderDialogScreen(args: LocationProviderInterceptDialogArgs?) { - args?.apply { - val state = rememberSwipeToDismissBoxState() - LaunchedEffect(state.currentValue) { - // If the swipe is complete - if (state.currentValue == SwipeToDismissValue.Dismissed) { - onOkButtonClick() - } - } - SwipeToDismissBox(state = state) { isBackground -> +fun LocationProviderDialogScreen( + showDialog: Boolean, + onDismissRequest: () -> Unit, + args: LocationProviderInterceptDialogArgs?, +) { + Dialog(show = showDialog, onDismissRequest = onDismissRequest) { + args?.run { WearPermissionScaffold( - materialUIVersion = WearPermissionMaterialUIVersion.MATERIAL2_5, showTimeText = false, image = iconId, title = stringResource(titleId), subtitle = message, - isLoading = isBackground, + isLoading = false, content = { item { - Chip( + WearPermissionButton( label = stringResource(locationSettingsId), - onClick = onLocationSettingsClick, modifier = Modifier.fillMaxWidth(), - textColor = MaterialTheme.colors.surface, - colors = ChipDefaults.primaryChipColors(), + onClick = onLocationSettingsClick, + style = WearPermissionButtonStyle.Primary, ) } item { - Chip( + WearPermissionButton( label = stringResource(okButtonTitleId), onClick = onOkButtonClick, modifier = Modifier.fillMaxWidth(), diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/TEST_MAPPING b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/TEST_MAPPING deleted file mode 100644 index 3cc91855d..000000000 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/TEST_MAPPING +++ /dev/null @@ -1,22 +0,0 @@ -{ - "wear-presubmit": [ - { - // See b/387705174 for context - "name": "CtsPermissionUiTestCases", - "options": [ - { - // Flaky - "exclude-filter": "android.permissionui.cts.PermissionTest22#testNoRuntimePrompt" - }, - { - // Flaky - "exclude-filter": "android.permissionui.cts.NotificationPermissionTest" - }, - { - // Flaky - "exclude-filter": "android.permissionui.cts.EnhancedConfirmationManagerTest" - } - ] - } - ] -}
\ No newline at end of file diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsScreen.kt index 686dd1b62..5919fad0d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionGroupsScreen.kt @@ -26,11 +26,11 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.res.stringResource import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material2.Chip -import com.android.permissioncontroller.permission.ui.wear.elements.material2.DialogButtonContent -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChip -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChipToggleControl +import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionConfirmationDialog +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControl +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType import com.android.permissioncontroller.permission.ui.wear.model.RevokeDialogArgs import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion @@ -46,6 +46,9 @@ fun WearAppPermissionGroupsScreen(helper: WearAppPermissionGroupsHelper) { helper.locationProviderInterceptDialogViewModel.dialogVisibilityLiveData.observeAsState( false ) + val locationProviderDialogArgs = + helper.locationProviderInterceptDialogViewModel.locationProviderInterceptDialogArgs + .observeAsState(null) var isLoading by remember { mutableStateOf(true) } @@ -60,11 +63,11 @@ fun WearAppPermissionGroupsScreen(helper: WearAppPermissionGroupsHelper) { showDialog = showRevokeDialog.value, args = helper.revokeDialogViewModel.revokeDialogArgs, ) - if (showLocationProviderDialog.value) { - LocationProviderDialogScreen( - helper.locationProviderInterceptDialogViewModel.locationProviderInterceptDialogArgs - ) - } + LocationProviderDialogScreen( + showDialog = showLocationProviderDialog.value, + onDismissRequest = { helper.locationProviderInterceptDialogViewModel.dismissDialog() }, + args = locationProviderDialogArgs.value, + ) } if (isLoading && !packagePermGroups.value.isNullOrEmpty()) { @@ -80,20 +83,22 @@ internal fun WearAppPermissionGroupsContent( ) { ScrollableScreen(title = stringResource(R.string.app_permissions), isLoading = isLoading) { if (permissionGroupChipParams.isEmpty()) { - item { Chip(label = stringResource(R.string.no_permissions), onClick = {}) } + item { + WearPermissionButton(label = stringResource(R.string.no_permissions), onClick = {}) + } } else { for (info in permissionGroupChipParams) { item { if (info.checked != null) { - ToggleChip( - checked = info.checked, + WearPermissionToggleControl( + toggleControl = WearPermissionToggleControlType.Switch, label = info.label, + checked = info.checked, enabled = info.enabled, - toggleControl = ToggleChipToggleControl.Switch, onCheckedChanged = info.onCheckedChanged, ) } else { - Chip( + WearPermissionButton( label = info.label, labelMaxLines = Integer.MAX_VALUE, secondaryLabel = info.summary?.let { info.summary }, @@ -107,11 +112,11 @@ internal fun WearAppPermissionGroupsContent( autoRevokeChipParam?.let { if (it.visible) { item { - ToggleChip( + WearPermissionToggleControl( checked = it.checked, label = stringResource(it.labelRes), - labelMaxLine = 3, - toggleControl = ToggleChipToggleControl.Switch, + labelMaxLines = 3, + toggleControl = WearPermissionToggleControlType.Switch, onCheckedChanged = it.onCheckedChanged, ) } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt index 55db66d41..8815e7905 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearAppPermissionScreen.kt @@ -31,13 +31,13 @@ import com.android.permissioncontroller.permission.ui.model.AppPermissionViewMod import com.android.permissioncontroller.permission.ui.model.AppPermissionViewModel.ButtonType import com.android.permissioncontroller.permission.ui.v33.AdvancedConfirmDialogArgs import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material2.DialogButtonContent import com.android.permissioncontroller.permission.ui.wear.elements.material2.ListFooter import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChip -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChipToggleControl import com.android.permissioncontroller.permission.ui.wear.elements.material2.toggleChipDisabledColors +import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionConfirmationDialog import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType import com.android.permissioncontroller.permission.ui.wear.elements.material3.defaultAlertConfirmIcon import com.android.permissioncontroller.permission.ui.wear.elements.material3.defaultAlertDismissIcon import com.android.permissioncontroller.permission.ui.wear.model.AppPermissionConfirmDialogViewModel @@ -121,7 +121,7 @@ internal fun WearAppPermissionContent( checked = it.isChecked, enabled = it.isEnabled, label = stringResource(R.string.app_permission_location_accuracy), - toggleControl = ToggleChipToggleControl.Switch, + toggleControl = WearPermissionToggleControlType.Switch, onCheckedChanged = onLocationSwitchChanged, labelMaxLine = Integer.MAX_VALUE, ) @@ -141,7 +141,7 @@ internal fun WearAppPermissionContent( toggleChipDisabledColors() }, label = labelsByButton(buttonType), - toggleControl = ToggleChipToggleControl.Radio, + toggleControl = WearPermissionToggleControlType.Radio, onCheckedChanged = { checked -> if (it.isEnabled) { onGrantedStateChanged(buttonType, checked) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationScreen.kt index a0e41b579..ab19a9665 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearEnhancedConfirmationScreen.kt @@ -47,7 +47,7 @@ import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableSc import com.android.permissioncontroller.permission.ui.wear.elements.dismiss import com.android.permissioncontroller.permission.ui.wear.elements.findActivity import com.android.permissioncontroller.permission.ui.wear.elements.material2.Chip -import com.android.permissioncontroller.permission.ui.wear.elements.material2.DialogButtonContent +import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionConfirmationDialog import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder import com.android.permissioncontroller.permission.ui.wear.model.WearEnhancedConfirmationViewModel diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearGrantPermissionsScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearGrantPermissionsScreen.kt index 35c2ab046..20c010781 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearGrantPermissionsScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearGrantPermissionsScreen.kt @@ -18,10 +18,7 @@ package com.android.permissioncontroller.permission.ui.wear import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.livedata.observeAsState -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.res.stringResource @@ -42,13 +39,12 @@ import com.android.permissioncontroller.permission.ui.GrantPermissionsActivity.N import com.android.permissioncontroller.permission.ui.GrantPermissionsActivity.NO_UPGRADE_OT_BUTTON import com.android.permissioncontroller.permission.ui.wear.GrantPermissionsWearViewHandler.BUTTON_RES_ID_TO_NUM import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChipToggleControl import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControl +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType import com.android.permissioncontroller.permission.ui.wear.model.WearGrantPermissionsViewModel import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion.MATERIAL3 -import kotlinx.coroutines.delay @Composable fun WearGrantPermissionsScreen( @@ -81,7 +77,7 @@ fun WearGrantPermissionsScreen( checked = preciseLocationChecked.value, onCheckedChanged = onLocationSwitchChanged, label = stringResource(R.string.app_permission_location_accuracy), - toggleControl = ToggleChipToggleControl.Switch, + toggleControl = WearPermissionToggleControlType.Switch, modifier = Modifier.fillMaxWidth(), labelMaxLines = Integer.MAX_VALUE, materialUIVersion = materialUIVersion, @@ -123,7 +119,7 @@ fun setContent( ) { composeView.setContent { if (ResourceHelper.materialUIVersionInApp == MATERIAL3) { - AsDialog(onCancelled) { + AsDialog(viewModel, onCancelled) { WearGrantPermissionsScreen(viewModel, onButtonClicked, onLocationSwitchChanged) } } else { @@ -133,12 +129,12 @@ fun setContent( } @Composable -private fun AsDialog(onDismissRequest: () -> Unit, content: @Composable () -> Unit) { - val showDialog = remember { mutableStateOf(false) } - LaunchedEffect(Unit) { - delay(300) - showDialog.value = true - } +private fun AsDialog( + viewModel: WearGrantPermissionsViewModel, + onDismissRequest: () -> Unit, + content: @Composable () -> Unit, +) { + val showDialog = viewModel.showDialog.observeAsState(false) Dialog(show = showDialog.value, onDismissRequest = onDismissRequest, content = content) } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionScreen.kt index 15d4cd370..d826e501e 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageCustomPermissionScreen.kt @@ -26,7 +26,8 @@ import androidx.compose.ui.res.stringResource import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.ui.model.ManageCustomPermissionsViewModel import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material2.Chip +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder @Composable fun WearManageCustomPermissionScreen( @@ -59,10 +60,10 @@ internal fun WearManageCustomPermissionContent( ) { for (params in permGroupChipParams) { item { - Chip( + WearPermissionButton( label = params.label, labelMaxLines = 3, - icon = params.icon, + iconBuilder = params.icon?.let { WearPermissionIconBuilder.builder(it) }, secondaryLabel = params.secondaryLabel, secondaryLabelMaxLines = 3, onClick = { onPermGroupClick(params.permGroupName) }, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionScreen.kt index 20f87f6ba..3e347e19c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearManageStandardPermissionScreen.kt @@ -30,7 +30,8 @@ import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.model.livedatatypes.PermGroupPackagesUiInfo import com.android.permissioncontroller.permission.ui.model.ManageStandardPermissionsViewModel import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material2.Chip +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder import com.android.permissioncontroller.permission.utils.KotlinUtils.getPermGroupIcon import com.android.permissioncontroller.permission.utils.KotlinUtils.getPermGroupLabel import com.android.permissioncontroller.permission.utils.StringUtils @@ -115,10 +116,10 @@ internal fun WearManageStandardPermissionContent( ) { for (params in permGroupChipParams) { item { - Chip( + WearPermissionButton( label = params.label, labelMaxLines = 3, - icon = params.icon, + iconBuilder = params.icon?.let { WearPermissionIconBuilder.builder(it) }, secondaryLabel = params.secondaryLabel, secondaryLabelMaxLines = 3, onClick = { onPermGroupClick(params.permGroupName) }, @@ -128,10 +129,10 @@ internal fun WearManageStandardPermissionContent( if (numCustomPermGroups > 0) { item { - Chip( + WearPermissionButton( label = stringResource(R.string.additional_permissions), labelMaxLines = 3, - icon = R.drawable.ic_more_horizontal, + iconBuilder = WearPermissionIconBuilder.builder(R.drawable.ic_more_horizontal), secondaryLabel = StringUtils.getIcuPluralsString( LocalContext.current, @@ -146,10 +147,10 @@ internal fun WearManageStandardPermissionContent( if (numAutoRevoked > 0) { item { - Chip( + WearPermissionButton( label = stringResource(R.string.auto_revoke_permission_notification_title), labelMaxLines = 3, - icon = R.drawable.ic_info, + iconBuilder = WearPermissionIconBuilder.builder(R.drawable.ic_info), secondaryLabel = stringResource(R.string.auto_revoke_setting_subtitle), secondaryLabelMaxLines = 3, onClick = onAutoRevokedClick, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsScreen.kt index 00ebf2f34..2fa6aa7f3 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/WearPermissionAppsScreen.kt @@ -19,7 +19,6 @@ package com.android.permissioncontroller.permission.ui.wear import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState @@ -28,13 +27,13 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp import androidx.wear.compose.material.Text import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.ui.Category import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material2.Chip -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ListSubheader +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionListSubHeader /** Compose the screen associated to a [WearPermissionAppsFragment]. */ @Composable @@ -46,6 +45,10 @@ fun WearPermissionAppsScreen(helper: WearPermissionAppsHelper) { helper.locationProviderDialogViewModel.dialogVisibilityLiveData.observeAsState(false) val appPermissionUsages = helper.wearViewModel.appPermissionUsages.observeAsState(emptyList()) var isLoading by remember { mutableStateOf(true) } + val dialogArgs = + helper.locationProviderDialogViewModel.locationProviderInterceptDialogArgs.observeAsState( + null + ) val title = helper.getTitle() val subTitle = helper.getSubTitle() @@ -53,21 +56,21 @@ fun WearPermissionAppsScreen(helper: WearPermissionAppsHelper) { val chipsByCategory = helper.getChipsByCategory(categorizedApps.value, appPermissionUsages.value) Box(modifier = Modifier.fillMaxSize()) { - val dialogArgs = helper.locationProviderDialogViewModel.locationProviderInterceptDialogArgs - if (showLocationProviderDialog.value && dialogArgs != null) { - LocationProviderDialogScreen(dialogArgs) - } else { - WearPermissionAppsContent( - chipsByCategory = chipsByCategory, - showSystem = showSystem.value, - hasSystemApps = hasSystemApps.value, - title = title, - subtitle = subTitle, - showAlways = showAlways, - isLoading = isLoading, - onShowSystemClick = helper.onShowSystemClick, - ) - } + WearPermissionAppsContent( + chipsByCategory = chipsByCategory, + showSystem = showSystem.value, + hasSystemApps = hasSystemApps.value, + title = title, + subtitle = subTitle, + showAlways = showAlways, + isLoading = isLoading, + onShowSystemClick = helper.onShowSystemClick, + ) + LocationProviderDialogScreen( + showDialog = showLocationProviderDialog.value, + onDismissRequest = { helper.locationProviderDialogViewModel.dismissDialog() }, + args = dialogArgs.value, + ) } if (isLoading && categorizedApps.value.isNotEmpty()) { isLoading = false @@ -94,26 +97,19 @@ internal fun WearPermissionAppsContent( continue } item { - ListSubheader( - modifier = - Modifier.padding( - top = if (index == firstItemIndex) 0.dp else 12.dp, - bottom = 4.dp, - start = 14.dp, - end = 14.dp, - ) - ) { + WearPermissionListSubHeader(isFirstItemInAList = index == firstItemIndex) { Text(text = stringResource(getCategoryString(category, showAlways))) } } chips.forEach { item { - Chip( + WearPermissionButton( label = it.title, labelMaxLines = Int.MAX_VALUE, secondaryLabel = it.summary, secondaryLabelMaxLines = Int.MAX_VALUE, - icon = it.icon, + iconBuilder = + it.icon?.let { icon -> WearPermissionIconBuilder.builder(icon) }, enabled = it.enabled, onClick = { it.onClick() }, modifier = Modifier.fillMaxWidth(), @@ -124,7 +120,7 @@ internal fun WearPermissionAppsContent( if (hasSystemApps) { item { - Chip( + WearPermissionButton( label = if (showSystem) { stringResource(R.string.menu_hide_system) @@ -150,6 +146,7 @@ internal fun getCategoryString(category: String, showAlways: Boolean) = } else { R.string.allowed_header } + Category.ALLOWED_FOREGROUND.categoryName -> R.string.allowed_foreground_header Category.ASK.categoryName -> R.string.ask_header Category.DENIED.categoryName -> R.string.denied_header diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ScrollableScreen.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ScrollableScreen.kt index d01692159..bfa46ae55 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ScrollableScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/ScrollableScreen.kt @@ -31,8 +31,8 @@ import androidx.wear.compose.foundation.SwipeToDismissValue import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState import androidx.wear.compose.material.SwipeToDismissBox import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionScaffold +import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion -import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion.MATERIAL2_5 /** * Screen that contains a list of items defined using the [content] parameter, adds the time text @@ -42,7 +42,7 @@ import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionM */ @Composable fun ScrollableScreen( - materialUIVersion: WearPermissionMaterialUIVersion = MATERIAL2_5, + materialUIVersion: WearPermissionMaterialUIVersion = ResourceHelper.materialUIVersionInSettings, showTimeText: Boolean = true, title: String? = null, subtitle: CharSequence? = null, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/AlertDialog.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/AlertDialog.kt index 2bd72624f..a49d8822e 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/AlertDialog.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/AlertDialog.kt @@ -23,6 +23,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.semantics.heading +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.rememberTextMeasurer import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow @@ -37,13 +39,9 @@ import androidx.wear.compose.material.dialog.Dialog import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumnDefaults import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumnState import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.rememberColumnState +import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder -data class DialogButtonContent( - val icon: WearPermissionIconBuilder? = null, - val onClick: (() -> Unit), -) - /** * This component is an alternative to [AlertContent], providing the following: * - a convenient way of passing a title and a message; @@ -103,7 +101,7 @@ fun AlertContent( title?.let { { Text( - modifier = Modifier.fillMaxWidth(), + modifier = Modifier.fillMaxWidth().semantics() { heading() }, text = it, color = MaterialTheme.colors.onBackground, textAlign = TextAlign.Center, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ResponsiveDialog.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ResponsiveDialog.kt index c43c45358..4cb3ab615 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ResponsiveDialog.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ResponsiveDialog.kt @@ -48,6 +48,7 @@ import com.android.permissioncontroller.permission.ui.wear.elements.material2.la import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumnDefaults.responsive import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.ScalingLazyColumnState import com.android.permissioncontroller.permission.ui.wear.elements.material2.layout.rememberColumnState +import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder import com.android.permissioncontroller.permission.ui.wear.elements.material3.defaultAlertConfirmIcon import com.android.permissioncontroller.permission.ui.wear.elements.material3.defaultAlertDismissIcon diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ToggleChip.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ToggleChip.kt index 421d5ca4f..bfb5d114d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ToggleChip.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ToggleChip.kt @@ -29,6 +29,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.semantics.role +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.stateDescription import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.wear.compose.material.ChipDefaults @@ -39,6 +44,8 @@ import androidx.wear.compose.material.ToggleChip import androidx.wear.compose.material.ToggleChipColors import androidx.wear.compose.material.ToggleChipDefaults import androidx.wear.compose.material.contentColorFor +import com.android.permissioncontroller.R +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType /** * This component is an alternative to [ToggleChip], providing the following: @@ -52,7 +59,7 @@ fun ToggleChip( onCheckedChanged: (Boolean) -> Unit, label: String, labelMaxLine: Int? = null, - toggleControl: ToggleChipToggleControl, + toggleControl: WearPermissionToggleControlType, modifier: Modifier = Modifier, icon: Any? = null, iconColor: Color = Color.Unspecified, @@ -92,15 +99,16 @@ fun ToggleChip( Icon( imageVector = when (toggleControl) { - ToggleChipToggleControl.Switch -> ToggleChipDefaults.switchIcon(checked) - ToggleChipToggleControl.Radio -> ToggleChipDefaults.radioIcon(checked) - ToggleChipToggleControl.Checkbox -> ToggleChipDefaults.checkboxIcon(checked) + WearPermissionToggleControlType.Switch -> ToggleChipDefaults.switchIcon(checked) + WearPermissionToggleControlType.Radio -> ToggleChipDefaults.radioIcon(checked) + WearPermissionToggleControlType.Checkbox -> + ToggleChipDefaults.checkboxIcon(checked) }, contentDescription = null, // This potentially be removed once this issue is addressed: // https://issuetracker.google.com/issues/287087138 rtlMode = - if (toggleControl == ToggleChipToggleControl.Switch) { + if (toggleControl == WearPermissionToggleControlType.Switch) { IconRtlMode.Mirrored } else { IconRtlMode.Default @@ -127,7 +135,7 @@ fun ToggleChip( checked = checked, onCheckedChange = { newChecked -> // Radio buttons cannot be toggled off by tapping on it again. - if (toggleControl != ToggleChipToggleControl.Radio || newChecked) { + if (toggleControl != WearPermissionToggleControlType.Radio || newChecked) { onCheckedChanged.invoke(newChecked) } }, @@ -219,3 +227,29 @@ fun toggleChipBackgroundColors(): ToggleChipColors { uncheckedToggleControlColor = uncheckedToggleControlColor, ) } + +@Composable +fun Modifier.toggleControlSemantics( + toggleControl: WearPermissionToggleControlType, + checked: Boolean, +): Modifier { + val semanticsRole = + when (toggleControl) { + WearPermissionToggleControlType.Switch -> Role.Switch + WearPermissionToggleControlType.Radio -> Role.RadioButton + WearPermissionToggleControlType.Checkbox -> Role.Checkbox + } + val stateDescriptionSemantics = + stringResource( + if (checked) { + R.string.on + } else { + R.string.off + } + ) + + return semantics { + role = semanticsRole + stateDescription = stateDescriptionSemantics + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ToggleChipToggleControl.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ToggleChipToggleControl.kt deleted file mode 100644 index 56fbf3d61..000000000 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/ToggleChipToggleControl.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.permissioncontroller.permission.ui.wear.elements.material2 - -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.semantics.Role -import androidx.compose.ui.semantics.role -import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.semantics.stateDescription -import com.android.permissioncontroller.R - -enum class ToggleChipToggleControl { - Switch, - Radio, - Checkbox, -} - -@Composable -fun Modifier.toggleControlSemantics( - toggleControl: ToggleChipToggleControl, - checked: Boolean, -): Modifier { - val semanticsRole = - when (toggleControl) { - ToggleChipToggleControl.Switch -> Role.Switch - ToggleChipToggleControl.Radio -> Role.RadioButton - ToggleChipToggleControl.Checkbox -> Role.Checkbox - } - val stateDescriptionSemantics = - stringResource( - if (checked) { - R.string.on - } else { - R.string.off - } - ) - - return semantics { - role = semanticsRole - stateDescription = stateDescriptionSemantics - } -} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/Wear2Scaffold.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/Wear2Scaffold.kt index 3575b3cff..866b7f012 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/Wear2Scaffold.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material2/Wear2Scaffold.kt @@ -142,11 +142,7 @@ fun Wear2Scaffold( if (isLoading) { CircularProgressIndicator(modifier = Modifier.align(Alignment.Center)) } else { - val iconColor = - com.android.permissioncontroller.permission.ui.wear.elements.material2 - .chipDefaultColors() - .iconColor(true) - .value + val iconColor = chipDefaultColors().iconColor(true).value ScalingLazyColumn( modifier = Modifier.fillMaxWidth(), state = listState, @@ -194,15 +190,13 @@ fun Wear2Scaffold( if (titleTestTag != null) { modifier = modifier.testTag(titleTestTag) } - com.android.permissioncontroller.permission.ui.wear.elements - .material2 - .ListHeader(modifier = Modifier.padding(titlePaddingValues)) { - Text( - text = title, - textAlign = TextAlign.Center, - modifier = modifier, - ) - } + ListHeader(modifier = Modifier.padding(titlePaddingValues)) { + Text( + text = title, + textAlign = TextAlign.Center, + modifier = modifier, + ) + } } } if (subtitle != null) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionButton.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionButton.kt index 942a420a8..9a89e0809 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionButton.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionButton.kt @@ -34,6 +34,7 @@ import androidx.wear.compose.material3.LocalTextConfiguration import androidx.wear.compose.material3.LocalTextStyle import androidx.wear.compose.material3.Text import com.android.permissioncontroller.permission.ui.wear.elements.material2.Chip +import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion /** @@ -45,8 +46,7 @@ import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionM fun WearPermissionButton( label: String, modifier: Modifier = Modifier, - materialUIVersion: WearPermissionMaterialUIVersion = - WearPermissionMaterialUIVersion.MATERIAL2_5, + materialUIVersion: WearPermissionMaterialUIVersion = ResourceHelper.materialUIVersionInSettings, iconBuilder: WearPermissionIconBuilder? = null, labelMaxLines: Int? = null, secondaryLabel: String? = null, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionConfirmationDialog.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionConfirmationDialog.kt index 430831248..0e1bf1fbe 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionConfirmationDialog.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionConfirmationDialog.kt @@ -26,9 +26,13 @@ import androidx.wear.compose.material3.AlertDialog as Material3AlertDialog import androidx.wear.compose.material3.AlertDialogDefaults import androidx.wear.compose.material3.Text import com.android.permissioncontroller.permission.ui.wear.elements.material2.AlertDialog -import com.android.permissioncontroller.permission.ui.wear.elements.material2.DialogButtonContent import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion +data class DialogButtonContent( + val icon: WearPermissionIconBuilder? = null, + val onClick: (() -> Unit), +) + @Composable fun WearPermissionConfirmationDialog( materialUIVersion: WearPermissionMaterialUIVersion = diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionListSubHeader.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionListSubHeader.kt new file mode 100644 index 000000000..ddcd93326 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionListSubHeader.kt @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.permissioncontroller.permission.ui.wear.elements.material3 + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.requiredHeightIn +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.unit.dp +import androidx.wear.compose.material3.ListSubHeader +import com.android.permissioncontroller.permission.ui.wear.elements.material2.ListSubheader +import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper +import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion + +/* +This component is simplified wrapper over ListSubHeader with quick padding adjustments + */ +@Composable +fun WearPermissionListSubHeader( + wearPermissionMaterialUIVersion: WearPermissionMaterialUIVersion = + ResourceHelper.materialUIVersionInSettings, + isFirstItemInAList: Boolean, + label: @Composable RowScope.() -> Unit, +) { + val screenWidth = LocalConfiguration.current.screenWidthDp + val screenHeight = LocalConfiguration.current.screenHeightDp + val subtitlePaddingDefaults = + WearPermissionScaffoldPaddingDefaults( + screenWidth = screenWidth, + screenHeight = screenHeight, + ) + .subHeaderPaddingValues(needsLargePadding = !isFirstItemInAList) + + if (wearPermissionMaterialUIVersion == WearPermissionMaterialUIVersion.MATERIAL3) { + ListSubHeader( + modifier = Modifier.requiredHeightIn(1.dp), // We do not want default min height + contentPadding = subtitlePaddingDefaults, + label = label, + ) + } else { + ListSubheader(modifier = Modifier.padding(subtitlePaddingDefaults), label = label) + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionScaffold.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionScaffold.kt index 98b8facf7..35bdf583e 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionScaffold.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionScaffold.kt @@ -34,6 +34,7 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.style.Hyphens import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.wear.compose.foundation.ScrollInfoProvider @@ -56,6 +57,7 @@ import com.android.permissioncontroller.permission.ui.wear.elements.AnnotatedTex import com.android.permissioncontroller.permission.ui.wear.elements.ListScopeWrapper import com.android.permissioncontroller.permission.ui.wear.elements.material2.Wear2Scaffold import com.android.permissioncontroller.permission.ui.wear.elements.rememberDrawablePainter +import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion.MATERIAL2_5 import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionTheme @@ -63,6 +65,7 @@ import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionT private class TransformingScopeConverter(private val scope: TransformingLazyColumnScope) : ListScopeWrapper { override fun item(key: Any?, contentType: Any?, content: @Composable () -> Unit) { + // TODO:https://buganizer.corp.google.com/issues/389093588. scope.item { Box(modifier = Modifier.scrollTransform(this)) { content() } } } } @@ -79,7 +82,7 @@ private class ScalingScopeConverter(private val scope: ScalingLazyListScope) : L */ @Composable internal fun WearPermissionScaffold( - materialUIVersion: WearPermissionMaterialUIVersion = MATERIAL2_5, + materialUIVersion: WearPermissionMaterialUIVersion = ResourceHelper.materialUIVersionInSettings, showTimeText: Boolean, title: String?, subtitle: CharSequence?, @@ -132,7 +135,6 @@ private fun WearPermissionScaffoldInternal( WearPermissionScaffoldPaddingDefaults( screenWidth = screenWidth, screenHeight = screenHeight, - titleNeedsLargePadding = subtitle == null, ) val columnState = rememberTransformingLazyColumnState() WearPermissionTheme(version = WearPermissionMaterialUIVersion.MATERIAL3) { @@ -151,7 +153,8 @@ private fun WearPermissionScaffoldInternal( icon = painterFromImage(image), title = title, titleTestTag = titleTestTag, - titlePaddingValues = paddingDefaults.titlePaddingValues, + titlePaddingValues = + paddingDefaults.titlePaddingValues(subtitle == null), subtitle = subtitle, subtitleTestTag = subtitleTestTag, subTitlePaddingValues = paddingDefaults.subTitlePaddingValues, @@ -164,42 +167,6 @@ private fun WearPermissionScaffoldInternal( } } -private class WearPermissionScaffoldPaddingDefaults( - screenWidth: Int, - screenHeight: Int, - titleNeedsLargePadding: Boolean, -) { - private val firstSpacerItemHeight = 0.dp - private val scrollContentHorizontalPadding = (screenWidth * 0.052).dp - private val titleHorizontalPadding = (screenWidth * 0.0884).dp - private val subtitleHorizontalPadding = (screenWidth * 0.0416).dp - private val scrollContentTopPadding = (screenHeight * 0.1456).dp - firstSpacerItemHeight - private val scrollContentBottomPadding = (screenHeight * 0.3636).dp - private val defaultItemPadding = 4.dp - private val largeItemPadding = 8.dp - val titlePaddingValues = - PaddingValues( - start = titleHorizontalPadding, - top = defaultItemPadding, - bottom = if (titleNeedsLargePadding) largeItemPadding else defaultItemPadding, - end = titleHorizontalPadding, - ) - val subTitlePaddingValues = - PaddingValues( - start = subtitleHorizontalPadding, - top = defaultItemPadding, - bottom = largeItemPadding, - end = subtitleHorizontalPadding, - ) - val scrollContentPadding = - PaddingValues( - start = scrollContentHorizontalPadding, - end = scrollContentHorizontalPadding, - top = scrollContentTopPadding, - bottom = scrollContentBottomPadding, - ) -} - @Composable private fun BoxScope.ScrollingView( contentPadding: PaddingValues, @@ -300,6 +267,7 @@ private fun ListScopeWrapper.titleItem( text = it, textAlign = TextAlign.Center, modifier = Modifier.optionalTestTag(testTag), + style = MaterialTheme.typography.titleLarge.copy(hyphens = Hyphens.Auto), ) } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionScaffoldPaddingDefaults.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionScaffoldPaddingDefaults.kt new file mode 100644 index 000000000..14eaec4bf --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionScaffoldPaddingDefaults.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.permissioncontroller.permission.ui.wear.elements.material3 + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.ui.unit.dp + +/* A common class for calculating padding for list items as per the latest design. +https://www.figma.com/design/nb1atBKcK3luF8AXWLUe0X/BC25-Settings-on-Wear?node-id=2336-3304&t=n35PgTUC2O8hGSI0-0 */ +data class WearPermissionScaffoldPaddingDefaults( + private val screenWidth: Int, + private val screenHeight: Int, +) { + private val scrollContentHorizontalPadding = (screenWidth * 0.052).dp + private val titleHorizontalPadding = (screenWidth * 0.0520).dp + private val subtitleHorizontalPadding = (screenWidth * 0.0624).dp + private val scrollContentTopPadding = (screenHeight * 0.1664).dp + private val scrollContentBottomPadding = (screenHeight * 0.3646).dp + private val noPadding = 0.dp + private val defaultItemPadding = 4.dp + private val largeItemPadding = 8.dp + private val extraLargePadding = 12.dp + + fun titlePaddingValues(needsLargePadding: Boolean): PaddingValues = + PaddingValues( + start = titleHorizontalPadding, + top = defaultItemPadding, + bottom = if (needsLargePadding) largeItemPadding else defaultItemPadding, + end = titleHorizontalPadding, + ) + + fun subHeaderPaddingValues(needsLargePadding: Boolean): PaddingValues = + PaddingValues( + start = subtitleHorizontalPadding, + top = if (needsLargePadding) extraLargePadding else noPadding, + bottom = largeItemPadding, + end = subtitleHorizontalPadding, + ) + + val subTitlePaddingValues = + PaddingValues( + start = subtitleHorizontalPadding, + top = defaultItemPadding, + bottom = largeItemPadding, + end = subtitleHorizontalPadding, + ) + val scrollContentPadding = + PaddingValues( + start = scrollContentHorizontalPadding, + end = scrollContentHorizontalPadding, + top = scrollContentTopPadding, + bottom = scrollContentBottomPadding, + ) +} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionToggleControl.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionToggleControl.kt index 6fea14082..d37d17a84 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionToggleControl.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/elements/material3/WearPermissionToggleControl.kt @@ -30,9 +30,16 @@ import androidx.wear.compose.material3.SwitchButton import androidx.wear.compose.material3.Text import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChip -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChipToggleControl +import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion +/** Defines various toggle control types. */ +enum class WearPermissionToggleControlType { + Switch, + Radio, + Checkbox, +} + /** * The custom component is a wrapper on different material3 toggle controls. * 1. It provides an unified interface for RadioButton,CheckButton and SwitchButton. @@ -42,14 +49,13 @@ import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionM */ @Composable fun WearPermissionToggleControl( - toggleControl: ToggleChipToggleControl, + toggleControl: WearPermissionToggleControlType, label: String, checked: Boolean, onCheckedChanged: (Boolean) -> Unit, modifier: Modifier = Modifier, labelMaxLines: Int? = null, - materialUIVersion: WearPermissionMaterialUIVersion = - WearPermissionMaterialUIVersion.MATERIAL2_5, + materialUIVersion: WearPermissionMaterialUIVersion = ResourceHelper.materialUIVersionInSettings, iconBuilder: WearPermissionIconBuilder? = null, secondaryLabel: String? = null, secondaryLabelMaxLines: Int? = null, @@ -90,7 +96,7 @@ fun WearPermissionToggleControl( @Composable private fun WearPermissionToggleControlInternal( label: String, - toggleControl: ToggleChipToggleControl, + toggleControl: WearPermissionToggleControlType, checked: Boolean, onCheckedChanged: (Boolean) -> Unit, modifier: Modifier = Modifier, @@ -133,7 +139,7 @@ private fun WearPermissionToggleControlInternal( modifier.fillMaxWidth().semantics { stateDescription = toggleControlStateDescription } when (toggleControl) { - ToggleChipToggleControl.Radio -> + WearPermissionToggleControlType.Radio -> RadioButton( selected = checked, onSelect = { @@ -151,7 +157,7 @@ private fun WearPermissionToggleControlInternal( colors = style.radioButtonColorScheme(), ) - ToggleChipToggleControl.Checkbox -> + WearPermissionToggleControlType.Checkbox -> CheckboxButton( checked = checked, onCheckedChange = onCheckedChanged, @@ -163,7 +169,7 @@ private fun WearPermissionToggleControlInternal( colors = style.checkboxColorScheme(), ) - ToggleChipToggleControl.Switch -> + WearPermissionToggleControlType.Switch -> SwitchButton( checked = checked, onCheckedChange = onCheckedChanged, diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/model/WearGrantPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/model/WearGrantPermissionsViewModel.kt index 54a6e7c9f..0b1faf2b2 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/model/WearGrantPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/model/WearGrantPermissionsViewModel.kt @@ -43,6 +43,9 @@ class WearGrantPermissionsViewModel : ViewModel() { /** A livedata which stores the permission group button visibilities. */ val buttonVisibilitiesLiveData = MutableLiveData<List<Boolean>>() + /** A livedata to control screen visibility */ + val showDialog = MutableLiveData<Boolean>() + init { groupNameLiveData.value = "" iconLiveData.value = null @@ -51,12 +54,14 @@ class WearGrantPermissionsViewModel : ViewModel() { locationVisibilitiesLiveData.value = emptyList() preciseLocationCheckedLiveData.value = false buttonVisibilitiesLiveData.value = emptyList() + showDialog.value = false } } /** Factory for a WearGrantPermissionsViewModel */ class WearGrantPermissionsViewModelFactory : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { - @Suppress("UNCHECKED_CAST") return WearGrantPermissionsViewModel() as T + @Suppress("UNCHECKED_CAST") + return WearGrantPermissionsViewModel() as T } } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/model/WearLocationProviderInterceptDialogViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/model/WearLocationProviderInterceptDialogViewModel.kt index 009ff952c..ec7647f3c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/model/WearLocationProviderInterceptDialogViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/wear/model/WearLocationProviderInterceptDialogViewModel.kt @@ -32,10 +32,14 @@ import com.android.permissioncontroller.permission.utils.Utils class WearLocationProviderInterceptDialogViewModel : ViewModel() { private val showDialogLiveData = MutableLiveData<Boolean>() val dialogVisibilityLiveData: LiveData<Boolean> = showDialogLiveData - var locationProviderInterceptDialogArgs: LocationProviderInterceptDialogArgs? = null + private val _locationProviderInterceptDialogArgs = + MutableLiveData<LocationProviderInterceptDialogArgs?>() + var locationProviderInterceptDialogArgs: LiveData<LocationProviderInterceptDialogArgs?> = + _locationProviderInterceptDialogArgs init { showDialogLiveData.value = false + _locationProviderInterceptDialogArgs.value = null } private fun applicationInfo(context: Context, packageName: String): ApplicationInfo? { @@ -51,7 +55,7 @@ class WearLocationProviderInterceptDialogViewModel : ViewModel() { fun showDialog(context: Context, packageName: String) { val applicationInfo = applicationInfo(context, packageName) ?: return val appLabel = Utils.getAppLabel(applicationInfo, context) - locationProviderInterceptDialogArgs = + _locationProviderInterceptDialogArgs.value = LocationProviderInterceptDialogArgs( iconId = R.drawable.ic_dialog_alert_material, titleId = android.R.string.dialog_alert_title, @@ -61,13 +65,13 @@ class WearLocationProviderInterceptDialogViewModel : ViewModel() { onOkButtonClick = { dismissDialog() }, onLocationSettingsClick = { context.startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)) - } + }, ) showDialogLiveData.value = true } fun dismissDialog() { - locationProviderInterceptDialogArgs = null + _locationProviderInterceptDialogArgs.value = null showDialogLiveData.value = false } } @@ -75,7 +79,8 @@ class WearLocationProviderInterceptDialogViewModel : ViewModel() { /** Factory for an AppPermissionGroupsRevokeDialogViewModel */ class WearLocationProviderInterceptDialogViewModelFactory : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { - @Suppress("UNCHECKED_CAST") return WearLocationProviderInterceptDialogViewModel() as T + @Suppress("UNCHECKED_CAST") + return WearLocationProviderInterceptDialogViewModel() as T } } @@ -86,5 +91,5 @@ data class LocationProviderInterceptDialogArgs( val okButtonTitleId: Int, val locationSettingsId: Int, val onOkButtonClick: () -> Unit, - val onLocationSettingsClick: () -> Unit + val onLocationSettingsClick: () -> Unit, ) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt index 13e3a4eb7..7f714e083 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/PermissionMapping.kt @@ -357,12 +357,6 @@ object PermissionMapping { } } - /** Returns true if the given permission is a health platform permission. */ - @JvmStatic - fun isHealthPermission(permissionName: String): Boolean { - return HEALTH_PERMISSIONS_SET.contains(permissionName) - } - /** * Returns the platform permission group for the permission that the provided op backs, if any. */ diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListViewModel.java b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListViewModel.java index 82253ed00..e4a3cbc17 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListViewModel.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListViewModel.java @@ -58,9 +58,11 @@ public class DefaultAppListViewModel extends AndroidViewModel { super(application); mUser = Process.myUserHandle(); + boolean isProfileParent = UserUtils.isProfileParent(mUser, application); RoleListLiveData liveData = new RoleListLiveData(true, mUser, application); RoleListSortFunction sortFunction = new RoleListSortFunction(application); - mWorkProfile = UserUtils.getWorkProfile(application); + // Only show the work profile section if the current user is a full user + mWorkProfile = isProfileParent ? UserUtils.getWorkProfile(application) : null; if (RoleFlags.isProfileGroupExclusivityAvailable()) { if (mWorkProfile != null) { // Show profile group exclusive roles from work profile in primary group. @@ -87,7 +89,9 @@ public class DefaultAppListViewModel extends AndroidViewModel { new RoleListLiveData(true, mWorkProfile, application), sortFunction) : null; } - UserHandle privateProfile = UserUtils.getPrivateProfile(application); + // Only show the private profile section if the current user is a full user + UserHandle privateProfile = + isProfileParent ? UserUtils.getPrivateProfile(application) : null; if (privateProfile != null && Utils.shouldShowInSettings( privateProfile, application.getSystemService(UserManager.class))) { mPrivateProfile = privateProfile; diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java index 234554193..60139f0c8 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleFragment.java @@ -710,7 +710,7 @@ public class RequestRoleFragment extends DialogFragment { checked = mCheckedUserPackage == null; icon = AppCompatResources.getDrawable(context, R.drawable.ic_remove_circle); title = context.getString(R.string.default_app_none); - subtitle = mHolderUserPackage != null ? context.getString( + subtitle = mHolderUserPackage == null ? context.getString( R.string.request_role_current_default) : null; } else { applicationInfo = qualifyingApplication.first; diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppScreen.kt b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppScreen.kt index 50b109248..0c39ca8c4 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearDefaultAppScreen.kt @@ -27,12 +27,12 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.wear.compose.material.ToggleChipDefaults import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material2.DialogButtonContent import com.android.permissioncontroller.permission.ui.wear.elements.material2.ListFooter import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChip -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChipToggleControl import com.android.permissioncontroller.permission.ui.wear.elements.material2.toggleChipDisabledColors +import com.android.permissioncontroller.permission.ui.wear.elements.material3.DialogButtonContent import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionConfirmationDialog +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion import com.android.permissioncontroller.role.ui.wear.model.ConfirmDialogArgs @@ -71,7 +71,7 @@ private fun WearDefaultAppContent( icon = it.icon, checked = it.checked, onCheckedChanged = it.onDefaultCheckChanged, - toggleControl = ToggleChipToggleControl.Radio, + toggleControl = WearPermissionToggleControlType.Radio, labelMaxLine = Integer.MAX_VALUE, ) } @@ -90,7 +90,7 @@ private fun WearDefaultAppContent( secondaryLabel = pref.summary?.toString(), checked = pref.checked, onCheckedChanged = pref.getOnCheckChanged(), - toggleControl = ToggleChipToggleControl.Radio, + toggleControl = WearPermissionToggleControlType.Radio, labelMaxLine = Integer.MAX_VALUE, secondaryLabelMaxLine = Integer.MAX_VALUE, ) diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRequestRoleScreen.kt b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRequestRoleScreen.kt index f891fc25f..b4758c88b 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRequestRoleScreen.kt +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/wear/WearRequestRoleScreen.kt @@ -32,13 +32,13 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.ui.wear.elements.ScrollableScreen -import com.android.permissioncontroller.permission.ui.wear.elements.material2.ToggleChipToggleControl import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButton import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionButtonStyle import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionIconBuilder import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionListFooter import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControl import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlStyle +import com.android.permissioncontroller.permission.ui.wear.elements.material3.WearPermissionToggleControlType import com.android.permissioncontroller.permission.ui.wear.theme.ResourceHelper import com.android.permissioncontroller.permission.ui.wear.theme.WearPermissionMaterialUIVersion import com.android.permissioncontroller.role.UserPackage @@ -129,7 +129,7 @@ internal fun WearRequestRoleContent( onCheckedChanged = { checked -> onCheckedChanged(checked, pref.userPackage, pref.isHolder) }, - toggleControl = ToggleChipToggleControl.Radio, + toggleControl = WearPermissionToggleControlType.Radio, labelMaxLines = Integer.MAX_VALUE, ) } @@ -154,7 +154,7 @@ internal fun WearRequestRoleContent( onCheckedChanged = { checked -> onCheckedChanged(checked, pref.userPackage, pref.isHolder) }, - toggleControl = ToggleChipToggleControl.Radio, + toggleControl = WearPermissionToggleControlType.Radio, ) } pref.subTitle?.let { subTitle -> @@ -175,7 +175,7 @@ internal fun WearRequestRoleContent( enabled = enabled, onCheckedChanged = { checked -> run { onDontAskAgainCheckedChanged(checked) } }, label = stringResource(R.string.request_role_dont_ask_again), - toggleControl = ToggleChipToggleControl.Checkbox, + toggleControl = WearPermissionToggleControlType.Checkbox, style = WearPermissionToggleControlStyle.Transparent, modifier = Modifier.testTag("com.android.permissioncontroller:id/dont_ask_again"), diff --git a/PermissionController/src/com/android/permissioncontroller/role/utils/UserUtils.java b/PermissionController/src/com/android/permissioncontroller/role/utils/UserUtils.java index df0aa99f2..f03c31bd8 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/utils/UserUtils.java +++ b/PermissionController/src/com/android/permissioncontroller/role/utils/UserUtils.java @@ -131,6 +131,25 @@ public class UserUtils { return null; } + /** + * Returns whether the user is a parent/full-user or not. + * + * @param userHandle the {@code UserHandle} to check is private profile + * @param context the {@code Context} to retrieve system services + */ + public static boolean isProfileParent(@NonNull UserHandle userHandle, + @NonNull Context context) { + // If profile parent user is null, then original user is the parent + return com.android.role.controller.util.UserUtils.getProfileParent(userHandle, context) + == null; + } + + /** + * Returns whether the user is a private profile or not. + * + * @param userHandle the {@code UserHandle} to check is private profile + * @param context the {@code Context} to retrieve system services + */ private static boolean isPrivateProfile(@NonNull UserHandle userHandle, @NonNull Context context) { if (!SdkLevel.isAtLeastV() || !android.os.Flags.allowPrivateProfile()) { diff --git a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt index e8e910c4e..29b4e1c4e 100644 --- a/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt +++ b/PermissionController/tests/inprocess/src/com/android/permissioncontroller/permission/util/PermissionMappingTest.kt @@ -29,9 +29,11 @@ import androidx.arch.core.executor.testing.InstantTaskExecutorRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SdkSuppress import com.android.permissioncontroller.permission.utils.PermissionMapping +import com.android.permissioncontroller.permission.utils.Utils; import com.google.common.truth.Truth.assertThat import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull +import org.junit.Assume.assumeTrue import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -92,6 +94,40 @@ class PermissionMappingTest { ) } + @Test + fun testHealthPermissionIsRuntime_healthPermissionUiEnabled_isRuntime() { + assumeTrue(Utils.isHealthPermissionUiEnabled()) + + assertThat(PermissionMapping.isRuntimePlatformPermission( + HealthPermissions.READ_HEART_RATE)).isTrue() + } + + @Test + fun testHealthPermissionGroupIsPlatform_healthPermissionUiEnabled_isPlatform() { + assumeTrue(Utils.isHealthPermissionUiEnabled()) + + assertThat(PermissionMapping.isPlatformPermissionGroup( + HealthPermissions.HEALTH_PERMISSION_GROUP)).isTrue() + } + + @Test + fun testGetGroupForHealthPermission_healthPermissionUiEnabled_isHealthPermissionGroup() { + assumeTrue(Utils.isHealthPermissionUiEnabled()) + + assertThat(PermissionMapping.getGroupOfPlatformPermission( + HealthPermissions.READ_HEART_RATE)).isEqualTo( + HealthPermissions.HEALTH_PERMISSION_GROUP) + } + + @Test + fun testGetPermNameForHealthPermissionGroup_healthPermissionUiEnabled_isHealthPermission() { + assumeTrue(Utils.isHealthPermissionUiEnabled()) + + assertThat(PermissionMapping.getPlatformPermissionNamesOfGroup( + HealthPermissions.HEALTH_PERMISSION_GROUP)).contains( + HealthPermissions.READ_HEART_RATE) + } + @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA) @RequiresFlagsEnabled(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED) @Test diff --git a/SafetyCenter/Resources/res/values-af-v36/strings.xml b/SafetyCenter/Resources/res/values-af-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-af-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-am-v36/strings.xml b/SafetyCenter/Resources/res/values-am-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-am-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ar-v36/strings.xml b/SafetyCenter/Resources/res/values-ar-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ar-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-as-v36/strings.xml b/SafetyCenter/Resources/res/values-as-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-as-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-az-v36/strings.xml b/SafetyCenter/Resources/res/values-az-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-az-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-b+sr+Latn-v36/strings.xml b/SafetyCenter/Resources/res/values-b+sr+Latn-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-b+sr+Latn-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-be-v36/strings.xml b/SafetyCenter/Resources/res/values-be-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-be-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-bg-v36/strings.xml b/SafetyCenter/Resources/res/values-bg-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-bg-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-bn-v36/strings.xml b/SafetyCenter/Resources/res/values-bn-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-bn-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-bs-v36/strings.xml b/SafetyCenter/Resources/res/values-bs-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-bs-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ca-v36/strings.xml b/SafetyCenter/Resources/res/values-ca-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ca-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-cs-v36/strings.xml b/SafetyCenter/Resources/res/values-cs-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-cs-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-da-v36/strings.xml b/SafetyCenter/Resources/res/values-da-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-da-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-de-v36/strings.xml b/SafetyCenter/Resources/res/values-de-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-de-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-el-v36/strings.xml b/SafetyCenter/Resources/res/values-el-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-el-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-en-rAU-v36/strings.xml b/SafetyCenter/Resources/res/values-en-rAU-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-en-rAU-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-en-rCA-v36/strings.xml b/SafetyCenter/Resources/res/values-en-rCA-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-en-rCA-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-en-rGB-v36/strings.xml b/SafetyCenter/Resources/res/values-en-rGB-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-en-rGB-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-en-rIN-v36/strings.xml b/SafetyCenter/Resources/res/values-en-rIN-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-en-rIN-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-es-rUS-v36/strings.xml b/SafetyCenter/Resources/res/values-es-rUS-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-es-rUS-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-es-v36/strings.xml b/SafetyCenter/Resources/res/values-es-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-es-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-et-v36/strings.xml b/SafetyCenter/Resources/res/values-et-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-et-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-eu-v36/strings.xml b/SafetyCenter/Resources/res/values-eu-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-eu-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-fa-v36/strings.xml b/SafetyCenter/Resources/res/values-fa-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-fa-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-fi-v36/strings.xml b/SafetyCenter/Resources/res/values-fi-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-fi-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-fr-rCA-v36/strings.xml b/SafetyCenter/Resources/res/values-fr-rCA-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-fr-rCA-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-fr-v36/strings.xml b/SafetyCenter/Resources/res/values-fr-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-fr-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-gl-v36/strings.xml b/SafetyCenter/Resources/res/values-gl-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-gl-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-gu-v36/strings.xml b/SafetyCenter/Resources/res/values-gu-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-gu-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-hi-v36/strings.xml b/SafetyCenter/Resources/res/values-hi-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-hi-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-hr-v36/strings.xml b/SafetyCenter/Resources/res/values-hr-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-hr-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-hu-v36/strings.xml b/SafetyCenter/Resources/res/values-hu-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-hu-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-hy-v36/strings.xml b/SafetyCenter/Resources/res/values-hy-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-hy-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-in-v36/strings.xml b/SafetyCenter/Resources/res/values-in-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-in-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-is-v36/strings.xml b/SafetyCenter/Resources/res/values-is-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-is-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-it-v36/strings.xml b/SafetyCenter/Resources/res/values-it-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-it-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-iw-v36/strings.xml b/SafetyCenter/Resources/res/values-iw-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-iw-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ja-v36/strings.xml b/SafetyCenter/Resources/res/values-ja-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ja-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ka-v36/strings.xml b/SafetyCenter/Resources/res/values-ka-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ka-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-kk-v36/strings.xml b/SafetyCenter/Resources/res/values-kk-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-kk-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-km-v36/strings.xml b/SafetyCenter/Resources/res/values-km-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-km-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-kn-v36/strings.xml b/SafetyCenter/Resources/res/values-kn-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-kn-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ko-v36/strings.xml b/SafetyCenter/Resources/res/values-ko-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ko-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ky-v36/strings.xml b/SafetyCenter/Resources/res/values-ky-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ky-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-lo-v36/strings.xml b/SafetyCenter/Resources/res/values-lo-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-lo-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-lt-v36/strings.xml b/SafetyCenter/Resources/res/values-lt-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-lt-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-lv-v36/strings.xml b/SafetyCenter/Resources/res/values-lv-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-lv-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-mk-v36/strings.xml b/SafetyCenter/Resources/res/values-mk-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-mk-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ml-v36/strings.xml b/SafetyCenter/Resources/res/values-ml-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ml-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-mn-v36/strings.xml b/SafetyCenter/Resources/res/values-mn-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-mn-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-mr-v36/strings.xml b/SafetyCenter/Resources/res/values-mr-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-mr-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ms-v36/strings.xml b/SafetyCenter/Resources/res/values-ms-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ms-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-my-v36/strings.xml b/SafetyCenter/Resources/res/values-my-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-my-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-nb-v36/strings.xml b/SafetyCenter/Resources/res/values-nb-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-nb-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ne-v36/strings.xml b/SafetyCenter/Resources/res/values-ne-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ne-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-nl-v36/strings.xml b/SafetyCenter/Resources/res/values-nl-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-nl-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-or-v36/strings.xml b/SafetyCenter/Resources/res/values-or-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-or-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-pa-v36/strings.xml b/SafetyCenter/Resources/res/values-pa-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-pa-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-pl-v36/strings.xml b/SafetyCenter/Resources/res/values-pl-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-pl-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-pt-rBR-v36/strings.xml b/SafetyCenter/Resources/res/values-pt-rBR-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-pt-rBR-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-pt-rPT-v36/strings.xml b/SafetyCenter/Resources/res/values-pt-rPT-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-pt-rPT-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-pt-v36/strings.xml b/SafetyCenter/Resources/res/values-pt-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-pt-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ro-v36/strings.xml b/SafetyCenter/Resources/res/values-ro-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ro-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ru-v36/strings.xml b/SafetyCenter/Resources/res/values-ru-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ru-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-si-v36/strings.xml b/SafetyCenter/Resources/res/values-si-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-si-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-sk-v36/strings.xml b/SafetyCenter/Resources/res/values-sk-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-sk-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-sl-v36/strings.xml b/SafetyCenter/Resources/res/values-sl-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-sl-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-sq-v36/strings.xml b/SafetyCenter/Resources/res/values-sq-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-sq-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-sr-v36/strings.xml b/SafetyCenter/Resources/res/values-sr-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-sr-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-sv-v36/strings.xml b/SafetyCenter/Resources/res/values-sv-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-sv-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-sw-v36/strings.xml b/SafetyCenter/Resources/res/values-sw-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-sw-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ta-v36/strings.xml b/SafetyCenter/Resources/res/values-ta-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ta-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-te-v36/strings.xml b/SafetyCenter/Resources/res/values-te-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-te-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-th-v36/strings.xml b/SafetyCenter/Resources/res/values-th-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-th-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-tl-v36/strings.xml b/SafetyCenter/Resources/res/values-tl-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-tl-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-tr-v36/strings.xml b/SafetyCenter/Resources/res/values-tr-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-tr-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-uk-v36/strings.xml b/SafetyCenter/Resources/res/values-uk-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-uk-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-ur-v36/strings.xml b/SafetyCenter/Resources/res/values-ur-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-ur-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-uz-v36/strings.xml b/SafetyCenter/Resources/res/values-uz-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-uz-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-vi-v36/strings.xml b/SafetyCenter/Resources/res/values-vi-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-vi-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-zh-rCN-v36/strings.xml b/SafetyCenter/Resources/res/values-zh-rCN-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-zh-rCN-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-zh-rHK-v36/strings.xml b/SafetyCenter/Resources/res/values-zh-rHK-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-zh-rHK-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-zh-rTW-v36/strings.xml b/SafetyCenter/Resources/res/values-zh-rTW-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-zh-rTW-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/SafetyCenter/Resources/res/values-zu-v36/strings.xml b/SafetyCenter/Resources/res/values-zu-v36/strings.xml new file mode 100644 index 000000000..07f3c054c --- /dev/null +++ b/SafetyCenter/Resources/res/values-zu-v36/strings.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Copyright (C) 2025 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- no translation found for face_unlock_title (3991635517593572926) --> + <skip /> + <!-- no translation found for face_unlock_title_for_work (1451170625947022012) --> + <skip /> + <string name="face_unlock_title_for_private_profile" msgid="2758692637409168420"></string> + <!-- no translation found for face_unlock_search_terms (2708195853333028283) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title (5579868242026550596) --> + <skip /> + <!-- no translation found for fingerprint_unlock_title_for_work (6343690273672384918) --> + <skip /> + <string name="fingerprint_unlock_title_for_private_profile" msgid="9004513575240235691"></string> + <!-- no translation found for fingerprint_unlock_search_terms (688405183240088603) --> + <skip /> + <!-- no translation found for wear_unlock_title (1613730442896319515) --> + <skip /> + <!-- no translation found for wear_unlock_title_for_work (3103157953371670280) --> + <skip /> + <string name="wear_unlock_title_for_private_profile" msgid="927318621331822758"></string> + <!-- no translation found for wear_unlock_search_terms (3769797118448924263) --> + <skip /> +</resources> diff --git a/flags/Android.bp b/flags/Android.bp index d22da26c3..166e55492 100644 --- a/flags/Android.bp +++ b/flags/Android.bp @@ -30,15 +30,18 @@ java_aconfig_library { name: "com.android.permission.flags-aconfig-java-export", aconfig_declarations: "com.android.permission.flags-aconfig", mode: "exported", - sdk_version: "module_current", + defaults: ["framework-minus-apex-aconfig-java-defaults"], min_sdk_version: "30", installable: false, - libs: ["framework-configinfrastructure.stubs.module_lib"], visibility: [ + "//frameworks/base", "//packages/modules/Permission:__subpackages__", + "//packages/modules/Nfc:__subpackages__", "//vendor:__subpackages__", ], apex_available: [ + "//apex_available:platform", + "com.android.nfcservices", "com.android.permission", "test_com.android.permission", ], diff --git a/flags/flags.aconfig b/flags/flags.aconfig index 4cb084988..45afa5ff4 100644 --- a/flags/flags.aconfig +++ b/flags/flags.aconfig @@ -152,4 +152,13 @@ flag { description: "This flag is used to enable Expressive Design for Settings pages inside PermissionController" bug: "375480184" is_fixed_read_only: true -}
\ No newline at end of file +} + +flag { + name: "default_apps_recommendation_enabled" + is_exported: true + namespace: "permissions" + description: "This flag enables the recommended section in default apps" + bug: "388234667" + is_fixed_read_only: true +} diff --git a/framework-s/api/system-current.txt b/framework-s/api/system-current.txt index 212996b24..c5d971435 100644 --- a/framework-s/api/system-current.txt +++ b/framework-s/api/system-current.txt @@ -64,7 +64,7 @@ package android.app.role { field @FlaggedApi("com.android.permission.flags.cross_user_role_enabled") public static final String ROLE_RESERVED_FOR_TESTING_PROFILE_GROUP_EXCLUSIVITY = "android.app.role.RESERVED_FOR_TESTING_PROFILE_GROUP_EXCLUSIVITY"; field public static final String ROLE_SYSTEM_ACTIVITY_RECOGNIZER = "android.app.role.SYSTEM_ACTIVITY_RECOGNIZER"; field public static final String ROLE_SYSTEM_CALL_STREAMING = "android.app.role.SYSTEM_CALL_STREAMING"; - field public static final String ROLE_SYSTEM_DEPENDENCY_INSTALLER = "android.app.role.SYSTEM_DEPENDENCY_INSTALLER"; + field @FlaggedApi("android.content.pm.sdk_dependency_installer") public static final String ROLE_SYSTEM_DEPENDENCY_INSTALLER = "android.app.role.SYSTEM_DEPENDENCY_INSTALLER"; field public static final String ROLE_SYSTEM_SUPERVISION = "android.app.role.SYSTEM_SUPERVISION"; field public static final String ROLE_SYSTEM_WELLBEING = "android.app.role.SYSTEM_WELLBEING"; } diff --git a/framework-s/java/android/app/ecm/EnhancedConfirmationManager.java b/framework-s/java/android/app/ecm/EnhancedConfirmationManager.java index 290388558..4248a429c 100644 --- a/framework-s/java/android/app/ecm/EnhancedConfirmationManager.java +++ b/framework-s/java/android/app/ecm/EnhancedConfirmationManager.java @@ -213,7 +213,7 @@ public final class EnhancedConfirmationManager { * The setting is restricted because the restricted app op is set for the given package * @hide */ - public static final String REASON_APP_OP_RESTRICTED = "app_op_restricted"; + public static final String REASON_PACKAGE_RESTRICTED = "package_restricted"; /** A map of ECM states to their corresponding app op states */ @@ -367,8 +367,9 @@ public final class EnhancedConfirmationManager { intent.putExtra(Intent.EXTRA_UID, uid); intent.putExtra(Intent.EXTRA_SUBJECT, settingIdentifier); try { - intent.putExtra(Intent.EXTRA_REASON, mService.getRestrictionReason(packageName, - settingIdentifier, UserHandle.getUserHandleForUid(uid).getIdentifier())); + String restrictionReason = mService.getRestrictionReason(packageName, + settingIdentifier, UserHandle.getUserHandleForUid(uid).getIdentifier()); + intent.putExtra(Intent.EXTRA_REASON, restrictionReason); } catch (SecurityException | RemoteException e) { // The caller of this method does not have permission to read the ECM state, so we // won't include it in the return diff --git a/framework-s/java/android/app/role/RoleManager.java b/framework-s/java/android/app/role/RoleManager.java index 70bcfbf36..9f28b7f19 100644 --- a/framework-s/java/android/app/role/RoleManager.java +++ b/framework-s/java/android/app/role/RoleManager.java @@ -272,7 +272,7 @@ public final class RoleManager { * * @hide */ - @SuppressLint("UnflaggedApi") + @FlaggedApi("android.content.pm.sdk_dependency_installer") @SystemApi public static final String ROLE_SYSTEM_DEPENDENCY_INSTALLER = "android.app.role.SYSTEM_DEPENDENCY_INSTALLER"; diff --git a/service/java/com/android/ecm/EnhancedConfirmationService.java b/service/java/com/android/ecm/EnhancedConfirmationService.java index dde5404a4..46b5eedbc 100644 --- a/service/java/com/android/ecm/EnhancedConfirmationService.java +++ b/service/java/com/android/ecm/EnhancedConfirmationService.java @@ -16,7 +16,7 @@ package com.android.ecm; -import static android.app.ecm.EnhancedConfirmationManager.REASON_APP_OP_RESTRICTED; +import static android.app.ecm.EnhancedConfirmationManager.REASON_PACKAGE_RESTRICTED; import static android.app.ecm.EnhancedConfirmationManager.REASON_PHONE_STATE; import android.Manifest; @@ -240,7 +240,7 @@ public class EnhancedConfirmationService extends SystemService { int ECM_STATE_IMPLICIT = AppOpsManager.MODE_DEFAULT; } - private static final ArraySet<String> PROTECTED_SETTINGS = new ArraySet<>(); + private static final ArraySet<String> PER_PACKAGE_PROTECTED_SETTINGS = new ArraySet<>(); // Settings restricted when an untrusted call is ongoing. These must also be added to // PROTECTED_SETTINGS @@ -248,28 +248,27 @@ public class EnhancedConfirmationService extends SystemService { static { // Runtime permissions - PROTECTED_SETTINGS.add(Manifest.permission.SEND_SMS); - PROTECTED_SETTINGS.add(Manifest.permission.RECEIVE_SMS); - PROTECTED_SETTINGS.add(Manifest.permission.READ_SMS); - PROTECTED_SETTINGS.add(Manifest.permission.RECEIVE_MMS); - PROTECTED_SETTINGS.add(Manifest.permission.RECEIVE_WAP_PUSH); - PROTECTED_SETTINGS.add(Manifest.permission.READ_CELL_BROADCASTS); - PROTECTED_SETTINGS.add(Manifest.permission_group.SMS); - - PROTECTED_SETTINGS.add(Manifest.permission.BIND_DEVICE_ADMIN); + PER_PACKAGE_PROTECTED_SETTINGS.add(Manifest.permission.SEND_SMS); + PER_PACKAGE_PROTECTED_SETTINGS.add(Manifest.permission.RECEIVE_SMS); + PER_PACKAGE_PROTECTED_SETTINGS.add(Manifest.permission.READ_SMS); + PER_PACKAGE_PROTECTED_SETTINGS.add(Manifest.permission.RECEIVE_MMS); + PER_PACKAGE_PROTECTED_SETTINGS.add(Manifest.permission.RECEIVE_WAP_PUSH); + PER_PACKAGE_PROTECTED_SETTINGS.add(Manifest.permission.READ_CELL_BROADCASTS); + PER_PACKAGE_PROTECTED_SETTINGS.add(Manifest.permission_group.SMS); + + PER_PACKAGE_PROTECTED_SETTINGS.add(Manifest.permission.BIND_DEVICE_ADMIN); // App ops - PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE); - PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_ACCESS_NOTIFICATIONS); - PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW); - PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_GET_USAGE_STATS); - PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_LOADER_USAGE_STATS); + PER_PACKAGE_PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE); + PER_PACKAGE_PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_ACCESS_NOTIFICATIONS); + PER_PACKAGE_PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW); + PER_PACKAGE_PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_GET_USAGE_STATS); + PER_PACKAGE_PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_LOADER_USAGE_STATS); // Default application roles. - PROTECTED_SETTINGS.add(RoleManager.ROLE_DIALER); - PROTECTED_SETTINGS.add(RoleManager.ROLE_SMS); + PER_PACKAGE_PROTECTED_SETTINGS.add(RoleManager.ROLE_DIALER); + PER_PACKAGE_PROTECTED_SETTINGS.add(RoleManager.ROLE_SMS); if (Flags.unknownCallPackageInstallBlockingEnabled()) { // Requesting package installs, limited during phone calls - PROTECTED_SETTINGS.add(AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES); UNTRUSTED_CALL_RESTRICTED_SETTINGS.add( AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES); UNTRUSTED_CALL_RESTRICTED_SETTINGS.add( @@ -312,11 +311,14 @@ public class EnhancedConfirmationService extends SystemService { if (!isSettingEcmProtected(settingIdentifier)) { return null; } + if (isSettingEcmGuardedForPackage(settingIdentifier, packageName, userId)) { + return REASON_PACKAGE_RESTRICTED; + } String globalProtectionReason = getGlobalProtectionReason(settingIdentifier); if (globalProtectionReason != null) { return globalProtectionReason; } - return isPackageEcmGuarded(packageName, userId) ? REASON_APP_OP_RESTRICTED : null; + return null; } catch (NameNotFoundException e) { throw new IllegalArgumentException(e); } @@ -448,6 +450,14 @@ public class EnhancedConfirmationService extends SystemService { || isAllowlistedInstaller(installingPackageName)); } + private boolean isSettingEcmGuardedForPackage(@NonNull String settingIdentifier, + @NonNull String packageName, @UserIdInt int userId) throws NameNotFoundException { + if (!PER_PACKAGE_PROTECTED_SETTINGS.contains(settingIdentifier)) { + return false; + } + return isPackageEcmGuarded(packageName, userId); + } + private boolean isAllowlistedPackage(String packageName) { return isPackageSignedWithAnyOf(packageName, mTrustedPackageCertDigests.get(packageName)); @@ -518,7 +528,10 @@ public class EnhancedConfirmationService extends SystemService { return false; } - if (PROTECTED_SETTINGS.contains(settingIdentifier)) { + if (PER_PACKAGE_PROTECTED_SETTINGS.contains(settingIdentifier)) { + return true; + } + if (UNTRUSTED_CALL_RESTRICTED_SETTINGS.contains(settingIdentifier)) { return true; } // TODO(b/310218979): Add role selections as protected settings diff --git a/tests/apex/AndroidTest.xml b/tests/apex/AndroidTest.xml index b1af0f53e..c3807eb9d 100644 --- a/tests/apex/AndroidTest.xml +++ b/tests/apex/AndroidTest.xml @@ -20,6 +20,7 @@ <option name="test-suite-tag" value="apct" /> <option name="test-suite-tag" value="apct-instrumentation" /> <option name="test-tag" value="PermissionApexTests" /> + <option name="hidden-api-checks" value="false" /> <object type="module_controller" class="com.android.tradefed.testtype.suite.module.Sdk30ModuleController" /> <!-- Install test --> diff --git a/tests/cts/permissionpolicy/res/raw/android_manifest.xml b/tests/cts/permissionpolicy/res/raw/android_manifest.xml index bceec18ae..9a78e7e48 100644 --- a/tests/cts/permissionpolicy/res/raw/android_manifest.xml +++ b/tests/cts/permissionpolicy/res/raw/android_manifest.xml @@ -8137,19 +8137,18 @@ android:featureFlag="android.app.appfunctions.flags.enable_app_function_manager" android:protectionLevel="internal|role" /> - <!-- @SystemApi Allows an application to perform actions on behalf of users inside of + <!-- Allows an application to perform actions on behalf of users inside of applications. - <p>This permission is currently only granted to preinstalled / system apps having the - {@link android.app.role.ASSISTANT} role. + <p>This permission is currently only granted to privileged system apps. <p>Apps contributing app functions can opt to disallow callers with this permission, limiting to only callers with {@link android.permission.EXECUTE_APP_FUNCTIONS_TRUSTED} instead. <p>Protection level: internal|role @hide - @FlaggedApi("android.app.appfunctions.flags.enable_app_function_manager") --> + @FlaggedApi(android.app.appfunctions.flags.Flags.FLAG_ENABLE_APP_FUNCTION_MANAGER) --> <permission android:name="android.permission.EXECUTE_APP_FUNCTIONS" android:featureFlag="android.app.appfunctions.flags.enable_app_function_manager" - android:protectionLevel="internal|role" /> + android:protectionLevel="internal|privileged" /> <!-- Allows an application to display its suggestions using the autofill framework. <p>For now, this permission is only granted to the Browser application. @@ -8632,22 +8631,6 @@ android:protectionLevel="signature|role" android:featureFlag="android.permission.flags.text_classifier_choice_api_enabled"/> - <!-- - This permission allows the system to receive PACKAGE_CHANGED broadcasts when the component - state of a non-exported component has been changed. - <p>Not for use by third-party applications. </p> - <p>Protection level: internal - @hide - --> - <permission - android:name="android.permission.INTERNAL_RECEIVE_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED" - android:protectionLevel="internal" - android:featureFlag="android.content.pm.reduce_broadcasts_for_component_state_changes"/> - - <uses-permission - android:name="android.permission.INTERNAL_RECEIVE_PACKAGE_CHANGED_BROADCAST_ON_COMPONENT_STATE_CHANGED" - android:featureFlag="android.content.pm.reduce_broadcasts_for_component_state_changes"/> - <!-- Attribution for Geofencing service. --> <attribution android:tag="GeofencingService" android:label="@string/geofencing_service"/> <!-- Attribution for Country Detector. --> diff --git a/tests/cts/permissionui/UsePermissionApp30WithBackground/AndroidManifest.xml b/tests/cts/permissionui/UsePermissionApp30WithBackground/AndroidManifest.xml index 5949d08f2..6b9b9f41f 100644 --- a/tests/cts/permissionui/UsePermissionApp30WithBackground/AndroidManifest.xml +++ b/tests/cts/permissionui/UsePermissionApp30WithBackground/AndroidManifest.xml @@ -24,6 +24,8 @@ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> + <uses-permission android:name="android.permission.BODY_SENSORS" /> + <uses-permission android:name="android.permission.BODY_SENSORS_BACKGROUND" /> <application> <activity android:name=".RequestPermissionsActivity" android:exported="true" /> diff --git a/tests/cts/permissionui/src/android/permissionui/cts/AppPermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/AppPermissionTest.kt index f0c12171c..05c824072 100644 --- a/tests/cts/permissionui/src/android/permissionui/cts/AppPermissionTest.kt +++ b/tests/cts/permissionui/src/android/permissionui/cts/AppPermissionTest.kt @@ -18,7 +18,9 @@ package android.permissionui.cts import android.Manifest.permission.ACCESS_COARSE_LOCATION import android.Manifest.permission_group.SMS +import android.app.AppOpsManager import android.os.Build +import android.os.Process import android.permission.flags.Flags import android.platform.test.annotations.RequiresFlagsEnabled import android.platform.test.flag.junit.CheckFlagsRule @@ -31,8 +33,11 @@ import androidx.test.filters.SdkSuppress import androidx.test.uiautomator.By import androidx.test.uiautomator.Until import com.android.compatibility.common.util.DeviceConfigStateChangerRule +import com.android.compatibility.common.util.SystemUtil.eventually +import com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity import com.android.modules.utils.build.SdkLevel import com.google.common.truth.Truth +import org.junit.Assert.assertEquals import org.junit.Assume import org.junit.Before import org.junit.Rule @@ -296,6 +301,9 @@ class AppPermissionTest : BaseUsePermissionTest() { APP_APK_NAME_LATEST ) + // TODO: b/388960315 - Remove wait after addressing race condition + waitForModeDefault(APP_PACKAGE_NAME) + navigateToIndividualPermissionSetting(SMS) assertAllowButtonIsDisabledAndRestrictedSettingDialogPoppedUp() @@ -311,6 +319,8 @@ class AppPermissionTest : BaseUsePermissionTest() { @Test fun installFromLocalFile_disabledAllowRadioButtonAndIfClickedAndRestrictedSettingDialog_SMSPermGroup() { installPackageWithInstallSourceAndMetadataFromLocalFile(APP_APK_NAME_LATEST) + // TODO: b/388960315 - Remove wait after addressing race condition + waitForModeDefault(APP_PACKAGE_NAME) navigateToIndividualPermissionSetting(SMS) @@ -341,6 +351,28 @@ class AppPermissionTest : BaseUsePermissionTest() { ) } + private fun waitForModeDefault(packageName: String) { + val appOpsManager = context.getSystemService(AppOpsManager::class.java)!! + eventually { + val uid = context.packageManager.getApplicationInfoAsUser( + packageName, + /* flags */ 0, + Process.myUserHandle() + ).uid + runWithShellPermissionIdentity { + assertEquals( + "Timed out waiting for package mode to change to MODE_DEFAULT", + appOpsManager.checkOpNoThrow( + AppOpsManager.OPSTR_ACCESS_RESTRICTED_SETTINGS, + uid, + packageName, + ), + AppOpsManager.MODE_DEFAULT, + ) + } + } + } + companion object { private const val PERMISSION_RATIONALE_ENABLED = "permission_rationale_enabled" private val ENHANCED_CONFIRMATION_DIALOG_SELECTOR = By.res( diff --git a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt index 92599b617..bd22cb5bc 100644 --- a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt +++ b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt @@ -148,6 +148,9 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { const val APP_PERMISSION_RATIONALE_TITLE_TEXT = "app_location_permission_rationale_title" const val APP_PERMISSION_RATIONALE_SUBTITLE_TEXT = "app_location_permission_rationale_subtitle" + const val HEALTH_PERMISSION_SELECT_HEART_RATE_PLAIN_TEXT = "Heart rate" + const val HEALTH_PERMISSION_ALLOW_ALL_PLAIN_TEXT = "Allow all" + const val HEALTH_PERMISSION_ALLOW_ALWAYS_PLAIN_TEXT = "Allow all the time" const val GRANT_DIALOG_PERMISSION_RATIONALE_CONTAINER_VIEW = "com.android.permissioncontroller:id/permission_rationale_container" const val PERMISSION_RATIONALE_ACTIVITY_TITLE_VIEW = @@ -315,7 +318,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { reinstall: Boolean, grantRuntimePermissions: Boolean, expectSuccess: Boolean, - installSource: String? + installSource: String?, ) { installPackage( apkPath, @@ -333,7 +336,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { grantRuntimePermissions: Boolean = false, expectSuccess: Boolean = true, installSource: String? = null, - skipClearLowSdkDialog: Boolean = false + skipClearLowSdkDialog: Boolean = false, ) { super.installPackage( apkPath, @@ -463,7 +466,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { } protected fun installPackageWithInstallSourceFromDownloadedFileAndAllowHardRestrictedPerms( - apkName: String + apkName: String, ) { installPackageViaSession( apkName, @@ -506,7 +509,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { } protected fun installPackageWithInstallSourceAndMetadataWithoutTopLevelVersion( - apkName: String + apkName: String, ) { installPackageViaSession( apkName, @@ -515,7 +518,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { } protected fun installPackageWithInstallSourceAndMetadataWithInvalidTopLevelVersion( - apkName: String + apkName: String, ) { installPackageViaSession( apkName, @@ -524,7 +527,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { } protected fun installPackageWithInstallSourceAndMetadataWithoutSafetyLabelVersion( - apkName: String + apkName: String, ) { installPackageViaSession( apkName, @@ -533,7 +536,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { } protected fun installPackageWithInstallSourceAndMetadataWithInvalidSafetyLabelVersion( - apkName: String + apkName: String, ) { installPackageViaSession( apkName, @@ -552,7 +555,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { } protected fun assertPermissionRationaleActivityDataSharingSourceSectionVisible( - expected: Boolean + expected: Boolean, ) { findView(By.res(DATA_SHARING_SOURCE_TITLE_ID).displayId(displayId), expected = expected) findView(By.res(DATA_SHARING_SOURCE_MESSAGE_ID).displayId(displayId), expected = expected) @@ -577,7 +580,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { protected fun assertPermissionRationaleDialogIsVisible( expected: Boolean, - showSettingsSection: Boolean = true + showSettingsSection: Boolean = true, ) { assertPermissionRationaleActivityTitleIsVisible(expected) assertPermissionRationaleActivityDataSharingSourceSectionVisible(expected) @@ -623,7 +626,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { protected inline fun startAppActivityAndAssertResultCode( expectedResultCode: Int, - block: () -> Unit + block: () -> Unit, ) { val future = startActivityForFuture( @@ -641,7 +644,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { protected inline fun requestAppPermissionsForNoResult( vararg permissions: String?, - crossinline block: () -> Unit + crossinline block: () -> Unit, ) { // Request the permissions doAndWaitForWindowTransition { @@ -665,7 +668,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { vararg permissions: String?, askTwice: Boolean = false, waitForWindowTransition: Boolean = !isWatch, - crossinline block: () -> Unit + crossinline block: () -> Unit, ): Instrumentation.ActivityResult { // Request the permissions lateinit var future: CompletableFuture<Instrumentation.ActivityResult> @@ -700,7 +703,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { permissionAndExpectedGrantResults: Array<out Pair<String?, Boolean>>, askTwice: Boolean = false, waitForWindowTransition: Boolean = !isWatch, - crossinline block: () -> Unit + crossinline block: () -> Unit, ) { var shouldWaitForWindowTransition = waitForWindowTransition // Do not wait for windowTransition after action is performed on auto, when permissions @@ -766,7 +769,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { vararg permissionAndExpectedGrantResults: Pair<String?, Boolean>, askTwice: Boolean = false, waitForWindowTransition: Boolean = !isWatch, - crossinline block: () -> Unit + crossinline block: () -> Unit, ) { requestAppPermissionsAndAssertResult( permissionAndExpectedGrantResults.map { it.first }.toTypedArray(), @@ -801,8 +804,11 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { } } - protected fun clickPermissionRequestAllowButton(timeoutMillis: Long = 20000) { - if (isAutomotive || isWatch) { + protected fun clickPermissionRequestAllowButton( + timeoutMillis: Long = 20000, + isHealthPermission: Boolean = false, + ) { + if (isAutomotive || isWatch || isHealthPermission) { click(By.text(getPermissionControllerString(ALLOW_BUTTON_TEXT)).displayId(displayId), timeoutMillis) } else { @@ -973,6 +979,37 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { assertTrue("Could not click on the settings link correctly", clickedOnLink) } + protected fun clickAllowReadHeartRate() { + eventually { + scrollToBottom() + + // Phone UI has allow all, toggle, and allow button. Watch UI only has allow button. + if (!isWatch) { + // Check "Allow all" button is visible. + val allowAllNode = + uiAutomation.rootInActiveWindow.findAccessibilityNodeInfosByText( + HEALTH_PERMISSION_ALLOW_ALL_PLAIN_TEXT + )[0] + assertTrue(allowAllNode.isVisibleToUser) + + // Select "Heart rate" toggle and click "Allow" button. + click(By.text(HEALTH_PERMISSION_SELECT_HEART_RATE_PLAIN_TEXT).displayId(displayId)) + } + + clickPermissionRequestAllowButton(isHealthPermission = true) + } + } + + protected fun clickAlwaysAllowReadHealthDataInBackground() { + eventually { + if (isWatch) { + click(By.text(HEALTH_PERMISSION_ALLOW_ALWAYS_PLAIN_TEXT).displayId(displayId)) + } else { + clickPermissionRequestAllowButton(isHealthPermission = true) + } + } + } + protected fun clickPermissionRequestDenyAndDontAskAgainButton() { if (isAutomotive) { scrollToBottom() @@ -1032,7 +1069,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { protected fun revokeAppPermissionsByUi( vararg permissions: String, - isLegacyApp: Boolean = false + isLegacyApp: Boolean = false, ) { setAppPermissionState( *permissions, @@ -1095,7 +1132,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { protected fun navigateToIndividualPermissionSetting( permission: String, - manuallyNavigate: Boolean = false + manuallyNavigate: Boolean = false, ) { val useLegacyNavigation = isWatch || isAutomotive || manuallyNavigate if (useLegacyNavigation) { @@ -1368,7 +1405,8 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION, - android.Manifest.permission.ACCESS_BACKGROUND_LOCATION -> true + android.Manifest.permission.ACCESS_BACKGROUND_LOCATION, + -> true else -> false } @@ -1379,7 +1417,8 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { return when (permission) { Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED, Manifest.permission.READ_MEDIA_IMAGES, - Manifest.permission.READ_MEDIA_VIDEO -> true + Manifest.permission.READ_MEDIA_VIDEO, + -> true else -> false } } @@ -1387,7 +1426,8 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { private fun showsForegroundOnlyButton(permission: String): Boolean = when (permission) { android.Manifest.permission.CAMERA, - android.Manifest.permission.RECORD_AUDIO -> true + android.Manifest.permission.RECORD_AUDIO, + -> true else -> false } @@ -1420,7 +1460,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { protected fun findAccessibilityNodeInfosByTextForSurfaceView( node: AccessibilityNodeInfo, - text: String + text: String, ): AccessibilityNodeInfo? { if (node.text != null && node.text.contains(text)) return node for (i in 0 until node.childCount) { diff --git a/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationInCallTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationInCallTest.kt index 16a27c9a8..9a4908c79 100644 --- a/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationInCallTest.kt +++ b/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationInCallTest.kt @@ -24,6 +24,7 @@ import android.content.Context import android.content.pm.PackageManager import android.net.Uri import android.os.Build +import android.os.Process import android.permission.flags.Flags import android.platform.test.annotations.AppModeFull import android.platform.test.annotations.RequiresFlagsEnabled @@ -56,8 +57,11 @@ import org.junit.Test // @CddTest(requirement = "TBD") class EnhancedConfirmationInCallTest { private val ecm = context.getSystemService(EnhancedConfirmationManager::class.java)!! + private val aom = context.getSystemService(AppOpsManager::class.java)!! private val packageManager = context.packageManager private val addedContacts = mutableMapOf<String, List<Uri>>() + private val phoneOnlyRestrictedSetting = AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES + private val phoneAndEcmRestrictedSetting = AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES @JvmField @Rule @@ -149,20 +153,32 @@ class EnhancedConfirmationInCallTest { fun tearDown() { voipService.endCallAndWaitForInactive() addedContacts.keys.forEach { removeContact(it) } + runWithShellPermissionIdentity { + aom.setUidMode( + AppOpsManager.OPSTR_ACCESS_RESTRICTED_SETTINGS, + Process.myUid(), + AppOpsManager.MODE_ALLOWED, + ) + } } - private fun isSettingRestricted(): Boolean { + private fun isSettingRestricted(settingsIdentifier: String): Boolean { return callWithShellPermissionIdentity { - ecm.isRestricted(context.packageName, AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES) + ecm.isRestricted(context.packageName, settingsIdentifier) } } + private fun areSettingsRestricted(): Boolean { + return isSettingRestricted(phoneOnlyRestrictedSetting) && + isSettingRestricted(phoneAndEcmRestrictedSetting) + } + @Test fun testIncomingCall_NonContact() { voipService.createCallAndWaitForActive(NON_CONTACT_DISPLAY_NAME, NON_CONTACT_PHONE_NUMBER) - Assert.assertTrue(isSettingRestricted()) + Assert.assertTrue(areSettingsRestricted()) voipService.endCallAndWaitForInactive() - Assert.assertFalse(isSettingRestricted()) + Assert.assertFalse(areSettingsRestricted()) } @Test @@ -170,9 +186,9 @@ class EnhancedConfirmationInCallTest { addContact(CONTACT_DISPLAY_NAME, CONTACT_PHONE_NUMBER) // If no phone number is given, the display name will be checked voipService.createCallAndWaitForActive(CONTACT_DISPLAY_NAME, CONTACT_PHONE_NUMBER) - Assert.assertFalse(isSettingRestricted()) + Assert.assertFalse(areSettingsRestricted()) voipService.endCallAndWaitForInactive() - Assert.assertFalse(isSettingRestricted()) + Assert.assertFalse(areSettingsRestricted()) } @Test @@ -180,9 +196,9 @@ class EnhancedConfirmationInCallTest { addContact(CONTACT_DISPLAY_NAME, CONTACT_PHONE_NUMBER) // If the phone number matches, the display name is not checked voipService.createCallAndWaitForActive(NON_CONTACT_DISPLAY_NAME, CONTACT_PHONE_NUMBER) - Assert.assertFalse(isSettingRestricted()) + Assert.assertFalse(areSettingsRestricted()) voipService.endCallAndWaitForInactive() - Assert.assertFalse(isSettingRestricted()) + Assert.assertFalse(areSettingsRestricted()) } @Test @@ -192,10 +208,26 @@ class EnhancedConfirmationInCallTest { voipService.createCallAndWaitForActive(tempContactDisplay, tempContactPhone) addContact(tempContactDisplay, tempContactPhone) // State should not be recomputed just because the contact is newly added - Assert.assertTrue(isSettingRestricted()) + Assert.assertTrue(areSettingsRestricted()) voipService.endCallAndWaitForInactive() voipService.createCallAndWaitForActive(tempContactDisplay, tempContactPhone) // A new call should recognize our contact, and mark the call as trusted - Assert.assertFalse(isSettingRestricted()) + Assert.assertFalse(areSettingsRestricted()) + } + + @Test + fun testCallOnlyRestrictedSetting_notRestrictedIfEcmSet() { + // Set the current app to be restricted by ECM + runWithShellPermissionIdentity { + aom.setUidMode( + AppOpsManager.OPSTR_ACCESS_RESTRICTED_SETTINGS, + Process.myUid(), + AppOpsManager.MODE_ERRORED, + ) + } + // The ecm and phone restricted setting is restricted + Assert.assertFalse(isSettingRestricted(phoneOnlyRestrictedSetting)) + // But the phone only restriction is not + Assert.assertFalse(isSettingRestricted(phoneAndEcmRestrictedSetting)) } } diff --git a/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationManagerTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationManagerTest.kt index 9ec09dab7..596178b70 100644 --- a/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationManagerTest.kt +++ b/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationManagerTest.kt @@ -29,6 +29,7 @@ import android.platform.test.annotations.AppModeFull import android.platform.test.annotations.RequiresFlagsEnabled import android.platform.test.flag.junit.CheckFlagsRule import android.platform.test.flag.junit.DeviceFlagsValueProvider +import androidx.test.filters.FlakyTest import androidx.test.filters.SdkSuppress import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.By @@ -204,6 +205,7 @@ class EnhancedConfirmationManagerTest : BaseUsePermissionTest() { } @RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) + @FlakyTest(bugId = 387927331) @Test fun grantDialogBlocksRestrictedGroupsThenRequestsUnrestrictedGroupsDespiteOutOfOrderRequest() { installPackageWithInstallSourceFromDownloadedFileAndAllowHardRestrictedPerms( @@ -219,6 +221,8 @@ class EnhancedConfirmationManagerTest : BaseUsePermissionTest() { waitForWindowTransition = false ) { clickECMAlertDialogOKButton() + // TODO: b/387927331 - On some targets, grant dialog hangs after this click + Thread.sleep(3_000L) clickPermissionRequestDenyButton() } assertTrue(isClearRestrictionAllowed(APP_PACKAGE_NAME)) @@ -234,6 +238,7 @@ class EnhancedConfirmationManagerTest : BaseUsePermissionTest() { } @RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) + @FlakyTest(bugId = 387927331) @Test fun grantDialogBlocksRestrictedGroupsThenRequestsUnrestrictedHighPriorityGroups() { installPackageWithInstallSourceFromDownloadedFileAndAllowHardRestrictedPerms( @@ -247,12 +252,15 @@ class EnhancedConfirmationManagerTest : BaseUsePermissionTest() { waitForWindowTransition = false ) { clickECMAlertDialogOKButton() + // TODO: b/387927331 - On some targets, grant dialog hangs after this click + Thread.sleep(3_000L) clickPermissionRequestAllowForegroundButton() } assertTrue(isClearRestrictionAllowed(APP_PACKAGE_NAME)) } @RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED) + @FlakyTest(bugId = 390440965) @Test fun grantDialogBlocksRestrictedGroupsThenRequestsUnrestrictedLowPriorityGroups() { installPackageWithInstallSourceFromDownloadedFileAndAllowHardRestrictedPerms( @@ -266,6 +274,8 @@ class EnhancedConfirmationManagerTest : BaseUsePermissionTest() { waitForWindowTransition = false ) { clickECMAlertDialogOKButton() + // TODO: b/387927331 - On some targets, grant dialog hangs after this click + Thread.sleep(3_000L) clickPermissionRequestAllowForegroundButton() } assertTrue(isClearRestrictionAllowed(APP_PACKAGE_NAME)) diff --git a/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt index 176010cf5..d2086a06a 100644 --- a/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt +++ b/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt @@ -25,6 +25,7 @@ import com.android.modules.utils.build.SdkLevel import org.junit.Assume.assumeFalse import org.junit.Assume.assumeTrue import org.junit.Before +import org.junit.Ignore import org.junit.Test @FlakyTest @@ -50,6 +51,8 @@ class LocationAccuracyTest : BaseUsePermissionTest() { } @Test + @Ignore("b/390440965") + // Ignore this test until the cause of flakiness is identified. fun testCoarsePermissionIsGranted() { installPackage(APP_APK_PATH_31) diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt index 4af2890ab..c2b5447dd 100644 --- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt +++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt @@ -16,9 +16,11 @@ package android.permissionui.cts +import android.health.connect.HealthPermissions import android.os.Build import android.permission.flags.Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED import android.platform.test.annotations.RequiresFlagsDisabled +import android.platform.test.annotations.RequiresFlagsEnabled import android.platform.test.flag.junit.DeviceFlagsValueProvider import androidx.test.filters.FlakyTest import androidx.test.filters.SdkSuppress @@ -71,7 +73,7 @@ class PermissionSplitTest : BaseUsePermissionTest() { @Test fun testBodySensorSplitOnTToU() { installPackage(APP_APK_PATH_31) - testBodySensorPermissionSplit(true) + testBodySensorPermissionSplitToBodySensorsBackground(true) } // Before SDK_INT bumps to 36, the in-development B images are using SDK_INT=35(V). This will @@ -85,7 +87,7 @@ class PermissionSplitTest : BaseUsePermissionTest() { @Test fun testBodySensorSplitPostV_replaceBodySensorFlagDisabled() { installPackage(APP_APK_PATH_31) - testBodySensorPermissionSplit(true) + testBodySensorPermissionSplitToBodySensorsBackground(true) } // TODO: b/388596433 - Update maxSdkVersion to VANILLA_ICE_CREAM after SDK bumps. @@ -97,7 +99,7 @@ class PermissionSplitTest : BaseUsePermissionTest() { @Test fun testBodySensorSplit32OnTToU() { installPackage(APP_APK_PATH_32) - testBodySensorPermissionSplit(true) + testBodySensorPermissionSplitToBodySensorsBackground(true) } // Before SDK_INT bumps to 36, the in-development B images are using SDK_INT=35(V). This will @@ -111,7 +113,7 @@ class PermissionSplitTest : BaseUsePermissionTest() { @Test fun testBodySensorSplit32PostV_replaceBodySensorFlagDisabled() { installPackage(APP_APK_PATH_32) - testBodySensorPermissionSplit(true) + testBodySensorPermissionSplitToBodySensorsBackground(true) } // TODO: b/388596433 - Update maxSdkVersion to VANILLA_ICE_CREAM after SDK bumps. @@ -123,7 +125,7 @@ class PermissionSplitTest : BaseUsePermissionTest() { @Test fun testBodySensorNonSplitOnTToU() { installPackage(APP_APK_PATH_LATEST) - testBodySensorPermissionSplit(false) + testBodySensorPermissionSplitToBodySensorsBackground(false) } // Before SDK_INT bumps to 36, the in-development B images are using SDK_INT=35(V). This will @@ -137,7 +139,37 @@ class PermissionSplitTest : BaseUsePermissionTest() { @Test fun testBodySensorNonSplitPostV_replaceBodySensorFlagDisabled() { installPackage(APP_APK_PATH_LATEST) - testBodySensorPermissionSplit(false) + testBodySensorPermissionSplitToBodySensorsBackground(false) + } + + @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA, codeName = "Baklava") + @RequiresFlagsEnabled(FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED) + @Test + fun testBodySensorSplitOnBaklava_splitToReadHeartRate() { + installPackage(APP_APK_PATH_30_WITH_BACKGROUND) + assertAppHasPermission(android.Manifest.permission.BODY_SENSORS, false) + assertAppHasPermission(HealthPermissions.READ_HEART_RATE, false) + assertAppHasPermission(android.Manifest.permission.BODY_SENSORS_BACKGROUND, false) + assertAppHasPermission(HealthPermissions.READ_HEALTH_DATA_IN_BACKGROUND, false) + + requestAppPermissionsAndAssertResult( + android.Manifest.permission.BODY_SENSORS to true, + waitForWindowTransition = false, + ) { + clickAllowReadHeartRate() + } + + requestAppPermissionsAndAssertResult( + android.Manifest.permission.BODY_SENSORS_BACKGROUND to true, + waitForWindowTransition = false, + ) { + clickAlwaysAllowReadHealthDataInBackground() + } + + assertAppHasPermission(android.Manifest.permission.BODY_SENSORS, true) + assertAppHasPermission(HealthPermissions.READ_HEART_RATE, true) + assertAppHasPermission(android.Manifest.permission.BODY_SENSORS_BACKGROUND, true) + assertAppHasPermission(HealthPermissions.READ_HEALTH_DATA_IN_BACKGROUND, true) } private fun testLocationPermissionSplit(expectSplit: Boolean) { @@ -162,7 +194,7 @@ class PermissionSplitTest : BaseUsePermissionTest() { assertAppHasPermission(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION, expectSplit) } - private fun testBodySensorPermissionSplit(expectSplit: Boolean) { + private fun testBodySensorPermissionSplitToBodySensorsBackground(expectSplit: Boolean) { assertAppHasPermission(android.Manifest.permission.BODY_SENSORS, false) assertAppHasPermission(android.Manifest.permission.BODY_SENSORS_BACKGROUND, false) diff --git a/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java b/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java index c55fbf779..bf1e32676 100644 --- a/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java +++ b/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java @@ -18,6 +18,7 @@ package android.app.role.cts; import static com.android.bedstead.multiuser.MultiUserDeviceStateExtensionsKt.privateProfile; import static com.android.compatibility.common.util.SystemUtil.callWithShellPermissionIdentity; +import static com.android.compatibility.common.util.SystemUtil.eventually; import static com.android.compatibility.common.util.SystemUtil.runShellCommand; import static com.android.compatibility.common.util.SystemUtil.runShellCommandOrThrow; import static com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity; @@ -26,6 +27,7 @@ import static com.android.compatibility.common.util.UiAutomatorUtils2.waitFindOb import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; import static org.junit.Assert.fail; import static org.junit.Assume.assumeFalse; @@ -286,6 +288,10 @@ public class RoleManagerTest { public void requestRoleThenBlockRequestRoleDialogByRestrictedSettingDialog() throws Exception { assumeTrue(sRoleManager.isRoleAvailable(RoleManager.ROLE_SMS)); assumeFalse(sIsWatch || sIsAutomotive || sIsTelevision); + // TODO: b/388960315 - Remove wait after addressing race condition + runWithShellPermissionIdentity( + () -> waitForEnhancedConfirmationRestrictedAppOpMode(sContext, APP_PACKAGE_NAME, + AppOpsManager.MODE_DEFAULT)); runWithShellPermissionIdentity( () -> setEnhancedConfirmationRestrictedAppOpMode(sContext, APP_PACKAGE_NAME, AppOpsManager.MODE_ERRORED)); @@ -713,6 +719,10 @@ public class RoleManagerTest { throws Exception { assumeTrue(sRoleManager.isRoleAvailable(RoleManager.ROLE_DIALER)); assumeFalse(sIsWatch || sIsAutomotive || sIsTelevision); + // TODO: b/388960315 - Remove wait after addressing race condition + runWithShellPermissionIdentity( + () -> waitForEnhancedConfirmationRestrictedAppOpMode(sContext, APP_PACKAGE_NAME, + AppOpsManager.MODE_DEFAULT)); runWithShellPermissionIdentity( () -> setEnhancedConfirmationRestrictedAppOpMode(sContext, APP_PACKAGE_NAME, AppOpsManager.MODE_ERRORED)); @@ -923,6 +933,19 @@ public class RoleManagerTest { pressBack(); } + private void waitForEnhancedConfirmationRestrictedAppOpMode(@NonNull Context context, + @NonNull String packageName, int expectedMode) + throws PackageManager.NameNotFoundException { + final AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class); + eventually(() -> { + int uid = context.getPackageManager().getApplicationInfo(packageName, 0).uid; + int actualMode = appOpsManager.checkOpNoThrow( + AppOpsManager.OPSTR_ACCESS_RESTRICTED_SETTINGS, uid, packageName); + assertEquals("Even after waiting, a test app's post-install" + + " ACCESS_RESTRICTED_SETTINGS op mode is incorrect", expectedMode, actualMode); + }); + } + private void setEnhancedConfirmationRestrictedAppOpMode(@NonNull Context context, @NonNull String packageName, int mode) throws PackageManager.NameNotFoundException { diff --git a/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt b/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt index ee0326bd3..09a32f058 100644 --- a/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt +++ b/tests/functional/safetycenter/safetycenteractivity/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt @@ -60,6 +60,7 @@ import com.android.safetycenter.testing.UiTestHelper.RESCAN_BUTTON_LABEL import com.android.safetycenter.testing.UiTestHelper.clickConfirmDismissal import com.android.safetycenter.testing.UiTestHelper.clickDismissIssueCard import com.android.safetycenter.testing.UiTestHelper.clickMoreIssuesCard +import com.android.safetycenter.testing.UiTestHelper.clickOpenSubpage import com.android.safetycenter.testing.UiTestHelper.resetRotation import com.android.safetycenter.testing.UiTestHelper.rotate import com.android.safetycenter.testing.UiTestHelper.setAnimationsEnabled @@ -481,7 +482,10 @@ class SafetyCenterActivityTest { context.launchSafetyCenterActivity { if (SafetyCenterFlags.showSubpages) { - waitDisplayed(By.text("OK")) { it.click() } // Open subpage + clickOpenSubpage( + context, + safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first(), + ) } waitDisplayed(By.text("OK")) { it.click() } waitButtonDisplayed("Exit test activity") { it.click() } @@ -495,7 +499,11 @@ class SafetyCenterActivityTest { context.launchSafetyCenterActivity { if (SafetyCenterFlags.showSubpages) { - waitDisplayed(By.text("OK")) { it.click() } // Open subpage + clickOpenSubpage( + context, + safetyCenterTestConfigs.implicitIntentSingleSourceConfig.safetySourcesGroups + .first(), + ) } waitDisplayed(By.text("OK")) { it.click() } waitButtonDisplayed("Exit test activity") { it.click() } @@ -509,7 +517,10 @@ class SafetyCenterActivityTest { context.launchSafetyCenterActivity { if (SafetyCenterFlags.showSubpages) { - waitDisplayed(By.text("OK")) { it.click() } // Open subpage + clickOpenSubpage( + context, + safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first(), + ) } waitDisplayed(By.text("Ok title")) { it.click() } waitButtonDisplayed("Exit test activity") { it.click() } @@ -527,7 +538,10 @@ class SafetyCenterActivityTest { context.launchSafetyCenterActivity { if (SafetyCenterFlags.showSubpages) { - waitDisplayed(By.text("OK")) { it.click() } // Open subpage + clickOpenSubpage( + context, + safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first(), + ) } waitDisplayed(By.desc("Information")) { it.click() } waitButtonDisplayed("Exit test activity") { it.click() } @@ -1482,7 +1496,11 @@ class SafetyCenterActivityTest { context.launchSafetyCenterActivity { if (SafetyCenterFlags.showSubpages) { - waitDisplayed(By.text("OK")) { it.click() } // Open subpage + clickOpenSubpage( + context, + safetyCenterTestConfigs.implicitIntentSingleSourceConfig.safetySourcesGroups + .first(), + ) } waitDisplayed(By.text("OK")) { it.click() } waitDisplayed(By.text("is_from_settings_homepage false")) diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt index c7d195528..3dfefeecf 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt @@ -197,6 +197,7 @@ object UiTestHelper { /** Opens the subpage by clicking on the group title. */ fun clickOpenSubpage(context: Context, group: SafetySourcesGroup) { waitDisplayed(By.text(context.getString(group.titleResId))) { it.click() } + getUiDevice().waitForIdle() } /** Clicks the more issues card button to show or hide additional issues. */ |