diff options
78 files changed, 852 insertions, 276 deletions
diff --git a/PermissionController/res/values-ar/strings.xml b/PermissionController/res/values-ar/strings.xml index 8a6f4909d..7f61bf813 100644 --- a/PermissionController/res/values-ar/strings.xml +++ b/PermissionController/res/values-ar/strings.xml @@ -335,7 +335,7 @@ <string name="app_perms_7d_access_all_files" msgid="8246193786397635824">"تم الوصول آخر مرة بتاريخ <xliff:g id="TIME_DATE_0">%1$s</xliff:g> في <xliff:g id="TIME_DATE_1">%2$s</xliff:g> • جميع الملفات"</string> <string name="app_perms_content_provider_24h_all_files" msgid="573104317727770850">"تم الوصول في آخر 24 ساعة • كل الملفات"</string> <string name="app_perms_content_provider_7d_all_files" msgid="7962416229708835558">"تم الوصول في آخر 7 أيام • جميع الملفات"</string> - <string name="no_permissions_allowed" msgid="6081976856354669209">"لم يتم منح أي أذونات."</string> + <string name="no_permissions_allowed" msgid="6081976856354669209">"لم يتم منح أي أذونات"</string> <string name="no_permissions_denied" msgid="8159923922804043282">"لم يتم رفض أي أذونات."</string> <string name="no_apps_allowed" msgid="7718822655254468631">"لم يتم السماح لأي تطبيقات."</string> <string name="no_apps_allowed_full" msgid="8011716991498934104">"ما من تطبيقات تم منحها إذن الوصول إلى جميع الملفات."</string> @@ -349,7 +349,7 @@ <string name="accessibility_service_dialog_bottom_text_multiple" msgid="7009848932395519852">"يمكن لهذه التطبيقات عرض شاشتك وإجراءاتك ومدخلاتك وتنفيذ الإجراءات والتحكم في العرض."</string> <string name="role_assistant_label" msgid="4727586018198208128">"تطبيق المساعد الرقمي التلقائي"</string> <string name="role_assistant_short_label" msgid="3369003713187703399">"تطبيق المساعد الرقمي"</string> - <string name="role_assistant_description" msgid="6622458130459922952">"بإمكان التطبيقات المساعِدة مساعدتك استنادًا إلى المعلومات على الشاشة التي تشاهدها. وتتوافق بعض التطبيقات مع كل من خدمة المشغّل وخدمة الإدخال الصوتي لتوفير مساعدة متكاملة لك."</string> + <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> @@ -483,7 +483,7 @@ <string name="permgroupupgraderequest_microphone" msgid="1362781696161233341">"هل تريد تغيير إذن الوصول إلى الميكروفون بالنسبة إلى <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>؟"</string> <string name="permgroupupgraderequestdetail_microphone" msgid="2870497719571464239">"يحتاج هذا التطبيق إلى تسجيل الصوت طوال الوقت، حتى عند عدم استخدامك للتطبيق. يمكنك "<annotation id="link">"السماح بذلك في الإعدادات"</annotation></string> <string name="permgrouprequest_activityRecognition" msgid="5415121592794230330">"هل تريد السماح للتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالوصول إلى بيانات نشاطك البدني؟"</string> - <string name="permgrouprequest_camera" msgid="5123097035410002594">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالتقاط صور وتسجيل فيديوهات؟"</string> + <string name="permgrouprequest_camera" msgid="5123097035410002594">"هل يمكنك السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالتقاط صور وتسجيل فيديوهات؟"</string> <string name="permgrouprequestdetail_camera" msgid="9085323239764667883">"لن يتمكن هذا التطبيق من التقاط صور وتسجيل فيديوهات إلا عندما يكون قيد الاستخدام"</string> <string name="permgroupbackgroundrequest_camera" msgid="1274286575704213875">"هل تريد السماح لتطبيق <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> بالتقاط صور وتسجيل فيديوهات؟"</string> <string name="permgroupbackgroundrequestdetail_camera" msgid="4458783509089859078">"قد يحتاج هذا التطبيق إلى التقاط صور وتسجيل فيديوهات طوال الوقت، حتى عند عدم استخدامك للتطبيق. يمكنك "<annotation id="link">"السماح بذلك في الإعدادات"</annotation></string> diff --git a/PermissionController/res/values-b+sr+Latn/strings.xml b/PermissionController/res/values-b+sr+Latn/strings.xml index 510680ef7..48bc61dc5 100644 --- a/PermissionController/res/values-b+sr+Latn/strings.xml +++ b/PermissionController/res/values-b+sr+Latn/strings.xml @@ -93,7 +93,7 @@ <string name="location_warning" msgid="2381649060929040962">"<xliff:g id="APP_NAME">%1$s</xliff:g> pruža usluge lokacije za ovaj uređaj. Pristup lokaciji možete da izmenite u podešavanjima lokacije."</string> <string name="system_warning" msgid="1173400963234358816">"Ako odbijete ovu dozvolu, osnovne funkcije uređaja možda neće više ispravno raditi."</string> <string name="deny_read_media_visual_warning" msgid="3982586279917232827">"Ova aplikacija je dizajnirana za stariju verziju Android-a. Ako ovoj aplikaciji odbijete pristup za slike i video snimke, povlači se i pristup muzici i drugim audio snimcima."</string> - <string name="deny_read_media_aural_warning" msgid="8928699919508646732">"Ova aplikacija je dizajnirana za stariju verziju Android-a. Ako ovoj aplikaciji odbijete pristup za muziku i druge audio snimke, povlači se i pristup slikama i video snimcima."</string> + <string name="deny_read_media_aural_warning" msgid="8928699919508646732">"Ova aplikacija je dizajnirana za stariju verziju Android-a. Ako ovoj aplikaciji odbijete pristup za muziku i druge audio snimke, povlači se i pristup slikama i videima."</string> <string name="cdm_profile_revoke_warning" msgid="4443893270719106700">"Ako odbijete ovu dozvolu, neke funkcije uređaja kojima upravlja ova aplikacija možda neće više ispravno raditi."</string> <string name="permission_summary_enforced_by_policy" msgid="4443598170942950519">"Primenjuje se u skladu sa smernicama"</string> <string name="permission_summary_disabled_by_policy_background_only" msgid="221995005556362660">"Pristup u pozadini je onemogućen smernicama"</string> @@ -240,7 +240,7 @@ <string name="permission_description_summary_sms" msgid="725999468547768517">"Aplikacije sa ovom dozvolom mogu da šalju i pregledaju SMS-ove"</string> <string name="permission_description_summary_storage" msgid="6575759089065303346">"Aplikacije sa ovom dozvolom mogu da pristupaju slikama, medijskom sadržaju i fajlovima na uređaju"</string> <string name="permission_description_summary_read_media_aural" msgid="3354728149930482199">"Aplikacije sa ovom dozvolom mogu da pristupaju muzici i drugim audio fajlovima na ovom uređaju"</string> - <string name="permission_description_summary_read_media_visual" msgid="4991801977881732641">"Aplikacije sa ovom dozvolom mogu da pristupaju slikama i video snimcima na ovom uređaju"</string> + <string name="permission_description_summary_read_media_visual" msgid="4991801977881732641">"Aplikacije sa ovom dozvolom mogu da pristupaju slikama i videima na ovom uređaju"</string> <string name="app_permission_most_recent_summary" msgid="4292074449384040590">"Poslednji pristup: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> <string name="app_permission_most_recent_denied_summary" msgid="7659497197737708112">"Trenutno odbijeno/poslednji pristup: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> <string name="app_permission_never_accessed_summary" msgid="401346181461975090">"Bez pristupa"</string> @@ -475,7 +475,7 @@ <string name="permgrouprequest_storage_pre_q" msgid="168130651144569428">"Pristup slikama, videu, muzici, zvuku i drugom na uređaju za <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>?"</string> <string name="permgrouprequest_read_media_aural" msgid="2593365397347577812">"Dozvoljavate li pristup muzici i zvuku na ovom uređaju za <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>?"</string> <string name="permgrouprequest_read_media_visual" msgid="5548780620779729975">"Dozvoljavate li pristup slikama i videu na ovom uređaju za <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>?"</string> - <string name="permgrouprequest_more_photos" msgid="128933814654231321">"Dozvoljavate li da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristupa i drugim slikama i video snimcima na ovom uređaju?"</string> + <string name="permgrouprequest_more_photos" msgid="128933814654231321">"Dozvoljavate li da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> pristupa i drugim slikama i videima na ovom uređaju?"</string> <string name="permgrouprequest_microphone" msgid="2825208549114811299">"Želite da dozvolite da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> snima zvuk?"</string> <string name="permgrouprequestdetail_microphone" msgid="8510456971528228861">"Aplikacija će moći da snima zvuk samo dok koristite aplikaciju"</string> <string name="permgroupbackgroundrequest_microphone" msgid="8874462606796368183">"Želite da dozvolite da <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> snima zvuk?"</string> @@ -558,18 +558,18 @@ <string name="media_confirm_dialog_title_a_to_p_aural_deny" msgid="7841428716317307685">"Ni pristup drugim fajlovima neće biti dozvoljen"</string> <string name="media_confirm_dialog_title_a_to_p_visual_allow" msgid="6469086448310893751">"Biće dozvoljen pristup i drugim fajlovima"</string> <string name="media_confirm_dialog_title_a_to_p_visual_deny" msgid="5767849609024384226">"Ni pristup drugim fajlovima neće biti dozvoljen"</string> - <string name="media_confirm_dialog_title_q_to_s_aural_allow" msgid="3191904399336990537">"Biće dozvoljen pristup i slikama i video snimcima"</string> - <string name="media_confirm_dialog_title_q_to_s_aural_deny" msgid="3128147568953297969">"Ni pristup slikama i video snimcima neće biti dozvoljen"</string> + <string name="media_confirm_dialog_title_q_to_s_aural_allow" msgid="3191904399336990537">"Biće dozvoljen pristup i slikama i videima"</string> + <string name="media_confirm_dialog_title_q_to_s_aural_deny" msgid="3128147568953297969">"Ni pristup slikama i videima neće biti dozvoljen"</string> <string name="media_confirm_dialog_title_q_to_s_visual_allow" msgid="6310682466493330434">"Biće dozvoljen pristup i muzici i audio fajlovima"</string> <string name="media_confirm_dialog_title_q_to_s_visual_deny" msgid="1123845663785900471">"Ni pristup muzici i audio fajlovima neće biti dozvoljen"</string> - <string name="media_confirm_dialog_message_a_to_p_aural_allow" msgid="7865167246140107623">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija može da pristupa muzici i audio fajlovima, biće joj dozvoljeno i da pristupa slikama, video snimcima i drugim fajlovima."</string> - <string name="media_confirm_dialog_message_a_to_p_aural_deny" msgid="287502523664804786">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija ne može da pristupa muzici i audio fajlovima, neće joj biti dozvoljeno ni da pristupa slikama, video snimcima i drugim fajlovima."</string> - <string name="media_confirm_dialog_message_a_to_p_visual_allow" msgid="4952410892939590487">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija može da pristupa slikama i video snimcima, biće joj dozvoljeno i da pristupa muzici, audio i drugim fajlovima."</string> - <string name="media_confirm_dialog_message_a_to_p_visual_deny" msgid="6609500525590757681">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija ne može da pristupa slikama i video snimcima, neće joj biti dozvoljeno ni da pristupa muzici, audio i drugim fajlovima."</string> - <string name="media_confirm_dialog_message_q_to_s_aural_allow" msgid="1702402580147536160">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija može da pristupa muzici i audio fajlovima, biće joj dozvoljeno i da pristupa slikama i video snimcima."</string> - <string name="media_confirm_dialog_message_q_to_s_aural_deny" msgid="6832087393653561911">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija ne može da pristupa muzici i audio fajlovima, neće joj biti dozvoljeno ni da pristupa slikama i video snimcima."</string> - <string name="media_confirm_dialog_message_q_to_s_visual_allow" msgid="3504335060843147760">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija može da pristupa slikama i video snimcima, biće joj dozvoljeno i da pristupa muzici i audio fajlovima."</string> - <string name="media_confirm_dialog_message_q_to_s_visual_deny" msgid="2145973462806481992">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija ne može da pristupa muzici i audio fajlovima, neće joj biti dozvoljeno ni da pristupa slikama i video snimcima."</string> + <string name="media_confirm_dialog_message_a_to_p_aural_allow" msgid="7865167246140107623">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija može da pristupa muzici i audio fajlovima, biće joj dozvoljeno i da pristupa slikama, videima i drugim fajlovima."</string> + <string name="media_confirm_dialog_message_a_to_p_aural_deny" msgid="287502523664804786">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija ne može da pristupa muzici i audio fajlovima, neće joj biti dozvoljeno ni da pristupa slikama, videima i drugim fajlovima."</string> + <string name="media_confirm_dialog_message_a_to_p_visual_allow" msgid="4952410892939590487">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija može da pristupa slikama i videima, biće joj dozvoljeno i da pristupa muzici, audio i drugim fajlovima."</string> + <string name="media_confirm_dialog_message_a_to_p_visual_deny" msgid="6609500525590757681">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija ne može da pristupa slikama i videima, neće joj biti dozvoljeno ni da pristupa muzici, audio i drugim fajlovima."</string> + <string name="media_confirm_dialog_message_q_to_s_aural_allow" msgid="1702402580147536160">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija može da pristupa muzici i audio fajlovima, biće joj dozvoljeno i da pristupa slikama i videima."</string> + <string name="media_confirm_dialog_message_q_to_s_aural_deny" msgid="6832087393653561911">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija ne može da pristupa muzici i audio fajlovima, neće joj biti dozvoljeno ni da pristupa slikama i videima."</string> + <string name="media_confirm_dialog_message_q_to_s_visual_allow" msgid="3504335060843147760">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija može da pristupa slikama i videima, biće joj dozvoljeno i da pristupa muzici i audio fajlovima."</string> + <string name="media_confirm_dialog_message_q_to_s_visual_deny" msgid="2145973462806481992">"Ova aplikacija ne podržava najnoviju verziju Android-a. Ako ova aplikacija ne može da pristupa muzici i audio fajlovima, neće joj biti dozvoljeno ni da pristupa slikama i videima."</string> <string name="safety_center_background_location_access_notification_title" msgid="8933610618810588237">"Pregledajte aplikaciju sa pristupom lokaciji u pozadini"</string> <string name="safety_center_background_location_access_reminder_notification_content" msgid="4066560182507301022">"<xliff:g id="APP_NAME">%s</xliff:g> uvek može da pristupa vašoj lokaciji, čak i kad je aplikacija zatvorena"</string> <string name="safety_center_background_location_access_reminder_title" msgid="5477847038103863843">"Pregledajte aplikaciju sa pristupom lokaciji u pozadini"</string> diff --git a/PermissionController/res/values-bn/strings.xml b/PermissionController/res/values-bn/strings.xml index ca112b542..a73f1f7ae 100644 --- a/PermissionController/res/values-bn/strings.xml +++ b/PermissionController/res/values-bn/strings.xml @@ -44,13 +44,13 @@ <string name="permission_add_background_warning_template" msgid="1812914855915092273">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> অ্যাপটিকে সব সময় এটি করার অনুমতি দেবেন?: <xliff:g id="ACTION">%2$s</xliff:g>"</string> <string name="allow_permission_foreground_only" msgid="116465816039675404">"শুধুমাত্র অ্যাপ ব্যবহার করার সময়"</string> <string name="allow_permission_always" msgid="5194342531206054051">"সব সময়"</string> - <string name="deny_permission_deny_and_dont_ask_again" msgid="6106035221490102341">"অনুমতি দেবেন না এবং আর জিজ্ঞাসা করবেন না"</string> + <string name="deny_permission_deny_and_dont_ask_again" msgid="6106035221490102341">"অনুমতি দেবেন না ও আবার জিজ্ঞাসা করা হোক তা চান না"</string> <string name="permission_revoked_count" msgid="4785082705441547086">"<xliff:g id="COUNT">%1$d</xliff:g>টি বন্ধ করা হয়েছে"</string> <string name="permission_revoked_all" msgid="3397649017727222283">"সবগুলি বন্ধ করা হয়েছে"</string> <string name="permission_revoked_none" msgid="9213345075484381180">"কোনওটিই বন্ধ করা হয়নি"</string> <string name="grant_dialog_button_allow" msgid="5314677880021102550">"অনুমতি দিন"</string> <string name="grant_dialog_button_allow_always" msgid="4485552579273565981">"সর্বদা অনুমতি দিন"</string> - <string name="grant_dialog_button_allow_foreground" msgid="501896824973636533">"অ্যাপ ব্যবহার করার সময়"</string> + <string name="grant_dialog_button_allow_foreground" msgid="501896824973636533">"শুধুমাত্র অ্যাপ ব্যবহার করার সময়"</string> <string name="grant_dialog_button_change_to_precise_location" msgid="3273115879467236033">"সুনির্দিষ্ট লোকেশনে পরিবর্তন করুন"</string> <string name="grant_dialog_button_keey_approximate_location" msgid="438025182769080011">"আনুমানিক লোকেশন রাখুন"</string> <string name="grant_dialog_button_allow_one_time" msgid="2618088516449706391">"শুধুমাত্র এই সময়ে"</string> diff --git a/PermissionController/res/values-da/strings.xml b/PermissionController/res/values-da/strings.xml index 7fe9f9309..71e82343c 100644 --- a/PermissionController/res/values-da/strings.xml +++ b/PermissionController/res/values-da/strings.xml @@ -31,7 +31,7 @@ <string name="grant_dialog_button_deny_and_dont_ask_again" msgid="1748925431574312595">"Tillad ikke, og spørg ikke igen"</string> <string name="grant_dialog_button_no_upgrade" msgid="8344732743633736625">"Behold \"Mens appen er i brug\""</string> <string name="grant_dialog_button_no_upgrade_one_time" msgid="5125892775684968694">"Behold \"Kun denne ene gang\""</string> - <string name="grant_dialog_button_more_info" msgid="213350268561945193">"Mere info"</string> + <string name="grant_dialog_button_more_info" msgid="213350268561945193">"Flere oplysninger"</string> <string name="grant_dialog_button_allow_all" msgid="5939066403732409516">"Tillad alle"</string> <string name="grant_dialog_button_always_allow_all" msgid="1719900027660252167">"Tillad altid alle"</string> <string name="grant_dialog_button_allow_selected_photos" msgid="5497042471576153842">"Vælg billeder og videoer"</string> @@ -263,7 +263,7 @@ <string name="auto_revoke_permission_reminder_notification_content" msgid="4492228990462107487">"Nogle tilladelser blev fjernet for at beskytte dit privatliv. Tryk for at gennemgå dem"</string> <string name="auto_revoke_permission_notification_title" msgid="2629844160853454657">"Tilladelser er fjernet for ubrugte apps"</string> <string name="auto_revoke_permission_notification_content" msgid="5125990886047799375">"Nogle apps er ikke blevet brugt i et par måneder. Tryk for at gennemgå dem."</string> - <string name="unused_apps_notification_title" msgid="4314832015894238019">"{count,plural, =1{# ubrugt app}one{# ubrugt app}other{# ubrugt apps}}"</string> + <string name="unused_apps_notification_title" msgid="4314832015894238019">"{count,plural, =1{# ubrugt app}one{# ubrugt app}other{# ubrugte apps}}"</string> <string name="unused_apps_notification_content" msgid="9195026773244581246">"Tilladelser og midlertidige filer er blevet fjernet, og notifikationer blev stoppet. Tryk for at se."</string> <string name="unused_apps_safety_center_card_title" msgid="5638409355530099149">"Gennemgå apps, som har fået fjernet tilladelser"</string> <string name="unused_apps_safety_center_card_content" msgid="1088557243627427820">"Tilladelser og midlertidige filer for de apps, du ikke har brugt for nylig, blev fjernet, og notifikationer ophørte."</string> @@ -350,10 +350,10 @@ <string name="role_assistant_label" msgid="4727586018198208128">"Standardapp for digital assistent"</string> <string name="role_assistant_short_label" msgid="3369003713187703399">"App for digital assistent"</string> <string name="role_assistant_description" msgid="6622458130459922952">"Assistanceapps kan hjælpe dig på baggrund af oplysningerne på den aktuelle skærm. Nogle apps understøtter både startertjenester og tjenester til indtaling for at give dig integreret assistance."</string> - <string name="role_browser_label" msgid="2877796144554070207">"Standardbrowserapp"</string> + <string name="role_browser_label" msgid="2877796144554070207">"Standardapp til browsing"</string> <string name="role_browser_short_label" msgid="6745009127123292296">"Browserapp"</string> <string name="role_browser_description" msgid="3465253637499842671">"Apps, der giver dig adgang til internettet og viser links, som du trykker på"</string> - <string name="role_browser_request_title" msgid="2895200507835937192">"Vil du angive <xliff:g id="APP_NAME">%1$s</xliff:g> som din standardbrowserapp?"</string> + <string name="role_browser_request_title" msgid="2895200507835937192">"Vil du angive <xliff:g id="APP_NAME">%1$s</xliff:g> som din standardapp til browsing?"</string> <string name="role_browser_request_description" msgid="5888803407905985941">"Der kræves ingen tilladelser"</string> <string name="role_dialer_label" msgid="1100224146343237968">"Standardapp til opkald"</string> <string name="role_dialer_short_label" msgid="7186888549465352489">"Opkaldsapp"</string> @@ -593,8 +593,8 @@ <string name="permission_rationale_data_sharing_source_message" msgid="8330794595417986883">"Udvikleren gav oplysninger til "<annotation id="link"><annotation id="install_source" example="App Store">"%1$s"</annotation></annotation>" om, hvordan denne app deler data. Udvikleren opdaterer muligvis disse oplysninger senere."</string> <string name="permission_rationale_location_purpose_title" msgid="5115877143670012618">"Denne app deler muligvis lokationsdata for:"</string> <string name="permission_rationale_permission_data_sharing_varies_title" msgid="9103718980919908316">"Datadeling varierer"</string> - <string name="permission_rationale_data_sharing_varies_message" msgid="4224469559084489222">"Databehandlingen kan variere afhængigt af din appversion, din brug, dit område og din alder. "<annotation id="link">"Flere oplysninger om datadeling"</annotation></string> - <string name="permission_rationale_data_sharing_varies_message_without_link" msgid="4912763761399025094">"Databehandlingen kan variere afhængigt af din appversion, din brug, dit område og din alder."</string> + <string name="permission_rationale_data_sharing_varies_message" msgid="4224469559084489222">"Databehandlingen kan variere afhængigt af din appversion, din brug, din region og din alder. "<annotation id="link">"Flere oplysninger om datadeling"</annotation></string> + <string name="permission_rationale_data_sharing_varies_message_without_link" msgid="4912763761399025094">"Databehandlingen kan variere afhængigt af din appversion, din brug, din region og din alder."</string> <string name="permission_rationale_location_settings_title" msgid="7204145004850190953">"Dine lokationsdata"</string> <string name="permission_rationale_permission_settings_message" msgid="631286040979660267">"Skift denne apps adgang i "<annotation id="link">"privatlivsindstillingerne"</annotation></string> <string name="permission_rationale_purpose_app_functionality" msgid="8397736681065841405">"Appfunktionalitet"</string> @@ -610,7 +610,7 @@ <string name="data_sharing_updates_title" msgid="7996933386875213859">"Opdateringer om deling af lokationsdata"</string> <string name="data_sharing_updates_summary" msgid="764113985772233889">"Gennemse apps, der har ændret måden, hvorpå de kan dele dine lokationsdata"</string> <string name="data_sharing_updates_subtitle" msgid="6311537708950632329">"Disse apps har ændret den måde, hvorpå de kan dele dine lokationsdata. De har muligvis ikke delt dataene før eller kan nu anvende dem til annoncering eller marketing."</string> - <string name="data_sharing_updates_footer_message" msgid="1582711655172892107">"Udviklerne af disse apps har givet oplysninger om deres procedurer for datadeling til en appbutik. De kan opdatere procedurerne med tiden.\n\nProcedurer for datadeling kan variere afhængigt af din appversion, din brug, dit område og din alder."</string> + <string name="data_sharing_updates_footer_message" msgid="1582711655172892107">"Udviklerne af disse apps har givet oplysninger om deres procedurer for datadeling til en appbutik. De kan opdatere procedurerne med tiden.\n\nProcedurer for datadeling kan variere afhængigt af din appversion, din brug, din region og din alder."</string> <string name="learn_about_data_sharing" msgid="4200480587079488045">"Få flere oplysninger om deling af data"</string> <string name="shares_location_with_third_parties" msgid="2278051743742057767">"Dine lokationsdata deles nu med tredjeparter"</string> <string name="shares_location_with_third_parties_for_advertising" msgid="1918588064014480513">"Dine lokationsdata deles nu med tredjeparter med henblik på annoncering eller marketing"</string> diff --git a/PermissionController/res/values-de-v34/strings.xml b/PermissionController/res/values-de-v34/strings.xml index 8b6f95055..ed699cce3 100644 --- a/PermissionController/res/values-de-v34/strings.xml +++ b/PermissionController/res/values-de-v34/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="security_privacy_brand_name" msgid="7303621734258440812">"Sicherheit & Datenschutz"</string> + <string name="security_privacy_brand_name" msgid="7303621734258440812">"Datenschutz & Sicherheit"</string> <string name="privacy_subpage_controls_header" msgid="4152396976713749322">"Einstellungen"</string> <string name="health_connect_title" msgid="2132233890867430855">"Health Connect"</string> <string name="health_connect_summary" msgid="815473513776882296">"App-Zugriff auf Gesundheitsdaten verwalten"</string> diff --git a/PermissionController/res/values-de/strings.xml b/PermissionController/res/values-de/strings.xml index 1ac8e1d38..9e29e51d9 100644 --- a/PermissionController/res/values-de/strings.xml +++ b/PermissionController/res/values-de/strings.xml @@ -349,7 +349,7 @@ <string name="accessibility_service_dialog_bottom_text_multiple" msgid="7009848932395519852">"Diese Apps können deinen Bildschirm, deine Aktionen und deine Eingaben sehen, Aktionen ausführen und den Bildschirm steuern."</string> <string name="role_assistant_label" msgid="4727586018198208128">"Standard-App digit. Assistent"</string> <string name="role_assistant_short_label" msgid="3369003713187703399">"App für digitalen Assistenten"</string> - <string name="role_assistant_description" msgid="6622458130459922952">"Assistent-Apps können dir bei bestimmten Dingen helfen. Dazu greifen sie auf die Informationen zu, die aktuell auf deinem Bildschirm angezeigt werden. Damit sie dir eine umfassende Hilfe sind, unterstützen einige Apps sowohl Launcher- als auch Spracheingabedienste."</string> + <string name="role_assistant_description" msgid="6622458130459922952">"Assistent-Apps können dir bei bestimmten Dingen helfen. Dazu greifen sie auf die Informationen zu, die aktuell auf deinem Bildschirm angezeigt werden. Einige Apps unterstützen sowohl Launcher- als auch Spracheingabedienste."</string> <string name="role_browser_label" msgid="2877796144554070207">"Standard-Browser-App"</string> <string name="role_browser_short_label" msgid="6745009127123292296">"Browser-App"</string> <string name="role_browser_description" msgid="3465253637499842671">"Apps, mit denen du auf das Internet zugreifen kannst und die die entsprechende Seite öffnen, wenn du auf einen Link tippst"</string> @@ -520,7 +520,7 @@ <string name="blocked_sensor_summary" msgid="4443707628305027375">"Für Apps und Dienste"</string> <string name="blocked_mic_summary" msgid="8960466941528458347">"Die Mikrofondaten können immer noch geteilt werden, wenn du den Notruf wählst."</string> <string name="blocked_sensor_button_label" msgid="6742092634984289658">"Ändern"</string> - <string name="safety_center_dashboard_page_title" msgid="2810774008694315854">"Sicherheit & Datenschutz"</string> + <string name="safety_center_dashboard_page_title" msgid="2810774008694315854">"Datenschutz & Sicherheit"</string> <string name="safety_center_rescan_button" msgid="4517514567809409596">"Gerät prüfen"</string> <string name="safety_center_issue_card_dismiss_button" msgid="5113965506144222402">"Schließen"</string> <string name="safety_center_issue_card_dismiss_confirmation_title" msgid="2734809473425036382">"Diese Warnung schließen?"</string> @@ -531,7 +531,7 @@ <string name="safety_status_preference_title_and_summary_content_description" msgid="3511373256505058464">"Sicherheits- und Datenschutzstatus. <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">"Sicherheitseinstellungen"</string> <string name="sensor_permissions_qs" msgid="1022267900031317472">"Berechtigungen"</string> - <string name="safety_privacy_qs_tile_title" msgid="727301867710374052">"Sicherheit & Datenschutz"</string> + <string name="safety_privacy_qs_tile_title" msgid="727301867710374052">"Datenschutz & Sicherheit"</string> <string name="safety_privacy_qs_tile_subtitle" msgid="3621544532041936749">"Status prüfen"</string> <string name="privacy_controls_qs" msgid="5780144882040591169">"Datenschutzeinstellungen"</string> <string name="security_settings_button_label_qs" msgid="8280343822465962330">"Weitere Einstellungen"</string> @@ -596,7 +596,7 @@ <string name="permission_rationale_data_sharing_varies_message" msgid="4224469559084489222">"Die Art der Datennutzung kann von der Version und Verwendung der App, von der Region und vom Alter des Nutzers abhängen. "<annotation id="link">"Weitere Informationen zur Datenweitergabe"</annotation></string> <string name="permission_rationale_data_sharing_varies_message_without_link" msgid="4912763761399025094">"Die Datenschutz- und Sicherheitspraktiken können je nach App-Version, Verwendung, Region und Alter des Nutzers variieren."</string> <string name="permission_rationale_location_settings_title" msgid="7204145004850190953">"Deine Standortdaten"</string> - <string name="permission_rationale_permission_settings_message" msgid="631286040979660267">"Du kannst den Zugriff dieser App in den "<annotation id="link">"Datenschutzeinstellungen"</annotation>" ändern"</string> + <string name="permission_rationale_permission_settings_message" msgid="631286040979660267">"Du kannst den Zugriff dieser App in den "<annotation id="link">"Datenschutzeinstellungen"</annotation>" ändern"</string> <string name="permission_rationale_purpose_app_functionality" msgid="8397736681065841405">"Funktionen der App"</string> <string name="permission_rationale_purpose_analytics" msgid="2070800501189620712">"Analytics"</string> <string name="permission_rationale_purpose_developer_communications" msgid="6453047018892062374">"Mitteilungen des Entwicklers"</string> diff --git a/PermissionController/res/values-en-rCA/strings.xml b/PermissionController/res/values-en-rCA/strings.xml index ef5fb9086..fc83ad25a 100644 --- a/PermissionController/res/values-en-rCA/strings.xml +++ b/PermissionController/res/values-en-rCA/strings.xml @@ -419,7 +419,7 @@ <string name="ongoing_usage_dialog_separator" msgid="1715181526581520068">", "</string> <string name="ongoing_usage_dialog_last_separator" msgid="4170995004748832163">" and "</string> <string name="default_app_search_keyword" msgid="8330125736889689743">"default apps"</string> - <string name="permgroup_list_microphone_and_camera" msgid="962768198001487969">"Microphone & Camera"</string> + <string name="permgroup_list_microphone_and_camera" msgid="962768198001487969">"Microphone and camera"</string> <string name="settings_button" msgid="4414988414732479636">"Settings"</string> <string name="default_apps" msgid="5119201969348748639">"Default apps"</string> <string name="no_default_apps" msgid="2593466527182950231">"No default apps"</string> diff --git a/PermissionController/res/values-es-rUS/strings.xml b/PermissionController/res/values-es-rUS/strings.xml index a59575bd3..d7e550e0e 100644 --- a/PermissionController/res/values-es-rUS/strings.xml +++ b/PermissionController/res/values-es-rUS/strings.xml @@ -483,7 +483,7 @@ <string name="permgroupupgraderequest_microphone" msgid="1362781696161233341">"¿Cambiar el acceso al micrófono de <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>?"</string> <string name="permgroupupgraderequestdetail_microphone" msgid="2870497719571464239">"Esta app quiere grabar audio todo el tiempo, incluso cuando no la uses. "<annotation id="link">"Permite el acceso en Configuración."</annotation></string> <string name="permgrouprequest_activityRecognition" msgid="5415121592794230330">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> acceda a tu actividad física?"</string> - <string name="permgrouprequest_camera" msgid="5123097035410002594">"¿Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tome fotos y grabe videos?"</string> + <string name="permgrouprequest_camera" msgid="5123097035410002594">"¿Quieres permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tome fotos y grabe videos?"</string> <string name="permgrouprequestdetail_camera" msgid="9085323239764667883">"La app solo podrá tomar fotos y grabar videos cuando esté en uso"</string> <string name="permgroupbackgroundrequest_camera" msgid="1274286575704213875">"¿Permitir que <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> tome fotos y grabe videos?"</string> <string name="permgroupbackgroundrequestdetail_camera" msgid="4458783509089859078">"Es posible que esta app quiera tomar fotos y grabar videos todo el tiempo, incluso cuando no la estés usando. "<annotation id="link">"Permite el acceso en Configuración."</annotation></string> @@ -615,7 +615,7 @@ <string name="shares_location_with_third_parties" msgid="2278051743742057767">"Tus datos de ubicación ahora se comparten con terceros"</string> <string name="shares_location_with_third_parties_for_advertising" msgid="1918588064014480513">"Tus datos de ubicación ahora se comparten con terceros para publicidad o marketing"</string> <string name="updated_in_last_days" msgid="8371811947153042322">"{count,plural, =0{Se actualizó en el último día}=1{Se actualizó en el último día}many{Se actualizó en los últimos # de días}other{Se actualizó en los últimos # días}}"</string> - <string name="no_updates_at_this_time" msgid="9031085635689982935">"No hay novedades por el momento"</string> + <string name="no_updates_at_this_time" msgid="9031085635689982935">"No hay actualizaciones por el momento"</string> <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Actualizaciones del uso compartido de datos"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Algunas apps cambiaron la forma en que podrían compartir tus datos de ubicación"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Configuración"</string> diff --git a/PermissionController/res/values-es/strings.xml b/PermissionController/res/values-es/strings.xml index cb76d3560..e33a6e6dc 100644 --- a/PermissionController/res/values-es/strings.xml +++ b/PermissionController/res/values-es/strings.xml @@ -598,7 +598,7 @@ <string name="permission_rationale_location_settings_title" msgid="7204145004850190953">"Tus datos de ubicación"</string> <string name="permission_rationale_permission_settings_message" msgid="631286040979660267">"Cambia el acceso de esta aplicación en la "<annotation id="link">"configuración de privacidad"</annotation></string> <string name="permission_rationale_purpose_app_functionality" msgid="8397736681065841405">"Funcionalidad de la aplicación"</string> - <string name="permission_rationale_purpose_analytics" msgid="2070800501189620712">"Analítica"</string> + <string name="permission_rationale_purpose_analytics" msgid="2070800501189620712">"Estadísticas"</string> <string name="permission_rationale_purpose_developer_communications" msgid="6453047018892062374">"Comunicaciones del desarrollador"</string> <string name="permission_rationale_purpose_advertising" msgid="7156966429245180236">"Publicidad o marketing"</string> <string name="permission_rationale_purpose_fraud_prevention_security" msgid="4262104770357031902">"Prevención de fraudes, seguridad y cumplimiento"</string> @@ -615,7 +615,7 @@ <string name="shares_location_with_third_parties" msgid="2278051743742057767">"Tus datos de ubicación ahora se comparten con terceros"</string> <string name="shares_location_with_third_parties_for_advertising" msgid="1918588064014480513">"Tus datos de ubicación ahora se comparten con terceros para fines de publicidad o marketing"</string> <string name="updated_in_last_days" msgid="8371811947153042322">"{count,plural, =0{Se ha actualizado en el último día}=1{Se ha actualizado en el último día}many{Se ha actualizado en los últimos # días}other{Se ha actualizado en los últimos # días}}"</string> - <string name="no_updates_at_this_time" msgid="9031085635689982935">"No hay novedades por el momento"</string> + <string name="no_updates_at_this_time" msgid="9031085635689982935">"No hay cambios por el momento"</string> <string name="safety_label_changes_notification_title" msgid="4479955083472203839">"Cambios en cómo se comparten los datos"</string> <string name="safety_label_changes_notification_desc" msgid="7808764283266234675">"Algunas aplicaciones han cambiado cómo pueden compartir tus datos de ubicación"</string> <string name="safety_label_changes_gear_description" msgid="2655887555599138509">"Ajustes"</string> diff --git a/PermissionController/res/values-eu/strings.xml b/PermissionController/res/values-eu/strings.xml index aaa711b18..77bb21163 100644 --- a/PermissionController/res/values-eu/strings.xml +++ b/PermissionController/res/values-eu/strings.xml @@ -200,7 +200,7 @@ <string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Ikusi <xliff:g id="APP">%1$s</xliff:g> aplikazioaren baimen guztiak"</string> <string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Ikusi baimen hau duten aplikazio guztiak"</string> <string name="assistant_mic_label" msgid="1011432357152323896">"Erakutsi laguntzaileak mikrofonoa erabiltzeko duen baimena"</string> - <string name="unused_apps_category_title" msgid="2988455616845243901">"Erabili gabeko aplikazio-ezarpenak"</string> + <string name="unused_apps_category_title" msgid="2988455616845243901">"Erabili gabeko aplikazioen ezarpenak"</string> <string name="auto_revoke_label" msgid="5068393642936571656">"Kendu baimenak aplikazioa erabiltzen ez bada"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Kendu baimenak eta egin tokia"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pausatu aplikazioko jarduerak, erabiltzen ez bada"</string> @@ -443,7 +443,7 @@ <string name="incident_report_notification_text" msgid="3376480583513587923">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak arazketa-informazioa kargatu nahi du."</string> <string name="incident_report_dialog_title" msgid="669104389325204095">"Arazketa-datuak partekatu nahi dituzu?"</string> <string name="incident_report_dialog_intro" msgid="5897733669850951832">"Arazo bat hauteman du sistemak."</string> - <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="DATE">%2$s</xliff:g> (<xliff:g id="TIME">%3$s</xliff:g>) datan sortutako akatsen txostena kargatzeko baimena eskatzen ari da <xliff:g id="APP_NAME_0">%1$s</xliff:g>. Akatsen txostenek zure gailuari buruzkoa den edo aplikazioek erregistratu duten informazio pertsonala dute; adibidez, erabiltzaile-izenak, kokapenari buruzko datuak, gailuaren identifikatzaileak eta sareari buruzko informazioa. Informazio hori izateko fidagarriak iruditzen zaizkizun pertsona eta aplikazioekin soilik partekatu beharko zenituzke akatsen txostenak. <xliff:g id="APP_NAME_1">%4$s</xliff:g> aplikazioari akatsen txostena kargatzeko baimena eman nahi diozu?"</string> + <string name="incident_report_dialog_text" msgid="5675553296891757523">"<xliff:g id="DATE">%2$s</xliff:g> (<xliff:g id="TIME">%3$s</xliff:g>) datan sortutako akatsen txostena kargatzeko baimena eskatzen ari da <xliff:g id="APP_NAME_0">%1$s</xliff:g>. Akatsen txostenek zure gailuari buruzkoa den edo aplikazioek erregistratu duten informazio pertsonala dute; adibidez, erabiltzaile-izenak, kokapenari buruzko datuak, gailu-identifikatzaileak eta sareari buruzko informazioa. Informazio hori izateko fidagarriak iruditzen zaizkizun pertsona eta aplikazioekin soilik partekatu beharko zenituzke akatsen txostenak. <xliff:g id="APP_NAME_1">%4$s</xliff:g> aplikazioari akatsen txostena kargatzeko baimena eman nahi diozu?"</string> <string name="incident_report_error_dialog_text" msgid="4189647113387092272">"Errore bat gertatu da <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioaren akatsen txostena prozesatzean; beraz, ezin izan dira partekatu arazketa-datu xehatuak. Barkatu eragozpenak."</string> <string name="incident_report_dialog_allow_label" msgid="2970242967721155239">"Eman baimena"</string> <string name="incident_report_dialog_deny_label" msgid="3535314290677579383">"Ukatu"</string> diff --git a/PermissionController/res/values-fa/strings.xml b/PermissionController/res/values-fa/strings.xml index a5c05ca32..a382eb3ae 100644 --- a/PermissionController/res/values-fa/strings.xml +++ b/PermissionController/res/values-fa/strings.xml @@ -18,7 +18,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_name" msgid="6098036489833144040">"کنترلکننده اجازه"</string> <string name="ok" msgid="1936281769725676272">"تأیید"</string> - <string name="permission_search_keyword" msgid="1214451577494730543">"مجوزها"</string> + <string name="permission_search_keyword" msgid="1214451577494730543">"اجازهها"</string> <string name="cancel" msgid="8943320028373963831">"لغو"</string> <string name="back" msgid="6249950659061523680">"برگشت"</string> <string name="available" msgid="6007778121920339498">"دردسترس"</string> @@ -49,12 +49,12 @@ <string name="permission_revoked_all" msgid="3397649017727222283">"همه مجوزها غیرفعال است"</string> <string name="permission_revoked_none" msgid="9213345075484381180">"هیچ موردی غیرفعال نیست"</string> <string name="grant_dialog_button_allow" msgid="5314677880021102550">"اجازه دادن"</string> - <string name="grant_dialog_button_allow_always" msgid="4485552579273565981">"همیشه مجاز است"</string> + <string name="grant_dialog_button_allow_always" msgid="4485552579273565981">"همیشه مجاز"</string> <string name="grant_dialog_button_allow_foreground" msgid="501896824973636533">"هنگام استفاده از برنامه"</string> <string name="grant_dialog_button_change_to_precise_location" msgid="3273115879467236033">"تغییر به مکان دقیق"</string> <string name="grant_dialog_button_keey_approximate_location" msgid="438025182769080011">"حفظ مکان تقریبی"</string> <string name="grant_dialog_button_allow_one_time" msgid="2618088516449706391">"فقط این بار"</string> - <string name="grant_dialog_button_allow_background" msgid="8236044729434367833">"همیشه مجاز است"</string> + <string name="grant_dialog_button_allow_background" msgid="8236044729434367833">"همیشه مجاز"</string> <string name="grant_dialog_button_allow_all_files" msgid="4955436994954829894">"اجازه دادن برای مدیریت همه فایلها"</string> <string name="grant_dialog_button_allow_media_only" msgid="4832877658422573832">"اجازه دادن برای دسترسی به فایلهای رسانه"</string> <string name="app_permissions_breadcrumb" msgid="5136969550489411650">"برنامهها"</string> @@ -107,11 +107,11 @@ <!-- no translation found for background_access_chooser_dialog_choices:0 (1351721623256561996) --> <!-- no translation found for background_access_chooser_dialog_choices:1 (9127301153688725448) --> <!-- no translation found for background_access_chooser_dialog_choices:2 (4305536986042401191) --> - <string name="permission_access_always" msgid="1474641821883823446">"همیشه مجاز است"</string> - <string name="permission_access_only_foreground" msgid="7801170728159326195">"فقط هنگام استفاده از برنامه مجاز است"</string> + <string name="permission_access_always" msgid="1474641821883823446">"همیشه مجاز"</string> + <string name="permission_access_only_foreground" msgid="7801170728159326195">"مجاز فقط هنگام استفاده از برنامه"</string> <string name="permission_access_never" msgid="4647014230217936900">"اجازه ندادن"</string> <string name="loading" msgid="4789365003890741082">"درحال بارگیری…"</string> - <string name="all_permissions" msgid="6911125611996872522">"همه مجوزها"</string> + <string name="all_permissions" msgid="6911125611996872522">"همه اجازهها"</string> <string name="other_permissions" msgid="2901186127193849594">"سایر قابلیتهای برنامه"</string> <string name="permission_request_title" msgid="8790310151025020126">"درخواست اجازه"</string> <string name="wear_not_allowed_dlg_title" msgid="1429467891296932713">"Android Wear"</string> @@ -143,7 +143,7 @@ <string name="duration_used_hours" msgid="4983814806123370332">"{count,plural, =1{# ساعت}one{# ساعت}other{# ساعت}}"</string> <string name="duration_used_minutes" msgid="1701379522897227819">"{count,plural, =1{# دقیقه}one{# دقیقه}other{# دقیقه}}"</string> <string name="duration_used_seconds" msgid="4067390990568727715">"{count,plural, =1{# ثانیه}one{# ثانیه}other{# ثانیه}}"</string> - <string name="permission_usage_any_permission" msgid="6358023078298106997">"همه مجوزها"</string> + <string name="permission_usage_any_permission" msgid="6358023078298106997">"همه اجازهها"</string> <string name="permission_usage_any_time" msgid="3802087027301631827">"هر زمانی"</string> <string name="permission_usage_last_n_days" msgid="7882626467375714145">"{count,plural, =1{# روز گذشته}one{# روز گذشته}other{# روز گذشته}}"</string> <string name="permission_usage_last_n_hours" msgid="8490466053680267858">"{count,plural, =1{# ساعت گذشته}one{# ساعت گذشته}other{# ساعت گذشته}}"</string> @@ -158,9 +158,9 @@ <string name="permission_usage_bar_chart_title_any_time" msgid="2845251288192246754">"پراستفادهترین مجوز در هرزمانی"</string> <string name="permission_usage_bar_chart_title_last_7_days" msgid="5796577162176938349">"پراستفادهترین مجوز در ۷ روز گذشته"</string> <string name="permission_usage_bar_chart_title_last_day" msgid="7950805735777472871">"پراستفادهترین مجوز در ۲۴ ساعت گذشته"</string> - <string name="permission_usage_bar_chart_title_last_hour" msgid="6571647509660009185">"پراستفادهترین مجوزها در ۱ ساعت گذشته"</string> + <string name="permission_usage_bar_chart_title_last_hour" msgid="6571647509660009185">"پراستفادهترین اجازهها در ۱ ساعت گذشته"</string> <string name="permission_usage_bar_chart_title_last_15_minutes" msgid="2743143675412824819">"پراستفادهترین مجوزها در ۱۵ دقیقه گذشته"</string> - <string name="permission_usage_bar_chart_title_last_minute" msgid="820450867183487607">"پراستفادهترین مجوزها در ۱ دقیقه گذشته"</string> + <string name="permission_usage_bar_chart_title_last_minute" msgid="820450867183487607">"پراستفادهترین اجازهها در ۱ دقیقه گذشته"</string> <string name="permission_usage_preference_summary_not_used_in_past_n_days" msgid="4771868094611359651">"{count,plural, =1{در # روز گذشته استفاده نشده است}one{در # روز گذشته استفاده نشده است}other{در # روز گذشته استفاده نشده است}}"</string> <string name="permission_usage_preference_summary_not_used_in_past_n_hours" msgid="3828973177433435742">"{count,plural, =1{در # ساعت گذشته استفاده نشده است}one{در # ساعت گذشته استفاده نشده است}other{در # ساعت گذشته استفاده نشده است}}"</string> <string name="permission_usage_preference_label" msgid="8343167938128676378">"{count,plural, =1{یک برنامه از آن استفاده کرده است}one{# برنامه از آن استفاده کرده است}other{# برنامه از آن استفاده کرده است}}"</string> @@ -168,9 +168,9 @@ <string name="app_permission_usage_filter_label" msgid="7182861154638631550">"فیلترشده براساس: <xliff:g id="PERM">%1$s</xliff:g>"</string> <string name="app_permission_usage_remove_filter" msgid="2926157607436428207">"حذف فیلتر"</string> <string name="filter_by_title" msgid="7300368602759958031">"فیلتر کردن براساس"</string> - <string name="filter_by_permissions" msgid="7613462963111282568">"فیلتر کردن براساس مجوزها"</string> + <string name="filter_by_permissions" msgid="7613462963111282568">"فیلتر کردن براساس اجازهها"</string> <string name="filter_by_time" msgid="6667864816999691642">"فیلتر براساس زمان"</string> - <string name="sort_spinner_most_permissions" msgid="1704349738096822836">"بیشترین مجوزها"</string> + <string name="sort_spinner_most_permissions" msgid="1704349738096822836">"بیشترین اجازهها"</string> <string name="sort_spinner_most_accesses" msgid="5283913004357220161">"بیشترین تعداد دسترسی"</string> <string name="sort_spinner_recent" msgid="7513845273076525203">"اخیر"</string> <string name="sort_by_app" msgid="4055799843051138087">"بهترتیب استفاده برنامه"</string> @@ -186,8 +186,8 @@ <string name="app_permission_button_allow" msgid="5808039516494774647">"اجازه دادن"</string> <string name="app_permission_button_allow_all_files" msgid="1792232272599018825">"اجازه دادن برای مدیریت همه فایلها"</string> <string name="app_permission_button_allow_media_only" msgid="2834282724426046154">"اجازه دادن فقط برای دسترسی به رسانهها"</string> - <string name="app_permission_button_allow_always" msgid="4573292371734011171">"همیشه مجاز است"</string> - <string name="app_permission_button_allow_foreground" msgid="1991570451498943207">"فقط هنگام استفاده از برنامه مجاز است"</string> + <string name="app_permission_button_allow_always" msgid="4573292371734011171">"همیشه مجاز"</string> + <string name="app_permission_button_allow_foreground" msgid="1991570451498943207">"مجاز فقط هنگام استفاده از برنامه"</string> <string name="app_permission_button_always_allow_all" msgid="4905699259378428855">"همه موارد همیشه مجازاند"</string> <string name="app_permission_button_ask" msgid="3342950658789427">"هربار پرسیده شود"</string> <string name="app_permission_button_deny" msgid="6016454069832050300">"اجازه ندادن"</string> @@ -407,9 +407,9 @@ <string name="phone_call_uses_microphone" msgid="233569591461187177">"در <b>تماس تلفنی</b> از میکروفون استفاده میشود"</string> <string name="phone_call_uses_microphone_and_camera" msgid="6291898755681748189">"در <b>تماس تصویری</b> از دوربین و میکروفون استفاده میشود"</string> <string name="phone_call_uses_camera" msgid="2048417022147857418">"در <b>تماس تصویری</b> از دوربین استفاده میشود"</string> - <string name="system_uses_microphone" msgid="576672130318877143">"سرویس سیستم به میکروفون دسترسی دارد"</string> - <string name="system_uses_microphone_and_camera" msgid="5124478304275138804">"سرویس سیستم به دوربین و میکروفون دسترسی دارد"</string> - <string name="system_uses_camera" msgid="1911223105234441470">"سرویس سیستم به دوربین دسترسی دارد"</string> + <string name="system_uses_microphone" msgid="576672130318877143">"خدمات سیستم به میکروفون دسترسی دارد"</string> + <string name="system_uses_microphone_and_camera" msgid="5124478304275138804">"خدمات سیستم به دوربین و میکروفون دسترسی دارد"</string> + <string name="system_uses_camera" msgid="1911223105234441470">"خدمات سیستم به دوربین دسترسی دارد"</string> <string name="other_use" msgid="6564855051022776692">"استفادههای دیگر:"</string> <string name="ongoing_usage_dialog_ok" msgid="103556809118460072">"متوجه شدم"</string> <string name="ongoing_usage_dialog_title" msgid="683836493556628569">"استفاده اخیر از <xliff:g id="TYPES_LIST">%s</xliff:g>"</string> @@ -450,7 +450,7 @@ <string name="adjust_user_sensitive_title" msgid="4196724451314280527">"تنظیمات پیشرفته"</string> <string name="menu_adjust_user_sensitive" msgid="6497923610654425780">"تنظیمات پیشرفته"</string> <string name="adjust_user_sensitive_globally_title" msgid="8649190949066029174">"نمایش استفادهٔ برنامه سیستم"</string> - <string name="adjust_user_sensitive_globally_summary" msgid="129467818433773912">"نمایش استفاده برنامه سیستم از مجوزها در نوار وضعیت، داشبورد، و جاهای دیگر"</string> + <string name="adjust_user_sensitive_globally_summary" msgid="129467818433773912">"نمایش استفاده برنامه سیستم از اجازهها در نوار وضعیت، داشبورد، و جاهای دیگر"</string> <string name="adjust_user_sensitive_per_app_header" msgid="4543506440989005648">"برجسته کردن استفاده برای موارد زیر"</string> <string name="assistant_record_audio_user_sensitive_title" msgid="5532123360322362378">"نمایش دستیار تشخیص راهانداز"</string> <string name="assistant_record_audio_user_sensitive_summary" msgid="6482937591816401619">"نمایش نماد مربوطه در نوار وضعیت وقتی از میکروفون برای فعال کردن دستیار صوتی استفاده میشود"</string> @@ -524,12 +524,12 @@ <string name="safety_center_rescan_button" msgid="4517514567809409596">"اسکن کردن دستگاه"</string> <string name="safety_center_issue_card_dismiss_button" msgid="5113965506144222402">"رد کردن"</string> <string name="safety_center_issue_card_dismiss_confirmation_title" msgid="2734809473425036382">"این هشدار رد شود؟"</string> - <string name="safety_center_issue_card_dismiss_confirmation_message" msgid="3775418736671093563">"هرزمان خواستید تنظیمات امنیت و حریم خصوصی را مرور کنید تا محافظت بیشتری اضافه کنید"</string> + <string name="safety_center_issue_card_dismiss_confirmation_message" msgid="3775418736671093563">"هرزمان خواستید تنظیمات ایمنی و حریم خصوصی را مرور کنید تا محافظت بیشتری اضافه کنید"</string> <string name="safety_center_issue_card_confirm_dismiss_button" msgid="5884137843083634556">"رد شدن"</string> <string name="safety_center_issue_card_cancel_dismiss_button" msgid="2874578798877712346">"لغو"</string> <string name="safety_center_entries_category_title" msgid="34356964062813115">"تنظیمات"</string> <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="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_subtitle" msgid="3621544532041936749">"بررسی وضعیت"</string> diff --git a/PermissionController/res/values-fr-rCA/strings.xml b/PermissionController/res/values-fr-rCA/strings.xml index 3e71c4d16..8ad73be8d 100644 --- a/PermissionController/res/values-fr-rCA/strings.xml +++ b/PermissionController/res/values-fr-rCA/strings.xml @@ -108,7 +108,7 @@ <!-- no translation found for background_access_chooser_dialog_choices:1 (9127301153688725448) --> <!-- no translation found for background_access_chooser_dialog_choices:2 (4305536986042401191) --> <string name="permission_access_always" msgid="1474641821883823446">"Toujours autoriser"</string> - <string name="permission_access_only_foreground" msgid="7801170728159326195">"Autoriser si l\'application est utilisée"</string> + <string name="permission_access_only_foreground" msgid="7801170728159326195">"Autoriser uniquement lorsque l\'application est utilisée"</string> <string name="permission_access_never" msgid="4647014230217936900">"Ne pas autoriser"</string> <string name="loading" msgid="4789365003890741082">"Chargement en cours…"</string> <string name="all_permissions" msgid="6911125611996872522">"Toutes les autorisations"</string> @@ -187,7 +187,7 @@ <string name="app_permission_button_allow_all_files" msgid="1792232272599018825">"Autoriser à gérer tous les fichiers"</string> <string name="app_permission_button_allow_media_only" msgid="2834282724426046154">"Autoriser à accéder aux éléments multimédias seulement"</string> <string name="app_permission_button_allow_always" msgid="4573292371734011171">"Toujours autoriser"</string> - <string name="app_permission_button_allow_foreground" msgid="1991570451498943207">"Autoriser uniquement lorsque l\'appli est en cours d\'utilisation"</string> + <string name="app_permission_button_allow_foreground" msgid="1991570451498943207">"Autoriser uniquement lorsque l\'application est utilisée"</string> <string name="app_permission_button_always_allow_all" msgid="4905699259378428855">"Toujours tout autoriser"</string> <string name="app_permission_button_ask" msgid="3342950658789427">"Toujours demander"</string> <string name="app_permission_button_deny" msgid="6016454069832050300">"Ne pas autoriser"</string> diff --git a/PermissionController/res/values-fr/strings.xml b/PermissionController/res/values-fr/strings.xml index 6af03ec38..9e9d2ccf0 100644 --- a/PermissionController/res/values-fr/strings.xml +++ b/PermissionController/res/values-fr/strings.xml @@ -591,17 +591,17 @@ <string name="permission_rationale_data_sharing_source_title" msgid="6874604543125814316">"Origine des informations sur le partage des données"</string> <string name="permission_rationale_data_sharing_device_manufacturer_message" msgid="7569261218145653185">"Le développeur a fourni des infos au fabricant de cet appareil concernant la manière dont cette appli partage les données. Le développeur peut mettre à jour ces infos au fil du temps."</string> <string name="permission_rationale_data_sharing_source_message" msgid="8330794595417986883">"Le développeur a fourni des infos sur "<annotation id="link"><annotation id="install_source" example="App Store">"%1$s"</annotation></annotation>" concernant la manière dont cette appli partage les données. Le développeur peut mettre à jour ces infos au fil du temps."</string> - <string name="permission_rationale_location_purpose_title" msgid="5115877143670012618">"L\'appli peut partager données de localisation pour :"</string> + <string name="permission_rationale_location_purpose_title" msgid="5115877143670012618">"L\'appli peut partager des données de localis. pour :"</string> <string name="permission_rationale_permission_data_sharing_varies_title" msgid="9103718980919908316">"Partage des données variable"</string> <string name="permission_rationale_data_sharing_varies_message" msgid="4224469559084489222">"La gestion des données peut varier selon la version de l\'appli, l\'utilisation que vous en faites, votre région et votre âge. "<annotation id="link">"En savoir plus sur le partage des données"</annotation></string> <string name="permission_rationale_data_sharing_varies_message_without_link" msgid="4912763761399025094">"La gestion des données peut varier selon la version de l\'appli, l\'utilisation que vous en faites, votre région et votre âge."</string> <string name="permission_rationale_location_settings_title" msgid="7204145004850190953">"Vos données de localisation"</string> <string name="permission_rationale_permission_settings_message" msgid="631286040979660267">"Modifiez l\'accès de cette appli dans les "<annotation id="link">"paramètres de confidentialité"</annotation></string> - <string name="permission_rationale_purpose_app_functionality" msgid="8397736681065841405">"Fonctionnement de l\'appli"</string> - <string name="permission_rationale_purpose_analytics" msgid="2070800501189620712">"Données analytiques"</string> + <string name="permission_rationale_purpose_app_functionality" msgid="8397736681065841405">"le fonctionnement de l\'appli ;"</string> + <string name="permission_rationale_purpose_analytics" msgid="2070800501189620712">"les données analytiques ;"</string> <string name="permission_rationale_purpose_developer_communications" msgid="6453047018892062374">"Communications du développeur"</string> - <string name="permission_rationale_purpose_advertising" msgid="7156966429245180236">"Publicité ou marketing"</string> - <string name="permission_rationale_purpose_fraud_prevention_security" msgid="4262104770357031902">"Prévention des fraudes, sécurité et conformité"</string> + <string name="permission_rationale_purpose_advertising" msgid="7156966429245180236">"la publicité ou marketing ;"</string> + <string name="permission_rationale_purpose_fraud_prevention_security" msgid="4262104770357031902">"la prévention des fraudes, la sécurité et la conformité."</string> <string name="permission_rationale_purpose_personalization" msgid="1589973273682238708">"Personnalisation"</string> <string name="permission_rationale_purpose_account_management" msgid="2985772421946688879">"Gestion du compte"</string> <string name="app_permission_rationale_message" msgid="8511466916077100713">"Sécurité des données"</string> diff --git a/PermissionController/res/values-in/strings.xml b/PermissionController/res/values-in/strings.xml index 456ce7b82..6c5eacd15 100644 --- a/PermissionController/res/values-in/strings.xml +++ b/PermissionController/res/values-in/strings.xml @@ -49,12 +49,12 @@ <string name="permission_revoked_all" msgid="3397649017727222283">"semua dinonaktifkan"</string> <string name="permission_revoked_none" msgid="9213345075484381180">"tidak ada yang dinonaktifkan"</string> <string name="grant_dialog_button_allow" msgid="5314677880021102550">"Izinkan"</string> - <string name="grant_dialog_button_allow_always" msgid="4485552579273565981">"Izinkan sepanjang waktu"</string> + <string name="grant_dialog_button_allow_always" msgid="4485552579273565981">"Selalu izinkan"</string> <string name="grant_dialog_button_allow_foreground" msgid="501896824973636533">"Saat aplikasi digunakan"</string> <string name="grant_dialog_button_change_to_precise_location" msgid="3273115879467236033">"Ubah ke lokasi presisi"</string> <string name="grant_dialog_button_keey_approximate_location" msgid="438025182769080011">"Tetap gunakan perkiraan"</string> <string name="grant_dialog_button_allow_one_time" msgid="2618088516449706391">"Hanya kali ini"</string> - <string name="grant_dialog_button_allow_background" msgid="8236044729434367833">"Izinkan sepanjang waktu"</string> + <string name="grant_dialog_button_allow_background" msgid="8236044729434367833">"Selalu izinkan"</string> <string name="grant_dialog_button_allow_all_files" msgid="4955436994954829894">"Izinkan pengelolaan semua file"</string> <string name="grant_dialog_button_allow_media_only" msgid="4832877658422573832">"Izinkan akses ke file media"</string> <string name="app_permissions_breadcrumb" msgid="5136969550489411650">"Aplikasi"</string> @@ -107,7 +107,7 @@ <!-- no translation found for background_access_chooser_dialog_choices:0 (1351721623256561996) --> <!-- no translation found for background_access_chooser_dialog_choices:1 (9127301153688725448) --> <!-- no translation found for background_access_chooser_dialog_choices:2 (4305536986042401191) --> - <string name="permission_access_always" msgid="1474641821883823446">"Izinkan sepanjang waktu"</string> + <string name="permission_access_always" msgid="1474641821883823446">"Selalu izinkan"</string> <string name="permission_access_only_foreground" msgid="7801170728159326195">"Izinkan saat aplikasi digunakan"</string> <string name="permission_access_never" msgid="4647014230217936900">"Jangan izinkan"</string> <string name="loading" msgid="4789365003890741082">"Memuat…"</string> @@ -186,8 +186,8 @@ <string name="app_permission_button_allow" msgid="5808039516494774647">"Izinkan"</string> <string name="app_permission_button_allow_all_files" msgid="1792232272599018825">"Izinkan pengelolaan semua file"</string> <string name="app_permission_button_allow_media_only" msgid="2834282724426046154">"Izinkan akses hanya ke media"</string> - <string name="app_permission_button_allow_always" msgid="4573292371734011171">"Izinkan sepanjang waktu"</string> - <string name="app_permission_button_allow_foreground" msgid="1991570451498943207">"Izinkan hanya saat aplikasi digunakan"</string> + <string name="app_permission_button_allow_always" msgid="4573292371734011171">"Selalu izinkan"</string> + <string name="app_permission_button_allow_foreground" msgid="1991570451498943207">"Izinkan saat aplikasi digunakan"</string> <string name="app_permission_button_always_allow_all" msgid="4905699259378428855">"Selalu izinkan semua"</string> <string name="app_permission_button_ask" msgid="3342950658789427">"Selalu tanya"</string> <string name="app_permission_button_deny" msgid="6016454069832050300">"Jangan izinkan"</string> diff --git a/PermissionController/res/values-ja/strings.xml b/PermissionController/res/values-ja/strings.xml index 06ee27a95..625668a2c 100644 --- a/PermissionController/res/values-ja/strings.xml +++ b/PermissionController/res/values-ja/strings.xml @@ -55,8 +55,8 @@ <string name="grant_dialog_button_keey_approximate_location" msgid="438025182769080011">"おおよその位置情報を保持"</string> <string name="grant_dialog_button_allow_one_time" msgid="2618088516449706391">"今回のみ"</string> <string name="grant_dialog_button_allow_background" msgid="8236044729434367833">"常に許可"</string> - <string name="grant_dialog_button_allow_all_files" msgid="4955436994954829894">"すべてのファイルの管理を許可"</string> - <string name="grant_dialog_button_allow_media_only" msgid="4832877658422573832">"メディア ファイルへのアクセスを許可"</string> + <string name="grant_dialog_button_allow_all_files" msgid="4955436994954829894">"すべての管理を許可"</string> + <string name="grant_dialog_button_allow_media_only" msgid="4832877658422573832">"アクセスのみ許可"</string> <string name="app_permissions_breadcrumb" msgid="5136969550489411650">"アプリ"</string> <string name="app_permissions" msgid="3369917736607944781">"アプリの権限"</string> <string name="unused_apps" msgid="2058057455175955094">"使用されていないアプリ"</string> @@ -84,7 +84,7 @@ <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_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> + <string name="menu_hide_system" msgid="3855390843744028465">"システムアプリを非表示"</string> <string name="menu_show_7_days_data" msgid="8979611198508523706">"過去 7 日間を表示"</string> <string name="menu_show_24_hours_data" msgid="8228054833323380780">"過去 24 時間を表示"</string> <string name="manage_permission" msgid="2895385393037061964">"権限の管理"</string> @@ -349,7 +349,7 @@ <string name="accessibility_service_dialog_bottom_text_multiple" msgid="7009848932395519852">"これらのアプリでは、画面、アクション、入力の表示、アクションの実行、ディスプレイの操作を行えます。"</string> <string name="role_assistant_label" msgid="4727586018198208128">"デフォルトのデジタル アシスタント アプリ"</string> <string name="role_assistant_short_label" msgid="3369003713187703399">"デジタル アシスタント アプリ"</string> - <string name="role_assistant_description" msgid="6622458130459922952">"アシストアプリは、表示している画面の情報に基づいてアシスタントを提供します。一部のアプリはランチャーと音声入力サービスの両方に対応しており、統合されたアシスタントを提供します。"</string> + <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> diff --git a/PermissionController/res/values-ka/strings.xml b/PermissionController/res/values-ka/strings.xml index 15f434a33..9d20dad4d 100644 --- a/PermissionController/res/values-ka/strings.xml +++ b/PermissionController/res/values-ka/strings.xml @@ -200,7 +200,7 @@ <string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"ყველა ნებართვის ნახვა: <xliff:g id="APP">%1$s</xliff:g>"</string> <string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"ამ ნებართვის მქონე ყველა აპის ნახვა"</string> <string name="assistant_mic_label" msgid="1011432357152323896">"ასისტენტის მიკროფონის გამოყენების ჩვენება"</string> - <string name="unused_apps_category_title" msgid="2988455616845243901">"აპის გამოუყენებელი პარამეტრები"</string> + <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> diff --git a/PermissionController/res/values-ko/strings.xml b/PermissionController/res/values-ko/strings.xml index 15256ebec..4a5caa0e0 100644 --- a/PermissionController/res/values-ko/strings.xml +++ b/PermissionController/res/values-ko/strings.xml @@ -349,7 +349,7 @@ <string name="accessibility_service_dialog_bottom_text_multiple" msgid="7009848932395519852">"이 앱이 내 화면, 작업, 입력 내용을 보고 작업을 실행하며 디스플레이를 제어할 수 있습니다."</string> <string name="role_assistant_label" msgid="4727586018198208128">"기본 디지털 어시스턴트 앱"</string> <string name="role_assistant_short_label" msgid="3369003713187703399">"디지털 어시스턴트 앱"</string> - <string name="role_assistant_description" msgid="6622458130459922952">"지원 앱은 화면에 표시된 정보에 맞게 도움을 줄 수 있습니다. 일부 앱은 통합된 지원을 제공하기 위해 런처와 음성 입력 서비스를 모두 지원합니다."</string> + <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> diff --git a/PermissionController/res/values-ky/strings.xml b/PermissionController/res/values-ky/strings.xml index e8816f7fd..fcfe39f44 100644 --- a/PermissionController/res/values-ky/strings.xml +++ b/PermissionController/res/values-ky/strings.xml @@ -47,7 +47,7 @@ <string name="deny_permission_deny_and_dont_ask_again" msgid="6106035221490102341">"Тыюу салам жана экинчи суралбасын"</string> <string name="permission_revoked_count" msgid="4785082705441547086">"<xliff:g id="COUNT">%1$d</xliff:g> өчүрүлгөн"</string> <string name="permission_revoked_all" msgid="3397649017727222283">"баары өчүрүлгөн"</string> - <string name="permission_revoked_none" msgid="9213345075484381180">"эч бири өчүрүлгөн жок"</string> + <string name="permission_revoked_none" msgid="9213345075484381180">"эч бири өчкөн жок"</string> <string name="grant_dialog_button_allow" msgid="5314677880021102550">"Уруксат берүү"</string> <string name="grant_dialog_button_allow_always" msgid="4485552579273565981">"Бардык учурда уруксат берилет"</string> <string name="grant_dialog_button_allow_foreground" msgid="501896824973636533">"Колдонмо ачылып турганда"</string> diff --git a/PermissionController/res/values-mn/strings.xml b/PermissionController/res/values-mn/strings.xml index 3332fe450..3df06591c 100644 --- a/PermissionController/res/values-mn/strings.xml +++ b/PermissionController/res/values-mn/strings.xml @@ -28,7 +28,7 @@ <string name="uninstall_or_disable" msgid="4496612999740858933">"Устгах эсвэл идэвхгүй болгох"</string> <string name="app_not_found_dlg_title" msgid="6029482906093859756">"Апп олдсонгүй"</string> <string name="grant_dialog_button_deny" msgid="88262611492697192">"Бүү зөвшөөр"</string> - <string name="grant_dialog_button_deny_and_dont_ask_again" msgid="1748925431574312595">"Бүү зөвшөөрч, дахин битгий асуу"</string> + <string name="grant_dialog_button_deny_and_dont_ask_again" msgid="1748925431574312595">"Бүү зөвшөөр, дахин бүү асуу"</string> <string name="grant_dialog_button_no_upgrade" msgid="8344732743633736625">"\"Аппыг ашиглаж байх үед\" хэвээр үлдээх"</string> <string name="grant_dialog_button_no_upgrade_one_time" msgid="5125892775684968694">"“Зөвхөн энэ удаад зөвшөөрөх”-г хэвээр хадгалах"</string> <string name="grant_dialog_button_more_info" msgid="213350268561945193">"Дэлгэрэнгүй мэдээлэл"</string> @@ -44,7 +44,7 @@ <string name="permission_add_background_warning_template" msgid="1812914855915092273">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>-д <xliff:g id="ACTION">%2$s</xliff:g>-г тогтмол зөвшөөрөх үү?"</string> <string name="allow_permission_foreground_only" msgid="116465816039675404">"Зөвхөн апп ашиглах үед"</string> <string name="allow_permission_always" msgid="5194342531206054051">"Тогтмол"</string> - <string name="deny_permission_deny_and_dont_ask_again" msgid="6106035221490102341">"Бүү зөвшөөрч, дахин битгий асуу"</string> + <string name="deny_permission_deny_and_dont_ask_again" msgid="6106035221490102341">"Бүү зөвшөөр, дахин бүү асуу"</string> <string name="permission_revoked_count" msgid="4785082705441547086">"<xliff:g id="COUNT">%1$d</xliff:g>-г цуцалсан"</string> <string name="permission_revoked_all" msgid="3397649017727222283">"бүгдийг цуцалсан"</string> <string name="permission_revoked_none" msgid="9213345075484381180">"алийг нь ч цуцлаагүй"</string> diff --git a/PermissionController/res/values-mr/strings.xml b/PermissionController/res/values-mr/strings.xml index 18eccb6a7..d46792c9f 100644 --- a/PermissionController/res/values-mr/strings.xml +++ b/PermissionController/res/values-mr/strings.xml @@ -552,7 +552,7 @@ <string name="recent_app_usage_1_qs" msgid="261450184773310741">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g>) द्वारे अलीकडे वापरले गेले"</string> <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_positive_button" msgid="9020793594051526399">"कन्फर्म करा"</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> diff --git a/PermissionController/res/values-my/strings.xml b/PermissionController/res/values-my/strings.xml index f83657838..6bedeab18 100644 --- a/PermissionController/res/values-my/strings.xml +++ b/PermissionController/res/values-my/strings.xml @@ -347,8 +347,8 @@ <string name="accessibility_service_dialog_title_multiple" msgid="5527879210683548175">"အများသုံးစွဲနိုင်မှုဆိုင်ရာ အက်ပ် <xliff:g id="NUM_SERVICES">%s</xliff:g> ခုက သင့်စက်ပစ္စည်းကို အပြည့်အဝ အသုံးပြုခွင့်ရှိသည်"</string> <string name="accessibility_service_dialog_bottom_text_single" msgid="1128666197822205958">"<xliff:g id="SERVICE_NAME">%s</xliff:g> သည် သင်၏ မျက်နှာပြင်၊ လုပ်ဆောင်ချက်များ၊ ထည့်သွင်းမှုများကို ကြည့်နိုင်ပြီး လုပ်ဆောင်ချက်များကို ဆောင်ရွက်နိုင်သည့်အပြင် မျက်နှာပြင်သမှုကိုလည်း ထိန်းချုပ်နိုင်သည်။"</string> <string name="accessibility_service_dialog_bottom_text_multiple" msgid="7009848932395519852">"ဤအက်ပ်များက သင်၏ မျက်နှာပြင်၊ လုပ်ဆောင်ချက်များ၊ ထည့်သွင်းမှုများကို ကြည့်နိုင်ပြီး လုပ်ဆောင်ချက်များကို ဆောင်ရွက်နိုင်သည့်အပြင် မျက်နှာပြင်ပြသမှုကိုလည်း ထိန်းချုပ်နိုင်သည်။"</string> - <string name="role_assistant_label" msgid="4727586018198208128">"မူလဒစ်ဂျစ်တယ် Assistant အက်ပ်"</string> - <string name="role_assistant_short_label" msgid="3369003713187703399">"ဒစ်ဂျစ်တယ် Assistant အက်ပ်"</string> + <string name="role_assistant_label" msgid="4727586018198208128">"မူရင်း ဒစ်ဂျစ်တယ်အထောက်အကူ အက်ပ်"</string> + <string name="role_assistant_short_label" msgid="3369003713187703399">"ဒစ်ဂျစ်တယ်အထောက်အကူ အက်ပ်"</string> <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> diff --git a/PermissionController/res/values-ne/strings.xml b/PermissionController/res/values-ne/strings.xml index c418348bd..aad36443d 100644 --- a/PermissionController/res/values-ne/strings.xml +++ b/PermissionController/res/values-ne/strings.xml @@ -427,7 +427,7 @@ <string name="default_apps_manage_domain_urls" msgid="6775566451561036069">"लिंकहरू खोल्दा"</string> <string name="default_apps_for_work" msgid="4970308943596201811">"कार्यका लागि डिफल्ट"</string> <string name="default_app_none" msgid="9084592086808194457">"कुनै पनि होइन"</string> - <string name="default_app_system_default" msgid="6218386768175513760">"(डिफल्ट सिस्टम एप)"</string> + <string name="default_app_system_default" msgid="6218386768175513760">"(सिस्टम डिफल्ट)"</string> <string name="default_app_no_apps" msgid="115720991680586885">"कुनै पनि एप छैन"</string> <string name="car_default_app_selected" msgid="5416420830430644174">"चयन गरिएको"</string> <string name="car_default_app_selected_with_info" msgid="1932204186080593500">"चयन गरिएको - <xliff:g id="ADDITIONAL_INFO">%1$s</xliff:g>"</string> @@ -536,7 +536,7 @@ <string name="privacy_controls_qs" msgid="5780144882040591169">"तपाईंका गोपनीयतासम्बन्धी सेटिङ"</string> <string name="security_settings_button_label_qs" msgid="8280343822465962330">"थप सेटिङ"</string> <string name="camera_toggle_label_qs" msgid="3880261453066157285">"क्यामेरा प्रयोग गर्ने अनुमति"</string> - <string name="microphone_toggle_label_qs" msgid="8132912469813396552">"माइक प्रयोग गर्ने अनुमति"</string> + <string name="microphone_toggle_label_qs" msgid="8132912469813396552">"माइक एक्सेस"</string> <string name="permissions_removed_qs" msgid="8957319130625294572">"अनुमति हटाइएको छ"</string> <string name="camera_usage_qs" msgid="4394233566086665994">"हालसालै गरिएको क्यामेराको प्रयोगसम्बन्धी जानकारी हेर्नुहोस्"</string> <string name="microphone_usage_qs" msgid="8527666682168170417">"हालसालै गरिएको माइकको प्रयोगसम्बन्धी जानकारी हेर्नुहोस्"</string> diff --git a/PermissionController/res/values-pa-v33/strings.xml b/PermissionController/res/values-pa-v33/strings.xml index 03e18ae50..0aa143302 100644 --- a/PermissionController/res/values-pa-v33/strings.xml +++ b/PermissionController/res/values-pa-v33/strings.xml @@ -28,9 +28,9 @@ <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"ਸੂਚੀ ਆਈਟਮ। <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_more_issues_card_title" msgid="7425844746197493312">"ਹੋਰ ਅਲਰਟ"</string> - <string name="safety_center_dismissed_issues_card_title" msgid="2340129842725145733">"ਖਾਰਜ ਕੀਤੀਆਂ ਗਈਆਂ ਸੁਚੇਤਨਾਵਾਂ"</string> - <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ ਇੱਕ ਹੋਰ ਸੁਚੇਤਨਾ ਦੇਖੋ}one{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਸੁਚੇਤਨਾ ਦੇਖੋ}other{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਸੁਚੇਤਨਾਵਾਂ ਦੇਖੋ}}"</string> - <string name="safety_center_issue_card_prefix_content_description" msgid="1447445289637043544">"ਸੁਚੇਤਨਾ। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>"</string> + <string name="safety_center_dismissed_issues_card_title" msgid="2340129842725145733">"ਖਾਰਜ ਕੀਤੇ ਅਲਰਟ"</string> + <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ ਇੱਕ ਹੋਰ ਅਲਰਟ ਦੇਖੋ}one{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਅਲਰਟ ਦੇਖੋ}other{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਅਲਰਟ ਦੇਖੋ}}"</string> + <string name="safety_center_issue_card_prefix_content_description" msgid="1447445289637043544">"ਅਲਰਟ। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>"</string> <string name="safety_center_resolved_issue_fallback" msgid="8548932070610766651">"ਕਾਰਵਾਈ ਪੂਰੀ ਹੋਈ"</string> <string name="safety_center_qs_status_summary" msgid="5193925895830451177">"ਉਨ੍ਹਾਂ ਸੈਟਿੰਗਾਂ ਦੀ ਜਾਂਚ ਕਰੋ ਜੋ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਵਿੱਚ ਸੁਰੱਖਿਆ ਸ਼ਾਮਲ ਕਰ ਸਕਦੀਆਂ ਹਨ"</string> <string name="safety_center_qs_page_landing" msgid="1717368301679228128">"ਸੁਰੱਖਿਆ ਅਤੇ ਪਰਦੇਦਾਰੀ ਸੰਬੰਧੀ ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ"</string> diff --git a/PermissionController/res/values-pa/strings.xml b/PermissionController/res/values-pa/strings.xml index f4e26680c..035bd2298 100644 --- a/PermissionController/res/values-pa/strings.xml +++ b/PermissionController/res/values-pa/strings.xml @@ -369,7 +369,7 @@ <string name="role_sms_search_keywords" msgid="8022048144395047352">"ਲਿਖਤ ਸੁਨੇਹਾ, ਲਿਖਤ ਭੇਜਣਾ, ਸੁਨੇਹੇ, ਸੁਨੇਹਾ ਭੇਜਣਾ"</string> <string name="role_emergency_label" msgid="7028825857206842366">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੰਕਟਕਾਲੀਨ ਐਪ"</string> <string name="role_emergency_short_label" msgid="2388431453335350348">"ਸੰਕਟਕਾਲੀਨ ਐਪ"</string> - <string name="role_emergency_description" msgid="5051840234887686630">"ਐਪਾਂ ਜੋ ਤੁਹਾਨੂੰ ਤੁਹਾਡੀ ਡਾਕਟਰੀ ਜਾਣਕਾਰੀ ਰਿਕਾਰਡ ਕਰਨ ਅਤੇ ਇਸਨੂੰ ਸੰਕਟਕਾਲੀਨ ਮਦਦਗਾਰਾਂ ਤੱਕ ਪਹੁੰਚਯੋਗ ਬਣਾਉਣ ਦਿੰਦੀਆਂ ਹਨ; ਗੰਭੀਰ ਮੌਸਮੀ ਘਟਨਾਵਾਂ ਅਤੇ ਆਫ਼ਤਾਂ ਬਾਰੇ ਸੁਚੇਤਨਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਦਿੰਦੀਆਂ ਹਨ; ਤੁਹਾਨੂੰ ਮਦਦ ਦੀ ਲੋੜ ਪੈਣ \'ਤੇ ਹੋਰਾਂ ਨੂੰ ਸੂਚਿਤ ਕਰਨ ਦਿੰਦੀਆਂ ਹਨ"</string> + <string name="role_emergency_description" msgid="5051840234887686630">"ਐਪਾਂ ਜੋ ਤੁਹਾਨੂੰ ਤੁਹਾਡੀ ਡਾਕਟਰੀ ਜਾਣਕਾਰੀ ਰਿਕਾਰਡ ਕਰਨ ਅਤੇ ਇਸਨੂੰ ਐਮਰਜੈਂਸੀ ਮਦਦਗਾਰਾਂ ਤੱਕ ਪਹੁੰਚਯੋਗ ਬਣਾਉਣ ਦਿੰਦੀਆਂ ਹਨ; ਬਹੁਤ ਜ਼ਿਆਦਾ ਖਰਾਬ ਮੌਸਮੀ ਘਟਨਾਵਾਂ ਅਤੇ ਆਫ਼ਤਾਂ ਬਾਰੇ ਅਲਰਟ ਪ੍ਰਾਪਤ ਕਰਨ ਦਿੰਦੀਆਂ ਹਨ; ਤੁਹਾਨੂੰ ਮਦਦ ਦੀ ਲੋੜ ਪੈਣ \'ਤੇ ਹੋਰਾਂ ਨੂੰ ਸੂਚਿਤ ਕਰਨ ਦਿੰਦੀਆਂ ਹਨ"</string> <string name="role_emergency_request_title" msgid="8469579020654348567">"ਕੀ <xliff:g id="APP_NAME">%1$s</xliff:g> ਨੂੰ ਤੁਹਾਡੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੰਕਟਕਾਲੀਨ ਐਪ ਵਜੋਂ ਸੈੱਟ ਕਰਨਾ ਹੈ?"</string> <string name="role_emergency_request_description" msgid="131645948770262850">"ਕਿਸੇ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ"</string> <string name="role_emergency_search_keywords" msgid="1920007722599213358">"ice"</string> @@ -523,7 +523,7 @@ <string name="safety_center_dashboard_page_title" msgid="2810774008694315854">"ਸੁਰੱਖਿਆ ਅਤੇ ਪਰਦੇਦਾਰੀ"</string> <string name="safety_center_rescan_button" msgid="4517514567809409596">"ਡੀਵਾਈਸ ਨੂੰ ਸਕੈਨ ਕਰੋ"</string> <string name="safety_center_issue_card_dismiss_button" msgid="5113965506144222402">"ਖਾਰਜ ਕਰੋ"</string> - <string name="safety_center_issue_card_dismiss_confirmation_title" msgid="2734809473425036382">"ਕੀ ਇਸ ਸੁਚੇਤਨਾ ਨੂੰ ਖਾਰਜ ਕਰਨਾ ਹੈ?"</string> + <string name="safety_center_issue_card_dismiss_confirmation_title" msgid="2734809473425036382">"ਕੀ ਇਸ ਅਲਰਟ ਨੂੰ ਖਾਰਜ ਕਰਨਾ ਹੈ?"</string> <string name="safety_center_issue_card_dismiss_confirmation_message" msgid="3775418736671093563">"ਹੋਰ ਸੁਰੱਖਿਆ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਕਿਸੇ ਵੀ ਸਮੇਂ ਆਪਣੀਆਂ ਸੁਰੱਖਿਆ ਅਤੇ ਪਰਦੇਦਾਰੀ ਸੈਟਿੰਗਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ"</string> <string name="safety_center_issue_card_confirm_dismiss_button" msgid="5884137843083634556">"ਖਾਰਜ ਕਰੋ"</string> <string name="safety_center_issue_card_cancel_dismiss_button" msgid="2874578798877712346">"ਰੱਦ ਕਰੋ"</string> diff --git a/PermissionController/res/values-sr/strings.xml b/PermissionController/res/values-sr/strings.xml index 0fd94a069..40a58b981 100644 --- a/PermissionController/res/values-sr/strings.xml +++ b/PermissionController/res/values-sr/strings.xml @@ -93,7 +93,7 @@ <string name="location_warning" msgid="2381649060929040962">"<xliff:g id="APP_NAME">%1$s</xliff:g> пружа услуге локације за овај уређај. Приступ локацији можете да измените у подешавањима локације."</string> <string name="system_warning" msgid="1173400963234358816">"Ако одбијете ову дозволу, основне функције уређаја можда неће више исправно радити."</string> <string name="deny_read_media_visual_warning" msgid="3982586279917232827">"Ова апликација је дизајнирана за старију верзију Android-а. Ако овој апликацији одбијете приступ за слике и видео снимке, повлачи се и приступ музици и другим аудио снимцима."</string> - <string name="deny_read_media_aural_warning" msgid="8928699919508646732">"Ова апликација је дизајнирана за старију верзију Android-а. Ако овој апликацији одбијете приступ за музику и друге аудио снимке, повлачи се и приступ сликама и видео снимцима."</string> + <string name="deny_read_media_aural_warning" msgid="8928699919508646732">"Ова апликација је дизајнирана за старију верзију Android-а. Ако овој апликацији одбијете приступ за музику и друге аудио снимке, повлачи се и приступ сликама и видеима."</string> <string name="cdm_profile_revoke_warning" msgid="4443893270719106700">"Ако одбијете ову дозволу, неке функције уређаја којима управља ова апликација можда неће више исправно радити."</string> <string name="permission_summary_enforced_by_policy" msgid="4443598170942950519">"Примењује се у складу са смерницама"</string> <string name="permission_summary_disabled_by_policy_background_only" msgid="221995005556362660">"Приступ у позадини је онемогућен смерницама"</string> @@ -240,7 +240,7 @@ <string name="permission_description_summary_sms" msgid="725999468547768517">"Апликације са овом дозволом могу да шаљу и прегледају SMS-ове"</string> <string name="permission_description_summary_storage" msgid="6575759089065303346">"Апликације са овом дозволом могу да приступају сликама, медијском садржају и фајловима на уређају"</string> <string name="permission_description_summary_read_media_aural" msgid="3354728149930482199">"Апликације са овом дозволом могу да приступају музици и другим аудио фајловима на овом уређају"</string> - <string name="permission_description_summary_read_media_visual" msgid="4991801977881732641">"Апликације са овом дозволом могу да приступају сликама и видео снимцима на овом уређају"</string> + <string name="permission_description_summary_read_media_visual" msgid="4991801977881732641">"Апликације са овом дозволом могу да приступају сликама и видеима на овом уређају"</string> <string name="app_permission_most_recent_summary" msgid="4292074449384040590">"Последњи приступ: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> <string name="app_permission_most_recent_denied_summary" msgid="7659497197737708112">"Тренутно одбијено/последњи приступ: <xliff:g id="TIME_DATE">%1$s</xliff:g>"</string> <string name="app_permission_never_accessed_summary" msgid="401346181461975090">"Без приступа"</string> @@ -475,7 +475,7 @@ <string name="permgrouprequest_storage_pre_q" msgid="168130651144569428">"Приступ сликама, видеу, музици, звуку и другом на уређају за <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>?"</string> <string name="permgrouprequest_read_media_aural" msgid="2593365397347577812">"Дозвољавате ли приступ музици и звуку на овом уређају за <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>?"</string> <string name="permgrouprequest_read_media_visual" msgid="5548780620779729975">"Дозвољавате ли приступ сликама и видеу на овом уређају за <b><xliff:g id="APP_NAME">%1$s</xliff:g></b>?"</string> - <string name="permgrouprequest_more_photos" msgid="128933814654231321">"Дозвољавате ли да <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> приступа и другим сликама и видео снимцима на овом уређају?"</string> + <string name="permgrouprequest_more_photos" msgid="128933814654231321">"Дозвољавате ли да <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> приступа и другим сликама и видеима на овом уређају?"</string> <string name="permgrouprequest_microphone" msgid="2825208549114811299">"Желите да дозволите да <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> снима звук?"</string> <string name="permgrouprequestdetail_microphone" msgid="8510456971528228861">"Апликација ће моћи да снима звук само док користите апликацију"</string> <string name="permgroupbackgroundrequest_microphone" msgid="8874462606796368183">"Желите да дозволите да <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> снима звук?"</string> @@ -558,18 +558,18 @@ <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> <string name="media_confirm_dialog_title_a_to_p_visual_deny" msgid="5767849609024384226">"Ни приступ другим фајловима неће бити дозвољен"</string> - <string name="media_confirm_dialog_title_q_to_s_aural_allow" msgid="3191904399336990537">"Биће дозвољен приступ и сликама и видео снимцима"</string> - <string name="media_confirm_dialog_title_q_to_s_aural_deny" msgid="3128147568953297969">"Ни приступ сликама и видео снимцима неће бити дозвољен"</string> + <string name="media_confirm_dialog_title_q_to_s_aural_allow" msgid="3191904399336990537">"Биће дозвољен приступ и сликама и видеима"</string> + <string name="media_confirm_dialog_title_q_to_s_aural_deny" msgid="3128147568953297969">"Ни приступ сликама и видеима неће бити дозвољен"</string> <string name="media_confirm_dialog_title_q_to_s_visual_allow" msgid="6310682466493330434">"Биће дозвољен приступ и музици и аудио фајловима"</string> <string name="media_confirm_dialog_title_q_to_s_visual_deny" msgid="1123845663785900471">"Ни приступ музици и аудио фајловима неће бити дозвољен"</string> - <string name="media_confirm_dialog_message_a_to_p_aural_allow" msgid="7865167246140107623">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација може да приступа музици и аудио фајловима, биће јој дозвољено и да приступа сликама, видео снимцима и другим фајловима."</string> - <string name="media_confirm_dialog_message_a_to_p_aural_deny" msgid="287502523664804786">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација не може да приступа музици и аудио фајловима, неће јој бити дозвољено ни да приступа сликама, видео снимцима и другим фајловима."</string> - <string name="media_confirm_dialog_message_a_to_p_visual_allow" msgid="4952410892939590487">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација може да приступа сликама и видео снимцима, биће јој дозвољено и да приступа музици, аудио и другим фајловима."</string> - <string name="media_confirm_dialog_message_a_to_p_visual_deny" msgid="6609500525590757681">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација не може да приступа сликама и видео снимцима, неће јој бити дозвољено ни да приступа музици, аудио и другим фајловима."</string> - <string name="media_confirm_dialog_message_q_to_s_aural_allow" msgid="1702402580147536160">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација може да приступа музици и аудио фајловима, биће јој дозвољено и да приступа сликама и видео снимцима."</string> - <string name="media_confirm_dialog_message_q_to_s_aural_deny" msgid="6832087393653561911">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација не може да приступа музици и аудио фајловима, неће јој бити дозвољено ни да приступа сликама и видео снимцима."</string> - <string name="media_confirm_dialog_message_q_to_s_visual_allow" msgid="3504335060843147760">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација може да приступа сликама и видео снимцима, биће јој дозвољено и да приступа музици и аудио фајловима."</string> - <string name="media_confirm_dialog_message_q_to_s_visual_deny" msgid="2145973462806481992">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација не може да приступа музици и аудио фајловима, неће јој бити дозвољено ни да приступа сликама и видео снимцима."</string> + <string name="media_confirm_dialog_message_a_to_p_aural_allow" msgid="7865167246140107623">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација може да приступа музици и аудио фајловима, биће јој дозвољено и да приступа сликама, видеима и другим фајловима."</string> + <string name="media_confirm_dialog_message_a_to_p_aural_deny" msgid="287502523664804786">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација не може да приступа музици и аудио фајловима, неће јој бити дозвољено ни да приступа сликама, видеима и другим фајловима."</string> + <string name="media_confirm_dialog_message_a_to_p_visual_allow" msgid="4952410892939590487">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација може да приступа сликама и видеима, биће јој дозвољено и да приступа музици, аудио и другим фајловима."</string> + <string name="media_confirm_dialog_message_a_to_p_visual_deny" msgid="6609500525590757681">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација не може да приступа сликама и видеима, неће јој бити дозвољено ни да приступа музици, аудио и другим фајловима."</string> + <string name="media_confirm_dialog_message_q_to_s_aural_allow" msgid="1702402580147536160">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација може да приступа музици и аудио фајловима, биће јој дозвољено и да приступа сликама и видеима."</string> + <string name="media_confirm_dialog_message_q_to_s_aural_deny" msgid="6832087393653561911">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација не може да приступа музици и аудио фајловима, неће јој бити дозвољено ни да приступа сликама и видеима."</string> + <string name="media_confirm_dialog_message_q_to_s_visual_allow" msgid="3504335060843147760">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација може да приступа сликама и видеима, биће јој дозвољено и да приступа музици и аудио фајловима."</string> + <string name="media_confirm_dialog_message_q_to_s_visual_deny" msgid="2145973462806481992">"Ова апликација не подржава најновију верзију Android-а. Ако ова апликација не може да приступа музици и аудио фајловима, неће јој бити дозвољено ни да приступа сликама и видеима."</string> <string name="safety_center_background_location_access_notification_title" msgid="8933610618810588237">"Прегледајте апликацију са приступом локацији у позадини"</string> <string name="safety_center_background_location_access_reminder_notification_content" msgid="4066560182507301022">"<xliff:g id="APP_NAME">%s</xliff:g> увек може да приступа вашој локацији, чак и кад је апликација затворена"</string> <string name="safety_center_background_location_access_reminder_title" msgid="5477847038103863843">"Прегледајте апликацију са приступом локацији у позадини"</string> diff --git a/PermissionController/res/values-sw-v34/strings.xml b/PermissionController/res/values-sw-v34/strings.xml index be6f2f72b..52a1c7ceb 100644 --- a/PermissionController/res/values-sw-v34/strings.xml +++ b/PermissionController/res/values-sw-v34/strings.xml @@ -22,6 +22,6 @@ <string name="health_connect_title" msgid="2132233890867430855">"Health Connect"</string> <string name="health_connect_summary" msgid="815473513776882296">"Dhibiti uwezo wa programu wa kufikia data ya afya"</string> <string name="location_settings" msgid="8863940440881290182">"Uwezo wa kufikia mahali"</string> - <string name="mic_toggle_description" msgid="1504101620086616040">"Kwenye programu na huduma. Mipangilio hii ikizimwa, data ya maikrofoni bado inaweza ikashirikiwa unapopiga nambari ya dharura"</string> + <string name="mic_toggle_description" msgid="1504101620086616040">"Kwenye programu na huduma. Mipangilio hii ikizimwa, data ya maikrofoni bado inaweza ikashirikiwa unapopiga namba ya dharura"</string> <string name="location_settings_subtitle" msgid="6846532794702613851">"Kwenye programu na huduma"</string> </resources> diff --git a/PermissionController/res/values-sw/strings.xml b/PermissionController/res/values-sw/strings.xml index 83a4ebe03..79b3164d2 100644 --- a/PermissionController/res/values-sw/strings.xml +++ b/PermissionController/res/values-sw/strings.xml @@ -65,7 +65,7 @@ <string name="review_permission_decisions" msgid="309559429150613632">"Uamuzi wa ruhusa wa hivi majuzi"</string> <string name="review_permission_decisions_view_all" msgid="90391040431566130">"Angalia uamuzi wa ruhusa zote za hivi majuzi"</string> <string name="review_permission_decisions_empty" msgid="8120775336417279806">"Hakuna uamuzi wa ruhusa wa hivi majuzi"</string> - <string name="auto_permission_manager_summary" msgid="9157438376234301354">"Dhibiti ufikiaji wa data kwenye kalenda, rekodi za nambari za simu na zaidi"</string> + <string name="auto_permission_manager_summary" msgid="9157438376234301354">"Dhibiti ufikiaji wa data kwenye kalenda, rekodi za namba za simu na zaidi"</string> <string name="granted_permission_decision" msgid="7824827491551861365">"Umeipa <xliff:g id="APP_NAME">%1$s</xliff:g> ruhusa ya kufikia <xliff:g id="PERMISSION_NAME">%2$s</xliff:g>"</string> <string name="denied_permission_decision" msgid="5308961501779563781">"Umeinyima <xliff:g id="APP_NAME">%1$s</xliff:g> ruhusa ya kufikia <xliff:g id="PERMISSION_NAME">%2$s</xliff:g>"</string> <string name="days_ago" msgid="6650359081551335629">"{count,plural, =0{Leo}=1{Siku moja iliyopita}other{Siku # zilizopita}}"</string> @@ -363,7 +363,7 @@ <string name="role_dialer_search_keywords" msgid="3324448983559188087">"kipiga simu"</string> <string name="role_sms_label" msgid="8456999857547686640">"Programu chaguomsingi ya SMS"</string> <string name="role_sms_short_label" msgid="4371444488034692243">"Programu ya SMS"</string> - <string name="role_sms_description" msgid="3424020199148153513">"Programu zinazokuruhusu kutumia nambari yako ya simu kutuma na kupokea ujumbe mfupi, picha, video na zaidi"</string> + <string name="role_sms_description" msgid="3424020199148153513">"Programu zinazokuruhusu kutumia namba yako ya simu kutuma na kupokea ujumbe mfupi, picha, video na zaidi"</string> <string name="role_sms_request_title" msgid="7953552109601185602">"Ungependa kuweka <xliff:g id="APP_NAME">%1$s</xliff:g> iwe programu yako chaguomsingi ya SMS?"</string> <string name="role_sms_request_description" msgid="2691004766132144886">"Programu hii itapewa uwezo wa kufikia Kamera, Anwani, Faili na maudhui, Maikrofoni, Simu na SMS kwenye kifaa chako"</string> <string name="role_sms_search_keywords" msgid="8022048144395047352">"SMS, kutuma SMS, ujumbe, kutuma ujumbe"</string> @@ -381,12 +381,12 @@ <string name="role_home_search_keywords" msgid="3830755001192666285">"kifungua programu"</string> <string name="role_call_redirection_label" msgid="5785304207206147590">"Programu chaguomsingi ya kuelekeza simu kwingine"</string> <string name="role_call_redirection_short_label" msgid="7568143419571217757">"Programu ya kuelekeza simu"</string> - <string name="role_call_redirection_description" msgid="6091669882014664420">"Programu zinazokuruhusu usambaze simu unazopiga kwenye nambari nyingine ya simu"</string> + <string name="role_call_redirection_description" msgid="6091669882014664420">"Programu zinazokuruhusu usambaze simu unazopiga kwenye namba nyingine ya simu"</string> <string name="role_call_redirection_request_title" msgid="2816244455003562925">"Je, ungependa kuweka <xliff:g id="APP_NAME">%1$s</xliff:g> iwe programu yako chaguomsingi ya kuelekeza simu kwingine?"</string> <string name="role_call_redirection_request_description" msgid="3118895714178527164">"Hakuna ruhusa zinazohitajika"</string> <string name="role_call_screening_label" msgid="883935222060878724">"Kutambua taka na anayepiga: programu msingi"</string> <string name="role_call_screening_short_label" msgid="2048465565063130834">"Kutambua anayepiga na taka"</string> - <string name="role_call_screening_description" msgid="2349431420497468981">"Programu zinazokuruhusu utambue simu zinazoingia na kuzuia taka, simu zinazopigwa kiotomatiki au nambari zisizohitajika"</string> + <string name="role_call_screening_description" msgid="2349431420497468981">"Programu zinazokuruhusu utambue simu zinazoingia na kuzuia taka, simu zinazopigwa kiotomatiki au namba zisizohitajika"</string> <string name="role_call_screening_request_title" msgid="7358309224566977290">"Je, ungependa kuweka <xliff:g id="APP_NAME">%1$s</xliff:g> iwe programu chaguomsingi ya kukagua kitambulisho cha anayepiga na taka?"</string> <string name="role_call_screening_request_description" msgid="7338511921032446006">"Hakuna ruhusa zinazohitajika"</string> <string name="role_automotive_navigation_label" msgid="2701890757955474751">"Programu chaguomsingi ya maelekezo"</string> @@ -489,7 +489,7 @@ <string name="permgroupbackgroundrequestdetail_camera" msgid="4458783509089859078">"Huenda programu hii ikataka kupiga picha na kurekodi video kila wakati, hata wakati huitumii."<annotation id="link">"Ruhusu katika mipangilio."</annotation></string> <string name="permgroupupgraderequest_camera" msgid="640758449200241582">"Ungependa kubadilisha ruhusa za <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> za kufikia kamera?"</string> <string name="permgroupupgraderequestdetail_camera" msgid="6642747548010962597">"Programu hii inataka kupiga picha na kurekodi video kila wakati, hata wakati huitumii."<annotation id="link">"Ruhusu katika mipangilio."</annotation></string> - <string name="permgrouprequest_calllog" msgid="2065327180175371397">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie rekodi zako za nambari za simu?"</string> + <string name="permgrouprequest_calllog" msgid="2065327180175371397">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie rekodi zako za namba za simu?"</string> <string name="permgrouprequest_phone" msgid="1829234136997316752">"Ungependa kuruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> kupiga na kudhibiti simu?"</string> <string name="permgrouprequest_sensors" msgid="4397358316850652235">"Ungependa kuiruhusu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ifikie data ya vitambuzi kuhusu viashiria muhimu vya mwili wako?"</string> <string name="permgroupupgraderequestdetail_sensors" msgid="6651914048792092835">"Programu hii inataka kufikia data ya vitambuzi ya viashiria muhimu vya mwili wako kila wakati, hata wakati huitumii. Ili ufanye mabadiliko haya, "<annotation id="link">"nenda kwenye mipangilio."</annotation></string> @@ -518,7 +518,7 @@ <string name="blocked_microphone_title" msgid="1631517143648232585">"Maikrofoni ya kifaa imezuiwa"</string> <string name="blocked_location_title" msgid="2005608279812892383">"Utambuzi wa mahali kifaa kilipo umezimwa"</string> <string name="blocked_sensor_summary" msgid="4443707628305027375">"Kwa ajili ya programu na huduma"</string> - <string name="blocked_mic_summary" msgid="8960466941528458347">"Huenda bado data ya maikrofoni ikashirikiwa unapopigia nambari ya dharura."</string> + <string name="blocked_mic_summary" msgid="8960466941528458347">"Huenda bado data ya maikrofoni ikashirikiwa unapopigia namba ya dharura."</string> <string name="blocked_sensor_button_label" msgid="6742092634984289658">"Badilisha"</string> <string name="safety_center_dashboard_page_title" msgid="2810774008694315854">"Usalama na faragha"</string> <string name="safety_center_rescan_button" msgid="4517514567809409596">"Kagua kifaa"</string> @@ -580,7 +580,7 @@ <string name="camera_toggle_title" msgid="1251201397431837666">"Ufikiaji wa kamera"</string> <string name="mic_toggle_title" msgid="2649991093496110162">"Ufikiaji wa maikrofoni"</string> <string name="perm_toggle_description" msgid="7801326363741451379">"Kwenye programu na huduma"</string> - <string name="mic_toggle_description" msgid="9163104307990677157">"Kwenye programu na huduma. Mipangilio hii ikizimwa, huenda data ya maikrofoni ikaendelea kushirikiwa unapopiga nambari ya dharura."</string> + <string name="mic_toggle_description" msgid="9163104307990677157">"Kwenye programu na huduma. Mipangilio hii ikizimwa, huenda data ya maikrofoni ikaendelea kushirikiwa unapopiga namba ya dharura."</string> <string name="location_settings_subtitle" msgid="2328360561197430695">"Angalia huduma na programu zenye uwezo wa kufikia mipangilio ya mahali"</string> <string name="show_clip_access_notification_title" msgid="5168467637351109096">"Onyesha ufikiaji wa ubao wa kunakili"</string> <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Onyesha ujumbe programu zinapofikia maandishi, picha au maudhui mengine uliyonakili"</string> diff --git a/PermissionController/res/values-te/strings.xml b/PermissionController/res/values-te/strings.xml index dd105ae85..221e5cd04 100644 --- a/PermissionController/res/values-te/strings.xml +++ b/PermissionController/res/values-te/strings.xml @@ -266,7 +266,7 @@ <string name="unused_apps_notification_title" msgid="4314832015894238019">"{count,plural, =1{# ఉపయోగించని యాప్}other{# ఉపయోగించని యాప్లు}}"</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_card_content" msgid="1088557243627427820">"కొంతకాలంగా మీరు ఉపయోగించని యాప్లకు సంబంధించిన అనుమతులు, తాత్కాలిక ఫైళ్లు తొలగించబడ్డాయి, అలాగే నోటిఫికేషన్లు నిలిపివేయబడ్డాయి."</string> <string name="unused_apps_safety_center_action_title" msgid="8865914432518993194">"యాప్లను రివ్యూ చేయండి"</string> <string name="post_drive_permission_decision_reminder_title" msgid="1290697371418139976">"ఇటీవలి అనుమతులను చెక్ చేయండి"</string> <string name="post_drive_permission_decision_reminder_summary_1_app_1_permission" msgid="670521503734140711">"డ్రైవింగ్లో ఉన్నప్పుడు, మీరు <xliff:g id="APP">%1$s</xliff:g> యాప్నకు <xliff:g id="PERMISSION">%2$s</xliff:g>కు యాక్సెస్ను ఇచ్చారు"</string> diff --git a/PermissionController/res/values-uk-v34/strings.xml b/PermissionController/res/values-uk-v34/strings.xml index 5d14c8ebe..6b74a3508 100644 --- a/PermissionController/res/values-uk-v34/strings.xml +++ b/PermissionController/res/values-uk-v34/strings.xml @@ -17,7 +17,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="security_privacy_brand_name" msgid="7303621734258440812">"Безпека й конфіденційність"</string> + <string name="security_privacy_brand_name" msgid="7303621734258440812">"Захист і конфіденційність"</string> <string name="privacy_subpage_controls_header" msgid="4152396976713749322">"Параметри"</string> <string name="health_connect_title" msgid="2132233890867430855">"Health Connect"</string> <string name="health_connect_summary" msgid="815473513776882296">"Керуйте доступом додатків до даних про здоров’я"</string> diff --git a/PermissionController/res/values-ur/strings.xml b/PermissionController/res/values-ur/strings.xml index 4cb926518..62ecf10a9 100644 --- a/PermissionController/res/values-ur/strings.xml +++ b/PermissionController/res/values-ur/strings.xml @@ -476,9 +476,9 @@ <string name="permgrouprequest_read_media_aural" msgid="2593365397347577812">"اس آلے پر <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو موسیقی اور آڈیو تک رسائی کی اجازت دیں؟"</string> <string name="permgrouprequest_read_media_visual" msgid="5548780620779729975">"اس آلے پر <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو تصاویر اور ویڈیوز تک رسائی کی اجازت دیں؟"</string> <string name="permgrouprequest_more_photos" msgid="128933814654231321">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو اس آلے پر مزید تصاویر اور ویڈیوز تک رسائی کی اجازت دیں؟"</string> - <string name="permgrouprequest_microphone" msgid="2825208549114811299">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو آڈیو ریکارڈ کرنے کی اجازت دیں؟"</string> + <string name="permgrouprequest_microphone" msgid="2825208549114811299">"آڈیو ریکارڈ کرنے کے لیے <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو اجازت دیں؟"</string> <string name="permgrouprequestdetail_microphone" msgid="8510456971528228861">"جب آپ ایپ استعمال کر رہے ہوں تب ایپ صرف آڈیو ریکارڈ کر پائے گی"</string> - <string name="permgroupbackgroundrequest_microphone" msgid="8874462606796368183">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو آڈیو ریکارڈ کرنے کی اجازت دیں؟"</string> + <string name="permgroupbackgroundrequest_microphone" msgid="8874462606796368183">"آڈیو ریکارڈ کرنے کے لیے <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> کو اجازت دیں؟"</string> <string name="permgroupbackgroundrequestdetail_microphone" msgid="553702902263681838">"ممکن ہے یہ ایپ ہر وقت آڈیو ریکارڈ کرنا چاہے، اگرچہ آپ ایپ استعمال نہ کر رہے ہوں۔ "<annotation id="link">"ترتیبات میں اجازت دیں۔"</annotation></string> <string name="permgroupupgraderequest_microphone" msgid="1362781696161233341">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>? کے ليے مائیکروفون تک رسائی تبدیل کریں؟"</string> <string name="permgroupupgraderequestdetail_microphone" msgid="2870497719571464239">"یہ ایپ ہر وقت آڈیو ریکارڈ کرنا چاہتی ہے، اگرچہ آپ ایپ استعمال نہ کر رہے ہوں۔ "<annotation id="link">"ترتیبات میں اجازت دیں۔"</annotation></string> diff --git a/PermissionController/res/values-vi/strings.xml b/PermissionController/res/values-vi/strings.xml index 3fa50ca58..2f62d1637 100644 --- a/PermissionController/res/values-vi/strings.xml +++ b/PermissionController/res/values-vi/strings.xml @@ -535,7 +535,7 @@ <string name="safety_privacy_qs_tile_subtitle" msgid="3621544532041936749">"Kiểm tra trạng thái"</string> <string name="privacy_controls_qs" msgid="5780144882040591169">"Các chế độ kiểm soát quyền riêng tư"</string> <string name="security_settings_button_label_qs" msgid="8280343822465962330">"Tùy chọn cài đặt khác"</string> - <string name="camera_toggle_label_qs" msgid="3880261453066157285">"Quyền truy cập máy ảnh"</string> + <string name="camera_toggle_label_qs" msgid="3880261453066157285">"Quyền truy cập camera"</string> <string name="microphone_toggle_label_qs" msgid="8132912469813396552">"Quyền truy cập micrô"</string> <string name="permissions_removed_qs" msgid="8957319130625294572">"Đã thu hồi quyền sử dụng"</string> <string name="camera_usage_qs" msgid="4394233566086665994">"Xem mức sử dụng của máy ảnh gần đây"</string> @@ -577,7 +577,7 @@ <string name="safety_center_background_location_access_revoked" msgid="6972274943343442213">"Đã thay đổi quyền truy cập"</string> <string name="safety_center_view_recent_location_access" msgid="3524391299490678243">"Xem thông tin về hoạt động sử dụng thông tin vị trí gần đây"</string> <string name="privacy_controls_title" msgid="7605929972256835199">"Chế độ kiểm soát quyền riêng tư"</string> - <string name="camera_toggle_title" msgid="1251201397431837666">"Quyền truy cập máy ảnh"</string> + <string name="camera_toggle_title" msgid="1251201397431837666">"Quyền truy cập camera"</string> <string name="mic_toggle_title" msgid="2649991093496110162">"Quyền truy cập micrô"</string> <string name="perm_toggle_description" msgid="7801326363741451379">"Áp dụng cho các ứng dụng và dịch vụ"</string> <string name="mic_toggle_description" msgid="9163104307990677157">"Áp dụng cho các ứng dụng và dịch vụ. Nếu bạn tắt chế độ cài đặt, dữ liệu thu được qua micrô vẫn có thể được chia sẻ khi bạn gọi đến số khẩn cấp."</string> diff --git a/PermissionController/res/values-zh-rCN-v34/strings.xml b/PermissionController/res/values-zh-rCN-v34/strings.xml index 0ba05798b..7bebdf9bc 100644 --- a/PermissionController/res/values-zh-rCN-v34/strings.xml +++ b/PermissionController/res/values-zh-rCN-v34/strings.xml @@ -19,7 +19,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="security_privacy_brand_name" msgid="7303621734258440812">"安全和隐私"</string> <string name="privacy_subpage_controls_header" msgid="4152396976713749322">"控件"</string> - <string name="health_connect_title" msgid="2132233890867430855">"Health Connect"</string> + <string name="health_connect_title" msgid="2132233890867430855">"健康数据共享"</string> <string name="health_connect_summary" msgid="815473513776882296">"管理应用对健康数据的访问权限"</string> <string name="location_settings" msgid="8863940440881290182">"位置信息访问权限"</string> <string name="mic_toggle_description" msgid="1504101620086616040">"针对应用和服务。关闭此设置后,系统仍可能在您拨打紧急电话号码时分享麦克风数据"</string> diff --git a/PermissionController/res/values-zh-rHK/strings.xml b/PermissionController/res/values-zh-rHK/strings.xml index 3d92d8caf..435ead8ae 100644 --- a/PermissionController/res/values-zh-rHK/strings.xml +++ b/PermissionController/res/values-zh-rHK/strings.xml @@ -200,7 +200,7 @@ <string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"查看「<xliff:g id="APP">%1$s</xliff:g>」的所有權限"</string> <string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"查看擁有此權限的所有應用程式"</string> <string name="assistant_mic_label" msgid="1011432357152323896">"顯示「Google 助理」麥克風使用情況"</string> - <string name="unused_apps_category_title" msgid="2988455616845243901">"未使用的應用程式設定"</string> + <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> diff --git a/PermissionController/res/values-zh-rTW-v34/strings.xml b/PermissionController/res/values-zh-rTW-v34/strings.xml index e473ca41b..533a95e78 100644 --- a/PermissionController/res/values-zh-rTW-v34/strings.xml +++ b/PermissionController/res/values-zh-rTW-v34/strings.xml @@ -19,7 +19,7 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="security_privacy_brand_name" msgid="7303621734258440812">"安全性與隱私權"</string> <string name="privacy_subpage_controls_header" msgid="4152396976713749322">"控制選項"</string> - <string name="health_connect_title" msgid="2132233890867430855">"Health Connect"</string> + <string name="health_connect_title" msgid="2132233890867430855">"健康資料同步"</string> <string name="health_connect_summary" msgid="815473513776882296">"管理應用程式的健康資料存取權"</string> <string name="location_settings" msgid="8863940440881290182">"位置資訊存取權"</string> <string name="mic_toggle_description" msgid="1504101620086616040">"適用於應用程式和服務。即使關閉這項設定,系統仍可能會在你撥打緊急電話號碼時,分享麥克風資料"</string> diff --git a/PermissionController/res/values-zu/strings.xml b/PermissionController/res/values-zu/strings.xml index d1abf785d..8d51046c9 100644 --- a/PermissionController/res/values-zu/strings.xml +++ b/PermissionController/res/values-zu/strings.xml @@ -196,7 +196,7 @@ <string name="app_permission_location_accuracy" msgid="7166912915040018669">"Sebenzisa indawo eqondile"</string> <string name="app_permission_location_accuracy_subtitle" msgid="2654077606404987210">"Uma indawo ngqo ivaliwe, ama-app angakwazi ukufinyelela indawo yakho elinganiselwayo"</string> <string name="app_permission_title" msgid="2090897901051370711">"<xliff:g id="PERM">%1$s</xliff:g> imvume"</string> - <string name="app_permission_header" msgid="2951363137032603806">"<xliff:g id="PERM">%1$s</xliff:g> ukufinyelela kwale app"</string> + <string name="app_permission_header" msgid="2951363137032603806">"ukufinyelela kwale app ku<xliff:g id="PERM">%1$s</xliff:g>"</string> <string name="app_permission_footer_app_permissions_link" msgid="4926890342636587393">"Bona zonke izimvume ze-<xliff:g id="APP">%1$s</xliff:g>"</string> <string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Bona zonke izinhlelo zokusebenza ngale mvume"</string> <string name="assistant_mic_label" msgid="1011432357152323896">"Bonisa ukusetshenziswa kwe-microphone kamsizi"</string> diff --git a/PermissionController/role-controller/java/com/android/role/controller/compat/AppOpsManagerCompat.java b/PermissionController/role-controller/java/com/android/role/controller/compat/AppOpsManagerCompat.java new file mode 100644 index 000000000..8e5a768df --- /dev/null +++ b/PermissionController/role-controller/java/com/android/role/controller/compat/AppOpsManagerCompat.java @@ -0,0 +1,48 @@ +/* + * 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.role.controller.compat; + +import android.app.AppOpsManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.android.modules.utils.build.SdkLevel; + +import java.util.Objects; + +/** Helper for accessing features in {@link AppOpsManager}. */ +public class AppOpsManagerCompat { + + private AppOpsManagerCompat() {} + + /** + * @see AppOpsManager#permissionToOp(). + */ + @Nullable + public static String permissionToOp(@NonNull String permission) { + if (!SdkLevel.isAtLeastV()) { + // On Android U and below, PACKAGE_USAGE_STATUS is missing from the mapping + // in the framework. + if (Objects.equals(permission, android.Manifest.permission.PACKAGE_USAGE_STATS)) { + return AppOpsManager.OPSTR_GET_USAGE_STATS; + } + } + return AppOpsManager.permissionToOp(permission); + } +}
\ No newline at end of file diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java b/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java index f3f9b321e..29939a1a5 100644 --- a/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java +++ b/PermissionController/role-controller/java/com/android/role/controller/model/AppOpPermissions.java @@ -24,6 +24,7 @@ import android.os.Build; import androidx.annotation.NonNull; +import com.android.role.controller.compat.AppOpsManagerCompat; import com.android.role.controller.util.ArrayUtils; import com.android.role.controller.util.PackageUtils; @@ -55,7 +56,7 @@ public class AppOpPermissions { if (!ArrayUtils.contains(packageInfo.requestedPermissions, appOpPermission)) { return false; } - String appOp = AppOpsManager.permissionToOp(appOpPermission); + String appOp = AppOpsManagerCompat.permissionToOp(appOpPermission); if (!overrideNonDefaultMode) { Integer currentMode = Permissions.getAppOpMode(packageName, appOp, context); if (currentMode != null && currentMode != Permissions.getDefaultAppOpMode(appOp)) { @@ -96,6 +97,7 @@ public class AppOpPermissions { case AppOpsManager.OPSTR_ACCESS_NOTIFICATIONS: case AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW: case AppOpsManager.OPSTR_WRITE_SETTINGS: + case AppOpsManager.OPSTR_GET_USAGE_STATS: case AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES: case AppOpsManager.OPSTR_START_FOREGROUND: // This isn't an API but we are deprecating it soon anyway. diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/AutoGrantPermissionsNotifier.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/AutoGrantPermissionsNotifier.java index e9ed63b9a..f753a883d 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/AutoGrantPermissionsNotifier.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/AutoGrantPermissionsNotifier.java @@ -51,6 +51,7 @@ import android.net.Uri; import android.os.Bundle; import android.os.UserHandle; import android.provider.Settings; +import android.service.notification.StatusBarNotification; import android.util.ArraySet; import androidx.annotation.NonNull; @@ -95,24 +96,23 @@ public class AutoGrantPermissionsNotifier { */ private final ArrayList<String> mGrantedPermissions = new ArrayList<>(); + private final NotificationManager mNotificationManager; + public AutoGrantPermissionsNotifier(@NonNull Context context, @NonNull PackageInfo packageInfo) { mPackageInfo = packageInfo; + mNotificationManager = getSystemServiceSafe(context, NotificationManager.class); UserHandle callingUser = getUserHandleForUid(mPackageInfo.applicationInfo.uid); mContext = context.createContextAsUser(callingUser, 0); } /** - * Create the channel to which the notification about auto-granted permission should be posted - * to. + * Create the channel to which the notification about auto-granted permission should be posted. * * @param user The user for which the permission was auto-granted. * @param shouldAlertUser */ private void createAutoGrantNotifierChannel(boolean shouldNotifySilently) { - NotificationManager notificationManager = getSystemServiceSafe(mContext, - NotificationManager.class); - NotificationChannel autoGrantedPermissionsChannel = new NotificationChannel( getNotificationChannelId(shouldNotifySilently), mContext.getString(R.string.auto_granted_permissions), @@ -121,7 +121,7 @@ public class AutoGrantPermissionsNotifier { autoGrantedPermissionsChannel.enableVibration(false); autoGrantedPermissionsChannel.setSound(Uri.EMPTY, null); } - notificationManager.createNotificationChannel(autoGrantedPermissionsChannel); + mNotificationManager.createNotificationChannel(autoGrantedPermissionsChannel); } /** @@ -160,12 +160,14 @@ public class AutoGrantPermissionsNotifier { String messageText = Utils.getEnterpriseString(mContext, LOCATION_AUTO_GRANTED_MESSAGE, R.string.auto_granted_permission_notification_body, pkgLabel); Notification.Builder notificationBuilder = (new Notification.Builder(mContext, - getNotificationChannelId(shouldNotifySilently))).setContentTitle(title) + getNotificationChannelId(shouldNotifySilently))) + .setContentTitle(title) .setContentText(messageText) .setStyle(new Notification.BigTextStyle().bigText(messageText).setBigContentTitle( title)) .setGroup(ADMIN_AUTO_GRANTED_PERMISSIONS_NOTIFICATION_GROUP_ID) // NOTE: Different icons would be needed for different permissions. + .setGroupAlertBehavior(Notification.GROUP_ALERT_SUMMARY) .setSmallIcon(R.drawable.ic_pin_drop) .setLargeIcon(pkgIconBmp) .setColor(mContext.getColor(android.R.color.system_notification_accent_color)) @@ -180,29 +182,33 @@ public class AutoGrantPermissionsNotifier { notificationBuilder.addExtras(extras); } - String summaryTitle = mContext.getString(R.string.auto_granted_permissions); - - Notification.Builder summaryNotificationBuilder = new Notification.Builder(mContext, - getNotificationChannelId(shouldNotifySilently)) - .setContentTitle(summaryTitle) - .setSmallIcon(R.drawable.ic_pin_drop) - .setGroup(ADMIN_AUTO_GRANTED_PERMISSIONS_NOTIFICATION_GROUP_ID) - .setGroupSummary(true); - - NotificationManager notificationManager = getSystemServiceSafe(mContext, - NotificationManager.class); // Cancel previous notifications for the same package to avoid redundant notifications. // This code currently only deals with location-related notifications, which would all lead // to the same Settings activity for managing location permissions. // If ever extended to cover multiple types of notifications, then only multiple // notifications of the same group should be canceled. - notificationManager.cancel( + mNotificationManager.cancel( mPackageInfo.packageName, PERMISSION_GRANTED_BY_ADMIN_NOTIFICATION_ID); - notificationManager.notify(mPackageInfo.packageName, + + mNotificationManager.notify(mPackageInfo.packageName, PERMISSION_GRANTED_BY_ADMIN_NOTIFICATION_ID, notificationBuilder.build()); - notificationManager.notify(ADMIN_AUTO_GRANTED_PERMISSIONS_NOTIFICATION_SUMMARY_ID, - summaryNotificationBuilder.build()); + + // only show the summary notification if it is not already showing. Otherwise, this + // breaks the alerting behaviour. + if (!isNotificationActive(ADMIN_AUTO_GRANTED_PERMISSIONS_NOTIFICATION_SUMMARY_ID)) { + String summaryTitle = mContext.getString(R.string.auto_granted_permissions); + + Notification.Builder summaryNotificationBuilder = new Notification.Builder(mContext, + getNotificationChannelId(shouldNotifySilently)) + .setContentTitle(summaryTitle) + .setSmallIcon(R.drawable.ic_pin_drop) + .setGroup(ADMIN_AUTO_GRANTED_PERMISSIONS_NOTIFICATION_GROUP_ID) + .setGroupSummary(true); + + mNotificationManager.notify(ADMIN_AUTO_GRANTED_PERMISSIONS_NOTIFICATION_SUMMARY_ID, + summaryNotificationBuilder.build()); + } } /** @@ -248,5 +254,14 @@ public class AutoGrantPermissionsNotifier { return ADMIN_AUTO_GRANTED_PERMISSIONS_ALERTING_NOTIFICATION_CHANNEL_ID; } } + + private boolean isNotificationActive(int notificationId) { + for (StatusBarNotification notification : mNotificationManager.getActiveNotifications()) { + if (notification.getId() == notificationId) { + return true; + } + } + return false; + } } diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppChildFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppChildFragment.java index 06e5ed264..a8b16c521 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppChildFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppChildFragment.java @@ -196,20 +196,25 @@ public class DefaultAppChildFragment<PF extends PreferenceFragmentCompat @NonNull CharSequence title, boolean checked, @Nullable ApplicationInfo applicationInfo, @NonNull ArrayMap<String, Preference> oldPreferences, @NonNull PreferenceScreen preferenceScreen, @NonNull Context context) { - TwoStatePreference preference = (TwoStatePreference) oldPreferences.get(key); - if (preference == null) { - preference = requirePreferenceFragment().createApplicationPreference(); + RoleApplicationPreference roleApplicationPreference = + (RoleApplicationPreference) oldPreferences.get(key); + TwoStatePreference preference; + if (roleApplicationPreference == null) { + roleApplicationPreference = requirePreferenceFragment().createApplicationPreference(); + preference = roleApplicationPreference.asTwoStatePreference(); preference.setKey(key); preference.setIcon(icon); preference.setTitle(title); preference.setPersistent(false); preference.setOnPreferenceChangeListener((preference2, newValue) -> false); preference.setOnPreferenceClickListener(this); + } else { + preference = roleApplicationPreference.asTwoStatePreference(); } preference.setChecked(checked); if (applicationInfo != null) { - RoleUiBehaviorUtils.prepareApplicationPreferenceAsUser(mRole, preference, + RoleUiBehaviorUtils.prepareApplicationPreferenceAsUser(mRole, roleApplicationPreference, applicationInfo, mUser, context); } @@ -281,7 +286,7 @@ public class DefaultAppChildFragment<PF extends PreferenceFragmentCompat * @return a new preference for an application */ @NonNull - TwoStatePreference createApplicationPreference(); + RoleApplicationPreference createApplicationPreference(); /** * Create a new preference for the footer. diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java index 3c8af1136..f9a0193bd 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/DefaultAppListChildFragment.java @@ -167,15 +167,19 @@ public class DefaultAppListChildFragment<PF extends PreferenceFragmentCompat RoleItem roleItem = roleItems.get(i); Role role = roleItem.getRole(); - Preference preference = oldPreferences.get(role.getName()); - if (preference == null) { - preference = (Preference) preferenceFragment.createPreference(); + RolePreference rolePreference = (RolePreference) oldPreferences.get(role.getName()); + Preference preference; + if (rolePreference == null) { + rolePreference = preferenceFragment.createPreference(); + preference = rolePreference.asPreference(); preference.setKey(role.getName()); preference.setIconSpaceReserved(true); preference.setTitle(role.getShortLabelResource()); preference.setPersistent(false); preference.setOnPreferenceClickListener(listener); preference.getExtras().putParcelable(Intent.EXTRA_USER, user); + } else { + preference = rolePreference.asPreference(); } List<ApplicationInfo> holderApplicationInfos = roleItem.getHolderApplicationInfos(); @@ -187,8 +191,7 @@ public class DefaultAppListChildFragment<PF extends PreferenceFragmentCompat preference.setIcon(Utils.getBadgedIcon(context, holderApplicationInfo)); preference.setSummary(Utils.getAppLabel(holderApplicationInfo, context)); } - RoleUiBehaviorUtils.preparePreferenceAsUser(role, (TwoTargetPreference) preference, - user, context); + RoleUiBehaviorUtils.preparePreferenceAsUser(role, rolePreference, user, context); preferenceGroup.addPreference(preference); } } @@ -283,7 +286,7 @@ public class DefaultAppListChildFragment<PF extends PreferenceFragmentCompat * @return a new preference for a default app */ @NonNull - TwoTargetPreference createPreference(); + RolePreference createPreference(); /** * Callback when changes have been made to the {@link PreferenceScreen} of the parent diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleActivity.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleActivity.java index 3a4312c00..827d42643 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RequestRoleActivity.java @@ -22,6 +22,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.os.Bundle; import android.os.Process; +import android.os.UserManager; import android.provider.Telephony; import android.telecom.TelecomManager; import android.text.TextUtils; @@ -154,6 +155,16 @@ public class RequestRoleActivity extends FragmentActivity { return; } + UserManager userManager = getSystemService(UserManager.class); + if (userManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_DEFAULT_APPS)) { + Log.w(LOG_TAG, "Cannot request role due to user restriction" + + " DISALLOW_CONFIG_DEFAULT_APPS, role: " + mRoleName); + reportRequestResult(PermissionControllerStatsLog + .ROLE_REQUEST_RESULT_REPORTED__RESULT__IGNORED_USER_RESTRICTION); + finish(); + return; + } + if (!role.isPackageQualified(mPackageName, this)) { Log.w(LOG_TAG, "Application doesn't qualify for role, role: " + mRoleName + ", package: " + mPackageName); diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RoleApplicationPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleApplicationPreference.java new file mode 100644 index 000000000..1b5b27971 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RoleApplicationPreference.java @@ -0,0 +1,32 @@ +/* + * 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.role.ui; + +import androidx.annotation.NonNull; +import androidx.preference.TwoStatePreference; + +/** + * Preference for application being a candidate or holding a role. + */ +public interface RoleApplicationPreference extends UserRestrictionAwarePreference { + + /** + * Get instance of {@code this} as {@link TwoStatePreference}. + */ + @NonNull + TwoStatePreference asTwoStatePreference(); +} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/RolePreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/RolePreference.java new file mode 100644 index 000000000..442963ce6 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/RolePreference.java @@ -0,0 +1,29 @@ +/* + * 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.role.ui; + +import androidx.preference.Preference; + +/** + * Preference used by the default apps list UI. + */ +public interface RolePreference extends TwoTargetPreference, UserRestrictionAwarePreference { + /** + * Return this preference as {@link Preference}. + */ + Preference asPreference(); +} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/TwoTargetPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/TwoTargetPreference.java index 23044b833..3a8cd55d3 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/TwoTargetPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/TwoTargetPreference.java @@ -18,6 +18,7 @@ package com.android.permissioncontroller.role.ui; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.preference.Preference; /** * {@link androidx.preference.Preference} with the widget layout as a separate target. @@ -38,6 +39,11 @@ public interface TwoTargetPreference { void setOnSecondTargetClickListener(@Nullable OnSecondTargetClickListener listener); /** + * Return this preference as {@link Preference}. + */ + Preference asPreference(); + + /** * Listener for second target click. */ interface OnSecondTargetClickListener { @@ -49,7 +55,4 @@ public interface TwoTargetPreference { */ void onSecondTargetClick(@NonNull TwoTargetPreference preference); } - - /** @see androidx.preference.Preference#setEnabled(boolean) */ - void setEnabled(boolean enabled); } diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/UserRestrictionAwarePreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/UserRestrictionAwarePreference.java new file mode 100644 index 000000000..e6bc9bab6 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/UserRestrictionAwarePreference.java @@ -0,0 +1,30 @@ +/* + * 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.role.ui; + +import androidx.annotation.Nullable; + +/** + * Preference that is aware of user restrictions that can block them. + */ +public interface UserRestrictionAwarePreference { + + /** + * Specifies user restriction that blocks this preference. + */ + void setUserRestriction(@Nullable String userRestriction); +} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/UserRestrictionAwarePreferenceMixin.java b/PermissionController/src/com/android/permissioncontroller/role/ui/UserRestrictionAwarePreferenceMixin.java new file mode 100644 index 000000000..033507991 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/UserRestrictionAwarePreferenceMixin.java @@ -0,0 +1,69 @@ +/* + * 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.role.ui; + +import android.app.admin.DevicePolicyManager; +import android.content.Intent; +import android.provider.Settings; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.preference.Preference; +import androidx.preference.PreferenceViewHolder; + +/** + * Mixin for implementing {@link UserRestrictionAwarePreference}. + */ +public class UserRestrictionAwarePreferenceMixin { + + @NonNull + private final Preference mPreference; + @Nullable + private String mUserRestriction = null; + + public UserRestrictionAwarePreferenceMixin(@NonNull Preference preference) { + mPreference = preference; + } + + /** + * Implementation for {@link UserRestrictionAwarePreference#setUserRestriction}. + */ + public void setUserRestriction(@Nullable String userRestriction) { + mUserRestriction = userRestriction; + mPreference.setEnabled(mUserRestriction == null); + } + + /** + * Call after {@link Preference#onBindViewHolder} to apply blocking effects. + */ + public void onAfterBindViewHolder(@NonNull PreferenceViewHolder holder) { + if (mUserRestriction != null) { + // We set the item view to enabled to make the preference row clickable. + // Normal disabled preferences have the whole view hierarchy disabled, so by making only + // the top-level itemView enabled, we don't change the fact that the whole preference + // still "looks" disabled (see Preference.onBindViewHolder). + // Preference.onBindViewHolder sets the onClickListener as well on each preference, so + // we don't need to unset the listener here (we wouldn't know the correct one anyway). + // This approach is used already by com.android.settingslib.RestrictedPreferenceHelper. + holder.itemView.setEnabled(true); + Intent intent = new Intent(Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS) + .putExtra(DevicePolicyManager.EXTRA_RESTRICTION, mUserRestriction); + holder.itemView.setOnClickListener( + (view) -> holder.itemView.getContext().startActivity(intent)); + } + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoDefaultAppFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoDefaultAppFragment.java index dbd4c7c03..dc6c03d09 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoDefaultAppFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoDefaultAppFragment.java @@ -23,11 +23,11 @@ import android.os.UserHandle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.Preference; -import androidx.preference.TwoStatePreference; import com.android.permissioncontroller.R; import com.android.permissioncontroller.auto.AutoSettingsFrameFragment; import com.android.permissioncontroller.role.ui.DefaultAppChildFragment; +import com.android.permissioncontroller.role.ui.RoleApplicationPreference; import com.android.role.controller.model.Role; /** Screen to pick a default app for a particular {@link Role}. */ @@ -90,8 +90,8 @@ public class AutoDefaultAppFragment extends AutoSettingsFrameFragment implements @NonNull @Override - public TwoStatePreference createApplicationPreference() { - return new AutoDefaultAppPreference(requireContext()); + public RoleApplicationPreference createApplicationPreference() { + return new AutoRadioPreference(requireContext()); } @NonNull diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoDefaultAppListFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoDefaultAppListFragment.java index b74caa7ed..081e3153b 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoDefaultAppListFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoDefaultAppListFragment.java @@ -24,7 +24,7 @@ import androidx.annotation.Nullable; import com.android.permissioncontroller.R; import com.android.permissioncontroller.auto.AutoSettingsFrameFragment; import com.android.permissioncontroller.role.ui.DefaultAppListChildFragment; -import com.android.permissioncontroller.role.ui.TwoTargetPreference; +import com.android.permissioncontroller.role.ui.RolePreference; /** Shows various roles for which a default app can be picked. */ public class AutoDefaultAppListFragment extends AutoSettingsFrameFragment implements @@ -57,8 +57,8 @@ public class AutoDefaultAppListFragment extends AutoSettingsFrameFragment implem @NonNull @Override - public TwoTargetPreference createPreference() { - return new AutoSettingsPreference(requireContext()); + public RolePreference createPreference() { + return new AutoRolePreference(requireContext()); } @Override diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoDefaultAppPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRadioPreference.java index c91e40561..97a3dad26 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoDefaultAppPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRadioPreference.java @@ -19,16 +19,23 @@ package com.android.permissioncontroller.role.ui.auto; import android.content.Context; import android.widget.RadioButton; +import androidx.annotation.Nullable; import androidx.core.content.res.TypedArrayUtils; import androidx.preference.PreferenceViewHolder; import androidx.preference.TwoStatePreference; import com.android.permissioncontroller.R; +import com.android.permissioncontroller.role.ui.RoleApplicationPreference; +import com.android.permissioncontroller.role.ui.UserRestrictionAwarePreferenceMixin; /** Preference used to represent apps that can be picked as a default app. */ -public class AutoDefaultAppPreference extends TwoStatePreference { +public class AutoRadioPreference extends TwoStatePreference implements + RoleApplicationPreference { - public AutoDefaultAppPreference(Context context) { + private final UserRestrictionAwarePreferenceMixin mUserRestrictionAwarePreferenceMixin = + new UserRestrictionAwarePreferenceMixin(this); + + public AutoRadioPreference(Context context) { super(context, null, TypedArrayUtils.getAttr(context, R.attr.preferenceStyle, android.R.attr.preferenceStyle)); init(); @@ -45,6 +52,18 @@ public class AutoDefaultAppPreference extends TwoStatePreference { RadioButton radioButton = (RadioButton) holder.findViewById(R.id.radio_button); radioButton.setChecked(isChecked()); + + mUserRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder); + } + + @Override + public void setUserRestriction(@Nullable String userRestriction) { + mUserRestrictionAwarePreferenceMixin.setUserRestriction(userRestriction); + } + + @Override + public AutoRadioPreference asTwoStatePreference() { + return this; } } diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSettingsPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRolePreference.java index ba5b17be9..d2f1b6cde 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSettingsPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoRolePreference.java @@ -22,34 +22,57 @@ import android.util.AttributeSet; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.Preference; +import androidx.preference.PreferenceViewHolder; +import com.android.permissioncontroller.role.ui.RolePreference; import com.android.permissioncontroller.role.ui.TwoTargetPreference; +import com.android.permissioncontroller.role.ui.UserRestrictionAwarePreferenceMixin; /** * Preference for use in auto lists. Extends {@link TwoTargetPreference} in order to make sure of * shared logic between phone and auto settings UI. */ -public class AutoSettingsPreference extends Preference implements TwoTargetPreference { +public class AutoRolePreference extends Preference implements RolePreference { - public AutoSettingsPreference(@NonNull Context context, + private UserRestrictionAwarePreferenceMixin mUserRestrictionAwarePreferenceMixin = + new UserRestrictionAwarePreferenceMixin(this); + + public AutoRolePreference(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } - public AutoSettingsPreference(@NonNull Context context, @Nullable AttributeSet attrs, + public AutoRolePreference(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } - public AutoSettingsPreference(@NonNull Context context, @Nullable AttributeSet attrs) { + public AutoRolePreference(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); } - public AutoSettingsPreference(@NonNull Context context) { + public AutoRolePreference(@NonNull Context context) { super(context); } @Override public void setOnSecondTargetClickListener(@Nullable OnSecondTargetClickListener listener) { } + + @Override + public void setUserRestriction(@Nullable String userRestriction) { + mUserRestrictionAwarePreferenceMixin.setUserRestriction(userRestriction); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + + mUserRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder); + } + + @Override + public AutoRolePreference asPreference() { + return this; + } } diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSpecialAppAccessFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSpecialAppAccessFragment.java index c561420da..c37735427 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSpecialAppAccessFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSpecialAppAccessFragment.java @@ -22,11 +22,10 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.Preference; -import androidx.preference.SwitchPreference; -import androidx.preference.TwoStatePreference; import com.android.permissioncontroller.R; import com.android.permissioncontroller.auto.AutoSettingsFrameFragment; +import com.android.permissioncontroller.role.ui.RoleApplicationPreference; import com.android.permissioncontroller.role.ui.specialappaccess.SpecialAppAccessChildFragment; /** Automotive fragment for displaying special app access for a role. */ @@ -81,8 +80,8 @@ public class AutoSpecialAppAccessFragment extends AutoSettingsFrameFragment impl @NonNull @Override - public TwoStatePreference createApplicationPreference() { - return new SwitchPreference(requireContext()); + public RoleApplicationPreference createApplicationPreference() { + return new AutoSwitchPreference(requireContext()); } @NonNull diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSpecialAppAccessListFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSpecialAppAccessListFragment.java index e2dce4a94..59e6766cc 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSpecialAppAccessListFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSpecialAppAccessListFragment.java @@ -24,7 +24,7 @@ import androidx.annotation.Nullable; import com.android.permissioncontroller.R; import com.android.permissioncontroller.auto.AutoSettingsFrameFragment; -import com.android.permissioncontroller.role.ui.TwoTargetPreference; +import com.android.permissioncontroller.role.ui.RolePreference; import com.android.permissioncontroller.role.ui.specialappaccess.SpecialAppAccessListChildFragment; /** Automotive fragment for the list of role related special app accesses. */ @@ -59,8 +59,8 @@ public class AutoSpecialAppAccessListFragment extends AutoSettingsFrameFragment @NonNull @Override - public TwoTargetPreference createPreference(@NonNull Context context) { - return new AutoSettingsPreference(context); + public RolePreference createPreference(@NonNull Context context) { + return new AutoRolePreference(context); } @Override diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSwitchPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSwitchPreference.java new file mode 100644 index 000000000..900e58551 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/auto/AutoSwitchPreference.java @@ -0,0 +1,76 @@ +/* + * 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.role.ui.auto; + +import android.content.Context; +import android.util.AttributeSet; + +import androidx.annotation.AttrRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StyleRes; +import androidx.preference.PreferenceViewHolder; +import androidx.preference.SwitchPreference; + +import com.android.permissioncontroller.role.ui.RoleApplicationPreference; +import com.android.permissioncontroller.role.ui.UserRestrictionAwarePreferenceMixin; + +/** + * Role application preference represented as a switch. + */ +public class AutoSwitchPreference extends SwitchPreference + implements RoleApplicationPreference { + + private UserRestrictionAwarePreferenceMixin mUserRestrictionAwarePreferenceMixin = + new UserRestrictionAwarePreferenceMixin(this); + + public AutoSwitchPreference(@NonNull Context context, @Nullable AttributeSet attrs, + @AttrRes int defStyleAttr, @StyleRes int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + public AutoSwitchPreference(@NonNull Context context, @Nullable AttributeSet attrs, + @StyleRes int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public AutoSwitchPreference(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public AutoSwitchPreference(@NonNull Context context) { + super(context); + } + + @Override + public void setUserRestriction(@Nullable String userRestriction) { + mUserRestrictionAwarePreferenceMixin.setUserRestriction(userRestriction); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + + mUserRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder); + } + + @NonNull + @Override + public AutoSwitchPreference asTwoStatePreference() { + return this; + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/DialerRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/DialerRoleUiBehavior.java index 8a5c8bdc7..e6b8dabe1 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/DialerRoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/DialerRoleUiBehavior.java @@ -40,9 +40,6 @@ public class DialerRoleUiBehavior implements RoleUiBehavior { public void prepareApplicationPreferenceAsUser(@NonNull Role role, @NonNull Preference preference, @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, @NonNull Context context) { - RoleUiBehavior.super.prepareApplicationPreferenceAsUser( - role, preference, applicationInfo, user, context); - TelecomManager telecomManager = context.getSystemService(TelecomManager.class); String systemPackageName = telecomManager.getSystemDialerPackage(); if (Objects.equals(applicationInfo.packageName, systemPackageName)) { diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java index 36bbd1cb1..d0e7c0eef 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/HomeRoleUiBehavior.java @@ -56,8 +56,6 @@ public class HomeRoleUiBehavior implements RoleUiBehavior { @Override public void preparePreferenceAsUser(@NonNull Role role, @NonNull TwoTargetPreference preference, @NonNull UserHandle user, @NonNull Context context) { - RoleUiBehavior.super.preparePreferenceAsUser(role, preference, user, context); - TwoTargetPreference.OnSecondTargetClickListener listener = null; RoleManager roleManager = context.getSystemService(RoleManager.class); String packageName = CollectionUtils.firstOrNull(roleManager.getRoleHoldersAsUser( @@ -95,9 +93,6 @@ public class HomeRoleUiBehavior implements RoleUiBehavior { public void prepareApplicationPreferenceAsUser(@NonNull Role role, @NonNull Preference preference, @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, @NonNull Context context) { - RoleUiBehavior.super.prepareApplicationPreferenceAsUser( - role, preference, applicationInfo, user, context); - boolean missingWorkProfileSupport = isMissingWorkProfileSupport(applicationInfo, context); if (preference.isEnabled()) { preference.setEnabled(!missingWorkProfileSupport); diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java index 13343e926..6e3b47fba 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/behavior/RoleUiBehavior.java @@ -20,13 +20,11 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.os.UserHandle; -import android.os.UserManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.Preference; -import com.android.modules.utils.build.SdkLevel; import com.android.permissioncontroller.role.ui.TwoTargetPreference; import com.android.role.controller.model.Role; @@ -75,13 +73,7 @@ public interface RoleUiBehavior { default void preparePreferenceAsUser(@NonNull Role role, @NonNull TwoTargetPreference preference, @NonNull UserHandle user, - @NonNull Context context) { - if (SdkLevel.isAtLeastU() && role.isExclusive()) { - final UserManager userManager = context.getSystemService(UserManager.class); - preference.setEnabled(!userManager.hasUserRestrictionForUser( - UserManager.DISALLOW_CONFIG_DEFAULT_APPS, user)); - } - } + @NonNull Context context) {} /** * Check whether a qualifying application should be visible to user. @@ -108,13 +100,7 @@ public interface RoleUiBehavior { */ default void prepareApplicationPreferenceAsUser(@NonNull Role role, @NonNull Preference preference, @NonNull ApplicationInfo applicationInfo, - @NonNull UserHandle user, @NonNull Context context) { - if (SdkLevel.isAtLeastU() && role.isExclusive()) { - final UserManager userManager = context.getSystemService(UserManager.class); - preference.setEnabled(!userManager.hasUserRestrictionForUser( - UserManager.DISALLOW_CONFIG_DEFAULT_APPS, user)); - } - } + @NonNull UserHandle user, @NonNull Context context) {} /** * Get the confirmation message for adding an application as a holder of this role. diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldDefaultAppListPreferenceFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldDefaultAppListPreferenceFragment.java index b76b8c561..da920ea7f 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldDefaultAppListPreferenceFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldDefaultAppListPreferenceFragment.java @@ -23,7 +23,7 @@ import androidx.annotation.Nullable; import androidx.preference.PreferenceFragmentCompat; import com.android.permissioncontroller.role.ui.DefaultAppListChildFragment; -import com.android.permissioncontroller.role.ui.TwoTargetPreference; +import com.android.permissioncontroller.role.ui.RolePreference; /** * Handheld preference fragment for the list of default apps. @@ -62,8 +62,8 @@ public class HandheldDefaultAppListPreferenceFragment extends PreferenceFragment @NonNull @Override - public TwoTargetPreference createPreference() { - return new SettingsButtonPreference(requireContext()); + public RolePreference createPreference() { + return new HandheldRolePreference(requireContext()); } @Override diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldDefaultAppPreferenceFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldDefaultAppPreferenceFragment.java index 94c07ef67..b8156590a 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldDefaultAppPreferenceFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldDefaultAppPreferenceFragment.java @@ -24,11 +24,10 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; -import androidx.preference.TwoStatePreference; import com.android.permissioncontroller.role.ui.DefaultAppChildFragment; +import com.android.permissioncontroller.role.ui.RoleApplicationPreference; import com.android.settingslib.widget.FooterPreference; -import com.android.settingslib.widget.SelectorWithWidgetPreference; /** * Handheld preference fragment for a default app. @@ -96,8 +95,8 @@ public class HandheldDefaultAppPreferenceFragment extends PreferenceFragmentComp @NonNull @Override - public TwoStatePreference createApplicationPreference() { - return new SelectorWithWidgetPreference(requireContext()); + public RoleApplicationPreference createApplicationPreference() { + return new HandheldRadioPreference(requireContext()); } @NonNull diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRadioPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRadioPreference.java new file mode 100644 index 000000000..d9ef047d6 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRadioPreference.java @@ -0,0 +1,75 @@ +/* + * 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.role.ui.handheld; + +import android.content.Context; +import android.util.AttributeSet; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.preference.PreferenceViewHolder; + +import com.android.permissioncontroller.role.ui.RoleApplicationPreference; +import com.android.permissioncontroller.role.ui.UserRestrictionAwarePreferenceMixin; +import com.android.settingslib.widget.SelectorWithWidgetPreference; + +/** + * Preference used to represent apps that can be picked as a default app. + */ +public class HandheldRadioPreference extends SelectorWithWidgetPreference implements + RoleApplicationPreference { + + private final UserRestrictionAwarePreferenceMixin mUserRestrictionAwarePreferenceMixin = + new UserRestrictionAwarePreferenceMixin(this); + + public HandheldRadioPreference(@NonNull Context context, + @Nullable AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public HandheldRadioPreference(@NonNull Context context, + @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public HandheldRadioPreference(@NonNull Context context, boolean isCheckbox) { + super(context, isCheckbox); + } + + public HandheldRadioPreference(@NonNull Context context) { + super(context); + } + + @Override + public void setUserRestriction( + @Nullable String userRestriction) { + mUserRestrictionAwarePreferenceMixin.setUserRestriction(userRestriction); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + + mUserRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder); + } + + @NonNull + @Override + public HandheldRadioPreference asTwoStatePreference() { + return this; + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/SettingsButtonPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRolePreference.java index f54c9d95d..978fe7d5a 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/SettingsButtonPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/handheld/HandheldRolePreference.java @@ -28,7 +28,9 @@ import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; import com.android.permissioncontroller.R; -import com.android.permissioncontroller.role.ui.TwoTargetPreference; +import com.android.permissioncontroller.role.ui.RolePreference; +import com.android.permissioncontroller.role.ui.UserRestrictionAwarePreferenceMixin; +import com.android.settingslib.widget.TwoTargetPreference; /** * {@link Preference} with a settings button. @@ -36,33 +38,35 @@ import com.android.permissioncontroller.role.ui.TwoTargetPreference; * @see com.android.settings.widget.GearPreference */ // Made public for com.android.permissioncontroller.role.ui.specialappaccess.handheld -public class SettingsButtonPreference extends com.android.settingslib.widget.TwoTargetPreference - implements TwoTargetPreference { +public class HandheldRolePreference extends TwoTargetPreference implements RolePreference { + + private final UserRestrictionAwarePreferenceMixin mUserRestrictionAwarePreferenceMixin = + new UserRestrictionAwarePreferenceMixin(this); @Nullable private OnSecondTargetClickListener mOnSecondTargetClickListener; - public SettingsButtonPreference(@NonNull Context context, @Nullable AttributeSet attrs, + public HandheldRolePreference(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(); } - public SettingsButtonPreference(@NonNull Context context, @Nullable AttributeSet attrs, + public HandheldRolePreference(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } - public SettingsButtonPreference(@NonNull Context context, @Nullable AttributeSet attrs) { + public HandheldRolePreference(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } - public SettingsButtonPreference(@NonNull Context context) { + public HandheldRolePreference(@NonNull Context context) { super(context); init(); @@ -89,6 +93,11 @@ public class SettingsButtonPreference extends com.android.settingslib.widget.Two } @Override + public void setUserRestriction(@Nullable String userRestriction) { + mUserRestrictionAwarePreferenceMixin.setUserRestriction(userRestriction); + } + + @Override public void onBindViewHolder(@NonNull PreferenceViewHolder holder) { super.onBindViewHolder(holder); @@ -103,5 +112,12 @@ public class SettingsButtonPreference extends com.android.settingslib.widget.Two } // Make the settings button enabled even if the preference itself is disabled. settingsButton.setEnabled(true); + + mUserRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder); + } + + @Override + public HandheldRolePreference asPreference() { + return this; } } diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessChildFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessChildFragment.java index d75747b52..b95440bbd 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessChildFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessChildFragment.java @@ -37,6 +37,7 @@ import androidx.preference.TwoStatePreference; import com.android.permissioncontroller.permission.utils.Utils; import com.android.permissioncontroller.role.ui.ManageRoleHolderStateLiveData; +import com.android.permissioncontroller.role.ui.RoleApplicationPreference; import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; @@ -143,9 +144,12 @@ public class SpecialAppAccessChildFragment<PF extends PreferenceFragmentCompat String key = qualifyingApplicationInfo.packageName + '_' + qualifyingApplicationInfo.uid; - TwoStatePreference preference = (TwoStatePreference) oldPreferences.get(key); - if (preference == null) { - preference = preferenceFragment.createApplicationPreference(); + RoleApplicationPreference roleApplicationPreference = + (RoleApplicationPreference) oldPreferences.get(key); + TwoStatePreference preference; + if (roleApplicationPreference == null) { + roleApplicationPreference = preferenceFragment.createApplicationPreference(); + preference = roleApplicationPreference.asTwoStatePreference(); preference.setKey(key); preference.setIcon(Utils.getBadgedIcon(context, qualifyingApplicationInfo)); preference.setTitle(Utils.getFullAppLabel(qualifyingApplicationInfo, context)); @@ -154,11 +158,13 @@ public class SpecialAppAccessChildFragment<PF extends PreferenceFragmentCompat preference.setOnPreferenceClickListener(this); preference.getExtras().putParcelable(PREFERENCE_EXTRA_APPLICATION_INFO, qualifyingApplicationInfo); + } else { + preference = roleApplicationPreference.asTwoStatePreference(); } preference.setChecked(isHolderPackage); UserHandle user = UserHandle.getUserHandleForUid(qualifyingApplicationInfo.uid); - RoleUiBehaviorUtils.prepareApplicationPreferenceAsUser(mRole, preference, + RoleUiBehaviorUtils.prepareApplicationPreferenceAsUser(mRole, roleApplicationPreference, qualifyingApplicationInfo, user, context); preferenceScreen.addPreference(preference); } @@ -228,7 +234,7 @@ public class SpecialAppAccessChildFragment<PF extends PreferenceFragmentCompat * @return a new preference for an application */ @NonNull - TwoStatePreference createApplicationPreference(); + RoleApplicationPreference createApplicationPreference(); /** * Create a new preference for the footer. diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessListChildFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessListChildFragment.java index ec4de84e1..4b256cef0 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessListChildFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/SpecialAppAccessListChildFragment.java @@ -33,7 +33,7 @@ import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import com.android.permissioncontroller.role.ui.RoleItem; -import com.android.permissioncontroller.role.ui.TwoTargetPreference; +import com.android.permissioncontroller.role.ui.RolePreference; import com.android.permissioncontroller.role.utils.RoleUiBehaviorUtils; import com.android.role.controller.model.Role; import com.android.role.controller.model.Roles; @@ -102,16 +102,20 @@ public class SpecialAppAccessListChildFragment<PF extends PreferenceFragmentComp RoleItem roleItem = roleItems.get(i); Role role = roleItem.getRole(); - Preference preference = oldPreferences.get(role.getName()); - if (preference == null) { - preference = (Preference) preferenceFragment.createPreference(context); + RolePreference rolePreference = (RolePreference) oldPreferences.get(role.getName()); + Preference preference; + if (rolePreference == null) { + rolePreference = preferenceFragment.createPreference(context); + preference = rolePreference.asPreference(); preference.setKey(role.getName()); preference.setIconSpaceReserved(true); preference.setTitle(role.getShortLabelResource()); preference.setPersistent(false); preference.setOnPreferenceClickListener(this); + } else { + preference = rolePreference.asPreference(); } - RoleUiBehaviorUtils.preparePreferenceAsUser(role, (TwoTargetPreference) preference, + RoleUiBehaviorUtils.preparePreferenceAsUser(role, rolePreference, Process.myUserHandle(), context); preferenceScreen.addPreference(preference); @@ -153,7 +157,7 @@ public class SpecialAppAccessListChildFragment<PF extends PreferenceFragmentComp * @return a new preference for a special app access */ @NonNull - TwoTargetPreference createPreference(@NonNull Context context); + RolePreference createPreference(@NonNull Context context); /** * Callback when changes have been made to the {@link PreferenceScreen} of the parent diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSpecialAppAccessListPreferenceFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSpecialAppAccessListPreferenceFragment.java index e0d7884a1..26d858d72 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSpecialAppAccessListPreferenceFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSpecialAppAccessListPreferenceFragment.java @@ -23,8 +23,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.PreferenceFragmentCompat; -import com.android.permissioncontroller.role.ui.TwoTargetPreference; -import com.android.permissioncontroller.role.ui.handheld.SettingsButtonPreference; +import com.android.permissioncontroller.role.ui.RolePreference; +import com.android.permissioncontroller.role.ui.handheld.HandheldRolePreference; import com.android.permissioncontroller.role.ui.specialappaccess.SpecialAppAccessListChildFragment; /** @@ -65,8 +65,8 @@ public class HandheldSpecialAppAccessListPreferenceFragment extends PreferenceFr @NonNull @Override - public TwoTargetPreference createPreference(@NonNull Context context) { - return new SettingsButtonPreference(context); + public RolePreference createPreference(@NonNull Context context) { + return new HandheldRolePreference(context); } @Override diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSpecialAppAccessPreferenceFragment.java b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSpecialAppAccessPreferenceFragment.java index c1bb0fb23..bfcbefdca 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSpecialAppAccessPreferenceFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSpecialAppAccessPreferenceFragment.java @@ -23,10 +23,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; -import androidx.preference.TwoStatePreference; +import com.android.permissioncontroller.role.ui.RoleApplicationPreference; import com.android.permissioncontroller.role.ui.specialappaccess.SpecialAppAccessChildFragment; -import com.android.settingslib.widget.AppSwitchPreference; import com.android.settingslib.widget.FooterPreference; /** @@ -90,8 +89,8 @@ public class HandheldSpecialAppAccessPreferenceFragment extends PreferenceFragme @NonNull @Override - public TwoStatePreference createApplicationPreference() { - return new AppSwitchPreference(requireContext()); + public RoleApplicationPreference createApplicationPreference() { + return new HandheldSwitchPreference(requireContext()); } @NonNull diff --git a/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSwitchPreference.java b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSwitchPreference.java new file mode 100644 index 000000000..1b4dd78a4 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/role/ui/specialappaccess/handheld/HandheldSwitchPreference.java @@ -0,0 +1,74 @@ +/* + * 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.role.ui.specialappaccess.handheld; + +import android.content.Context; +import android.util.AttributeSet; + +import androidx.annotation.AttrRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StyleRes; +import androidx.preference.PreferenceViewHolder; + +import com.android.permissioncontroller.role.ui.RoleApplicationPreference; +import com.android.permissioncontroller.role.ui.UserRestrictionAwarePreferenceMixin; +import com.android.settingslib.widget.AppSwitchPreference; + +/** {@link AppSwitchPreference} that is a role application preference. */ +public class HandheldSwitchPreference extends AppSwitchPreference + implements RoleApplicationPreference { + + private UserRestrictionAwarePreferenceMixin mUserRestrictionAwarePreferenceMixin = + new UserRestrictionAwarePreferenceMixin(this); + + public HandheldSwitchPreference(@NonNull Context context, @Nullable AttributeSet attrs, + @AttrRes int defStyleAttr, @StyleRes int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + public HandheldSwitchPreference(@NonNull Context context, @Nullable AttributeSet attrs, + @AttrRes int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public HandheldSwitchPreference(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public HandheldSwitchPreference(@NonNull Context context) { + super(context); + } + + @Override + public void setUserRestriction(@Nullable String userRestriction) { + mUserRestrictionAwarePreferenceMixin.setUserRestriction(userRestriction); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + + mUserRestrictionAwarePreferenceMixin.onAfterBindViewHolder(holder); + } + + @NonNull + @Override + public HandheldSwitchPreference asTwoStatePreference() { + return this; + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java b/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java index e60bc6d76..6081695b5 100644 --- a/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java +++ b/PermissionController/src/com/android/permissioncontroller/role/utils/RoleUiBehaviorUtils.java @@ -21,13 +21,16 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.os.Process; import android.os.UserHandle; +import android.os.UserManager; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.preference.Preference; -import com.android.permissioncontroller.role.ui.TwoTargetPreference; +import com.android.modules.utils.build.SdkLevel; +import com.android.permissioncontroller.role.ui.RoleApplicationPreference; +import com.android.permissioncontroller.role.ui.RolePreference; +import com.android.permissioncontroller.role.ui.UserRestrictionAwarePreference; import com.android.permissioncontroller.role.ui.behavior.RoleUiBehavior; import com.android.role.controller.model.Role; @@ -100,8 +103,10 @@ public final class RoleUiBehaviorUtils { * @see RoleUiBehavior#preparePreferenceAsUser */ public static void preparePreferenceAsUser(@NonNull Role role, - @NonNull TwoTargetPreference preference, @NonNull UserHandle user, + @NonNull RolePreference preference, @NonNull UserHandle user, @NonNull Context context) { + prepareUserRestrictionAwarePreferenceAsUser(role, preference, user, context); + RoleUiBehavior uiBehavior = getUiBehavior(role); if (uiBehavior == null) { return; @@ -126,16 +131,32 @@ public final class RoleUiBehaviorUtils { * @see RoleUiBehavior#prepareApplicationPreferenceAsUser */ public static void prepareApplicationPreferenceAsUser(@NonNull Role role, - @NonNull Preference preference, @NonNull ApplicationInfo applicationInfo, - @NonNull UserHandle user, @NonNull Context context) { + @NonNull RoleApplicationPreference preference, + @NonNull ApplicationInfo applicationInfo, @NonNull UserHandle user, + @NonNull Context context) { + prepareUserRestrictionAwarePreferenceAsUser(role, preference, user, context); + RoleUiBehavior uiBehavior = getUiBehavior(role); if (uiBehavior == null) { return; } - uiBehavior.prepareApplicationPreferenceAsUser(role, preference, applicationInfo, user, + uiBehavior.prepareApplicationPreferenceAsUser( + role, preference.asTwoStatePreference(), applicationInfo, user, context); } + private static void prepareUserRestrictionAwarePreferenceAsUser(@NonNull Role role, + @NonNull UserRestrictionAwarePreference preference, @NonNull UserHandle user, + @NonNull Context context) { + if (SdkLevel.isAtLeastU() && role.isExclusive()) { + UserManager userManager = context.getSystemService(UserManager.class); + boolean hasDisallowConfigDefaultApps = userManager.hasUserRestrictionForUser( + UserManager.DISALLOW_CONFIG_DEFAULT_APPS, user); + preference.setUserRestriction(hasDisallowConfigDefaultApps + ? UserManager.DISALLOW_CONFIG_DEFAULT_APPS : null); + } + } + /** * @see RoleUiBehavior#getConfirmationMessage */ diff --git a/SafetyCenter/Resources/res/values-fa/strings.xml b/SafetyCenter/Resources/res/values-fa/strings.xml index 41a3121ea..cf277b7c1 100644 --- a/SafetyCenter/Resources/res/values-fa/strings.xml +++ b/SafetyCenter/Resources/res/values-fa/strings.xml @@ -37,7 +37,7 @@ <string name="privacy_controls_summary" msgid="2402066941190435424">"کنترل دسترسی دستگاه به میکروفون، دوربین، و غیره"</string> <string name="privacy_controls_search_terms" msgid="3774472175934304165">"حریم خصوصی، تنظیمات حریم خصوصی"</string> <string name="advanced_title" msgid="8745436380690561172">"تنظیمات بیشتر"</string> - <string name="advanced_security_title" msgid="1126833338772188155">"تنظیمات امنیتی بیشتر"</string> + <string name="advanced_security_title" msgid="1126833338772188155">"تنظیمات ایمنی بیشتر"</string> <string name="advanced_security_summary" msgid="6172253327022425123">"رمزگذاری، اطلاعات اعتباری، و غیره"</string> <string name="advanced_security_search_terms" msgid="3350609555814362075"></string> <string name="advanced_privacy_title" msgid="1117725225706176643">"تنظیمات حریم خصوصی بیشتر"</string> diff --git a/SafetyCenter/Resources/res/values-ja/strings.xml b/SafetyCenter/Resources/res/values-ja/strings.xml index 6e67998f4..b31b1690a 100644 --- a/SafetyCenter/Resources/res/values-ja/strings.xml +++ b/SafetyCenter/Resources/res/values-ja/strings.xml @@ -30,9 +30,9 @@ <string name="permission_usage_title" msgid="3633779688945350407">"プライバシー ダッシュボード"</string> <string name="permission_usage_summary" msgid="5323079206029964468">"権限を最近使用したアプリが表示されます"</string> <string name="permission_usage_search_terms" msgid="3852343592870257104">"プライバシー, プライバシー ダッシュボード"</string> - <string name="permission_manager_title" msgid="5277347862821255015">"権限マネージャー"</string> + <string name="permission_manager_title" msgid="5277347862821255015">"権限マネージャ"</string> <string name="permission_manager_summary" msgid="8099852107340970790">"アプリのデータアクセスを管理します"</string> - <string name="permission_manager_search_terms" msgid="2895147613099694722">"権限, 権限マネージャー"</string> + <string name="permission_manager_search_terms" msgid="2895147613099694722">"権限, 権限マネージャ"</string> <string name="privacy_controls_title" msgid="5322875777945432395">"プライバシー管理"</string> <string name="privacy_controls_summary" msgid="2402066941190435424">"マイク、カメラなどへのデバイス アクセスを管理します"</string> <string name="privacy_controls_search_terms" msgid="3774472175934304165">"プライバシー, プライバシー管理"</string> diff --git a/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml index 5b8a8fe8d..ff50335d8 100644 --- a/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rCN-v34/strings.xml @@ -20,8 +20,8 @@ <string name="lock_screen_sources_title" msgid="5493678510117489865">"设备解锁"</string> <string name="biometrics_title_for_work" msgid="1842284049407771568">"适用于工作应用的生物识别"</string> <string name="privacy_sources_summary" msgid="4083646673569677049">"权限、信息中心和控件"</string> - <string name="health_connect_title" msgid="8318152190040327804">"Health Connect"</string> - <string name="health_connect_search_terms" msgid="4998970586245680829">"健康, Health, Health Connect"</string> + <string name="health_connect_title" msgid="8318152190040327804">"健康数据共享"</string> + <string name="health_connect_search_terms" msgid="4998970586245680829">"健康, 健康数据共享, Health, Health Connect"</string> <string name="app_data_sharing_updates_title" msgid="7428862330643262588">"位置数据分享方面的更新"</string> <string name="app_data_sharing_updates_search_terms" msgid="8414777373734245398">"数据, 数据分享, 数据分享方面的更新, 位置数据分享方面的更新, 分享, Data, Data sharing, Data sharing updates, Data sharing updates for location, sharing"</string> <string name="advanced_title" msgid="6259362998269627310">"其他设置"</string> diff --git a/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml index a11abbde1..c850335ad 100644 --- a/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rHK-v34/strings.xml @@ -21,7 +21,7 @@ <string name="biometrics_title_for_work" msgid="1842284049407771568">"用於工作應用程式的生物識別選項"</string> <string name="privacy_sources_summary" msgid="4083646673569677049">"權限、資訊主頁、控制項"</string> <string name="health_connect_title" msgid="8318152190040327804">"Health Connect"</string> - <string name="health_connect_search_terms" msgid="4998970586245680829">"健康, Health Connect"</string> + <string name="health_connect_search_terms" msgid="4998970586245680829">"健康, 健康資料同步"</string> <string name="app_data_sharing_updates_title" msgid="7428862330643262588">"位置資料分享更新"</string> <string name="app_data_sharing_updates_search_terms" msgid="8414777373734245398">"資料, 資料分享, 資料分享更新, 位置資料分享更新, 分享"</string> <string name="advanced_title" msgid="6259362998269627310">"其他設定"</string> diff --git a/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml b/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml index 288a0566c..09f8e9d5d 100644 --- a/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-zh-rTW-v34/strings.xml @@ -20,8 +20,8 @@ <string name="lock_screen_sources_title" msgid="5493678510117489865">"裝置解鎖"</string> <string name="biometrics_title_for_work" msgid="1842284049407771568">"工作應用程式的生物特徵辨識選項"</string> <string name="privacy_sources_summary" msgid="4083646673569677049">"權限、資訊主頁、控制選項"</string> - <string name="health_connect_title" msgid="8318152190040327804">"Health Connect"</string> - <string name="health_connect_search_terms" msgid="4998970586245680829">"健康、Health Connect"</string> + <string name="health_connect_title" msgid="8318152190040327804">"健康資料同步"</string> + <string name="health_connect_search_terms" msgid="4998970586245680829">"健康, 健康資料同步"</string> <string name="app_data_sharing_updates_title" msgid="7428862330643262588">"位置資料分享更新"</string> <string name="app_data_sharing_updates_search_terms" msgid="8414777373734245398">"資料, 資料分享, 資料分享更新, 位置資料分享更新, 分享"</string> <string name="advanced_title" msgid="6259362998269627310">"其他設定"</string> diff --git a/SafetyCenter/Resources/shared_res/values-de/strings.xml b/SafetyCenter/Resources/shared_res/values-de/strings.xml index 0a1bf2a45..16b896569 100644 --- a/SafetyCenter/Resources/shared_res/values-de/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-de/strings.xml @@ -44,7 +44,7 @@ <string name="refresh_error" msgid="656062128422446177">"{count,plural, =1{Einstellung konnte nicht überprüft werden}other{Einstellungen konnten nicht überprüft werden}}"</string> <string name="work_profile_paused" msgid="7037400224040869079">"Arbeitsprofil pausiert"</string> <string name="group_unknown_summary" msgid="6951386960814105641">"Noch keine Angaben vorhanden"</string> - <string name="notification_channel_group_name" msgid="7155072032524876859">"Sicherheit & Datenschutz"</string> + <string name="notification_channel_group_name" msgid="7155072032524876859">"Datenschutz & Sicherheit"</string> <string name="notification_channel_name_information" msgid="2966444432152990166">"Empfehlungen"</string> <string name="notification_channel_name_recommendation" msgid="7847408286580217922">"Warnungen"</string> <string name="notification_channel_name_critical_warning" msgid="5994320322108351769">"Wichtige Warnungen"</string> diff --git a/SafetyCenter/Resources/shared_res/values-pa/strings.xml b/SafetyCenter/Resources/shared_res/values-pa/strings.xml index e13d6327f..3fb167037 100644 --- a/SafetyCenter/Resources/shared_res/values-pa/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pa/strings.xml @@ -39,7 +39,7 @@ <string name="overall_severity_level_critical_account_warning_title" msgid="1913235490583842004">"ਖਾਤਾ ਜੋਖਮ ਵਿੱਚ ਹੈ"</string> <string name="overall_severity_n_alerts_summary" msgid="3262010942295408403">"{count,plural, =1{ਅਲਰਟ ਦੇਖੋ}one{ਅਲਰਟ ਦੇਖੋ}other{ਅਲਰਟ ਦੇਖੋ}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"ਪੰਨਾ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"</string> - <string name="resolving_action_error" msgid="371968886143262375">"ਸੁਚੇਤਨਾ ਦਾ ਹੱਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string> + <string name="resolving_action_error" msgid="371968886143262375">"ਅਲਰਟ ਦਾ ਹੱਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string> <string name="refresh_timeout" msgid="251734999692581852">"ਸੈਟਿੰਗਾਂ ਨੂੰ ਰਿਫ੍ਰੈਸ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string> <string name="refresh_error" msgid="656062128422446177">"{count,plural, =1{ਸੈਟਿੰਗ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕੇ}one{ਸੈਟਿੰਗ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕੇ}other{ਸੈਟਿੰਗਾਂ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕਰ ਸਕੇ}}"</string> <string name="work_profile_paused" msgid="7037400224040869079">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ"</string> diff --git a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java index fe4a1ee43..e7edc1831 100644 --- a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java +++ b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java @@ -1178,11 +1178,10 @@ public final class SafetyCenterDataFactory { return mSafetyCenterResourcesContext.getStringByName( "overall_severity_level_ok_summary"); } else if (isTip(topNonDismissedIssue.getSafetySourceIssue())) { - return mSafetyCenterResourcesContext.getStringByName( - "overall_severity_level_tip_summary", numTipIssues); + return getIcuPluralsString("overall_severity_level_tip_summary", numTipIssues); } else if (isAutomatic(topNonDismissedIssue.getSafetySourceIssue())) { - return mSafetyCenterResourcesContext.getStringByName( + return getIcuPluralsString( "overall_severity_level_action_taken_summary", numAutomaticIssues); } // Fall through. diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java index e2df717a7..5308cdae8 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java @@ -76,12 +76,16 @@ public final class SafetyCenterNotificationChannels { } @Nullable - private static Context getContextAsUser(Context baseContext, UserHandle userHandle) { + static Context getContextAsUser(Context baseContext, UserHandle userHandle) { + // This call requires the INTERACT_ACROSS_USERS permission. + final long callingId = Binder.clearCallingIdentity(); try { return baseContext.createContextAsUser(userHandle, 0); } catch (RuntimeException e) { Log.w(TAG, "Could not create Context as user " + userHandle, e); return null; + } finally { + Binder.restoreCallingIdentity(callingId); } } diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java index 62da1fc7d..a8da70cf0 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationFactory.java @@ -21,8 +21,11 @@ import static android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_ID; import static android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_ISSUE_ID; import static android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_USER_HANDLE; +import static com.android.safetycenter.notifications.SafetyCenterNotificationChannels.getContextAsUser; + import android.annotation.ColorInt; import android.annotation.Nullable; +import android.annotation.UserIdInt; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -84,13 +87,18 @@ final class SafetyCenterNotificationFactory { Notification newNotificationForSuccessfulAction( NotificationManager notificationManager, SafetySourceIssue issue, - SafetySourceIssue.Action action) { + SafetySourceIssue.Action action, + @UserIdInt int userId) { String channelId = mNotificationChannels.getCreatedChannelId(notificationManager, issue); - if (channelId == null) { return null; } + PendingIntent contentIntent = newSafetyCenterPendingIntent(userId); + if (contentIntent == null) { + return null; + } + Notification.Builder builder = new Notification.Builder(mContext, channelId) .setSmallIcon( @@ -99,7 +107,7 @@ final class SafetyCenterNotificationFactory { .setContentTitle(action.getSuccessMessage()) .setShowWhen(true) .setTimeoutAfter(SUCCESS_NOTIFICATION_TIMEOUT.toMillis()) - .setContentIntent(newSafetyCenterPendingIntent(null)); + .setContentIntent(contentIntent); Integer color = getNotificationColor(SafetySourceData.SEVERITY_LEVEL_INFORMATION); if (color != null) { @@ -122,7 +130,6 @@ final class SafetyCenterNotificationFactory { SafetySourceIssue issue, SafetyCenterIssueKey issueKey) { String channelId = mNotificationChannels.getCreatedChannelId(notificationManager, issue); - if (channelId == null) { return null; } @@ -140,6 +147,11 @@ final class SafetyCenterNotificationFactory { } } + PendingIntent contentIntent = newSafetyCenterPendingIntent(issueKey); + if (contentIntent == null) { + return null; + } + Notification.Builder builder = new Notification.Builder(mContext, channelId) .setSmallIcon(getNotificationIcon(issue.getSeverityLevel())) @@ -147,7 +159,7 @@ final class SafetyCenterNotificationFactory { .setShowWhen(true) .setContentTitle(title) .setContentText(text) - .setContentIntent(newSafetyCenterPendingIntent(issueKey)) + .setContentIntent(contentIntent) .setDeleteIntent( SafetyCenterNotificationReceiver.newNotificationDismissedIntent( mContext, issueKey)); @@ -167,23 +179,51 @@ final class SafetyCenterNotificationFactory { } /** - * Returns a {@link PendingIntent} to open Safety Center, optionally navigating to and/or - * highlighting a specific issue if {@code issueKey} is given. + * Returns a {@link PendingIntent} to open Safety Center, navigating to a specific issue, or + * {@code null} if no such intent can be created. */ - private PendingIntent newSafetyCenterPendingIntent(@Nullable SafetyCenterIssueKey issueKey) { - Intent intent = new Intent(Intent.ACTION_SAFETY_CENTER); - if (issueKey != null) { - // Set the encoded issue key as the intent's identifier to ensure the PendingIntents of - // different notifications do not collide: - intent.setIdentifier(SafetyCenterIds.encodeToString(issueKey)); - intent.putExtra(EXTRA_SAFETY_SOURCE_ID, issueKey.getSafetySourceId()); - intent.putExtra(EXTRA_SAFETY_SOURCE_ISSUE_ID, issueKey.getSafetySourceIssueId()); - intent.putExtra(EXTRA_SAFETY_SOURCE_USER_HANDLE, UserHandle.of(issueKey.getUserId())); + @Nullable + private PendingIntent newSafetyCenterPendingIntent(SafetyCenterIssueKey issueKey) { + UserHandle userHandle = UserHandle.of(issueKey.getUserId()); + Context userContext = getContextAsUser(mContext, userHandle); + if (userContext == null) { + return null; } + + Intent intent = newSafetyCenterIntent(); + // Set the encoded issue key as the intent's identifier to ensure the PendingIntents of + // different notifications do not collide: + intent.setIdentifier(SafetyCenterIds.encodeToString(issueKey)); + intent.putExtra(EXTRA_SAFETY_SOURCE_ID, issueKey.getSafetySourceId()); + intent.putExtra(EXTRA_SAFETY_SOURCE_ISSUE_ID, issueKey.getSafetySourceIssueId()); + intent.putExtra(EXTRA_SAFETY_SOURCE_USER_HANDLE, userHandle); + + return PendingIntentFactory.getActivityPendingIntent( + userContext, OPEN_SAFETY_CENTER_REQUEST_CODE, intent, PendingIntent.FLAG_IMMUTABLE); + } + + /** + * Returns a {@link PendingIntent} to open Safety Center, or {@code null} if no such intent can + * be created. + */ + @Nullable + private PendingIntent newSafetyCenterPendingIntent(@UserIdInt int userId) { + Context userContext = getContextAsUser(mContext, UserHandle.of(userId)); + if (userContext == null) { + return null; + } + return PendingIntentFactory.getActivityPendingIntent( + userContext, + OPEN_SAFETY_CENTER_REQUEST_CODE, + newSafetyCenterIntent(), + PendingIntent.FLAG_IMMUTABLE); + } + + private static Intent newSafetyCenterIntent() { + Intent intent = new Intent(Intent.ACTION_SAFETY_CENTER); // This extra is defined in the PermissionController APK, cannot be referenced directly: intent.putExtra("navigation_source_intent_extra", "NOTIFICATION"); - return PendingIntentFactory.getActivityPendingIntent( - mContext, OPEN_SAFETY_CENTER_REQUEST_CODE, intent, PendingIntent.FLAG_IMMUTABLE); + return intent; } private Icon getNotificationIcon(@SafetySourceData.SeverityLevel int severityLevel) { diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java index 668158097..72b1f0e95 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java @@ -193,7 +193,7 @@ public final class SafetyCenterNotificationSender { Notification notification = mNotificationFactory.newNotificationForSuccessfulAction( - notificationManager, notifiedIssue, successfulAction); + notificationManager, notifiedIssue, successfulAction, userId); if (notification == null) { Log.w(TAG, "Could not create successful action notification"); return; diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt index 5ff42e23c..a6fbb89b9 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt @@ -118,10 +118,7 @@ class SafetyCenterTestData(context: Context) { ): SafetyCenterStatus = SafetyCenterStatus.Builder( safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), - safetyCenterResourcesContext.getStringByName( - "overall_severity_level_tip_summary", - numTipIssues - ) + getIcuPluralsString("overall_severity_level_tip_summary", numTipIssues) ) .setSeverityLevel(OVERALL_SEVERITY_LEVEL_OK) .build() @@ -135,7 +132,7 @@ class SafetyCenterTestData(context: Context) { ): SafetyCenterStatus = SafetyCenterStatus.Builder( safetyCenterResourcesContext.getStringByName("overall_severity_level_ok_title"), - safetyCenterResourcesContext.getStringByName( + getIcuPluralsString( "overall_severity_level_action_taken_summary", numAutomaticIssues ) |