Merge "Remove unused resource files" into sc-mainline-prod
diff --git a/Android.bp b/Android.bp
index 827329c..9fab1c1 100644
--- a/Android.bp
+++ b/Android.bp
@@ -62,6 +62,9 @@
],
optimize: {
+ shrink: true,
+ optimize: false,
+ obfuscate: false,
proguard_flags_files: ["proguard.flags"],
},
diff --git a/proguard.flags b/proguard.flags
index b1d1903..30aa201 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -1,4 +1,18 @@
--keep class com.android.providers.media.** { *; }
+-keep public class android.provider.** { *; }
+-keep public class com.android.providers.media.CacheClearingActivity
+-keep public class com.android.providers.media.IdleService
+-keep public class com.android.providers.media.MediaApplication
+-keep public class com.android.providers.media.MediaDocumentsProvider
+-keep public class com.android.providers.media.MediaProvider
+-keep public class com.android.providers.media.MediaReceiver
+-keep public class com.android.providers.media.MediaService
+-keep public class com.android.providers.media.MediaUpgradeReceiver
+-keep public class com.android.providers.media.PermissionActivity
+-keep public class com.android.providers.media.fuse.ExternalStorageServiceImpl
+-keep public class com.android.providers.media.photopicker.PhotoPickerActivity
+-keep public class com.android.providers.media.photopicker.PhotoPickerProvider
+-keep public final class com.android.providers.media.FileLookupResult { *; }
+-keep public final class com.android.providers.media.FileOpenResult { *; }
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep class * extends com.bumptech.glide.module.AppGlideModule {
<init>(...);
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 0256561..0cbf823 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Toegang tot persoonlike data van \'n werkprogram af word nie toegelaat nie"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Werkprogramme is onderbreek"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Om werkfoto\'s oop te maak, moet jy jou werkprogramme aanskakel en weer probeer"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Hierdie program het net toegang tot die foto\'s wat jy kies"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> items}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Voeg by (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 974660c..3e26447 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"የግል ውሂብን ከሥራ መተግበሪያ መድረስ አይፈቀድም"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"የስራ መተግበሪያዎች ባሉበት ቆመዋል"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"የሥራ ፎቶዎችን ለመክፈት የሥራ መተግበሪያዎችዎን ያብሩ እና እንደገና ይሞክሩ"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"ይህ መተግበሪያ መድረስ የሚችለው እርስዎ የሚመርጧቸውን ፎቶዎች ብቻ ነው"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> ንጥል}one{<xliff:g id="COUNT_1">^1</xliff:g> ንጥል}other{<xliff:g id="COUNT_1">^1</xliff:g> ንጥሎች}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"(<xliff:g id="COUNT">^1</xliff:g>) አክል"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"ካሜራ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index c6b27be..6723a7f 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"غير مسموح بالوصول إلى البيانات الشخصية من تطبيق عمل."</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"تطبيقات العمل متوقفة مؤقتًا"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"لفتح صور العمل، عليك تفعيل تطبيقات العمل ثم إعادة المحاولة."</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{عنصر واحد (<xliff:g id="COUNT_0">^1</xliff:g>)}zero{<xliff:g id="COUNT_1">^1</xliff:g> عنصر}two{عنصران (<xliff:g id="COUNT_1">^1</xliff:g>)}few{<xliff:g id="COUNT_1">^1</xliff:g> عناصر}many{<xliff:g id="COUNT_1">^1</xliff:g> عنصرًا}other{<xliff:g id="COUNT_1">^1</xliff:g> عنصر}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"إضافة (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"الكاميرا"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 3a7b347..bac7467 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"কাম সম্পর্কীয় এপৰ পৰা ব্যক্তিগত ডেটা এক্সেছ কৰাৰ অনুমতি নাই"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"কাম সম্পর্কীয় এপ্সমূহ পজ কৰা আছে"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"কৰ্মস্থানৰ ফট’ খুলিবলৈ আপোনাৰ কাম সম্পর্কীয় এপ্সমূহ অন কৰক তাৰ পাছত পুনৰ চেষ্টা কৰক"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> টা বস্তু}one{<xliff:g id="COUNT_1">^1</xliff:g> টা বস্তু}other{<xliff:g id="COUNT_1">^1</xliff:g> টা বস্তু}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"(<xliff:g id="COUNT">^1</xliff:g> টা) যোগ দিয়ক"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"কেমেৰা"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 943ab08..a3a6906 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"İş tətbiqindən şəxsi dataya girişə icazə verilmir"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"İş tətbiqləri durdurulub"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"İş şəkillərini açmaq üçün iş tətbiqlərinizi aktiv edib yenidən cəhd edin"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Bu tətbiq yalnız seçdiyiniz fotolara giriş edə bilər"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> element}other{<xliff:g id="COUNT_1">^1</xliff:g> element}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Əlavə edin (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 68676bd..5d6ff04 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Pristup ličnim podacima iz poslovne aplikacije nije dozvoljen"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Poslovne aplikacije su pauzirane"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Da biste otvorili poslovne slike, uključite poslovne aplikacije, pa probajte ponovo"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Ova aplikacija može da pristupa samo slikama koje izaberete"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> stavka}one{<xliff:g id="COUNT_1">^1</xliff:g> stavka}few{<xliff:g id="COUNT_1">^1</xliff:g> stavke}other{<xliff:g id="COUNT_1">^1</xliff:g> stavki}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Dodaj (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index e100b99..07b1bfd 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Доступ да асабістых даных з працоўнай праграмы забаронены"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Працоўныя праграмы прыпынены"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Каб адкрыць працоўныя фота, уключыце працоўныя праграмы і паўтарыце спробу"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> элемент}one{<xliff:g id="COUNT_1">^1</xliff:g> элемент}few{<xliff:g id="COUNT_1">^1</xliff:g> элементы}many{<xliff:g id="COUNT_1">^1</xliff:g> элементаў}other{<xliff:g id="COUNT_1">^1</xliff:g> элемента}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Дадаць (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Камера"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index f8e13f9..18a811e 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Достъпът до лични данни от служебно приложение не е разрешен"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Служебните приложения са поставени на пауза"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"За да отворите служебни снимки, включете служебните си приложения и опитайте отново"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> елемент}other{<xliff:g id="COUNT_1">^1</xliff:g> елемента}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Добавяне (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Камера"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index e3e4e91..f1d3022 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"অফিস অ্যাপ থেকে ব্যক্তিগত ডেটা অ্যাক্সেস করার অনুমতি নেই"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"অফিসের অ্যাপ পজ করা আছে"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"অফিস প্রোফাইলের ফটো দেখতে, অফিসের অ্যাপ চালু করে আবার চেষ্টা করুন"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"এই অ্যাপ শুধুমাত্র আপনার বেছে নেওয়া ছবি অ্যাক্সেস করতে পারবে"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g>টি আইটেম}one{<xliff:g id="COUNT_1">^1</xliff:g>টি আইটেম}other{<xliff:g id="COUNT_1">^1</xliff:g>টি আইটেম}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"(<xliff:g id="COUNT">^1</xliff:g>)টি যোগ করুন"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"ক্যামেরা"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index aaaa3d0..ee340e6 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Pristupanje ličnim podacima iz poslovne aplikacije nije dozvoljeno"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Poslovne aplikacije su pauzirane"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Da otvorite poslovne fotografije, uključite poslovne aplikacije i pokušajte ponovo"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Ova aplikacija može pristupiti samo fotografijama koje odaberete"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> stavka}one{<xliff:g id="COUNT_1">^1</xliff:g> stavka}few{<xliff:g id="COUNT_1">^1</xliff:g> stavke}other{<xliff:g id="COUNT_1">^1</xliff:g> stavki}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Dodaj (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index b07f15e..de9fa0a 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"No està permès accedir a les dades personals des d\'una aplicació de treball"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Les aplicacions de treball estan en pausa"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Per obrir les fotos de treball, activa les aplicacions de treball i torna-ho a provar"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> element}other{<xliff:g id="COUNT_1">^1</xliff:g> elements}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Afegeix (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Càmera"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index b5c10eb..e1e3896 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Z pracovní aplikace není přístup k osobním datům povolen"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Pracovní aplikace jsou pozastaveny"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Pokud chcete otevřít pracovní fotky, zapněte pracovní aplikace a zkuste to znovu"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> položka}few{<xliff:g id="COUNT_1">^1</xliff:g> položky}many{<xliff:g id="COUNT_1">^1</xliff:g> položky}other{<xliff:g id="COUNT_1">^1</xliff:g> položek}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Přidat (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Fotoaparát"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index c3ba313..5991073 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Det er ikke tilladt at tilgå personoplysninger fra en arbejdsapp"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Dine arbejdsapps er sat på pause"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Hvis du vil åbne billeder fra arbejdsprofilen, skal du aktivere dine arbejdsapps og derefter prøve igen"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> element}one{<xliff:g id="COUNT_1">^1</xliff:g> element}other{<xliff:g id="COUNT_1">^1</xliff:g> elementer}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Tilføj (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 0ad9060..8aeb0aa 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Der Zugriff auf private Daten von einer geschäftlichen App ist nicht zulässig"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Geschäftliche Apps sind pausiert"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Wenn du geschäftliche Fotos aufrufen möchtest, aktiviere zuerst deine geschäftlichen Apps und versuche es dann noch einmal"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Diese App kann nur auf die Fotos zugreifen, die du auswählst"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> Element}other{<xliff:g id="COUNT_1">^1</xliff:g> Elemente}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Hinzufügen (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index cefdbb1..5070131 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Δεν επιτρέπεται η πρόσβαση στα προσωπικά δεδομένα από μια εφαρμογή εργασιών."</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Οι εφαρμογές εργασίας τέθηκαν σε παύση"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Για να ανοίξετε φωτογραφίες εργασίας, ενεργοποιήστε τις εφαρμογές εργασίας και έπειτα δοκιμάστε ξανά."</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Αυτή η εφαρμογή μπορεί να αποκτήσει πρόσβαση μόνο στις φωτογρ. που επιλέγετε."</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> στοιχείο}other{<xliff:g id="COUNT_1">^1</xliff:g> στοιχεία}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Προσθήκη (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Κάμερα"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 1e85710..e9d0db7 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Accessing personal data from a work app is not permitted"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Work apps are paused"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"To open work photos, turn on your work apps and then try again"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"This app can only access the photos that you select"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> items}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Add (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Camera"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 1e85710..e9d0db7 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Accessing personal data from a work app is not permitted"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Work apps are paused"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"To open work photos, turn on your work apps and then try again"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"This app can only access the photos that you select"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> items}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Add (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Camera"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 1e85710..e9d0db7 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Accessing personal data from a work app is not permitted"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Work apps are paused"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"To open work photos, turn on your work apps and then try again"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"This app can only access the photos that you select"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> items}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Add (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Camera"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 1e85710..e9d0db7 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Accessing personal data from a work app is not permitted"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Work apps are paused"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"To open work photos, turn on your work apps and then try again"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"This app can only access the photos that you select"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> items}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Add (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Camera"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 1414233..a24aa45 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Accessing personal data from a work app is not permitted"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Work apps are paused"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"To open work photos, turn on your work apps then try again"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"This app can only access the photos you select"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> items}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Add (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Camera"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index bbabb41..a22612f 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"No se permite el acceso a datos personales desde una app de trabajo"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Se pausaron las apps de trabajo"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Para abrir fotos de tu perfil de trabajo, activa tus apps de trabajo y vuelve a intentarlo"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Esta app solo puede acceder a las fotos que selecciones"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> elemento}other{<xliff:g id="COUNT_1">^1</xliff:g> elementos}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Agregar (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Cámara"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index ad4bbd8..855bbd0 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"No se puede acceder a datos personales desde una aplicación de trabajo"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Las aplicaciones de trabajo están en pausa"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Para abrir fotos del trabajo, activa tus aplicaciones de trabajo e inténtalo de nuevo"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> elemento}other{<xliff:g id="COUNT_1">^1</xliff:g> elementos}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Añadir (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Cámara"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index d26010f..f1b3aed 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Juurdepääs isiklikele andmetele töörakenduse kaudu pole lubatud"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Töörakendused on peatatud"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Tööfotode avamiseks lülitage töörakendused sisse ja proovige uuesti"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> üksus}other{<xliff:g id="COUNT_1">^1</xliff:g> üksust}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Lisa (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kaamera"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 1503a82..6530016 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Datu pertsonalak ezin dira laneko aplikazioen bidez atzitu"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Pausatuta daude laneko aplikazioak"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Laneko argazkiak irekitzeko, aktibatu laneko aplikazioak eta saiatu berriro"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Zuk hautatutako argazkiak bakarrik atzi ditzake aplikazio honek"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> elementu}other{<xliff:g id="COUNT_1">^1</xliff:g> elementu}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Gehitu (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 0e431e5..19e9613 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"دسترسی به دادههای شخصی ازطریق برنامه کاری مجاز نیست"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"برنامههای کاری موقتاً متوقف شدهاند."</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"برای باز کردن عکسهای کاری، برنامههای کاری را روشن کنید و سپس دوباره امتحان کنید"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> مورد}one{<xliff:g id="COUNT_1">^1</xliff:g> مورد}other{<xliff:g id="COUNT_1">^1</xliff:g> مورد}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"افزودن (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"دوربین"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index db5e5df..b909b4e 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Henkilökohtaiseen dataan pääsy ei ole sallittu työsovelluksen kautta"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Työsovellukset on keskeytetty"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Jos haluat avata työkuvasi, laita työsovellukset päälle ja yritä uudelleen"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> kohde}other{<xliff:g id="COUNT_1">^1</xliff:g> kohdetta}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Lisää (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index d25b8a0..e708f82 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Il est interdit d\'accéder aux données personnelles à partir d\'une application professionnelle"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Les applications professionnelles sont interrompues"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Pour ouvrir des photos professionnelles, activez vos applications professionnelles, puis réessayez"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> élément}one{<xliff:g id="COUNT_1">^1</xliff:g> élément}other{<xliff:g id="COUNT_1">^1</xliff:g> éléments}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Ajouter (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Appareil photo"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index c0b4165..e606fcf 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Vous n\'êtes pas autorisé à accéder à des données à caractère personnel depuis une appli professionnelle"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Applis professionnelles en veille"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Pour ouvrir des photos professionnelles, activez vos applis professionnelles, puis réessayez"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Cette appli peut uniquement accéder aux photos que vous sélectionnez"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> élément}one{<xliff:g id="COUNT_1">^1</xliff:g> élément}other{<xliff:g id="COUNT_1">^1</xliff:g> éléments}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Ajouter (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Appareil photo"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 629280f..094d074 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Non está permitido acceder aos datos persoais desde unha aplicación do traballo"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Puxéronse en pausa as aplicacións do traballo"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Para abrir fotos do perfil de traballo, activa as aplicacións do traballo e, a continuación, téntao de novo"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> elemento}other{<xliff:g id="COUNT_1">^1</xliff:g> elementos}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Engadir (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Cámara"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 0484808..4902693 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"ઑફિસ માટેની ઍપ પરથી વ્યક્તિગત ડેટા ઍક્સેસ કરવાની પરવાનગી નથી"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"ઑફિસ માટેની ઍપ થોભાવવામાં આવી છે"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"ઑફિસના ફોટા ખોલવા માટે, તમારી ઑફિસ માટેની ઍપ ખોલો અને પછી ફરી પ્રયાસ કરો"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"આ ઍપ માત્ર તમે પસંદ કરેલા ફોટા જ ઍક્સેસ કરી શકે છે"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> આઇટમ}one{<xliff:g id="COUNT_1">^1</xliff:g> આઇટમ}other{<xliff:g id="COUNT_1">^1</xliff:g> આઇટમ}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"ઉમેરો (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"કૅમેરા"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 30e7fc7..45d30d4 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"निजी डेटा को ऑफ़िस के काम से जुड़े ऐप्लिकेशन से ऐक्सेस करने की अनुमति नहीं है"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"ऑफ़िस के काम से जुड़े ऐप्लिकेशन रोक दिए गए हैं"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"वर्क फ़ोटो देखने के लिए, ऑफ़िस के काम से जुड़े ऐप्लिकेशन चालू करें और दोबारा कोशिश करें"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> आइटम}one{<xliff:g id="COUNT_1">^1</xliff:g> आइटम}other{<xliff:g id="COUNT_1">^1</xliff:g> आइटम}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"(<xliff:g id="COUNT">^1</xliff:g>) जोड़ें"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"कैमरा"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index d4d6f58..c035e2c 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Pristupanje osobnim podacima putem poslovne aplikacije nije dopušteno"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Poslovne aplikacije su pauzirane"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Da biste otvorili fotografije s poslovnog profila, uključite poslovne aplikacije i pokušajte ponovo"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> stavka}one{<xliff:g id="COUNT_1">^1</xliff:g> stavka}few{<xliff:g id="COUNT_1">^1</xliff:g> stavke}other{<xliff:g id="COUNT_1">^1</xliff:g> stavki}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Dodaj (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 29159f8..2b28c88 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"A személyes adatokhoz való hozzáférés munkahelyi alkalmazással nincs engedélyezve"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"A munkahelyi alkalmazások szüneteltetve vannak"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"A munkahelyi fotók megnyitásához kapcsolja be a munkahelyi alkalmazásokat, majd próbálkozzon újra"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> elem}other{<xliff:g id="COUNT_1">^1</xliff:g> elem}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Hozzáadás (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 94a1683..e10266a 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Անձնական տվյալները հասանելի չեն աշխատանքային հավելվածում"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Աշխատանքային հավելվածները դադարեցված են"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Աշխատանքային լուսանկարները բացելու համար միացրեք աշխատանքային հավելվածները և նորից փորձեք։"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Այս հավելվածին հասանելի են միայն ձեր ընտրած լուսանկարները"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> տարր}one{<xliff:g id="COUNT_1">^1</xliff:g> տարր}other{<xliff:g id="COUNT_1">^1</xliff:g> տարր}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Ավելացնել (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Տեսախցիկ"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 5b513c3..667c531 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Mengakses data pribadi dari aplikasi kerja tidak diizinkan"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Aplikasi kerja dijeda"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Untuk membuka foto kerja, aktifkan aplikasi kerja lalu coba lagi"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> item}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Tambahkan (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index ad68bdc..c94dc37 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Óheimilt er að opna einkagögn í vinnuforriti"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Hlé gert á vinnuforritum"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Kveiktu á vinnuforritunum og reyndu síðan að opna vinnumyndirnar aftur"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> atriði}one{<xliff:g id="COUNT_1">^1</xliff:g> atriði}other{<xliff:g id="COUNT_1">^1</xliff:g> atriði}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Bæta við (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Myndavél"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 45bf9f4..a659f06 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Non è consentito accedere ai dati personali da un\'app di lavoro"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Le app di lavoro sono in pausa"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Per aprire le foto relative al lavoro, attiva le app di lavoro e riprova"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Questa app può accedere soltanto alle foto selezionate da te"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> elemento}one{<xliff:g id="COUNT_1">^1</xliff:g> elemento}other{<xliff:g id="COUNT_1">^1</xliff:g> elementi}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Aggiungi (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Fotocamera"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index e0dfde1..63324db 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"אי אפשר לגשת למידע אישי דרך אפליקציה לעבודה"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"האפליקציות לעבודה מושהות"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"כדי לפתוח תמונות מפרופיל העבודה, צריך להפעיל את האפליקציות לעבודה ולנסות שוב"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{פריט אחד (<xliff:g id="COUNT_0">^1</xliff:g>)}two{<xliff:g id="COUNT_1">^1</xliff:g> פריטים}many{<xliff:g id="COUNT_1">^1</xliff:g> פריטים}other{<xliff:g id="COUNT_1">^1</xliff:g> פריטים}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"הוספה (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"מצלמה"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 42b1817..61333b2 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"仕事用アプリから個人データにアクセスすることは認められていません"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"仕事用アプリは一時停止されています"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"仕事用の写真を開くには、仕事用アプリを有効にしてからもう一度試してください。"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"このアプリは、選択した写真にのみアクセスできます。"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> 件のアイテム}other{<xliff:g id="COUNT_1">^1</xliff:g> 件のアイテム}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"追加(<xliff:g id="COUNT">^1</xliff:g> 件)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"カメラ"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index f9c0fff..2b151bc 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"სამსახურის აპიდან პერსონალურ მონაცემებზე წვდომა დაუშვებელია"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"სამსახურის აპები დაპაუზებულია"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"სამსახურის ფოტოების გასახსნელად ჩართეთ თქვენი სამსახურის აპები და შემდეგ ცადეთ ხელახლა"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"ეს აპი მხოლოდ თქვენ მიერ მონიშნულ ფოტოებზე წვდომას შეძლებს"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> ერთეული}other{<xliff:g id="COUNT_1">^1</xliff:g> ერთეული}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"დამატება (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"კამერა"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index b401446..cebd1ae 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Жеке дерекке жұмыс қолданбасынан кіруге рұқсат жоқ."</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Жұмыс қолданбалары кідіртілді"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Жұмыс аккаунтындағы фотосуреттерді ашу үшін жұмыс қолданбаларын қосып, содан кейін қайталап көріңіз."</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Бұл қолданба өзіңіз таңдаған фотосуреттерді ғана пайдалана алады."</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> элемент}other{<xliff:g id="COUNT_1">^1</xliff:g> элемент}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Қосу (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Камера"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 0d92ea1..b30a2ef 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"ការចូលប្រើទិន្នន័យផ្ទាល់ខ្លួនពីកម្មវិធីការងារមិនត្រូវបានអនុញ្ញាតទេ"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"កម្មវិធីការងារត្រូវបានផ្អាក"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"ដើម្បីបើករូបថតការងារ សូមបើកកម្មវិធីការងាររបស់អ្នក រួចព្យាយាមម្ដងទៀត"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"កម្មវិធីនេះអាចចូលប្រើបានតែរូបថតដែលអ្នកជ្រើសរើសប៉ុណ្ណោះ"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{ធាតុ <xliff:g id="COUNT_0">^1</xliff:g>}other{ធាតុ <xliff:g id="COUNT_1">^1</xliff:g>}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"បញ្ចូល (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"កាមេរ៉ា"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 2bedcd6..a3fe23d 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ ಮೂಲಕ ಅಧಿಕೃತ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಲು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"ಕೆಲಸದ ಫೋಟೋಗಳನ್ನು ತೆರೆಯಲು, ನಿಮ್ಮ ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್ಗಳನ್ನು ಆನ್ ಮಾಡಿ ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g>ಐಟಂ}one{<xliff:g id="COUNT_1">^1</xliff:g> ಐಟಂಗಳು}other{<xliff:g id="COUNT_1">^1</xliff:g> ಐಟಂಗಳು}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"ಸೇರಿಸಿ (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"ಕ್ಯಾಮರಾ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index f47c2ee..8fd39da 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"직장 앱에서는 개인 데이터에 액세스할 수 없습니다."</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"직장 앱이 일시중지됨"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"직장 사진을 열려면 직장 앱을 사용 설정한 후 다시 시도하세요."</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{항목 <xliff:g id="COUNT_0">^1</xliff:g>개}other{항목 <xliff:g id="COUNT_1">^1</xliff:g>개}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"추가(<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"카메라"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index be1758b..50cd133 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Жеке маалыматка жумуш колдонмосунан кирүүгө тыюу салынат"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Жумуш колдонмолору тындырылды"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Жумуш сүрөттөрүн ачуу үчүн жумуш колдонмолорун иштетип, кайра аракет кылыңыз"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Бул колдонмо сиз тандаган сүрөттөргө гана кире алат"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> нерсе}other{<xliff:g id="COUNT_1">^1</xliff:g> нерсе}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Кошуу (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Камера"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 1a1bcd6..6c97c34 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"ບໍ່ອະນຸຍາດການເຂົ້າເຖິງຂໍ້ມູນສ່ວນຕົວຈາກແອັບບ່ອນເຮັດວຽກ"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"ຢຸດແອັບບ່ອນເຮັດວຽກຊົ່ວຄາວແລ້ວ"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"ເພື່ອເປີດຮູບພາບບ່ອນເຮັດວຽກ, ໃຫ້ເປີດໃຊ້ແອັບບ່ອນເຮັດວຽກຂອງທ່ານແລ້ວລອງໃໝ່"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"ແອັບນີ້ສາມາດເຂົ້າເຖິງຮູບພາບທີ່ທ່ານເລືອກເທົ່ານັ້ນ"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> ລາຍການ}other{<xliff:g id="COUNT_1">^1</xliff:g> ລາຍການ}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"ເພີ່ມ (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"ກ້ອງຖ່າຍຮູບ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index c4061db..f8ccdb2 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Neleidžiama pasiekti asmens duomenų iš darbo programos"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Darbo programos pristabdytos"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Norėdami atidaryti darbo nuotraukas, įjunkite darbo programas ir bandykite dar kartą"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Ši programa gali pasiekti tik jūsų pasirinktas nuotraukas"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> elementas}one{<xliff:g id="COUNT_1">^1</xliff:g> elementas}few{<xliff:g id="COUNT_1">^1</xliff:g> elementai}many{<xliff:g id="COUNT_1">^1</xliff:g> elemento}other{<xliff:g id="COUNT_1">^1</xliff:g> elementų}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Pridėti (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Vaizdo kamera"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index a27b2ce..cc91b77 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Piekļuve personīgajiem datiem no darba lietotnes nav atļauta."</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Darba lietotnes ir apturētas"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Lai atvērtu darba fotoattēlus, ieslēdziet savas darba lietotnes un pēc tam mēģiniet vēlreiz."</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> vienums}zero{<xliff:g id="COUNT_1">^1</xliff:g> vienumu}one{<xliff:g id="COUNT_1">^1</xliff:g> vienums}other{<xliff:g id="COUNT_1">^1</xliff:g> vienumi}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Pievienot <xliff:g id="COUNT">^1</xliff:g>"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 627b49f..31156ff 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Не е дозволено пристапување до лични податоци од работна апликација"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Работните апликации се паузирани"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"За да ги отворите работните фотографии, вклучете ги работните апликации, па обидете се повторно"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Апликацијава може да пристапи само до фотографиите што ќе ги изберете"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> ставка}one{<xliff:g id="COUNT_1">^1</xliff:g> ставка}other{<xliff:g id="COUNT_1">^1</xliff:g> ставки}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Додај (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Камера"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 70f89f8..f611995 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"ഔദ്യോഗിക ആപ്പിലൂടെ വ്യക്തിപരമായ ഡാറ്റ ആക്സസ് ചെയ്യുന്നത് അനുവദനീയമല്ല"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"ഔദ്യോഗിക ആപ്പുകൾ തൽക്കാലികമായി നിർത്തിയിരിക്കുന്നു"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"ഔദ്യോഗിക ഫോട്ടോകൾ തുറക്കാൻ, നിങ്ങളുടെ ഔദ്യോഗിക ആപ്പുകൾ ഓണാക്കി വീണ്ടും ശ്രമിക്കുക"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"നിങ്ങൾ തിരഞ്ഞെടുത്ത ഫോട്ടോകൾ മാത്രമേ ഈ ആപ്പിന് ആക്സസ് ചെയ്യാനാകൂ"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> ഇനം}other{<xliff:g id="COUNT_1">^1</xliff:g> ഇനങ്ങൾ}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"(<xliff:g id="COUNT">^1</xliff:g>) ചേർക്കുക"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"ക്യാമറ"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 53e0639..b50f395 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Ажлын аппаас хувийн өгөгдөлд хандахыг зөвшөөрдөггүй"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Ажлын аппуудыг түр зогсоосон"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Ажлын зургуудаа нээхийн тулд ажлын аппуудaa асааж, дараа нь дахин оролдоно уу"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Энэ апп зөвхөн таны сонгосон зургуудад хандах боломжтой"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> зүйл}other{<xliff:g id="COUNT_1">^1</xliff:g> зүйл}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Нэмэх (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Камер"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index c9a0e16..1ca350a 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"कामाशी संबंधित ॲपवरून वैयक्तिक डेटा अॅक्सेस करण्याची परवानगी नाही"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"कामाशी संबंधित अॅप्स थांबवली आहेत"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"कामाशी संबंधित फोटो उघडण्यासाठी, कामाशी संबंधित अॅप्स सुरू करा त्यानंतर पुन्हा प्रयत्न करा"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"हे ॲप फक्त तुम्ही निवडलेले फोटो अॅक्सेस करू शकते"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> आयटम}other{<xliff:g id="COUNT_1">^1</xliff:g> आयटम}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"(<xliff:g id="COUNT">^1</xliff:g>) जोडा"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"कॅमेरा"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index c4c5f8c..d02c165 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Pengaksesan data peribadi daripada apl kerja tidak dibenarkan"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Apl kerja dijeda"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Untuk membuka foto kerja, hidupkan apl kerja anda, kemudian cuba lagi"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Apl ini hanya dapat mengakses foto yang anda pilih"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> item}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Tambah (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 874f282..5c56614 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"အလုပ်သုံးအက်ပ်ဖြင့် ကိုယ်ပိုင်ဒေတာများ သုံးခွင့်မရှိပါ"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"အလုပ်သုံးအက်ပ်များကို ခေတ္တရပ်ထားသည်"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"အလုပ်ဓာတ်ပုံများဖွင့်ရန် သင့်အလုပ်သုံးအက်ပ်များကိုဖွင့်ပြီး ထပ်စမ်းကြည့်ပါ"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{ဖိုင် <xliff:g id="COUNT_0">^1</xliff:g> ခု}other{ဖိုင် <xliff:g id="COUNT_1">^1</xliff:g> ခု}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"(<xliff:g id="COUNT">^1</xliff:g>) ခု ထည့်ရန်"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"ကင်မရာ"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index e2018f6..ea8de26 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Du får ikke tilgang til personlige data fra jobbapper"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Jobbapper er satt på pause"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"For å åpne jobbilder, slå på jobbapper og prøv på nytt"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> element}other{<xliff:g id="COUNT_1">^1</xliff:g> elementer}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Legg til (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index a4c90d4..9bce0ab 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"कामसम्बन्धी एपमार्फत व्यक्तिगत जानकारी हेर्ने वा प्रयोग गर्ने अनुमति दिइएको छैन।"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"कामसम्बन्धी एपहरू पज गरिएका छन्"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"कामसम्बन्धी फोटोहरू खोल्न आफ्ना कामसम्बन्धी एपहरू अन गर्नुहोस् अनि फेरि प्रयास गर्नुहोस्"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"यो एपले तपाईंले चयन गरेका फोटो मात्र प्रयोग गर्न सक्छ"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> वटा वस्तु}other{<xliff:g id="COUNT_1">^1</xliff:g> वटा वस्तु}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"थप्नुहोस् (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"क्यामेरा"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 2608360..cdd42f2 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Het is niet toegestaan om persoonsgegevens te openen via een werk-app"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Werk-apps zijn onderbroken"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Als je werkfoto\'s wilt openen, zet je je werk-apps aan en probeer je het opnieuw"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Deze app heeft alleen toegang tot de foto\'s die je selecteert"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> items}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Toevoegen (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Camera"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index ec46122..36297aa 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"କୌଣସି ୱାର୍କ ଆପରୁ ବ୍ୟକ୍ତିଗତ ଡାଟାକୁ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ଅନୁମତି ଦିଆଯାଇନାହିଁ"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"ୱାର୍କ ଆପଗୁଡ଼ିକୁ ବିରତ କରାଯାଇଛି"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"ୱାର୍କ ଫଟୋଗୁଡ଼ିକୁ ଖୋଲିବାକୁ, ଆପଣଙ୍କ ୱାର୍କ ଆପଗୁଡ଼ିକୁ ଚାଲୁ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"ଏହି ଆପ କେବଳ ଆପଣ ଚୟନ କରିଥିବା ଫଟୋଗୁଡ଼ିକୁ ଆକ୍ସେସ କରିପାରିବ"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g>ଟି ଆଇଟମ}other{<xliff:g id="COUNT_1">^1</xliff:g>ଟି ଆଇଟମ}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"(<xliff:g id="COUNT">^1</xliff:g>)ଟି ଯୋଗ କରନ୍ତୁ"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"କ୍ୟାମେରା"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 8664ba1..4865726 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"ਕੰਮ ਸੰਬੰਧੀ ਐਪ ਤੋਂ ਨਿੱਜੀ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਨੂੰ ਰੋਕਿਆ ਗਿਆ ਹੈ"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"ਕੰਮ ਸੰਬੰਧੀ ਫ਼ੋਟੋਆਂ ਖੋਲ੍ਹਣ ਲਈ, ਆਪਣੀਆਂ ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਨੂੰ ਚਾਲੂ ਕਰੋ ਅਤੇ ਫਿਰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"ਇਹ ਐਪ ਸਿਰਫ਼ ਤੁਹਾਡੇ ਵੱਲੋਂ ਚੁਣੀਆਂ ਗਈਆਂ ਫ਼ੋਟੋਆਂ ਤੱਕ ਪਹੁੰਚ ਕਰ ਸਕਦੀ ਹੈ"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> ਆਈਟਮ}one{<xliff:g id="COUNT_1">^1</xliff:g> ਆਈਟਮ}other{<xliff:g id="COUNT_1">^1</xliff:g> ਆਈਟਮਾਂ}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"(<xliff:g id="COUNT">^1</xliff:g>) ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"ਕੈਮਰਾ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 30ba1ce..cb62a88 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Nie można korzystać z danych osobistych w aplikacji służbowej"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Aplikacje służbowe zostały wstrzymane"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Aby otworzyć zdjęcia służbowe, włącz aplikacje służbowe i spróbuj ponownie"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> element}few{<xliff:g id="COUNT_1">^1</xliff:g> elementy}many{<xliff:g id="COUNT_1">^1</xliff:g> elementów}other{<xliff:g id="COUNT_1">^1</xliff:g> elementu}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Dodaj (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Aparat"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index ab8add0..5bc1279 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Não é permitido o acesso a dados pessoais em um app de trabalho"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Os apps de trabalho foram pausados"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Para abrir as fotos de trabalho, ative os apps de trabalho e tente novamente"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Este app só pode acessar as fotos que você selecionar"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}one{<xliff:g id="COUNT_1">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> itens}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Adicionar (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Câmera"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 53b3bbf..73bc7ad 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"O acesso aos dados pessoais a partir de uma app de trabalho não é permitido"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"As apps de trabalho estão em pausa"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Para abrir fotos do trabalho, ative as apps de trabalho e tente novamente"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Esta app só pode aceder às fotos que selecionar"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}one{<xliff:g id="COUNT_1">^1</xliff:g> item(ns)}other{<xliff:g id="COUNT_1">^1</xliff:g> itens}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Adicionar (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Câmara"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index ab8add0..5bc1279 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Não é permitido o acesso a dados pessoais em um app de trabalho"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Os apps de trabalho foram pausados"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Para abrir as fotos de trabalho, ative os apps de trabalho e tente novamente"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Este app só pode acessar as fotos que você selecionar"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}one{<xliff:g id="COUNT_1">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> itens}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Adicionar (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Câmera"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 4fb2333..16b3367 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Accesarea datelor personale dintr-o aplicație pentru lucru nu este permisă"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Aplicațiile pentru lucru sunt întrerupte"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Ca să deschideți fotografiile de lucru, porniți aplicațiile pentru lucru și încercați din nou"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Aplicația poate accesa doar fotografiile pe care le selectați"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> element}few{<xliff:g id="COUNT_1">^1</xliff:g> elemente}other{<xliff:g id="COUNT_1">^1</xliff:g> de elemente}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Adăugați (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Cameră"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index d987552..6b6288f 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Доступ к персональным данным из рабочего приложения запрещен."</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Рабочие приложения приостановлены"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Чтобы открыть рабочие фотографии, включите рабочие приложения и повторите попытку."</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"У этого приложения есть доступ только к тем фото, которые вы выбрали."</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> объект}one{<xliff:g id="COUNT_1">^1</xliff:g> объект}few{<xliff:g id="COUNT_1">^1</xliff:g> объекта}many{<xliff:g id="COUNT_1">^1</xliff:g> объектов}other{<xliff:g id="COUNT_1">^1</xliff:g> объекта}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Добавить (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Камера"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index fe2ccf0..004958c 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"කාර්යාල යෙදුමකින් පුද්ගලික දත්තවලට ප්රවේශ වීමට අවසර නොදේ"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"කාර්යාල යෙදුම් විරාම කර ඇත"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"කාර්යාල ඡායාරූප විවෘත කිරීමට, ඔබගේ කාර්යාල යෙදුම් ක්රියාත්මක කර නැවත උත්සාහ කරන්න"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{අයිතම <xliff:g id="COUNT_0">^1</xliff:g>}one{අයිතම <xliff:g id="COUNT_1">^1</xliff:g>}other{අයිතම <xliff:g id="COUNT_1">^1</xliff:g>}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"එක් කරන්න (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"කැමරාව"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 2f1cc07..af71688 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Prístup k osobným údajom z pracovnej aplikácie nie je povolený"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Pracovné aplikácie sú pozastavené"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Ak chcete otvoriť pracovné fotky, zapnite pracovné aplikácie a skúste to znova"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Táto aplikácia môže mať prístup iba k fotkám, ktoré vyberiete"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> položka}few{<xliff:g id="COUNT_1">^1</xliff:g> položky}many{<xliff:g id="COUNT_1">^1</xliff:g> items}other{<xliff:g id="COUNT_1">^1</xliff:g> položiek}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Pridať (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Fotoaparát"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 3f2b1ce..b0e6361 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Iz delovne aplikacije ni dovoljeno dostopati do osebnih podatkov."</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Delovne aplikacije so začasno zaustavljene"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Če želite odpreti delovne fotografije, vklopite delovne aplikacije in poskusite znova."</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Ta aplikacija ima dostop samo do fotografij, ki jih izberete."</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> element}one{<xliff:g id="COUNT_1">^1</xliff:g> element}two{<xliff:g id="COUNT_1">^1</xliff:g> elementa}few{<xliff:g id="COUNT_1">^1</xliff:g> elementi}other{<xliff:g id="COUNT_1">^1</xliff:g> elementov}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Dodaj (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Fotoaparat"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 0496ebf..9881652 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Qasja e të dhënave personale nga një aplikacion pune nuk lejohet"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Aplikacionet e punës janë vendosur në pauzë"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Për të hapur fotografitë e punës, aktivizo aplikacionet e punës dhe provo sërish"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> artikull}other{<xliff:g id="COUNT_1">^1</xliff:g> artikuj}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Shto (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 0a07b1f..94fa428 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Приступ личним подацима из пословне апликације није дозвољен"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Пословне апликације су паузиране"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Да бисте отворили пословне слике, укључите пословне апликације, па пробајте поново"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Ова апликација може да приступа само сликама које изаберете"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> ставка}one{<xliff:g id="COUNT_1">^1</xliff:g> ставка}few{<xliff:g id="COUNT_1">^1</xliff:g> ставке}other{<xliff:g id="COUNT_1">^1</xliff:g> ставки}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Додај (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Камера"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 8ebfbf0..fd79083 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Åtkomst till privat data från en jobbapp tillåts inte"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Jobbappar har pausats"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Om du vill öppna jobbfoton aktiverar du jobbappar och försöker igen"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> objekt}other{<xliff:g id="COUNT_1">^1</xliff:g> objekt}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Lägg till (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index c9aa268..aba7ac9 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Huruhusiwi kufikia data binafsi kwenye programu ya kazini"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Programu za kazini zimesimamishwa"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Ili ufungue picha za kazini, washa programu zako za kazini kisha ujaribu tena"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{Kipengee <xliff:g id="COUNT_0">^1</xliff:g>}other{Vipengee <xliff:g id="COUNT_1">^1</xliff:g>}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Weka (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 0dc1723..bdc1808 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"பணி ஆப்ஸிலிருந்து தனிப்பட்ட தரவை அணுக அனுமதியில்லை"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"பணி ஆப்ஸ் இடைநிறுத்தப்பட்டுள்ளன"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"பணிப் படங்களைத் திறக்க, பணி ஆப்ஸை ஆன் செய்துவிட்டு முயலவும்"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"நீங்கள் தேர்ந்தெடுக்கும் படங்களை மட்டுமே இந்த ஆப்ஸ் அணுக முடியும்"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> ஆவணம்}other{<xliff:g id="COUNT_1">^1</xliff:g> ஆவணங்கள்}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"(<xliff:g id="COUNT">^1</xliff:g>) படங்களைச் சேர்"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"கேமரா"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index b0556dd..b776f7c 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"వర్క్ యాప్ నుండి వ్యక్తిగత డేటాను యాక్సెస్ చేయడం అనుమతించబడదు"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"వర్క్ యాప్లు పాజ్ చేయబడ్డాయి"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"వర్క్ ఫోటోలను తెరవడానికి, మీ వర్క్ యాప్లను ఆన్ చేసి, ఆపై మళ్లీ ట్రై చేయండి"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"ఈ యాప్ మీరు ఎంచుకున్న ఫోటోలను మాత్రమే యాక్సెస్ చేయగలదు"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> ఐటెమ్}other{<xliff:g id="COUNT_1">^1</xliff:g> ఐటెమ్లు}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"జోడించండి (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"కెమెరా"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 21a6be2..a8b1850 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"ไม่อนุญาตให้เข้าถึงข้อมูลส่วนตัวจากแอปงาน"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"แอปงานหยุดชั่วคราว"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"หากต้องการเปิดรูปภาพงาน ให้เปิดแอปงานแล้วลองอีกครั้ง"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"แอปนี้จะเข้าถึงได้เฉพาะรูปภาพที่คุณเลือกเท่านั้น"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> รายการ}other{<xliff:g id="COUNT_1">^1</xliff:g> รายการ}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"เพิ่ม (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"กล้อง"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 443c031..730915b 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Hindi pinapahintulutan ang pag-access ng personal na data mula sa isang app para sa trabaho"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Naka-pause ang mga app para sa trabaho"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Para buksan ang mga larawan sa trabaho, i-on ang iyong mga app sa trabaho at subukan ulit"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> item}one{<xliff:g id="COUNT_1">^1</xliff:g> item}other{<xliff:g id="COUNT_1">^1</xliff:g> na item}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Magdagdag (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Camera"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index e6ea827..d435238 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"İş uygulamasından kişisel verilere erişmeye izin verilmiyor"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"İş uygulamaları duraklatıldı"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"İş fotoğraflarını açmak için iş uygulamalarını açıp tekrar deneyin"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> öğe}other{<xliff:g id="COUNT_1">^1</xliff:g> öğe}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Ekle (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index fcd01ab..9353c9b 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Доступ до персональних даних із робочого додатка заблокований"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Робочі додатки призупинено"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Щоб відкрити робочі фотографії, увімкніть робочі додатки й повторіть спробу"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> об’єкт}one{<xliff:g id="COUNT_1">^1</xliff:g> об’єкт}few{<xliff:g id="COUNT_1">^1</xliff:g> об’єкти}many{<xliff:g id="COUNT_1">^1</xliff:g> об’єктів}other{<xliff:g id="COUNT_1">^1</xliff:g> об’єкта}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Додати (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Камера"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 40493ac..d473354 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"ورک ایپ سے ذاتی ڈیٹا تک رسائی کی اجازت نہیں ہے"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"ورک ایپس موقوف ہیں"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"کام کی تصاویر کھولنے کے لیے اپنی ورک ایپس آن کریں، پھر دوبارہ کوشش کریں"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"یہ ایپ صرف آپ کی منتخب کردہ تصاویر تک رسائی حاصل کر سکتی ہے"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> آئٹم}other{<xliff:g id="COUNT_1">^1</xliff:g> آئٹمز}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"(<xliff:g id="COUNT">^1</xliff:g>) شامل کریں"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"کیمرا"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index f585b59..7f46dde 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Ishga oid ilovadan shaxsiy maʼlumotlarga kirish taqiqlangan"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Ishga oid ilovalar pauza qilingan"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Ishga oid suratlarni ochish uchun ishga oid ilovalarni yoqib, keyin qaytadan urining"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> ta narsa}other{<xliff:g id="COUNT_1">^1</xliff:g> ta narsa}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Kiritish (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Kamera"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index e5f71e4..c1adb72 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Bạn không được phép truy cập dữ liệu cá nhân từ một ứng dụng công việc"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Ứng dụng công việc đã tạm dừng"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Để mở ảnh trong hồ sơ công việc, hãy bật ứng dụng công việc rồi thử lại"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> mục}other{<xliff:g id="COUNT_1">^1</xliff:g> mục}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Thêm (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Máy ảnh"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 27a4bcd..a29a252 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"不允许通过工作应用访问个人数据"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"工作应用已暂停"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"如需打开工作照片,请打开您的工作应用,然后重试"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"此应用只能访问您选择的照片"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> 个}other{<xliff:g id="COUNT_1">^1</xliff:g> 个}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"添加(<xliff:g id="COUNT">^1</xliff:g> 项)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"相机"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 3fd3f04..ee34fa8 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"工作應用程式不得存取個人資料"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"已暫停工作應用程式"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"如要開啟工作相片,請開啟工作應用程式,然後再試一次"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"此應用程式只能存取您選取的相片"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> 個項目}other{<xliff:g id="COUNT_1">^1</xliff:g> 個項目}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"新增 (<xliff:g id="COUNT">^1</xliff:g> 個)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"相機"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 99b851c..2dafa3e 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -54,6 +54,8 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"工作應用程式不得存取個人資料"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"工作應用程式目前為暫停狀態"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"如要開啟工作資料夾的相片或影片,請開啟工作應用程式,然後再試一次"</string>
+ <!-- no translation found for picker_privacy_message (9132700451027116817) -->
+ <skip />
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{<xliff:g id="COUNT_0">^1</xliff:g> 個項目}other{<xliff:g id="COUNT_1">^1</xliff:g> 個項目}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"新增 (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"相機"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index a35d975..eb0daaf 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -54,6 +54,7 @@
<string name="picker_profile_admin_msg_from_work" msgid="8048524337462790110">"Ukufinyelela idatha yomuntu siqu evela ku-app yomsebenzi akuvunyelwe"</string>
<string name="picker_profile_work_paused_title" msgid="382212880704235925">"Ama-app okusebenza aphunyuziwe"</string>
<string name="picker_profile_work_paused_msg" msgid="6321552322125246726">"Ukuze uvule izithombe zomsebenzi, vula ama-app wakho womsebenzi bese uzama futhi"</string>
+ <string name="picker_privacy_message" msgid="9132700451027116817">"Le app ingafinyelela izithombe ozikhethayo kuphela"</string>
<string name="picker_album_item_count" msgid="4420723302534177596">"{count,plural, =1{into <xliff:g id="COUNT_0">^1</xliff:g>}one{izinto <xliff:g id="COUNT_1">^1</xliff:g>}other{izinto <xliff:g id="COUNT_1">^1</xliff:g>}}"</string>
<string name="picker_add_button_multi_select" msgid="4005164092275518399">"Engeza (<xliff:g id="COUNT">^1</xliff:g>)"</string>
<string name="picker_category_camera" msgid="4857367052026843664">"Ikhamera"</string>
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index 17f493d..121dbf2 100644
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -1808,10 +1808,10 @@
private boolean preparePickerMediaIdPathSegment(File file, String authority, String fileName) {
final String mediaId = extractFileName(fileName);
- try (Cursor cursor = mPickerDbFacade.queryMediaId(authority, mediaId)) {
+ try (Cursor cursor = mPickerDbFacade.queryMediaIdForApps(authority, mediaId,
+ new String[] { MediaStore.PickerMediaColumns.SIZE })) {
if (cursor != null && cursor.moveToFirst()) {
- final int sizeBytesIdx = cursor.getColumnIndex(
- CloudMediaProviderContract.MediaColumns.SIZE_BYTES);
+ final int sizeBytesIdx = cursor.getColumnIndex(MediaStore.PickerMediaColumns.SIZE);
if (sizeBytesIdx != -1) {
return createSparseFile(file, cursor.getLong(sizeBytesIdx));
@@ -5096,6 +5096,17 @@
// owner, so callers need to hold READ_MEDIA_AUDIO
appendWhereStandalone(qb, "0");
}
+ // In order to be consistent with other audio views like audio_artist, audio_albums,
+ // and audio_genres, exclude pending and trashed item
+ appendWhereStandaloneMatch(qb, FileColumns.IS_PENDING, MATCH_EXCLUDE, uri);
+ appendWhereStandaloneMatch(qb, FileColumns.IS_TRASHED, MATCH_EXCLUDE, uri);
+ appendWhereStandaloneMatch(qb, FileColumns.IS_FAVORITE, matchFavorite, uri);
+ if (honored != null) {
+ honored.accept(QUERY_ARG_MATCH_FAVORITE);
+ }
+ if (!includeAllVolumes) {
+ appendWhereStandalone(qb, FileColumns.VOLUME_NAME + " IN " + includeVolumes);
+ }
break;
}
case AUDIO_PLAYLISTS_ID:
diff --git a/src/com/android/providers/media/PermissionActivity.java b/src/com/android/providers/media/PermissionActivity.java
index 50d2557..d50c574 100644
--- a/src/com/android/providers/media/PermissionActivity.java
+++ b/src/com/android/providers/media/PermissionActivity.java
@@ -663,7 +663,9 @@
final ImageView thumbFull = bodyView.requireViewById(R.id.thumb_full);
if (result.full != null) {
result.bindFull(thumbFull);
- } else {
+ } else if (result.thumbnail != null) {
+ result.bindThumbnail(thumbFull, /* shouldClip */ false);
+ } else if (result.mimeIcon != null) {
thumbFull.setScaleType(ImageView.ScaleType.FIT_CENTER);
thumbFull.setBackground(new ColorDrawable(getColor(R.color.thumb_gray_color)));
result.bindMimeIcon(thumbFull);
@@ -719,8 +721,8 @@
final Description desc = visualResults.get(i);
final ImageView imageView = thumbs.get(i);
if (desc.thumbnail != null) {
- desc.bindThumbnail(imageView);
- } else {
+ desc.bindThumbnail(imageView, /* shouldClip */ true);
+ } else if (desc.mimeIcon != null) {
desc.bindMimeIcon(imageView);
}
}
@@ -816,12 +818,12 @@
return thumbnail != null || full != null || mimeIcon != null;
}
- public void bindThumbnail(ImageView imageView) {
+ public void bindThumbnail(ImageView imageView, boolean shouldClip) {
Objects.requireNonNull(thumbnail);
imageView.setImageBitmap(thumbnail);
imageView.setContentDescription(contentDescription);
imageView.setVisibility(View.VISIBLE);
- imageView.setClipToOutline(true);
+ imageView.setClipToOutline(shouldClip);
}
public void bindFull(ImageView imageView) {
diff --git a/src/com/android/providers/media/PickerUriResolver.java b/src/com/android/providers/media/PickerUriResolver.java
index c9bd138..54cab67 100644
--- a/src/com/android/providers/media/PickerUriResolver.java
+++ b/src/com/android/providers/media/PickerUriResolver.java
@@ -169,7 +169,18 @@
if (PickerDbFacade.isPickerDbEnabled()) {
if (canHandleUriInUser(uri)) {
- return queryPickerUri(uri);
+ if (projection == null || projection.length == 0) {
+ projection = new String[] {
+ MediaStore.PickerMediaColumns.DISPLAY_NAME,
+ MediaStore.PickerMediaColumns.DATA,
+ MediaStore.PickerMediaColumns.MIME_TYPE,
+ MediaStore.PickerMediaColumns.DATE_TAKEN,
+ MediaStore.PickerMediaColumns.SIZE,
+ MediaStore.PickerMediaColumns.DURATION_MILLIS
+ };
+ }
+
+ return queryPickerUri(uri, projection);
}
return resolver.query(uri, /* projection */ null, /* queryArgs */ null,
/* cancellationSignal */ null);
@@ -235,9 +246,10 @@
@VisibleForTesting
File getPickerFileFromUri(Uri uri) {
- try (Cursor cursor = queryPickerUri(uri)) {
+ final String[] projection = new String[] { MediaStore.PickerMediaColumns.DATA };
+ try (Cursor cursor = queryPickerUri(uri, projection)) {
if (cursor != null && cursor.getCount() == 1 && cursor.moveToFirst()) {
- String path = getCursorString(cursor, CloudMediaProviderContract.MediaColumns.DATA);
+ String path = getCursorString(cursor, MediaStore.PickerMediaColumns.DATA);
return toFuseFile(new File(path));
}
}
@@ -245,9 +257,10 @@
}
@VisibleForTesting
- Cursor queryPickerUri(Uri uri) {
+ Cursor queryPickerUri(Uri uri, String[] projection) {
uri = unwrapProviderUri(uri);
- return mDbFacade.queryMediaId(uri.getHost(), uri.getLastPathSegment());
+ return mDbFacade.queryMediaIdForApps(uri.getHost(), uri.getLastPathSegment(),
+ projection);
}
public static Uri wrapProviderUri(Uri uri, int userId) {
diff --git a/src/com/android/providers/media/photopicker/PickerDataLayer.java b/src/com/android/providers/media/photopicker/PickerDataLayer.java
index b343c81..b51bf88 100644
--- a/src/com/android/providers/media/photopicker/PickerDataLayer.java
+++ b/src/com/android/providers/media/photopicker/PickerDataLayer.java
@@ -68,7 +68,7 @@
if (Objects.equals(queryExtras.getAlbumId(), STRING_DEFAULT) || queryExtras.isFavorite()) {
// Fetch merged and deduped media from picker db
- return mDbFacade.queryMedia(queryExtras.toQueryFilter());
+ return mDbFacade.queryMediaForUi(queryExtras.toQueryFilter());
} else {
// Fetch unique media directly from provider
final String cloudProvider = validateCloudProvider(queryExtras);
diff --git a/src/com/android/providers/media/photopicker/PickerSyncController.java b/src/com/android/providers/media/photopicker/PickerSyncController.java
index d018407..a353a18 100644
--- a/src/com/android/providers/media/photopicker/PickerSyncController.java
+++ b/src/com/android/providers/media/photopicker/PickerSyncController.java
@@ -61,12 +61,13 @@
*/
public class PickerSyncController {
private static final String TAG = "PickerSyncController";
- private static final String PREFS_NAME = "picker_provider_media_info";
private static final String PREFS_KEY_CLOUD_PROVIDER = "cloud_provider";
private static final String PREFS_KEY_CLOUD_PROVIDER_UID = "cloud_provider_uid";
private static final String PREFS_KEY_CLOUD_PREFIX = "cloud_provider:";
private static final String PREFS_KEY_LOCAL_PREFIX = "local_provider:";
+ private static final String PICKER_USER_PREFS_FILE_NAME = "picker_user_prefs";
+ public static final String PICKER_SYNC_PREFS_FILE_NAME = "picker_sync_prefs";
public static final String LOCAL_PICKER_PROVIDER_AUTHORITY =
"com.android.providers.media.photopicker";
@@ -93,7 +94,8 @@
private final Object mLock = new Object();
private final PickerDbFacade mDbFacade;
private final Context mContext;
- private final SharedPreferences mPrefs;
+ private final SharedPreferences mSyncPrefs;
+ private final SharedPreferences mUserPrefs;
private final String mLocalProvider;
private final long mSyncDelayMs;
@@ -109,14 +111,17 @@
PickerSyncController(Context context, PickerDbFacade dbFacade,
String localProvider, long syncDelayMs) {
mContext = context;
- mPrefs = mContext.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
+ mSyncPrefs = mContext.getSharedPreferences(PICKER_SYNC_PREFS_FILE_NAME,
+ Context.MODE_PRIVATE);
+ mUserPrefs = mContext.getSharedPreferences(PICKER_USER_PREFS_FILE_NAME,
+ Context.MODE_PRIVATE);
mDbFacade = dbFacade;
mLocalProvider = localProvider;
mSyncDelayMs = syncDelayMs;
- final String cloudProvider = mPrefs.getString(PREFS_KEY_CLOUD_PROVIDER,
+ final String cloudProvider = mUserPrefs.getString(PREFS_KEY_CLOUD_PROVIDER,
DEFAULT_CLOUD_PROVIDER_PKG);
- final int cloudProviderUid = mPrefs.getInt(PREFS_KEY_CLOUD_PROVIDER_UID,
+ final int cloudProviderUid = mUserPrefs.getInt(PREFS_KEY_CLOUD_PROVIDER_UID,
DEFAULT_CLOUD_PROVIDER_UID);
if (cloudProvider == null) {
mCloudProviderInfo = CloudProviderInfo.EMPTY;
@@ -341,7 +346,7 @@
mCloudProviderInfo = info;
}
- final SharedPreferences.Editor editor = mPrefs.edit();
+ final SharedPreferences.Editor editor = mUserPrefs.edit();
if (info.isEmpty()) {
editor.remove(PREFS_KEY_CLOUD_PROVIDER);
@@ -360,7 +365,7 @@
return;
}
- final SharedPreferences.Editor editor = mPrefs.edit();
+ final SharedPreferences.Editor editor = mSyncPrefs.edit();
if (bundle == null) {
editor.remove(getPrefsKey(authority, MediaInfo.MEDIA_VERSION));
@@ -386,11 +391,11 @@
private Bundle getCachedMediaInfo(String authority) {
final Bundle bundle = new Bundle();
- final String version = mPrefs.getString(getPrefsKey(authority, MediaInfo.MEDIA_VERSION),
+ final String version = mSyncPrefs.getString(getPrefsKey(authority, MediaInfo.MEDIA_VERSION),
/* default */ null);
- final long generation = mPrefs.getLong(getPrefsKey(authority, MediaInfo.MEDIA_GENERATION),
- /* default */ -1);
- final long count = mPrefs.getLong(getPrefsKey(authority, MediaInfo.MEDIA_COUNT),
+ final long generation = mSyncPrefs.getLong(
+ getPrefsKey(authority, MediaInfo.MEDIA_GENERATION), /* default */ -1);
+ final long count = mSyncPrefs.getLong(getPrefsKey(authority, MediaInfo.MEDIA_COUNT),
/* default */ -1);
bundle.putString(MediaInfo.MEDIA_VERSION, version);
diff --git a/src/com/android/providers/media/photopicker/data/PickerDatabaseHelper.java b/src/com/android/providers/media/photopicker/data/PickerDatabaseHelper.java
index 98fece2..946df63 100644
--- a/src/com/android/providers/media/photopicker/data/PickerDatabaseHelper.java
+++ b/src/com/android/providers/media/photopicker/data/PickerDatabaseHelper.java
@@ -17,12 +17,15 @@
package com.android.providers.media.photopicker.data;
import android.content.Context;
+import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
+import com.android.providers.media.photopicker.PickerSyncController;
+
/**
* Wrapper class for the photo picker database. Can open the actual database
* on demand, create and upgrade the schema, etc.
@@ -34,7 +37,7 @@
@VisibleForTesting
static final String PICKER_DATABASE_NAME = "picker.db";
- private static final int VERSION_T = 3;
+ private static final int VERSION_T = 4;
private static final int VERSION_LATEST = VERSION_T;
final Context mContext;
@@ -58,22 +61,25 @@
public void onCreate(final SQLiteDatabase db) {
Log.v(TAG, "onCreate() for " + mName);
- createLatestSchema(db);
- createLatestIndexes(db);
+ resetData(db);
}
@Override
public void onUpgrade(final SQLiteDatabase db, final int oldV, final int newV) {
Log.v(TAG, "onUpgrade() for " + mName + " from " + oldV + " to " + newV);
- createLatestSchema(db);
- createLatestIndexes(db);
+ resetData(db);
}
@Override
public void onDowngrade(final SQLiteDatabase db, final int oldV, final int newV) {
Log.v(TAG, "onDowngrade() for " + mName + " from " + oldV + " to " + newV);
+ resetData(db);
+ }
+
+ private void resetData(SQLiteDatabase db) {
+ clearPickerPrefs(mContext);
createLatestSchema(db);
createLatestIndexes(db);
}
@@ -131,4 +137,12 @@
db.execSQL("CREATE INDEX mime_type_index on media(mime_type)");
db.execSQL("CREATE INDEX is_favorite_index on media(is_favorite)");
}
+
+ private static void clearPickerPrefs(Context context) {
+ final SharedPreferences prefs = context.getSharedPreferences(
+ PickerSyncController.PICKER_SYNC_PREFS_FILE_NAME, Context.MODE_PRIVATE);
+ final SharedPreferences.Editor editor = prefs.edit();
+ editor.clear();
+ editor.commit();
+ }
}
diff --git a/src/com/android/providers/media/photopicker/data/PickerDbFacade.java b/src/com/android/providers/media/photopicker/data/PickerDbFacade.java
index f045627..7071bee 100644
--- a/src/com/android/providers/media/photopicker/data/PickerDbFacade.java
+++ b/src/com/android/providers/media/photopicker/data/PickerDbFacade.java
@@ -16,6 +16,8 @@
package com.android.providers.media.photopicker.data;
+import static android.provider.CloudMediaProviderContract.MediaColumns;
+import static android.provider.MediaStore.PickerMediaColumns;
import static com.android.providers.media.photopicker.util.CursorUtils.getCursorLong;
import static com.android.providers.media.photopicker.util.CursorUtils.getCursorString;
import static com.android.providers.media.util.DatabaseUtils.replaceMatchAnyChar;
@@ -36,6 +38,7 @@
import android.os.SystemProperties;
import android.util.Log;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
@@ -63,10 +66,14 @@
@VisibleForTesting
public PickerDbFacade(Context context, String localProvider) {
- final PickerDatabaseHelper databaseHelper = new PickerDatabaseHelper(context);
+ this(context, localProvider, new PickerDatabaseHelper(context));
+ }
+
+ @VisibleForTesting
+ public PickerDbFacade(Context context, String localProvider, PickerDatabaseHelper dbHelper) {
mContext = context;
- mDatabase = databaseHelper.getWritableDatabase();
mLocalProvider = localProvider;
+ mDatabase = dbHelper.getWritableDatabase();
}
private static final String TAG = "PickerDbFacade";
@@ -107,27 +114,6 @@
@VisibleForTesting
public static final String VIDEO_FILE_EXTENSION = ".mp4";
- // We prefer cloud_id first and it only matters for cloud+local items. For those, the row
- // will already be associated with a cloud authority, see #getProjectionAuthorityLocked.
- // Note that hidden cloud+local items will not be returned in the query, so there's no concern
- // of preferring the cloud_id in a cloud+local item over the local_id in a local-only item.
- private static final String PROJECTION_ID = String.format("IFNULL(%s, %s) AS %s", KEY_CLOUD_ID,
- KEY_LOCAL_ID, CloudMediaProviderContract.MediaColumns.ID);
- private static final String PROJECTION_DATE_TAKEN = String.format("%s AS %s", KEY_DATE_TAKEN_MS,
- CloudMediaProviderContract.MediaColumns.DATE_TAKEN_MS);
- private static final String PROJECTION_GENERATION_MODIFIED = String.format("%s AS %s",
- KEY_GENERATION_MODIFIED,
- CloudMediaProviderContract.MediaColumns.GENERATION_MODIFIED);
- private static final String PROJECTION_SIZE = String.format("%s AS %s", KEY_SIZE_BYTES,
- CloudMediaProviderContract.MediaColumns.SIZE_BYTES);
- private static final String PROJECTION_DURATION = String.format("%s AS %s", KEY_DURATION_MS,
- CloudMediaProviderContract.MediaColumns.DURATION_MS);
- private static final String PROJECTION_MIME_TYPE = String.format("%s AS %s", KEY_MIME_TYPE,
- CloudMediaProviderContract.MediaColumns.MIME_TYPE);
- private static final String PROJECTION_STANDARD_MIME_TYPE_EXTENSION = String.format("%s AS %s",
- KEY_STANDARD_MIME_TYPE_EXTENSION,
- CloudMediaProviderContract.MediaColumns.STANDARD_MIME_TYPE_EXTENSION);
-
private static final String WHERE_ID = KEY_ID + " = ?";
private static final String WHERE_LOCAL_ID = KEY_LOCAL_ID + " = ?";
private static final String WHERE_CLOUD_ID = KEY_CLOUD_ID + " = ?";
@@ -542,22 +528,31 @@
}
}
- /*
+ /**
* Returns sorted and deduped cloud and local media items from the picker db.
*
- * Returns a {@link Cursor} containing picker db media rows sorted in reverse chronological
- * order, i.e. newest first, up to a maximum of {@code limit}.
+ * Returns a {@link Cursor} containing picker db media rows with columns as
+ * {@link CloudMediaProviderContract#MediaColumns}.
*
- * The results can be filtered with {@code query}.
+ * The result is sorted in reverse chronological order, i.e. newest first, up to a maximum of
+ * {@code limit}. They can also be filtered with {@code query}.
*/
- public Cursor queryMedia(QueryFilter query) {
+ public Cursor queryMediaForUi(QueryFilter query) {
final SQLiteQueryBuilder qb = createVisibleMediaQueryBuilder();
final String[] selectionArgs = buildSelectionArgs(qb, query);
- return queryMedia(qb, selectionArgs, query.limit);
+ return queryMediaForUi(qb, selectionArgs, query.limit);
}
- public Cursor queryMediaId(String authority, String mediaId) {
+ /**
+ * Returns an individual cloud or local item from the picker db matching {@code authority} and
+ * {@code mediaId}.
+ *
+ * Returns a {@link Cursor} containing picker db media rows with columns as {@code projection},
+ * a subset of {@link PickerMediaColumns}.
+ */
+ public Cursor queryMediaIdForApps(String authority, String mediaId,
+ @NonNull String[] projection) {
final String[] selectionArgs = new String[] { mediaId };
final SQLiteQueryBuilder qb = createVisibleMediaQueryBuilder();
if (isLocal(authority)) {
@@ -568,9 +563,9 @@
synchronized (mLock) {
if (authority.equals(mLocalProvider) || authority.equals(mCloudProvider)) {
- return qb.query(mDatabase, getProjectionLocked(), /* selection */ null,
- selectionArgs, /* groupBy */ null, /* having */ null, /* orderBy */ null,
- /* limitStr */ null);
+ return qb.query(mDatabase, getMediaStoreProjectionLocked(projection),
+ /* selection */ null, selectionArgs, /* groupBy */ null, /* having */ null,
+ /* orderBy */ null, /* limitStr */ null);
}
}
@@ -619,7 +614,8 @@
return SystemProperties.getBoolean("sys.photopicker.pickerdb.enabled", true);
}
- private Cursor queryMedia(SQLiteQueryBuilder qb, String[] selectionArgs, int limit) {
+ private Cursor queryMediaForUi(SQLiteQueryBuilder qb, String[] selectionArgs,
+ int limit) {
// Use the <table>.<column> form to order _id to avoid ordering against the projection '_id'
final String orderBy = "date_taken_ms DESC," + TABLE_MEDIA + "._id DESC";
final String limitStr = String.valueOf(limit);
@@ -633,25 +629,62 @@
qb.appendWhereStandalone(WHERE_NULL_CLOUD_ID);
}
- return qb.query(mDatabase, getProjectionLocked(), /* selection */ null, selectionArgs,
- /* groupBy */ null, /* having */ null, orderBy, limitStr);
+ return qb.query(mDatabase, getCloudMediaProjectionLocked(), /* selection */ null,
+ selectionArgs, /* groupBy */ null, /* having */ null, orderBy, limitStr);
}
}
- private String[] getProjectionLocked() {
+ private String[] getCloudMediaProjectionLocked() {
return new String[] {
getProjectionAuthorityLocked(),
- getProjectionDataLocked(),
- PROJECTION_ID,
- PROJECTION_DATE_TAKEN,
- PROJECTION_GENERATION_MODIFIED,
- PROJECTION_SIZE,
- PROJECTION_DURATION,
- PROJECTION_MIME_TYPE,
- PROJECTION_STANDARD_MIME_TYPE_EXTENSION
+ getProjectionDataLocked(MediaColumns.DATA),
+ getProjectionId(MediaColumns.ID),
+ getProjectionSimple(KEY_DATE_TAKEN_MS, MediaColumns.DATE_TAKEN_MS),
+ getProjectionSimple(KEY_GENERATION_MODIFIED, MediaColumns.GENERATION_MODIFIED),
+ getProjectionSimple(KEY_SIZE_BYTES, MediaColumns.SIZE_BYTES),
+ getProjectionSimple(KEY_DURATION_MS, MediaColumns.DURATION_MS),
+ getProjectionSimple(KEY_MIME_TYPE, MediaColumns.MIME_TYPE),
+ getProjectionSimple(KEY_STANDARD_MIME_TYPE_EXTENSION,
+ MediaColumns.STANDARD_MIME_TYPE_EXTENSION),
};
}
+ private String[] getMediaStoreProjectionLocked(String[] columns) {
+ final String[] projection = new String[columns.length];
+
+ for (int i = 0; i < projection.length; i++) {
+ switch (columns[i]) {
+ case PickerMediaColumns.DATA:
+ projection[i] = getProjectionDataLocked(PickerMediaColumns.DATA);
+ break;
+ case PickerMediaColumns.DISPLAY_NAME:
+ projection[i] = getProjectionSimple(getDisplayNameSql(),
+ PickerMediaColumns.DISPLAY_NAME);
+ break;
+ case PickerMediaColumns.MIME_TYPE:
+ projection[i] = getProjectionSimple(KEY_MIME_TYPE,
+ PickerMediaColumns.MIME_TYPE);
+ break;
+ case PickerMediaColumns.DATE_TAKEN:
+ projection[i] = getProjectionSimple(KEY_DATE_TAKEN_MS,
+ PickerMediaColumns.DATE_TAKEN);
+ break;
+ case PickerMediaColumns.SIZE:
+ projection[i] = getProjectionSimple(KEY_SIZE_BYTES, PickerMediaColumns.SIZE);
+ break;
+ case PickerMediaColumns.DURATION_MILLIS:
+ projection[i] = getProjectionSimple(KEY_DURATION_MS,
+ PickerMediaColumns.DURATION_MILLIS);
+ break;
+ default:
+ projection[i] = "";
+ Log.w(TAG, "Unexpected MediaStore column: " + columns[i]);
+ }
+ }
+
+ return projection;
+ }
+
private String getProjectionAuthorityLocked() {
// Note that we prefer cloud_id over local_id here. It's important to remember that this
// logic is for computing the projection and doesn't affect the filtering of results which
@@ -660,29 +693,47 @@
// correct authority. Checking whether cloud_id IS NULL distinguishes the former from the
// latter.
return String.format("CASE WHEN %s IS NULL THEN '%s' ELSE '%s' END AS %s",
- KEY_CLOUD_ID, mLocalProvider, mCloudProvider,
- CloudMediaProviderContract.MediaColumns.AUTHORITY);
+ KEY_CLOUD_ID, mLocalProvider, mCloudProvider, MediaColumns.AUTHORITY);
}
- private String getProjectionDataLocked() {
+ private String getProjectionDataLocked(String asColumn) {
// _data format:
- // /storage/emulated/<user-id>/.transforms/synthetic/<authority>/media/<media-id>
+ // /storage/emulated/<user-id>/.transforms/synthetic/<authority>/media/<display-name>
// See PickerUriResolver#getMediaUri
final String authority = String.format("CASE WHEN %s IS NULL THEN '%s' ELSE '%s' END",
KEY_CLOUD_ID, mLocalProvider, mCloudProvider);
+ final String fullPath = "'" + PICKER_PATH + "/'"
+ + "||" + authority
+ + "||" + "'/" + CloudMediaProviderContract.URI_PATH_MEDIA + "/'"
+ + "||" + getDisplayNameSql();
+
+ return String.format("%s AS %s", fullPath, asColumn);
+ }
+
+ private String getProjectionId(String asColumn) {
+ // We prefer cloud_id first and it only matters for cloud+local items. For those, the row
+ // will already be associated with a cloud authority, see #getProjectionAuthorityLocked.
+ // Note that hidden cloud+local items will not be returned in the query, so there's no
+ // concern of preferring the cloud_id in a cloud+local item over the local_id in a
+ // local-only item.
+ return String.format("IFNULL(%s, %s) AS %s", KEY_CLOUD_ID, KEY_LOCAL_ID, asColumn);
+ }
+
+ private static String getProjectionSimple(String dbColumn, String column) {
+ return String.format("%s AS %s", dbColumn, column);
+ }
+
+ private String getDisplayNameSql() {
+ // _display_name format:
+ // <media-id>.<file-extension>
// See comment in #getProjectionAuthorityLocked for why cloud_id is preferred over local_id
final String mediaId = String.format("IFNULL(%s, %s)", KEY_CLOUD_ID, KEY_LOCAL_ID);
// TODO(b/195009139): Add .gif fileextension support
final String fileExtension =
String.format("CASE WHEN %s LIKE 'image/%%' THEN '%s' ELSE '%s' END",
KEY_MIME_TYPE, IMAGE_FILE_EXTENSION, VIDEO_FILE_EXTENSION);
- final String fullPath = "'" + PICKER_PATH + "/'"
- + "||" + authority
- + "||" + "'/" + CloudMediaProviderContract.URI_PATH_MEDIA + "/'"
- + "||" + mediaId
- + "||" + fileExtension;
- return String.format("%s AS %s", fullPath, CloudMediaProviderContract.MediaColumns.DATA);
+ return mediaId + "||" + fileExtension;
}
private static ContentValues cursorToContentValue(Cursor cursor, boolean isLocal) {
diff --git a/tests/src/com/android/providers/media/DatabaseHelperTest.java b/tests/src/com/android/providers/media/DatabaseHelperTest.java
index 484e3af..36ffd64 100644
--- a/tests/src/com/android/providers/media/DatabaseHelperTest.java
+++ b/tests/src/com/android/providers/media/DatabaseHelperTest.java
@@ -262,7 +262,7 @@
@Test
public void testTtoS() throws Exception {
- assertDowngrade(DatabaseHelperT.class, DatabaseHelperR.class);
+ assertDowngrade(DatabaseHelperT.class, DatabaseHelperS.class);
}
private void assertDowngrade(Class<? extends DatabaseHelper> before,
diff --git a/tests/src/com/android/providers/media/MediaProviderTest.java b/tests/src/com/android/providers/media/MediaProviderTest.java
index ad2c469..af98654 100644
--- a/tests/src/com/android/providers/media/MediaProviderTest.java
+++ b/tests/src/com/android/providers/media/MediaProviderTest.java
@@ -1256,20 +1256,24 @@
Uri result = sIsolatedResolver.insert(audioUri, values);
+ final long genreId;
// Check the audio file is inserted correctly
try (Cursor c = sIsolatedResolver.query(result,
- new String[]{MediaColumns.DISPLAY_NAME, columnKey}, null, null)) {
+ new String[]{MediaColumns.DISPLAY_NAME, AudioColumns.GENRE_ID, columnKey},
+ null, null)) {
assertNotNull(c);
assertEquals(1, c.getCount());
assertTrue(c.moveToFirst());
assertEquals(displayName, c.getString(0));
- assertEquals(1, c.getInt(1));
+ assertEquals(1, c.getInt(2));
+ genreId = c.getLong(1);
}
final String volume = MediaStore.VOLUME_EXTERNAL_PRIMARY;
assertQueryResultNoItems(MediaStore.Audio.Albums.getContentUri(volume));
assertQueryResultNoItems(MediaStore.Audio.Artists.getContentUri(volume));
assertQueryResultNoItems(MediaStore.Audio.Genres.getContentUri(volume));
+ assertQueryResultNoItems(MediaStore.Audio.Genres.Members.getContentUri(volume, genreId));
}
@Test
diff --git a/tests/src/com/android/providers/media/PickerUriResolverTest.java b/tests/src/com/android/providers/media/PickerUriResolverTest.java
index 491d9f2..cb54ba8 100644
--- a/tests/src/com/android/providers/media/PickerUriResolverTest.java
+++ b/tests/src/com/android/providers/media/PickerUriResolverTest.java
@@ -91,17 +91,17 @@
}
@Override
- Cursor queryPickerUri(Uri uri) {
+ Cursor queryPickerUri(Uri uri, String[] projection) {
if (!uri.getLastPathSegment().equals(TEST_ID)) {
- return super.queryPickerUri(uri);
+ return super.queryPickerUri(uri, projection);
}
- final String[] projection = new String[] {
+ final String[] p = new String[] {
CloudMediaProviderContract.MediaColumns.ID,
CloudMediaProviderContract.MediaColumns.MIME_TYPE
};
- final MatrixCursor c = new MatrixCursor(projection);
+ final MatrixCursor c = new MatrixCursor(p);
c.addRow(new String[] { TEST_ID, "image/jpeg"});
return c;
}
diff --git a/tests/src/com/android/providers/media/photopicker/PickerDataLayerTest.java b/tests/src/com/android/providers/media/photopicker/PickerDataLayerTest.java
index aeac91e..c225f83 100644
--- a/tests/src/com/android/providers/media/photopicker/PickerDataLayerTest.java
+++ b/tests/src/com/android/providers/media/photopicker/PickerDataLayerTest.java
@@ -605,7 +605,8 @@
}
private Cursor queryMedia() {
- return mFacade.queryMedia(new PickerDbFacade.QueryFilterBuilder(1000).build());
+ return mFacade.queryMediaForUi(
+ new PickerDbFacade.QueryFilterBuilder(1000).build());
}
private void assertEmptyCursor() {
diff --git a/tests/src/com/android/providers/media/photopicker/PickerSyncControllerTest.java b/tests/src/com/android/providers/media/photopicker/PickerSyncControllerTest.java
index 1b05dd9..9f18a3e 100644
--- a/tests/src/com/android/providers/media/photopicker/PickerSyncControllerTest.java
+++ b/tests/src/com/android/providers/media/photopicker/PickerSyncControllerTest.java
@@ -43,11 +43,14 @@
import com.android.modules.utils.BackgroundThread;
import com.android.providers.media.PickerProviderMediaGenerator;
+import com.android.providers.media.photopicker.data.PickerDatabaseHelper;
import com.android.providers.media.photopicker.data.PickerDbFacade;
import com.android.providers.media.photopicker.data.model.Category;
import com.android.providers.media.photopicker.data.model.Item;
+import java.io.File;
import java.util.List;
+import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -103,6 +106,10 @@
private static final long SYNC_DELAY_MS = 1000;
+ private static final int DB_VERSION_1 = 1;
+ private static final int DB_VERSION_2 = 2;
+ private static final String DB_NAME = "test_db";
+
private Context mContext;
private PickerDbFacade mFacade;
private PickerSyncController mController;
@@ -394,18 +401,6 @@
assertThat(mController.isProviderEnabled(1000)).isFalse();
}
- private static void waitForIdle() {
- final CountDownLatch latch = new CountDownLatch(1);
- BackgroundThread.getExecutor().execute(() -> {
- latch.countDown();
- });
- try {
- latch.await(30, TimeUnit.SECONDS);
- } catch (InterruptedException e) {
- throw new IllegalStateException(e);
- }
-
- }
@Test
public void testNotifyMediaEvent() {
PickerSyncController controller = new PickerSyncController(mContext, mFacade,
@@ -428,6 +423,186 @@
}
}
+ @Test
+ public void testSyncAfterDbCreate() {
+ PickerDatabaseHelper dbHelper = new PickerDatabaseHelper(mContext, DB_NAME, DB_VERSION_1);
+ PickerDbFacade facade = new PickerDbFacade(mContext, LOCAL_PROVIDER_AUTHORITY,
+ dbHelper);
+ PickerSyncController controller = new PickerSyncController(mContext, facade,
+ LOCAL_PROVIDER_AUTHORITY, /* syncDelay */ 0);
+
+ addMedia(mLocalMediaGenerator, LOCAL_ONLY_1);
+ controller.syncPicker();
+
+ try (Cursor cr = queryMedia(facade)) {
+ assertThat(cr.getCount()).isEqualTo(1);
+
+ assertCursor(cr, LOCAL_ID_1, LOCAL_PROVIDER_AUTHORITY);
+ }
+
+ dbHelper.close();
+
+ // Delete db so it's recreated on next access
+ final File dbPath = mContext.getDatabasePath(DB_NAME);
+ dbPath.delete();
+
+ facade = new PickerDbFacade(mContext, LOCAL_PROVIDER_AUTHORITY, dbHelper);
+ controller = new PickerSyncController(mContext, facade,
+ LOCAL_PROVIDER_AUTHORITY, /* syncDelay */ 0);
+
+ // Initially empty db
+ try (Cursor cr = queryMedia(facade)) {
+ assertThat(cr.getCount()).isEqualTo(0);
+ }
+
+ controller.syncPicker();
+
+ // Fully synced db
+ try (Cursor cr = queryMedia(facade)) {
+ assertThat(cr.getCount()).isEqualTo(1);
+
+ assertCursor(cr, LOCAL_ID_1, LOCAL_PROVIDER_AUTHORITY);
+ }
+ }
+
+ @Test
+ public void testSyncAfterDbUpgrade() {
+ PickerDatabaseHelper dbHelperV1 = new PickerDatabaseHelper(mContext, DB_NAME, DB_VERSION_1);
+ PickerDbFacade facade = new PickerDbFacade(mContext, LOCAL_PROVIDER_AUTHORITY,
+ dbHelperV1);
+ PickerSyncController controller = new PickerSyncController(mContext, facade,
+ LOCAL_PROVIDER_AUTHORITY, SYNC_DELAY_MS);
+
+ addMedia(mLocalMediaGenerator, LOCAL_ONLY_1);
+ controller.syncPicker();
+
+ try (Cursor cr = queryMedia(facade)) {
+ assertThat(cr.getCount()).isEqualTo(1);
+
+ assertCursor(cr, LOCAL_ID_1, LOCAL_PROVIDER_AUTHORITY);
+ }
+
+ // Upgrade db version
+ dbHelperV1.close();
+ PickerDatabaseHelper dbHelperV2 = new PickerDatabaseHelper(mContext, DB_NAME, DB_VERSION_2);
+ facade = new PickerDbFacade(mContext, LOCAL_PROVIDER_AUTHORITY, dbHelperV2);
+ controller = new PickerSyncController(mContext, facade,
+ LOCAL_PROVIDER_AUTHORITY, SYNC_DELAY_MS);
+
+ // Initially empty db
+ try (Cursor cr = queryMedia(facade)) {
+ assertThat(cr.getCount()).isEqualTo(0);
+ }
+
+ controller.syncPicker();
+
+ // Fully synced db
+ try (Cursor cr = queryMedia(facade)) {
+ assertThat(cr.getCount()).isEqualTo(1);
+
+ assertCursor(cr, LOCAL_ID_1, LOCAL_PROVIDER_AUTHORITY);
+ }
+ }
+
+ @Test
+ public void testSyncAfterDbDowngrade() {
+ PickerDatabaseHelper dbHelperV2 = new PickerDatabaseHelper(mContext, DB_NAME, DB_VERSION_2);
+ PickerDbFacade facade = new PickerDbFacade(mContext, LOCAL_PROVIDER_AUTHORITY,
+ dbHelperV2);
+ PickerSyncController controller = new PickerSyncController(mContext, facade,
+ LOCAL_PROVIDER_AUTHORITY, SYNC_DELAY_MS);
+
+ addMedia(mLocalMediaGenerator, LOCAL_ONLY_1);
+ controller.syncPicker();
+
+ try (Cursor cr = queryMedia(facade)) {
+ assertThat(cr.getCount()).isEqualTo(1);
+
+ assertCursor(cr, LOCAL_ID_1, LOCAL_PROVIDER_AUTHORITY);
+ }
+
+ // Downgrade db version
+ dbHelperV2.close();
+ PickerDatabaseHelper dbHelperV1 = new PickerDatabaseHelper(mContext, DB_NAME, DB_VERSION_1);
+ facade = new PickerDbFacade(mContext, LOCAL_PROVIDER_AUTHORITY,
+ dbHelperV1);
+ controller = new PickerSyncController(mContext, facade,
+ LOCAL_PROVIDER_AUTHORITY, SYNC_DELAY_MS);
+
+ // Initially empty db
+ try (Cursor cr = queryMedia(facade)) {
+ assertThat(cr.getCount()).isEqualTo(0);
+ }
+
+ controller.syncPicker();
+
+ // Fully synced db
+ try (Cursor cr = queryMedia(facade)) {
+ assertThat(cr.getCount()).isEqualTo(1);
+
+ assertCursor(cr, LOCAL_ID_1, LOCAL_PROVIDER_AUTHORITY);
+ }
+ }
+
+ @Test
+ public void testUserPrefsAfterDbUpgrade() {
+ PickerDatabaseHelper dbHelperV1 = new PickerDatabaseHelper(mContext, DB_NAME, DB_VERSION_1);
+ PickerDbFacade facade = new PickerDbFacade(mContext, LOCAL_PROVIDER_AUTHORITY,
+ dbHelperV1);
+ PickerSyncController controller = new PickerSyncController(mContext, facade,
+ LOCAL_PROVIDER_AUTHORITY, SYNC_DELAY_MS);
+
+ controller.setCloudProvider(CLOUD_PRIMARY_PROVIDER_AUTHORITY);
+ assertThat(controller.getCloudProvider()).isEqualTo(CLOUD_PRIMARY_PROVIDER_AUTHORITY);
+
+ // Downgrade db version
+ dbHelperV1.close();
+ PickerDatabaseHelper dbHelperV2 = new PickerDatabaseHelper(mContext, DB_NAME, DB_VERSION_2);
+ facade = new PickerDbFacade(mContext, LOCAL_PROVIDER_AUTHORITY,
+ dbHelperV2);
+ controller = new PickerSyncController(mContext, facade,
+ LOCAL_PROVIDER_AUTHORITY, SYNC_DELAY_MS);
+
+ assertThat(controller.getCloudProvider()).isEqualTo(CLOUD_PRIMARY_PROVIDER_AUTHORITY);
+ }
+
+ private static void waitForIdle() {
+ final CountDownLatch latch = new CountDownLatch(1);
+ BackgroundThread.getExecutor().execute(() -> {
+ latch.countDown();
+ });
+ try {
+ latch.await(30, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ throw new IllegalStateException(e);
+ }
+
+ }
+
+ private static Bundle buildQueryArgs(String mimeType, long sizeBytes) {
+ final Bundle queryArgs = new Bundle();
+
+ queryArgs.putString(MediaStore.QUERY_ARG_MIME_TYPE, mimeType);
+ queryArgs.putLong(MediaStore.QUERY_ARG_SIZE_BYTES, sizeBytes);
+
+ return queryArgs;
+ }
+
+ private static Bundle buildQueryArgs(String albumId, String albumType, String mimeType,
+ long sizeBytes) {
+ final Bundle queryArgs = buildQueryArgs(mimeType, sizeBytes);
+
+ queryArgs.putString(MediaStore.QUERY_ARG_ALBUM_ID, albumId);
+ queryArgs.putString(MediaStore.QUERY_ARG_ALBUM_TYPE, albumType);
+
+ if (Objects.equals(albumType, ALBUM_COLUMN_TYPE_CLOUD)) {
+ queryArgs.putString(MediaStore.EXTRA_CLOUD_PROVIDER,
+ CLOUD_PRIMARY_PROVIDER_AUTHORITY);
+ }
+
+ return queryArgs;
+ }
+
private static void addMedia(MediaGenerator generator, Pair<String, String> media) {
generator.addMedia(media.first, media.second);
}
@@ -443,8 +618,14 @@
generator.deleteMedia(media.first, media.second);
}
+ private static Cursor queryMedia(PickerDbFacade facade) {
+ return facade.queryMediaForUi(
+ new PickerDbFacade.QueryFilterBuilder(1000).build());
+ }
+
private Cursor queryMedia() {
- return mFacade.queryMedia(new PickerDbFacade.QueryFilterBuilder(1000).build());
+ return mFacade.queryMediaForUi(
+ new PickerDbFacade.QueryFilterBuilder(1000).build());
}
private void assertEmptyCursor() {
diff --git a/tests/src/com/android/providers/media/photopicker/UnreliableVolumeFacadeTest.java b/tests/src/com/android/providers/media/photopicker/UnreliableVolumeFacadeTest.java
index d3f4923..c33c9a8 100644
--- a/tests/src/com/android/providers/media/photopicker/UnreliableVolumeFacadeTest.java
+++ b/tests/src/com/android/providers/media/photopicker/UnreliableVolumeFacadeTest.java
@@ -121,4 +121,4 @@
}
return list;
}
-}
\ No newline at end of file
+}
diff --git a/tests/src/com/android/providers/media/photopicker/data/PickerDbFacadeTest.java b/tests/src/com/android/providers/media/photopicker/data/PickerDbFacadeTest.java
index 61cf600..1377410 100644
--- a/tests/src/com/android/providers/media/photopicker/data/PickerDbFacadeTest.java
+++ b/tests/src/com/android/providers/media/photopicker/data/PickerDbFacadeTest.java
@@ -24,6 +24,7 @@
import android.provider.CloudMediaProviderContract;
import android.provider.CloudMediaProviderContract.AlbumColumns;
import android.provider.CloudMediaProviderContract.MediaColumns;
+import android.provider.MediaStore.PickerMediaColumns;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
@@ -75,7 +76,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS + 1);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS + 1);
}
// Test updating the same row
@@ -84,7 +85,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS + 2);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS + 2);
}
}
@@ -97,7 +98,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
}
}
@@ -111,7 +112,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS + 1);
+ assertCloudMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS + 1);
}
// Test updating the same row
@@ -120,7 +121,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS + 2);
+ assertCloudMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS + 2);
}
}
@@ -135,7 +136,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
}
}
@@ -150,7 +151,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS + 1);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS + 1);
}
}
@@ -183,7 +184,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
}
assertThat(mFacade.removeMedia(getDeletedMediaCursor(LOCAL_ID), 0, LOCAL_PROVIDER))
@@ -192,7 +193,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
}
}
@@ -225,7 +226,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID + "1", DATE_TAKEN_MS + 1);
+ assertCloudMediaCursor(cr, CLOUD_ID + "1", DATE_TAKEN_MS + 1);
}
assertThat(mFacade.removeMedia(getDeletedMediaCursor(CLOUD_ID + "1"), 0, CLOUD_PROVIDER))
@@ -234,7 +235,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID + "2", DATE_TAKEN_MS + 2);
+ assertCloudMediaCursor(cr, CLOUD_ID + "2", DATE_TAKEN_MS + 2);
}
}
@@ -249,7 +250,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
}
assertThat(mFacade.removeMedia(getDeletedMediaCursor(CLOUD_ID), 0, CLOUD_PROVIDER))
@@ -258,7 +259,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
}
}
@@ -274,7 +275,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS + 2);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS + 2);
}
assertThat(mFacade.removeMedia(getDeletedMediaCursor(LOCAL_ID), 0, LOCAL_PROVIDER))
@@ -296,7 +297,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS + 2);
+ assertCloudMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS + 2);
}
assertThat(mFacade.removeMedia(getDeletedMediaCursor(CLOUD_ID), 0, CLOUD_PROVIDER))
@@ -320,7 +321,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
}
assertThat(mFacade.removeMedia(getDeletedMediaCursor(LOCAL_ID), 0, LOCAL_PROVIDER))
@@ -329,7 +330,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS + 2);
+ assertCloudMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS + 2);
}
assertThat(mFacade.removeMedia(getDeletedMediaCursor(CLOUD_ID), 0, CLOUD_PROVIDER))
@@ -355,7 +356,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
}
assertThat(mFacade.resetMedia(LOCAL_PROVIDER)).isEqualTo(1);
@@ -381,7 +382,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
}
assertThat(mFacade.resetMedia(CLOUD_PROVIDER)).isEqualTo(1);
@@ -389,7 +390,7 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
}
}
@@ -408,14 +409,14 @@
PickerDbFacade.QueryFilterBuilder qfbBefore = new PickerDbFacade.QueryFilterBuilder(5);
qfbBefore.setDateTakenBeforeMs(DATE_TAKEN_MS - 1);
qfbBefore.setId(5);
- try (Cursor cr = mFacade.queryMedia(qfbBefore.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbBefore.build())) {
assertThat(cr.getCount()).isEqualTo(0);
}
PickerDbFacade.QueryFilterBuilder qfbAfter = new PickerDbFacade.QueryFilterBuilder(5);
qfbAfter.setDateTakenAfterMs(DATE_TAKEN_MS + 1);
qfbAfter.setId(5);
- try (Cursor cr = mFacade.queryMedia(qfbAfter.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAfter.build())) {
assertThat(cr.getCount()).isEqualTo(0);
}
}
@@ -431,21 +432,21 @@
PickerDbFacade.QueryFilterBuilder qfbBefore = new PickerDbFacade.QueryFilterBuilder(5);
qfbBefore.setDateTakenBeforeMs(DATE_TAKEN_MS);
qfbBefore.setId(2);
- try (Cursor cr = mFacade.queryMedia(qfbBefore.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbBefore.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID + "1", DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID + "1", DATE_TAKEN_MS);
}
PickerDbFacade.QueryFilterBuilder qfbAfter = new PickerDbFacade.QueryFilterBuilder(5);
qfbAfter.setDateTakenAfterMs(DATE_TAKEN_MS);
qfbAfter.setId(1);
- try (Cursor cr = mFacade.queryMedia(qfbAfter.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAfter.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID + "2", DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID + "2", DATE_TAKEN_MS);
}
}
@@ -462,28 +463,29 @@
PickerDbFacade.QueryFilterBuilder qfbBefore = new PickerDbFacade.QueryFilterBuilder(1);
qfbBefore.setDateTakenBeforeMs(DATE_TAKEN_MS + 1);
qfbBefore.setId(0);
- try (Cursor cr = mFacade.queryMedia(qfbBefore.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbBefore.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID + "3", DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID + "3", DATE_TAKEN_MS);
}
PickerDbFacade.QueryFilterBuilder qfbAfter = new PickerDbFacade.QueryFilterBuilder(1);
qfbAfter.setDateTakenAfterMs(DATE_TAKEN_MS - 1);
qfbAfter.setId(0);
- try (Cursor cr = mFacade.queryMedia(qfbAfter.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAfter.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID + "3", DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID + "3", DATE_TAKEN_MS);
}
- try (Cursor cr = mFacade.queryMedia(new PickerDbFacade.QueryFilterBuilder(1).build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(
+ new PickerDbFacade.QueryFilterBuilder(1).build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID + "3", DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID + "3", DATE_TAKEN_MS);
}
}
@@ -502,16 +504,16 @@
// Verify all
PickerDbFacade.QueryFilterBuilder qfbAll = new PickerDbFacade.QueryFilterBuilder(1000);
qfbAll.setSizeBytes(10);
- try (Cursor cr = mFacade.queryMedia(qfbAll.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAll.build())) {
assertThat(cr.getCount()).isEqualTo(2);
}
qfbAll.setSizeBytes(1);
- try (Cursor cr = mFacade.queryMedia(qfbAll.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAll.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, VIDEO_MIME_TYPE);
+ assertCloudMediaCursor(cr, LOCAL_ID, VIDEO_MIME_TYPE);
}
// Verify after
@@ -519,18 +521,18 @@
qfbAfter.setDateTakenAfterMs(DATE_TAKEN_MS - 1);
qfbAfter.setId(0);
qfbAfter.setSizeBytes(10);
- try (Cursor cr = mFacade.queryMedia(qfbAfter.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAfter.build())) {
assertThat(cr.getCount()).isEqualTo(2);
}
qfbAfter.setDateTakenAfterMs(DATE_TAKEN_MS - 1);
qfbAfter.setId(0);
qfbAfter.setSizeBytes(1);
- try (Cursor cr = mFacade.queryMedia(qfbAfter.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAfter.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, VIDEO_MIME_TYPE);
+ assertCloudMediaCursor(cr, LOCAL_ID, VIDEO_MIME_TYPE);
}
// Verify before
@@ -538,18 +540,18 @@
qfbBefore.setDateTakenBeforeMs(DATE_TAKEN_MS + 1);
qfbBefore.setId(0);
qfbBefore.setSizeBytes(10);
- try (Cursor cr = mFacade.queryMedia(qfbBefore.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbBefore.build())) {
assertThat(cr.getCount()).isEqualTo(2);
}
qfbBefore.setDateTakenBeforeMs(DATE_TAKEN_MS + 1);
qfbBefore.setId(0);
qfbBefore.setSizeBytes(1);
- try (Cursor cr = mFacade.queryMedia(qfbBefore.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbBefore.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, VIDEO_MIME_TYPE);
+ assertCloudMediaCursor(cr, LOCAL_ID, VIDEO_MIME_TYPE);
}
}
@@ -568,16 +570,16 @@
// Verify all
PickerDbFacade.QueryFilterBuilder qfbAll = new PickerDbFacade.QueryFilterBuilder(1000);
qfbAll.setMimeType("*/*");
- try (Cursor cr = mFacade.queryMedia(qfbAll.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAll.build())) {
assertThat(cr.getCount()).isEqualTo(2);
}
qfbAll.setMimeType("video/mp4");
- try (Cursor cr = mFacade.queryMedia(qfbAll.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAll.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
}
// Verify after
@@ -585,18 +587,18 @@
qfbAfter.setDateTakenAfterMs(DATE_TAKEN_MS - 1);
qfbAfter.setId(0);
qfbAfter.setMimeType("video/*");
- try (Cursor cr = mFacade.queryMedia(qfbAfter.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAfter.build())) {
assertThat(cr.getCount()).isEqualTo(2);
}
qfbAfter.setDateTakenAfterMs(DATE_TAKEN_MS - 1);
qfbAfter.setId(0);
qfbAfter.setMimeType("video/webm");
- try (Cursor cr = mFacade.queryMedia(qfbAfter.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAfter.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, VIDEO_MIME_TYPE);
+ assertCloudMediaCursor(cr, LOCAL_ID, VIDEO_MIME_TYPE);
}
// Verify before
@@ -604,18 +606,18 @@
qfbBefore.setDateTakenBeforeMs(DATE_TAKEN_MS + 1);
qfbBefore.setId(0);
qfbBefore.setMimeType("video/*");
- try (Cursor cr = mFacade.queryMedia(qfbBefore.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbBefore.build())) {
assertThat(cr.getCount()).isEqualTo(2);
}
qfbBefore.setDateTakenBeforeMs(DATE_TAKEN_MS + 1);
qfbBefore.setId(0);
qfbBefore.setMimeType("video/mp4");
- try (Cursor cr = mFacade.queryMedia(qfbBefore.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbBefore.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
}
}
@@ -635,19 +637,58 @@
PickerDbFacade.QueryFilterBuilder qfbAll = new PickerDbFacade.QueryFilterBuilder(1000);
qfbAll.setMimeType("*/*");
qfbAll.setSizeBytes(10);
- try (Cursor cr = mFacade.queryMedia(qfbAll.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAll.build())) {
assertThat(cr.getCount()).isEqualTo(2);
}
// mime_type and size filter matches none
qfbAll.setMimeType("video/webm");
qfbAll.setSizeBytes(1);
- try (Cursor cr = mFacade.queryMedia(qfbAll.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfbAll.build())) {
assertThat(cr.getCount()).isEqualTo(0);
}
}
@Test
+ public void testQueryMediaId() throws Exception {
+ final String[] allProjection = new String[] {
+ PickerMediaColumns.DISPLAY_NAME,
+ PickerMediaColumns.DATA,
+ PickerMediaColumns.MIME_TYPE,
+ PickerMediaColumns.DATE_TAKEN,
+ PickerMediaColumns.SIZE,
+ PickerMediaColumns.DURATION_MILLIS
+ };
+
+ final String[] oneProjection = new String[] { PickerMediaColumns.DATE_TAKEN };
+
+ Cursor localCursor = getLocalMediaCursor(LOCAL_ID, DATE_TAKEN_MS);
+ Cursor cloudCursor = getCloudMediaCursor(CLOUD_ID, /* localId */ null, DATE_TAKEN_MS);
+
+ assertThat(mFacade.addMedia(localCursor, LOCAL_PROVIDER)).isEqualTo(1);
+ assertThat(mFacade.addMedia(cloudCursor, CLOUD_PROVIDER)).isEqualTo(1);
+
+ // Assert all projection columns
+ try (Cursor cr = mFacade.queryMediaIdForApps(LOCAL_PROVIDER, LOCAL_ID,
+ allProjection)) {
+ assertThat(cr.getCount()).isEqualTo(1);
+
+ cr.moveToFirst();
+ assertMediaStoreCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ }
+
+ // Assert one projection column
+ try (Cursor cr = mFacade.queryMediaIdForApps(CLOUD_PROVIDER, CLOUD_ID,
+ oneProjection)) {
+ assertThat(cr.getCount()).isEqualTo(1);
+
+ cr.moveToFirst();
+ assertThat(cr.getLong(cr.getColumnIndex(PickerMediaColumns.DATE_TAKEN)))
+ .isEqualTo(DATE_TAKEN_MS);
+ }
+ }
+
+ @Test
public void testSetCloudProvider() throws Exception {
Cursor localCursor = getLocalMediaCursor(LOCAL_ID, DATE_TAKEN_MS);
Cursor cloudCursor = getCloudMediaCursor(CLOUD_ID, null, DATE_TAKEN_MS);
@@ -659,10 +700,10 @@
assertThat(cr.getCount()).isEqualTo(2);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
cr.moveToNext();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
}
// Clearing the cloud provider hides cloud media
@@ -672,7 +713,7 @@
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
}
// Setting the cloud provider unhides cloud media
@@ -682,10 +723,10 @@
assertThat(cr.getCount()).isEqualTo(2);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, CLOUD_ID, DATE_TAKEN_MS);
cr.moveToNext();
- assertMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID, DATE_TAKEN_MS);
}
}
@@ -711,18 +752,18 @@
PickerDbFacade.QueryFilterBuilder qfb =
new PickerDbFacade.QueryFilterBuilder(/* limit */ 1000);
- try (Cursor cr = mFacade.queryMedia(qfb.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfb.build())) {
assertThat(cr.getCount()).isEqualTo(4);
}
qfb.setIsFavorite(true);
- try (Cursor cr = mFacade.queryMedia(qfb.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfb.build())) {
assertThat(cr.getCount()).isEqualTo(2);
cr.moveToFirst();
- assertMediaCursor(cr, CLOUD_ID + 1, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, CLOUD_ID + 1, DATE_TAKEN_MS);
cr.moveToNext();
- assertMediaCursor(cr, LOCAL_ID + 1, DATE_TAKEN_MS);
+ assertCloudMediaCursor(cr, LOCAL_ID + 1, DATE_TAKEN_MS);
}
}
@@ -748,14 +789,14 @@
PickerDbFacade.QueryFilterBuilder qfb =
new PickerDbFacade.QueryFilterBuilder(/* limit */ 1000);
- try (Cursor cr = mFacade.queryMedia(qfb.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfb.build())) {
assertThat(cr.getCount()).isEqualTo(4);
}
try (Cursor cr = mFacade.getFavoriteAlbum(qfb.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertAlbumCursor(cr,
+ assertCloudAlbumCursor(cr,
Category.CATEGORY_FAVORITES,
Category.getCategoryName(mContext, Category.CATEGORY_FAVORITES),
LOCAL_ID + "1",
@@ -786,14 +827,14 @@
PickerDbFacade.QueryFilterBuilder qfb =
new PickerDbFacade.QueryFilterBuilder(/* limit */ 1000);
- try (Cursor cr = mFacade.queryMedia(qfb.build())) {
+ try (Cursor cr = mFacade.queryMediaForUi(qfb.build())) {
assertThat(cr.getCount()).isEqualTo(4);
}
try (Cursor cr = mFacade.getFavoriteAlbum(qfb.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertAlbumCursor(cr,
+ assertCloudAlbumCursor(cr,
Category.CATEGORY_FAVORITES,
Category.getCategoryName(mContext, Category.CATEGORY_FAVORITES),
LOCAL_ID + "1",
@@ -805,7 +846,7 @@
try (Cursor cr = mFacade.getFavoriteAlbum(qfb.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertAlbumCursor(cr,
+ assertCloudAlbumCursor(cr,
Category.CATEGORY_FAVORITES,
Category.getCategoryName(mContext, Category.CATEGORY_FAVORITES),
CLOUD_ID + "1",
@@ -817,7 +858,7 @@
try (Cursor cr = mFacade.getFavoriteAlbum(qfb.build())) {
assertThat(cr.getCount()).isEqualTo(1);
cr.moveToFirst();
- assertAlbumCursor(cr,
+ assertCloudAlbumCursor(cr,
Category.CATEGORY_FAVORITES,
Category.getCategoryName(mContext, Category.CATEGORY_FAVORITES),
LOCAL_ID + "1",
@@ -846,15 +887,16 @@
try (Cursor cr = queryMediaAll()) {
assertThat(cr.getCount()).isEqualTo(2);
cr.moveToFirst();
- assertMediaCursor(cr, LOCAL_ID + 1, VIDEO_MIME_TYPE);
+ assertCloudMediaCursor(cr, LOCAL_ID + 1, VIDEO_MIME_TYPE);
cr.moveToNext();
- assertMediaCursor(cr, LOCAL_ID, IMAGE_MIME_TYPE);
+ assertCloudMediaCursor(cr, LOCAL_ID, IMAGE_MIME_TYPE);
}
}
private Cursor queryMediaAll() {
- return mFacade.queryMedia(new PickerDbFacade.QueryFilterBuilder(1000).build());
+ return mFacade.queryMediaForUi(
+ new PickerDbFacade.QueryFilterBuilder(1000).build());
}
// TODO(b/190713331): s/id/CloudMediaProviderContract#MediaColumns#ID/
@@ -917,7 +959,18 @@
return "content://media/external/file/" + localId;
}
- private static void assertAlbumCursor(Cursor cursor, String albumId, String displayName,
+ private static String getDisplayName(String mediaId, String mimeType) {
+ final String extension = mimeType.equals(IMAGE_MIME_TYPE)
+ ? PickerDbFacade.IMAGE_FILE_EXTENSION : PickerDbFacade.VIDEO_FILE_EXTENSION;
+ return mediaId + extension;
+ }
+
+ private static String getData(String authority, String displayName) {
+ return "/storage/emulated/0/.transforms/synthetic/picker/" + authority + "/media/"
+ + displayName;
+ }
+
+ private static void assertCloudAlbumCursor(Cursor cursor, String albumId, String displayName,
String mediaCoverId, long dateTakenMs, long mediaCount) {
assertThat(cursor.getString(cursor.getColumnIndex(AlbumColumns.ID)))
.isEqualTo(albumId);
@@ -931,13 +984,10 @@
.isEqualTo(mediaCount);
}
- private static void assertMediaCursor(Cursor cursor, String id, String mimeType) {
- final String extension = mimeType.equals(IMAGE_MIME_TYPE)
- ? PickerDbFacade.IMAGE_FILE_EXTENSION : PickerDbFacade.VIDEO_FILE_EXTENSION;
- final String localData = "/storage/emulated/0/.transforms/synthetic/picker/"
- + LOCAL_PROVIDER + "/media/" + id + extension;
- final String cloudData = "/storage/emulated/0/.transforms/synthetic/picker/"
- + CLOUD_PROVIDER + "/media/" + id + extension;
+ private static void assertCloudMediaCursor(Cursor cursor, String id, String mimeType) {
+ final String displayName = getDisplayName(id, mimeType);
+ final String localData = getData(LOCAL_PROVIDER, displayName);
+ final String cloudData = getData(CLOUD_PROVIDER, displayName);
assertThat(cursor.getString(cursor.getColumnIndex(MediaColumns.ID)))
.isEqualTo(id);
@@ -947,8 +997,9 @@
.isEqualTo(id.startsWith(LOCAL_ID) ? localData : cloudData);
}
- private static void assertMediaCursor(Cursor cursor, String id, long dateTakenMs) {
- assertMediaCursor(cursor, id, VIDEO_MIME_TYPE);
+ private static void assertCloudMediaCursor(Cursor cursor, String id, long dateTakenMs) {
+ assertCloudMediaCursor(cursor, id, VIDEO_MIME_TYPE);
+
assertThat(cursor.getString(cursor.getColumnIndex(MediaColumns.MIME_TYPE)))
.isEqualTo(VIDEO_MIME_TYPE);
assertThat(cursor.getInt(cursor.getColumnIndex(MediaColumns.STANDARD_MIME_TYPE_EXTENSION)))
@@ -962,4 +1013,23 @@
assertThat(cursor.getLong(cursor.getColumnIndex(MediaColumns.DURATION_MS)))
.isEqualTo(DURATION_MS);
}
+
+ private static void assertMediaStoreCursor(Cursor cursor, String id, long dateTakenMs) {
+ final String displayName = getDisplayName(id, VIDEO_MIME_TYPE);
+ final String localData = getData(LOCAL_PROVIDER, displayName);
+ final String cloudData = getData(CLOUD_PROVIDER, displayName);
+
+ assertThat(cursor.getString(cursor.getColumnIndex(PickerMediaColumns.DISPLAY_NAME)))
+ .isEqualTo(displayName);
+ assertThat(cursor.getString(cursor.getColumnIndex(PickerMediaColumns.DATA)))
+ .isEqualTo(id.startsWith(LOCAL_ID) ? localData : cloudData);
+ assertThat(cursor.getString(cursor.getColumnIndex(PickerMediaColumns.MIME_TYPE)))
+ .isEqualTo(VIDEO_MIME_TYPE);
+ assertThat(cursor.getLong(cursor.getColumnIndex(PickerMediaColumns.DATE_TAKEN)))
+ .isEqualTo(dateTakenMs);
+ assertThat(cursor.getLong(cursor.getColumnIndex(PickerMediaColumns.SIZE)))
+ .isEqualTo(SIZE_BYTES);
+ assertThat(cursor.getLong(cursor.getColumnIndex(PickerMediaColumns.DURATION_MILLIS)))
+ .isEqualTo(DURATION_MS);
+ }
}