summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk3
-rw-r--r--AndroidManifest.xml1
-rw-r--r--res/values-af/strings.xml1
-rw-r--r--res/values-am/strings.xml1
-rw-r--r--res/values-ar/strings.xml5
-rw-r--r--res/values-az/strings.xml (renamed from res/values-az-rAZ/strings.xml)1
-rw-r--r--res/values-b+sr+Latn/strings.xml1
-rw-r--r--res/values-be/strings.xml (renamed from res/values-be-rBY/strings.xml)1
-rw-r--r--res/values-bg/strings.xml1
-rw-r--r--res/values-bn/strings.xml (renamed from res/values-bn-rBD/strings.xml)1
-rw-r--r--res/values-bs/strings.xml (renamed from res/values-bs-rBA/strings.xml)1
-rw-r--r--res/values-ca/strings.xml1
-rw-r--r--res/values-cs/strings.xml1
-rw-r--r--res/values-da/strings.xml1
-rw-r--r--res/values-de/strings.xml1
-rw-r--r--res/values-el/strings.xml1
-rw-r--r--res/values-en-rAU/strings.xml1
-rw-r--r--res/values-en-rGB/strings.xml1
-rw-r--r--res/values-en-rIN/strings.xml1
-rw-r--r--res/values-es-rUS/strings.xml1
-rw-r--r--res/values-es/strings.xml1
-rw-r--r--res/values-et/strings.xml (renamed from res/values-et-rEE/strings.xml)1
-rw-r--r--res/values-eu/strings.xml (renamed from res/values-eu-rES/strings.xml)1
-rw-r--r--res/values-fa/strings.xml1
-rw-r--r--res/values-fi/strings.xml1
-rw-r--r--res/values-fr-rCA/strings.xml1
-rw-r--r--res/values-fr/strings.xml1
-rw-r--r--res/values-gl/strings.xml (renamed from res/values-gl-rES/strings.xml)1
-rw-r--r--res/values-gu/strings.xml (renamed from res/values-gu-rIN/strings.xml)1
-rw-r--r--res/values-hi/strings.xml1
-rw-r--r--res/values-hr/strings.xml1
-rw-r--r--res/values-hu/strings.xml1
-rw-r--r--res/values-hy/strings.xml (renamed from res/values-hy-rAM/strings.xml)1
-rw-r--r--res/values-in/strings.xml1
-rw-r--r--res/values-is/strings.xml (renamed from res/values-is-rIS/strings.xml)1
-rw-r--r--res/values-it/strings.xml1
-rw-r--r--res/values-iw/strings.xml1
-rw-r--r--res/values-ja/strings.xml1
-rw-r--r--res/values-ka/strings.xml (renamed from res/values-ka-rGE/strings.xml)1
-rw-r--r--res/values-kk/strings.xml (renamed from res/values-kk-rKZ/strings.xml)1
-rw-r--r--res/values-km/strings.xml (renamed from res/values-km-rKH/strings.xml)1
-rw-r--r--res/values-kn/strings.xml (renamed from res/values-kn-rIN/strings.xml)1
-rw-r--r--res/values-ko/strings.xml1
-rw-r--r--res/values-ky/strings.xml (renamed from res/values-ky-rKG/strings.xml)3
-rw-r--r--res/values-lo/strings.xml (renamed from res/values-lo-rLA/strings.xml)1
-rw-r--r--res/values-lt/strings.xml1
-rw-r--r--res/values-lv/strings.xml1
-rw-r--r--res/values-mk/strings.xml (renamed from res/values-mk-rMK/strings.xml)3
-rw-r--r--res/values-ml/strings.xml (renamed from res/values-ml-rIN/strings.xml)1
-rw-r--r--res/values-mn/strings.xml (renamed from res/values-mn-rMN/strings.xml)1
-rw-r--r--res/values-mr/strings.xml (renamed from res/values-mr-rIN/strings.xml)1
-rw-r--r--res/values-ms/strings.xml (renamed from res/values-ms-rMY/strings.xml)1
-rw-r--r--res/values-my/strings.xml (renamed from res/values-my-rMM/strings.xml)1
-rw-r--r--res/values-nb/strings.xml1
-rw-r--r--res/values-ne/strings.xml (renamed from res/values-ne-rNP/strings.xml)5
-rw-r--r--res/values-nl/strings.xml1
-rw-r--r--res/values-pa/strings.xml (renamed from res/values-pa-rIN/strings.xml)1
-rw-r--r--res/values-pl/strings.xml1
-rw-r--r--res/values-pt-rPT/strings.xml1
-rw-r--r--res/values-pt/strings.xml1
-rw-r--r--res/values-ro/strings.xml1
-rw-r--r--res/values-ru/strings.xml1
-rw-r--r--res/values-si/strings.xml (renamed from res/values-si-rLK/strings.xml)1
-rw-r--r--res/values-sk/strings.xml1
-rw-r--r--res/values-sl/strings.xml1
-rw-r--r--res/values-sq/strings.xml (renamed from res/values-sq-rAL/strings.xml)1
-rw-r--r--res/values-sr/strings.xml1
-rw-r--r--res/values-sv/strings.xml1
-rw-r--r--res/values-sw/strings.xml1
-rw-r--r--res/values-ta/strings.xml (renamed from res/values-ta-rIN/strings.xml)1
-rw-r--r--res/values-te/strings.xml (renamed from res/values-te-rIN/strings.xml)1
-rw-r--r--res/values-th/strings.xml1
-rw-r--r--res/values-tl/strings.xml1
-rw-r--r--res/values-tr/strings.xml1
-rw-r--r--res/values-uk/strings.xml1
-rw-r--r--res/values-ur/strings.xml (renamed from res/values-ur-rPK/strings.xml)1
-rw-r--r--res/values-uz/strings.xml (renamed from res/values-uz-rUZ/strings.xml)1
-rw-r--r--res/values-vi/strings.xml1
-rw-r--r--res/values-zh-rCN/strings.xml1
-rw-r--r--res/values-zh-rHK/strings.xml1
-rw-r--r--res/values-zh-rTW/strings.xml5
-rw-r--r--res/values-zu/strings.xml1
-rw-r--r--res/values/strings.xml3
-rw-r--r--src/com/android/providers/downloads/DownloadNotifier.java44
-rw-r--r--src/com/android/providers/downloads/DownloadProvider.java7
-rw-r--r--src/com/android/providers/downloads/DownloadReceiver.java21
-rw-r--r--src/com/android/providers/downloads/DownloadStorageProvider.java338
-rw-r--r--src/com/android/providers/downloads/DownloadThread.java10
-rw-r--r--src/com/android/providers/downloads/Helpers.java2
-rw-r--r--src/com/android/providers/downloads/OpenHelper.java9
-rw-r--r--src/com/android/providers/downloads/RawDocumentsHelper.java68
-rw-r--r--src/com/android/providers/downloads/StorageUtils.java2
-rw-r--r--tests/Android.mk6
-rw-r--r--tests/AndroidTest.xml27
-rw-r--r--tests/permission/Android.mk1
-rw-r--r--tests/public_api_access/Android.mk1
-rw-r--r--tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java18
-rw-r--r--ui/Android.mk3
-rw-r--r--ui/res/values-az/strings.xml (renamed from ui/res/values-az-rAZ/strings.xml)0
-rw-r--r--ui/res/values-be/strings.xml (renamed from ui/res/values-be-rBY/strings.xml)0
-rw-r--r--ui/res/values-bn/strings.xml (renamed from ui/res/values-bn-rBD/strings.xml)0
-rw-r--r--ui/res/values-bs/strings.xml (renamed from ui/res/values-bs-rBA/strings.xml)0
-rw-r--r--ui/res/values-et/strings.xml (renamed from ui/res/values-et-rEE/strings.xml)0
-rw-r--r--ui/res/values-eu/strings.xml (renamed from ui/res/values-eu-rES/strings.xml)0
-rw-r--r--ui/res/values-gl/strings.xml (renamed from ui/res/values-gl-rES/strings.xml)0
-rw-r--r--ui/res/values-gu/strings.xml (renamed from ui/res/values-gu-rIN/strings.xml)0
-rw-r--r--ui/res/values-hy/strings.xml (renamed from ui/res/values-hy-rAM/strings.xml)0
-rw-r--r--ui/res/values-is/strings.xml (renamed from ui/res/values-is-rIS/strings.xml)0
-rw-r--r--ui/res/values-ka/strings.xml (renamed from ui/res/values-ka-rGE/strings.xml)0
-rw-r--r--ui/res/values-kk/strings.xml (renamed from ui/res/values-kk-rKZ/strings.xml)0
-rw-r--r--ui/res/values-km/strings.xml (renamed from ui/res/values-km-rKH/strings.xml)2
-rw-r--r--ui/res/values-kn/strings.xml (renamed from ui/res/values-kn-rIN/strings.xml)2
-rw-r--r--ui/res/values-ky/strings.xml (renamed from ui/res/values-ky-rKG/strings.xml)2
-rw-r--r--ui/res/values-lo/strings.xml (renamed from ui/res/values-lo-rLA/strings.xml)0
-rw-r--r--ui/res/values-mk/strings.xml (renamed from ui/res/values-mk-rMK/strings.xml)0
-rw-r--r--ui/res/values-ml/strings.xml (renamed from ui/res/values-ml-rIN/strings.xml)0
-rw-r--r--ui/res/values-mn/strings.xml (renamed from ui/res/values-mn-rMN/strings.xml)0
-rw-r--r--ui/res/values-mr/strings.xml (renamed from ui/res/values-mr-rIN/strings.xml)0
-rw-r--r--ui/res/values-ms/strings.xml (renamed from ui/res/values-ms-rMY/strings.xml)0
-rw-r--r--ui/res/values-my/strings.xml (renamed from ui/res/values-my-rMM/strings.xml)0
-rw-r--r--ui/res/values-ne/strings.xml (renamed from ui/res/values-ne-rNP/strings.xml)2
-rw-r--r--ui/res/values-pa/strings.xml (renamed from ui/res/values-pa-rIN/strings.xml)0
-rw-r--r--ui/res/values-si/strings.xml (renamed from ui/res/values-si-rLK/strings.xml)0
-rw-r--r--ui/res/values-sq/strings.xml (renamed from ui/res/values-sq-rAL/strings.xml)0
-rw-r--r--ui/res/values-ta/strings.xml (renamed from ui/res/values-ta-rIN/strings.xml)0
-rw-r--r--ui/res/values-te/strings.xml (renamed from ui/res/values-te-rIN/strings.xml)0
-rw-r--r--ui/res/values-ur/strings.xml (renamed from ui/res/values-ur-rPK/strings.xml)0
-rw-r--r--ui/res/values-uz/strings.xml (renamed from ui/res/values-uz-rUZ/strings.xml)0
-rw-r--r--ui/res/values-zh-rTW/strings.xml2
-rw-r--r--ui/src/com/android/providers/downloads/ui/TrampolineActivity.java15
130 files changed, 525 insertions, 160 deletions
diff --git a/Android.mk b/Android.mk
index 75597f59..084aea48 100644
--- a/Android.mk
+++ b/Android.mk
@@ -8,8 +8,7 @@ LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := DownloadProvider
LOCAL_CERTIFICATE := media
LOCAL_PRIVILEGED_MODULE := true
-LOCAL_STATIC_JAVA_LIBRARIES := guava \
- android-support-documents-archive
+LOCAL_STATIC_JAVA_LIBRARIES := guava
LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.providers.downloads.*
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 87205238..f802f056 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -87,6 +87,7 @@
<provider
android:name=".DownloadStorageProvider"
+ android:label="@string/storage_description"
android:authorities="com.android.providers.downloads.documents"
android:grantUriPermissions="true"
android:exported="true"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index daeaed91..f3fcc053 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Aflaaibestuurder"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Aflaaie"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Kry toegang tot aflaaibestuurder."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Laat die program toe om toegang te kry tot die aflaaibestuurder en dit te gebruik om lêers af te laai. Kwaadwillige programme kan dit gebruik om aflaaie te ontwrig en toegang tot private inligting te kry."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Gevorderde aflaaibestuurder-funksies"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index be3b5f52..3715986c 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"አውርድ አዸራጅ"</string>
+ <string name="storage_description" msgid="7982444311558023664">"የወረዱ"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"የአውርድ አደራጅ ድረስ።"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"መተግበሪያው የአውርድ አስተዳዳሪ እንዲደርስበት እና ፋይሎችን ለማውረድ እንዲጠቀምበት ይፈቅድለታል:: ተንኮል አዘል መተግበሪያዎች አውርዶችን ለማስተጓጎል እና የግል መረጃን ለመድረስ ሊጠቀሙበት ይችላሉ::"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"የላቀ አውረድ አዸራጅ ተግባሮች።"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 67d473df..c028bb13 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"إدارة التنزيل"</string>
+ <string name="storage_description" msgid="7982444311558023664">"التنزيلات"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"الدخول إلى إدارة التنزيل."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"للسماح للتطبيق بالدخول إلى إدارة التنزيل واستخدامها لتنزيل الملفات. يمكن للتطبيقات الضارة استخدام هذا لتعطيل التنزيلات والدخول إلى المعلومات الخاصة."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"وظائف إدارة التنزيل المتقدمة."</string>
@@ -34,7 +35,7 @@
<string name="permdesc_accessAllDownloads" msgid="1871832254578267128">"للسماح للتطبيق بعرض وتعديل جميع التنزيلات التي بدأت من خلال أي تطبيق على النظام."</string>
<string name="download_unknown_title" msgid="7015124071247271585">"‏&lt;بلا عنوان&gt;"</string>
<string name="notification_download_complete" msgid="5443563299253103667">"اكتمل التنزيل."</string>
- <string name="notification_download_failed" msgid="8612136111952014978">"أخفق التنزيل."</string>
+ <string name="notification_download_failed" msgid="8612136111952014978">"تعذّر التنزيل."</string>
<string name="notification_need_wifi_for_size" msgid="2556172885154833575">"‏يتطلب حجم التنزيل شبكة Wi-Fi."</string>
<string name="notification_paused_in_background" msgid="4328508073283591772">"متوقف مؤقتًا في الخلفية."</string>
<string name="wifi_required_title" msgid="1995971416871498179">"حجم التنزيل كبير جدًا بالنسبة إلى مشغّل الشبكة"</string>
@@ -65,6 +66,6 @@
<string name="root_downloads" msgid="4098414876292351487">"التنزيلات"</string>
<string name="download_queued" msgid="3302638231377947451">"في قائمة الانتظار"</string>
<string name="download_running" msgid="3925050393361158266">"قيد التقدم"</string>
- <string name="download_error" msgid="5144180777324573236">"أخفق الاتصال بالشبكة"</string>
+ <string name="download_error" msgid="5144180777324573236">"تعذّر الاتصال بالشبكة"</string>
<string name="download_running_percent" msgid="4305080769167320204">"قيد التقدّم، <xliff:g id="PERCENTAGE">%s</xliff:g>"</string>
</resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az/strings.xml
index b87c8568..48087ac6 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Endirmə İdarəçisi"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Endirmələr"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Endirmə idarəçisinə daxil ol."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Tətbiqə faylları endirmək üçün endirmə idarçisinə daxil olmağa imkan verir. Zərərli tətbiqlər bundan endirmələri pozmaq və özəl məlumatlara daxil olmaq üçün istifadə edə bilər."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Ətraflı endirmə idarəçisi funksiyaları."</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 75b38d11..ba460c7c 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Menadžer preuzimanja"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Preuzimanja"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Pristup menadžeru preuzimanja."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Omogućava aplikaciji da pristupa menadžeru preuzimanja i koristi ga za preuzimanje datoteka. Zlonamerne aplikacije mogu pomoću toga da ometaju preuzimanja i pristupaju privatnim informacijama."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Napredne funkcije menadžera preuzimanja."</string>
diff --git a/res/values-be-rBY/strings.xml b/res/values-be/strings.xml
index d2b000d7..19286498 100644
--- a/res/values-be-rBY/strings.xml
+++ b/res/values-be/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Менеджэр спампоўвання"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Спампоўкі"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Доступ да менеджэра спампоўванняў."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Дазваляе прыкладанню атрымлiваць доступ да менеджэра спампавання i выкарыстоўваць яго для спампавання файлаў. Шкоднасныя прыкладаннi могуць выкарыстоўваць гэта, каб сарваць загрузку і закрыць доступ да прыватнай інфармацыі."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Пашыраныя функцыі менеджэра спампоўванняў."</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 047ac64b..48deebc5 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Мениджър на изтеглянията"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Изтегляния"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Достъп до диспечера за изтегляне."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Дава на приложението достъп до мениджъра на изтеглянията и му позволява да го използва за изтегляне на файлове. Злонамерените приложения могат да използват това за прекъсване на изтеглянията и за достъп до лична информация."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Разширени функции на диспечера за изтегляне."</string>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn/strings.xml
index 90c6ecc4..b984ce5a 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"ডাউনলোড ম্যানেজার"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ডাউনলোডগুলি"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"ডাউনলোড ম্যানেজার অ্যাক্সেস করুন।"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"অ্যাপ্লিকেশানটিকে ডাউনলোড ম্যানেজার অ্যাক্সেস করার এবং এটি ব্যবহার করে ফাইল ডাউনলোড করার অনুমতি দেয়। ক্ষতিকারক অ্যাপ্লিকেশানগুলি ডাউনলোড ব্যাহত এবং ব্যক্তিগত তথ্য অ্যাক্সেস করার জন্য এটি ব্যবহার করতে পারে।"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"উন্নত ডাউনলোড ম্যানেজার কার্যকারিতা।"</string>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs/strings.xml
index a738b809..607aa4d5 100644
--- a/res/values-bs-rBA/strings.xml
+++ b/res/values-bs/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Upravitelj za preuzimanja"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Preuzimanja"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Pristupite upravitelju za preuzimanja."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Dopušta aplikacijama da pristupaju upravitelju za preuzimanja i koriste ga za preuzimanje datoteka. Zlonamjerne aplikacije to mogu koristiti da poremete preuzimanja i pristupaju privatnim informacijama."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Napredne funkcije upravitelja za preuzimanja."</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 8f952460..8f6bf666 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Gestor de baixades"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Baixades"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Accediu al gestor de baixades."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Permet que l\'aplicació accedeixi al gestor de baixades i que el faci servir per baixar fitxers. Les aplicacions malicioses poden fer-ho servir per interrompre baixades i per accedir a informació privada."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Funcions avançades del gestor de baixades."</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 2e24f80c..d8feb852 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Správce stahování"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Stažené soubory"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Získat přístup ke správci stahování."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Umožňuje aplikaci získat přístup do správce stahování a použít jej ke stahování souborů. Škodlivé aplikace mohou toto oprávnění použít k přerušení stahování a získání přístupu k soukromým údajům."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Pokročilé funkce správce stahování."</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index fb842a1f..3592a988 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Downloadadministrator"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Downloads"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Få adgang til downloadadministrator."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Tillader, at appen kan få adgang til downloadadministratoren og til at bruge den til at downloade filer. Ondsindede apps kan bruge dette til at afbryde downloads og få adgang til personlige oplysninger."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Avancerede funktioner for downloadadministrator."</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 1725ba73..2525ae9e 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Download-Manager"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Downloads"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Auf Download-Manager zugreifen"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Ermöglicht der App, auf den Download-Manager zuzugreifen, um Dateien herunterzuladen. Schadprogramme könnten damit Downloads unterbrechen und auf personenbezogene Daten zugreifen."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Erweiterte Funktionen des Download-Managers."</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index fee455e5..174e2785 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Διαχείριση λήψεων"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Λήψεις"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Πρόσβαση στη διαχείριση λήψεων."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Επιτρέπει στην εφαρμογή την πρόσβαση στη διαχείριση λήψεων και τη χρήση του για τη λήψη αρχείων. Οι κακόβουλες εφαρμογές μπορούν να χρησιμοποιήσουν αυτήν τη δυνατότητα για να διακόψουν λήψεις και να αποκτήσουν πρόσβαση σε απόρρητες πληροφορίες."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Σύνθετες λειτουργίες προγράμματος διαχείρισης λήψεων."</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 752d184b..415a164f 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Download Manager"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Downloads"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Access download manager."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Allows the app to access the download manager and to use it to download files. Malicious apps can use this to disrupt downloads and access private information."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Advanced download manager functions."</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 752d184b..415a164f 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Download Manager"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Downloads"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Access download manager."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Allows the app to access the download manager and to use it to download files. Malicious apps can use this to disrupt downloads and access private information."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Advanced download manager functions."</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 752d184b..415a164f 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Download Manager"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Downloads"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Access download manager."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Allows the app to access the download manager and to use it to download files. Malicious apps can use this to disrupt downloads and access private information."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Advanced download manager functions."</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 8f6f724c..ab8d177b 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Administrador de carga"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Descargas"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Accede al administrador de descarga."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Permite que la aplicación acceda al administrador de descargas y lo use para descargar archivos. Las aplicaciones maliciosas pueden usar este permiso para interrumpir descargas y acceder a información privada."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Funciones avanzadas del administrador de descarga"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 13a498ae..944243b8 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Administrador de descargas"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Descargas"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Acceso al administrador de descargas"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Permite que la aplicación acceda al administrador de descargas y lo utilice para descargar archivos. Las aplicaciones malintencionadas pueden utilizar este permiso para provocar daños en las descargas y acceder a información privada."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Funciones avanzadas del administrador de descargas"</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et/strings.xml
index f7ebcd0a..6969ec78 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Allalaadimishaldur"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Allalaadimised"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Juurdepääs allalaadimishaldurile."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Võimaldab rakendusel pääseda allalaadimishalduri juurde ja selle abil faile alla laadida. Pahatahtlikud rakendused saavad selle abil allalaadimisi takistada ja privaatsete andmete juurde pääseda."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Allalaadimishalduri täpsemad funktsioonid."</string>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu/strings.xml
index 5589bbfa..2c5b9196 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Deskargen kudeatzailea"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Deskargak"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Atzitu deskargen kudeatzailea."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Deskargen kudeatzailea atzitzea eta fitxategiak deskargatzeko hori erabiltzea baimentzen die aplikazioei. Aplikazio maltzurrek deskargak eteteko eta informazio pribatua atzitzeko erabil dezakete hori."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Deskargen kudeatzailearen eginbide aurreratuak."</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 119b2a75..3b914c5d 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Download Manager"</string>
+ <string name="storage_description" msgid="7982444311558023664">"بارگیری‌ها"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"‏دسترسی به Download Manager."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"‏به برنامه اجازه می‌دهد تا به download manager دسترسی داشته باشد و از آن برای بارگیری فایل‌ها استفاده کند. برنامه‌های مضر می‌توانند از این امکان استفاده کرده و برای بارگیریها مشکل ایجاد کنند و به اطلاعات خصوصی دسترسی داشته باشند."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"‏عملکرد پیشرفته Download Manager."</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 74bf1fa0..b2ce59f8 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Lataustenhallinta"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Lataukset"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Lataustenhallinnan käyttö."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Antaa sovelluksen käyttää latauksien hallintaa. Haitalliset sovellukset voivat keskeyttää latauksia ja käyttää yksityistietoja."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Lataustenhallinnan lisätoiminnot."</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 768300b3..7f51be1f 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Gestionnaire de téléchargement"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Téléchargements"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Accéder au gestionnaire de téléchargement."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Permet à l\'application d\'accéder au gestionnaire de téléchargement et de l\'utiliser pour télécharger des fichiers. Des applications malveillantes peuvent utiliser cette fonctionnalité pour perturber les téléchargements et accéder à des données confidentielles."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Fonctions avancées du gestionnaire de téléchargement."</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 909517af..83489be8 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Gestionnaire de téléchargement"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Téléchargements"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Accéder au gestionnaire de téléchargement."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Permet à l\'application d\'accéder au gestionnaire de téléchargement et de l\'utiliser pour télécharger des fichiers. Les applications malveillantes peuvent utiliser cette fonctionnalité pour perturber les téléchargements et accéder à des informations confidentielles."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Fonctions avancées du gestionnaire de téléchargement."</string>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl/strings.xml
index efda9dc7..f39cbb38 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Administrador de descargas"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Descargas"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Acceso ao administrador de descargas"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Permite á aplicación acceder ao administrador de descargas e utilizalo para descargar ficheiros. As aplicacións maliciosas poden usar esta opción para interromper as descargas e acceder a información privada."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Funcións avanzadas do administrador de descargas"</string>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu/strings.xml
index 2c874147..00b6b94b 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"ડાઉનલોડ સંચાલક"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ડાઉનલોડ"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"ડાઉનલોડ સંચાલકને ઍક્સેસ કરો."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"એપ્લિકેશનને ડાઉનલોડ સંચાલકને ઍક્સેસ કરવાની અને ફાઇલો ડાઉનલોડ કરવા માટે તેના ઉપયોગની મંજૂરી આપે છે. દુભાવનાપૂર્ણ ઍપ્લિકેશનો આનો ઉપયોગ ડાઉનલોડ્સમાં વિક્ષેપ નાખવા અને ખાનગી માહિતીને ઍક્સેસ કરવા માટે કરી શકે છે."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"વિગતવાર ડાઉનલોડ સંચાલક કર્યો."</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 0fba5681..76396134 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"डाउनलोड प्रबंधक"</string>
+ <string name="storage_description" msgid="7982444311558023664">"डाउनलोड"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"डाउनलोड प्रबंधक में पहुंच प्राप्त करें."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"ऐप्स को डाउनलोड प्रबंधक तक पहुंचने देता और फ़ाइलें डाउनलोड करने के लिए इसका उपयोग करने देता है. दुर्भावनापूर्ण ऐप्स इसका उपयोग डाउनलोड को बाधित करने और निजी जानकारी तक पहुंचने के लिए कर सकते हैं."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"उन्‍नत डाउनलोड प्रबंधक प्रकार्य."</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 21dbcd25..3297c0d0 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Upravitelj za preuzimanje"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Preuzimanja"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Pristupite upravitelju za preuzimanje."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Omogućuje aplikaciji pristup upravitelju preuzimanja i njegovu upotrebu za preuzimanje datoteka. Zlonamjerne aplikacije mogu to iskoristiti da bi ometale preuzimanja i pristupale privatnim podacima."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Napredne funkcije upravitelja za preuzimanje."</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 707bfe4a..798be7e5 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Letöltéskezelő"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Letöltések"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Hozzáférés a letöltéskezelőhöz."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Lehetővé teszi az alkalmazás számára a letöltéskezelő elérését fájlok letöltéséhez. A rosszindulatú alkalmazások kihasználhatják ezt a letöltések megzavarására és személyes adatok elérésére."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Speciális letöltéskezelő-funkciók."</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy/strings.xml
index ebe340ab..299034fe 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Ներբեռնման կառավարիչ"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Ներբեռնումներ"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Գործարկել ներբեռնման կառավարիչը:"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Թույլատրում է հավելվածին օգտագործել ներբեռնման կառավարիչը և կիրառել ֆայլերի ներբեռնման համար: Վնասակար ծրագրերը կարող են օգտագործել սա՝ ներբեռնումները վնասելու և անձնական տեղեկություններն օգտագործելու համար:"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Ընդլայնված ներբեռնման կառավարչի գործառույթներ:"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index dd3b0709..75a2eb70 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Pengelola Download"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Download"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Akses pengelola download."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Mengizinkan aplikasi mengakses pengelola download dan menggunakannya untuk mendownload file. Aplikasi berbahaya dapat menggunakan ini untuk mengganggu download dan mengakses informasi pribadi."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Fungsi pengelola download lanjutan"</string>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is/strings.xml
index d55dc094..f85f2f2d 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Niðurhalsstjórnun"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Niðurhal"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Aðgangur að niðurhalsstjórnun."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Leyfir forriti að fá aðgang að niðurhalsstjórnun og nota hana til að sækja skrár. Spilliforrit geta notað þetta til að trufla niðurhal og fá aðgang að einkaupplýsingum."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Ítarlegir eiginleikar niðurhalsstjórnunar."</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index eb28da3a..967ca509 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Gestione download"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Download"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Accesso alla gestione dei download."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Consente all\'applicazione di accedere a gestione dei download e di utilizzarla per scaricare file. Le applicazioni dannose possono farne uso per disturbare i download e accedere a informazioni private."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Funzioni avanzate di gestione dei download."</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 298d213f..4eec41bc 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"מנהל ההורדות"</string>
+ <string name="storage_description" msgid="7982444311558023664">"הורדות"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"גישה למנהל ההורדות."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"מאפשר לאפליקציה לגשת למנהל ההורדות ולהשתמש בו לצורך הורדת קבצים. אפליקציות זדוניות עלולות לנצל אפשרות זו כדי לשבש הורדות ולגשת למידע פרטי."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"פונקציות מתקדמות של מנהל ההורדות."</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 4e8bddbf..e048aecd 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"ダウンロードマネージャー"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ダウンロード"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"ダウンロードマネージャーにアクセスします。"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"ダウンロードマネージャーにアクセスし、ダウンロードマネージャーを使用してファイルをダウンロードすることをアプリに許可します。この許可を悪意のあるアプリに利用されると、ダウンロードに深刻な影響が生じたり個人情報にアクセスされたりする恐れがあります。"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"ダウンロードマネージャーの高度な機能です。"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka/strings.xml
index 3709ba7d..f16b905f 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"ჩამოტვირთვის მენეჯერი"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ჩამოტვირთვები"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"ჩამოტვირთვის მენეჯერზე წვდომა."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"მიეცით აპლიკაციას ჩამოტვირთვის მენეჯერის წვდომისა და ფაილების ჩამოტვირთვებისთვის მისი გამოყენების უფლება. ბოროტმოქმედმა აპლიკაციებმა შეიძლება ეს გამოიყენონ ჩამოტვირთვების დასაზიანებლად და პირად ინფორმაციაზე წვდომისათვის."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"ჩამოტვირთვის გაუმჯობესებული მენეჯერის ფუნქციები."</string>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk/strings.xml
index 0010407c..250a83a1 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Жүктеу менеджері"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Жүктеп алынғандар"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Жүктеу менеджеріне кіру."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Қолданбаға жүктеу менеджеріне кіріп, оны файлдарды жүктеу үшін қолдану мүмкіндігін береді. Залалды қолданбалар бұны жүктеулерге кедергі жасау үшін және жеке ақпаратқа кіру үшін қолдануы мүмкін."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Жүктеу менеджерінің қосымша функциялары."</string>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km/strings.xml
index ec466a43..e3d8a852 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"កម្មវិធី​ទាញ​យក"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ទាញយក"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"ប្រើ​កម្មវិធី​គ្រប់គ្រង​ការ​ទាញ​យក។"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"អនុញ្ញាត​ឲ្យ​កម្មវិធី​ប្រើ​កម្មវិធី​ទាញ​យក ដើម្បី​ទាញ​យក​ឯកសារ។ កម្មវិធី​មិន​ល្អ​ផ្សេងទៀត​អាច​ប្រើ​ដើម្បី​បង្អាក់​ការ​ទាញ​យក និង​ការ​ប្រើ​ព័ត៌មាន​ឯកជន។"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"មុខងារ​កម្មវិធី​គ្រប់គ្រង​ការ​ទាញ​យក​កម្រិត​ខ្ពស់។"</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn/strings.xml
index aa84190f..e15373f7 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"ಡೌನ್‌ಲೊಡ್‌ ನಿರ್ವಾಹಕ"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ಡೌನ್‌ಲೋಡ್‌ಗಳು"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"ಡೌನ್‌ಲೋಡ್‌ ನಿರ್ವಾಹಕವನ್ನು ಪ್ರವೇಶಿಸಿ."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"ಡೌನ್‌ಲೋಡ್‌ ನಿರ್ವಾಹಕವನ್ನು ಪ್ರವೇಶಿಸಲು ಮತ್ತು ಡೌನ್‌ಲೋಡ್‌ ಫೈಲ್‌ಗಳನ್ನು ಬಳಸಲು ಅಪ್ಲಿಕೇಶನ್‌ ಅನುಮತಿ ನೀಡುತ್ತದೆ. ದುರುದ್ದೇಶಪೂರಿತ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ಡೌನ್‌ಲೋಡ್‌ಗಳನ್ನು ಭಗ್ನಗೊಳಿಸಲು ಹಾಗೂ ಖಾಸಗಿ ಮಾಹಿತಿಯನ್ನು ಪ್ರವೇಶಿಸಲು ಇದನ್ನು ಬಳಸಿಕೊಳ್ಳಬಹುದು."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"ಸುಧಾರಿತ ಡೌನ್‌ಲೋಡ್‌ ನಿರ್ವಾಹಕ ಕಾರ್ಯಚಟುವಟಿಕೆಗಳು."</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index e7959154..cc383ff6 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"다운로드 관리자"</string>
+ <string name="storage_description" msgid="7982444311558023664">"다운로드"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"다운로드 관리자에 액세스합니다."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"앱이 다운로드 관리자의 고급 기능에 액세스하여 파일 다운로드에 사용할 수 있도록 허용합니다. 이 경우 악성 앱이 다운로드를 중단시키고 개인 정보에 액세스할 수 있습니다."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"고급 다운로드 관리자 기능입니다."</string>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky/strings.xml
index 1a7d14d9..d1d62890 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Жүктөп алуу башкаргычы"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Жүктөлүп алынгандар"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Жүктөө менежерине жетүү."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Колдонмого, жүктөө мененджерине жетип, аны менен файлдарды жүктөп алууга уруксат берет. Зыяндуу колдонмолор муну колдонуп, жүктөөлөрдү үзгүлтүккө учурата алышы жана жеке маалыматка жете алышы мүмкүн."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Жүктөө менежеринин озуккан функцияларына жетүү."</string>
@@ -42,7 +43,7 @@
<string name="wifi_recommended_title" msgid="7441589306734687400">"Кийин жүктөө кезегине тургузулсунбу?"</string>
<string name="wifi_recommended_body" msgid="1314735166699936073">"Өлчөмү <xliff:g id="SIZE">%s </xliff:g> болгон жүктөөнү азыр баштасаңыз, батарейиңиздин өмүрү кыскарышы жана/же мобилдик интернет трафиги өтө көп сарпталып, тарифтик планыңызга жараша, операторуңуз сизден төлөм алышы мүмкүн.\n\n Бул жүктөөнү сиз кийин Wi-Fi түйүнгө туташканда башташ үчүн, <xliff:g id="QUEUE_TEXT">%s</xliff:g> тийип коюңуз."</string>
<string name="button_queue_for_wifi" msgid="422576726189179221">"Кезекке тургузуу"</string>
- <string name="button_cancel_download" msgid="2430166148737975604">"Айнуу"</string>
+ <string name="button_cancel_download" msgid="2430166148737975604">"Токтотуу"</string>
<string name="button_start_now" msgid="792123674007840864">"Азыр баштоо"</string>
<plurals name="notif_summary_active" formatted="false" msgid="7290448463204837173">
<item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> файл жүктөлүп алынууда</item>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo/strings.xml
index cfe1109c..8280075e 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"ໂຕຈັດການການດາວໂຫລດ"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ດາວໂຫລດ"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"ເຂົ້າເຖິງໂຕຈັດການການດາວໂຫລດ."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"ອະນຸາຍາດໃຫ້ແອັບຯ ເຂົ້າເຖິງໂຕຈັດການການດາວໂຫລດ ແລະໃຊ້ມັນເພື່ອດາວໂຫລດໄຟລ໌. ແອັບຯທີ່ມີອັນຕະລາຍສາມາດໃຊ້ການເຮັດວຽກນີ້ ເພື່ອແຊກແຊງການດາວໂຫລດ ແລະເຂົ້າເຖິງຂໍ້ມູນສ່ວນໂຕໄດ້."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"ຄວາມສາມາດຂັ້ນສູງຂອງໂຕຈັດການການດາວໂຫລດ."</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index ef2d382b..25de4294 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Atsisiuntimų tvarkytuvė"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Atsisiuntimai"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Pasiekti atsisiuntimo tvarkyklę."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Leidžiama programai pasiekti atsisiuntimų tvarkytuvę ir naudoti ją failams atsisiųsti. Kenkėjiškos programos gali naudoti šią funkciją atsisiuntimams stabdyti ir asmeninei informacijai pasiekti."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Išplėstinės atsisiuntimo tvarkytuvės funkcijos."</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index c10a4794..677214a5 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Download Manager"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Lejupielādes"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Piekļuve lietojumprogrammai Download Manager."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Ļauj lietotnei piekļūt lejupielāžu pārvaldniekam un izmantot to failu lejupielādei. Ļaunprātīgas lietotnes var izmantot šo atļauju, lai traucētu lejupielādes un piekļūtu privātai informācijai."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Izvērstas Download Manager funkcijas."</string>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk/strings.xml
index 638e2ea7..23cedeb8 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk/strings.xml
@@ -17,13 +17,14 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Управник за преземање"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Преземања"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Пристапи до управувачот за преземања."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Овозможува апликацијата да пристапи до менаџерот за преземање и да го користи за преземање датотеки. Злонамерните апликации може да го искористат ова да ги попречат преземањата и да пристапат до приватни информации."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Напредни функции на управувачот за преземања."</string>
<string name="permdesc_downloadManagerAdvanced" msgid="2659546004160962761">"Овозможува апликацијата да пристапи до напредни функции на менаџерот за преземање. Злонамерните апликации може да го искористат ова да ги попречат преземањата и да пристапат до приватни информации."</string>
<string name="permlab_downloadCompletedIntent" msgid="945913803765675685">"Испрати известувања за преземањата."</string>
<string name="permdesc_downloadCompletedIntent" msgid="2094706189855699533">"Овозможува апликацијата да испраќа известувања за завршени преземања. Злонамерните апликации може да го искористат ова да ги збунат другите апликации кои преземаат датотеки."</string>
- <string name="permlab_seeAllExternal" product="nosdcard" msgid="4084575448409212628">"Виде ги сите преземања на УСБ меморијата"</string>
+ <string name="permlab_seeAllExternal" product="nosdcard" msgid="4084575448409212628">"Виде ги сите преземања на USB меморијата"</string>
<string name="permlab_seeAllExternal" product="default" msgid="140058400609165726">"Види ги сите преземања на СД картичката"</string>
<string name="permdesc_seeAllExternal" msgid="1672759909065511233">"Овозможува апликацијата да ги види сите преземања на СД картичката, без разлика со која апликација се преземани."</string>
<string name="permlab_downloadCacheNonPurgeable" msgid="3069534308882047412">"Зачувај простор во преземаниот кеш"</string>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml/strings.xml
index e3578424..39441cbc 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"ഡൗൺലോഡ് മാനേജർ"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ഡൗണ്‍ലോഡുകൾ"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"ഡൗൺലോഡ് മാനേജർ ആക്‌സസ്സുചെയ്യുക."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"ഡൗൺലോഡ് മാനേജർ ആക്‌സസ്സുചെയ്യാനും ഫയലുകൾ ഡൗൺലോഡുചെയ്യുന്നതിന് അത് ഉപയോഗിക്കാനും അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. ഡൗൺലോഡുകൾ തടസ്സപ്പെടുത്താനും സ്വകാര്യ വിവരം ആക്‌സസ്സുചെയ്യാനും ക്ഷുദ്രകരമായ അപ്ലിക്കേഷനുകൾ ഇതുപയോഗിച്ചേക്കാം."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"വിപുലമായ ഡൗൺലോഡ് മാനേജർ പ്രവർത്തനങ്ങൾ."</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn/strings.xml
index 2cb23ce9..3ff0d13b 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Татан авалтын Менежер"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Татаж авсан файл"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Татан авалтын менежерт хандалт хийх."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Апп нь татан авалтын менежерт хандалт хийх, үүнийг ашиглан файл татах боломжтой. Хортой апп-ууд үүнийг ашиглан татан авалтыг тасалдуулах, хувийн мэдээлэлд хандалт хийх боломжтой."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Татан авалтын менежерийн дэлгэрэнгүй функцууд."</string>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr/strings.xml
index e1e02993..26da85e9 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"डाउनलोड व्यवस्थापक"</string>
+ <string name="storage_description" msgid="7982444311558023664">"डाउनलोड"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"डाउनलोड व्यवस्थापकावर प्रवेश करा."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"अ‍ॅपला डाउनलोड व्‍यवस्‍थापकामध्‍ये प्रवेश करण्‍याची आणि फायली डाउनलोड करण्‍यासाठी त्याचा वापर करण्‍याची अनुमती देते. दुर्भावनापूर्ण अ‍ॅप्‍स याचा डाउनलोड विदारित करण्‍यासाठी आणि खाजगी माहितीमध्‍ये प्रवेश करण्‍यासाठी वापर करू शकतात."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"प्रगत डाऊनलोड व्यवस्थापक कार्ये."</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms/strings.xml
index 50d5a599..a175064b 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Pengurus Muat Turun"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Muat turun"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Akses pengurus muat turun."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Membenarkan aplikasi untuk mengakses pengurus muat turun dan menggunakannya untuk memuat turun fail. Aplikasi berniat jahat boleh menggunakan ini untuk mengganggu muat turun dan mengakses maklumat peribadi."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Fungsi pengurus muat turun lanjutan."</string>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my/strings.xml
index 4cabab23..2aeefc2c 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"ဒေါင်းလုပ်မန်နေဂျာ"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ဒေါင်းလုဒ်များ"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"ဒေါင်းလုပ်မန်နေဂျာကို သုံးစွဲခွင့်ပြုမည်"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"အပလီကေးရှင်းအား ဒေါင်းလုပ်မန်နေဂျာကို သုံးစွဲနိုင်ရန်နှင့် ဖိုင်များကိုဒေါင်းလုပ်ပြုလုပ်ရန်အတွက်သုံးခြင်းကို ခွင့်ပြုမည်။ အန္တရာယ် ရှိသော အပလီကေးရှင်းများက ၎င်းကို အသုံးပြုကာ ဒေါင်းလုပ်ပြုလုပ်ခြင်းကို နှောက်ယှက်ခြင်းနှင့် ကိုယ်ပိုင်အချက်အလက်များကို ဝင်ရောက်ယူနိုင်သည်။"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"အဆင့်မြင့် ဒေါင်းလုပ်မန်နေဂျာ လုပ်ငန်းများ"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 4f28efe6..243054fb 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Nedlaster"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Nedlastinger"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Bruke nedlasting."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Gir appen adgang til nedlastingsbehandlingen og bruke den til å laste ned filer. Skadelig programvare kan bruke dette til å forstyrre nedlastinger og få tilgang til privat informasjon."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Avansert nedlastingsfunksjonalitet."</string>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne/strings.xml
index ca95dc8f..25e3be47 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"डाउनलोड प्रबन्धक"</string>
+ <string name="storage_description" msgid="7982444311558023664">"डाउनलोडहरू"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"डाउनलोड प्रबन्धक पहुँच गर्नुहोस्"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"फाइल डाउनलोड गर्नका लागि अनुप्रयोगलाई डाउनलोड प्रबन्धकको पहुँचको अनुमति दिन्छ। हानिकारक अनुप्रयोगहरूले यसलाई डाउनलोडहरू अवरूद्ध गर्न र निजी जानकारी पहुँच गर्न यसको प्रयोग गर्न सक्छन्।"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"उन्नत डाउनलोड प्रबन्धक प्रकार्यहरू"</string>
@@ -38,9 +39,9 @@
<string name="notification_need_wifi_for_size" msgid="2556172885154833575">"डाउनलोड आकारलाई Wi-Fi चाहिन्छ।"</string>
<string name="notification_paused_in_background" msgid="4328508073283591772">"पृष्ठभूमिमा रोकिएको छ।"</string>
<string name="wifi_required_title" msgid="1995971416871498179">"अपरेटर सञ्जालका लागि डाउनलोड ज्यादै ठूलो"</string>
- <string name="wifi_required_body" msgid="3067694630143784449">"तपाईँले Wi-Fi प्रयोग गर्नु पर्छ यस <xliff:g id="SIZE">%s </xliff:g> डाउनलोड समाप्त गर्न। \n\nछुनुहोस् <xliff:g id="QUEUE_TEXT">%s </xliff:g> यस डाउनलोडलाई सुरु गर्न अर्को पटक तपाईँ Wi-Fi सञ्जालामा जडित भए पछि।"</string>
+ <string name="wifi_required_body" msgid="3067694630143784449">"तपाईंले Wi-Fi प्रयोग गर्नु पर्छ यस <xliff:g id="SIZE">%s </xliff:g> डाउनलोड समाप्त गर्न। \n\nछुनुहोस् <xliff:g id="QUEUE_TEXT">%s </xliff:g> यस डाउनलोडलाई सुरु गर्न अर्को पटक तपाईं Wi-Fi सञ्जालामा जडित भए पछि।"</string>
<string name="wifi_recommended_title" msgid="7441589306734687400">"पछि डाउनलोडका लागि लाममा राख्ने हो?"</string>
- <string name="wifi_recommended_body" msgid="1314735166699936073">"यस <xliff:g id="SIZE">%s </xliff:g> डाउनलोडलाई सुरु गर्दा तपाईँको ब्याट्रिको काल छोट्टिन सक्छ र/वा तपाईँको मोबाइल डेटा जडानको अधिकतम प्रयोग भई तपाईँको डेटा योजना अनुसार मोबाइल अपरेटरले थप शुल्क लिन सक्छ। \n\n छुनुहोस् <xliff:g id="QUEUE_TEXT">%s</xliff:g>तल यस डाउनलोडलाई सुरु गर्न अर्को पटक तपाईँ Wi-Fi सन्जालमा जडित हुने बेला।"</string>
+ <string name="wifi_recommended_body" msgid="1314735166699936073">"यस <xliff:g id="SIZE">%s </xliff:g> डाउनलोडलाई सुरु गर्दा तपाईंको ब्याट्रिको काल छोट्टिन सक्छ र/वा तपाईंको मोबाइल डेटा जडानको अधिकतम प्रयोग भई तपाईंको डेटा योजना अनुसार मोबाइल अपरेटरले थप शुल्क लिन सक्छ। \n\n छुनुहोस् <xliff:g id="QUEUE_TEXT">%s</xliff:g>तल यस डाउनलोडलाई सुरु गर्न अर्को पटक तपाईं Wi-Fi सन्जालमा जडित हुने बेला।"</string>
<string name="button_queue_for_wifi" msgid="422576726189179221">"लाम"</string>
<string name="button_cancel_download" msgid="2430166148737975604">"रद्द गर्नुहोस्"</string>
<string name="button_start_now" msgid="792123674007840864">"अहिले सुरु गर्नुहोस्"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index bee464ef..2cbe600a 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Downloadbeheer"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Downloads"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Downloadbeheer weergeven."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Hiermee heeft de app toegang tot downloadbeheer en kan de app via downloadbeheer bestanden downloaden. Schadelijke apps kunnen dit gebruiken om downloads te verstoren en toegang te krijgen tot persoonlijke gegevens."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Geavanceerde functies van de downloadbeheerder."</string>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa/strings.xml
index 2dbe981a..6548585f 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"ਡਾਉਨਲੋਡ ਪ੍ਰਬੰਧਕ"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ਡਾਊਨਲੋਡ"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"ਡਾਊਨਲੋਡ ਪ੍ਰਬੰਧਕ ਤੱਕ ਪਹੁੰਚ।"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"ਐਪ ਨੂੰ ਡਾਊਨਲੋਡ ਪ੍ਰਬੰਧਕ ਤੱਕ ਪਹੁੰਚ ਅਤੇ ਫਾਈਲਾਂ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਇਸਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਖ਼ਰਾਬ ਐਪਸ ਇਸਦੀ ਵਰਤੋਂ ਡਾਊਨਲੋਡਸ ਵਿੱਚ ਵਿਘਨ ਪਾਉਣ ਅਤੇ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ ਲਈ ਕਰ ਸਕਦੇ ਹਨ।"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"ਐਡਵਾਂਸਡ ਡਾਊਨਲੋਡ ਪ੍ਰਬੰਧਕ ਫੰਕਸ਼ਨ।"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 79810dd7..d685b09c 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Menedżer pobierania"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Pobrane"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Dostęp do menedżera pobierania."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Zezwala aplikacji na dostęp do menedżera pobierania i korzystanie z niego w celu pobierania plików. Złośliwe aplikacje mogą wykorzystać tę możliwość w celu zakłócenia pobierania i uzyskania dostępu do informacji prywatnych."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Zaawansowane funkcje menedżera pobierania."</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 2c93a1ef..b47359bd 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Gestor de Transferências"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Transferências"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Aceder ao gestor de transferências."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Permite que a aplicação aceda ao gestor de transferências e o utilize para transferir ficheiros. As aplicações maliciosas podem utilizar esta permissão para interromper transferências e aceder a informações privadas."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Funções avançadas do gestor de transferências"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 26016eef..f6d99647 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Gerenciador de downloads"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Downloads"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Acessar o gerenciador de download."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Permite que o app acesse o gerenciador de download e o use para fazer download de arquivos. Apps maliciosos podem usar essa ação para interromper downloads e acessar informações privadas."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Funções avançadas do gerenciador de download."</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 895653ec..22e93c36 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Managerul de descărcare"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Descărcări"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Accesați managerul de descărcare."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Permite aplicației să acceseze managerul de descărcări și să îl utilizeze pentru a descărca fișiere. Aplicațiile rău intenționate pot utiliza această permisiune pentru a perturba descărcările și pentru a accesa informații private."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Funcții avansate ale managerului de descărcare."</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index c9c7df34..da9756fe 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Диспетчер загрузки"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Загрузки"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Доступ к менеджеру загрузки."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Приложение получит доступ к диспетчеру загрузок и сможет загружать файлы через него. Вредоносные программы смогут таким образом прерывать загрузки и просматривать личную информацию."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Расширенные функции менеджера загрузки."</string>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si/strings.xml
index 1938e120..6f5b57ae 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"බාගැනීමේ කළමනාකරු"</string>
+ <string name="storage_description" msgid="7982444311558023664">"බාගැනීම්"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"බාගැනීම් කළමනාකරු ප්‍රවේශ කරන්න."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"යෙදුම් හට මෙය භාවිතා කර බාගැනීම් කළමනාකරු ප්‍රවේශ කර ගොනු බාගැනීමට අවසර දෙන්න. කරදරකාරී යෙදුම් හට මෙය භාවිතා කර බාගැනීම් වලට බාධා පමුණුවා පෞද්ගලික තොරතුරු ප්‍රවේශ කිරීමට යොදාගත හැක."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"උසස් බාගැනීම් කළමනාකරු විශේෂාංග."</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index e929ccd3..0dbb631e 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Správca sťahovania"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Stiahnuté súbory"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Získať prístup k správcovi sťahovania."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Umožňuje aplikácii pristupovať k správcovi sťahovania a použiť ho na sťahovanie súborov. Škodlivé aplikácie to môžu využiť a narušiť sťahovanie alebo získať prístup k súkromným informáciám."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Rozšírené funkcie správcu sťahovania."</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 8eaa17f6..f2227ede 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Upravitelj prenosov"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Prenosi"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Dostop do upravitelja prenosov."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Dovoli aplikaciji dostopanje do upravitelja prenosov in njegovo uporabo za prenos datotek. Zlonamerne aplikacije lahko s tem motijo prenose in dostopajo do zasebnih podatkov."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Dodatne funkcije upravitelja prenosov."</string>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq/strings.xml
index ec43c784..f94be50e 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Menaxheri i shkarkimeve"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Shkarkimet"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Merr qasje në menaxherin e shkarkimit."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"E lejon aplikacionin të qaset te menaxheri i shkarkimeve dhe ta përdorë për të shkarkuar skedarë. Aplikacionet keqdashëse mund ta përdorin këtë për të dëmtuar shkarkimet dhe për t\'u qasur në informacione private."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Funksionet e përparuara të menaxherit të shkarkimeve."</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index b5eab74b..ec9c9e59 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Менаџер преузимања"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Преузимања"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Приступ менаџеру преузимања."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Омогућава апликацији да приступа менаџеру преузимања и користи га за преузимање датотека. Злонамерне апликације могу помоћу тога да ометају преузимања и приступају приватним информацијама."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Напредне функције менаџера преузимања."</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 0ef82759..e6aeeb23 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Nedladdningshanterare"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Nedladdningar"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Åtkomst till laddningshanterare."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Tillåter att en app får åtkomst till nedladdningshanteraren och kan använda den för att ladda ned filer. Skadliga program kan använda detta för att störa nedladdningar och komma åt privat information."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Avancerade funktioner för nedladdningshanterare."</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 5b09eb9d..11659920 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Kidhibiti Vipakuliwa"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Vipakuliwa"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Fikia kidhibiti cha vipakuliwa."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Huruhusu programu kufikia kidhibiti vipakuliwa na kukitumia ili kupakua faili. Programu hasidi zinaweza kutumia hii ili kutatiza vipakuliwa na kufikia maelezo ya kibinafsi."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Hatua za kina zinazoweza kufanywa na kidhibiti vipakuliwa."</string>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta/strings.xml
index 6ea34305..571b5245 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"பதிவிறக்க நிர்வாகி"</string>
+ <string name="storage_description" msgid="7982444311558023664">"பதிவிறக்கங்கள்"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"பதிவிறக்க நிர்வாகியை அணுகவும்."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"பதிவிறக்க நிர்வாகியை அணுகவும், கோப்புகளைப் பதிவிறக்குவதற்காக அதைப் பயன்படுத்தவும் பயன்பாட்டை அனுமதிக்கிறது. பதிவிறக்கங்களைத் தடைசெய்யவும், தனிப்பட்டத் தகவலை அணுகவும் தீங்கிழைக்கும் பயன்பாடுகள் இதைப் பயன்படுத்தலாம்."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"மேம்பட்ட பதிவிறக்க நிர்வாகி செயல்பாடுகள்."</string>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te/strings.xml
index 3f1fdb62..5a0d4b61 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"డౌన్‌లోడ్ నిర్వాహికి"</string>
+ <string name="storage_description" msgid="7982444311558023664">"డౌన్‌లోడ్‌లు"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"డౌన్‌లోడ్ నిర్వాహికిని ప్రాప్యత చేయండి."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"డౌన్‌లోడ్ నిర్వాహికిని ప్రాప్యత చేయడానికి మరియు దీన్ని ఉపయోగించి ఫైల్‌లను డౌన్‌లోడ్ చేయడానికి అనువర్తనాన్ని అనుమతిస్తుంది. హానికరమైన అనువర్తనాలు డౌన్‌లోడ్‌లకు అంతరాయం కలిగించడానికి మరియు ప్రైవేట్ సమాచారాన్ని ప్రాప్యత చేయడానికి దీన్ని ఉపయోగించవచ్చు."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"అధునాతన డౌన్‌లోడ్ నిర్వాహికి ఫంక్షన్‌లు."</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 0981a549..4b16c37f 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"ตัวจัดการการดาวน์โหลด"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ดาวน์โหลด"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"การเข้าถึงโปรแกรมการดาวน์โหลด"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"อนุญาตให้แอปพลิเคชันเข้าถึงตัวจัดการการดาวน์โหลดและใช้ตัวจัดการนี้ในการดาวน์โหลดไฟล์ แอปพลิเคชันที่เป็นอันตรายสามารถใช้การทำงานนี้เพื่อขัดขวางการดาวน์โหลดและการเข้าถึงข้อมูลส่วนตัว"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"ฟังก์ชันโปรแกรมจัดการการดาวน์โหลดขั้นสูง"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index fe51f88d..1b46bcbd 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Tagapamahala ng Pag-download"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Mga Download"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"I-access ang tagapamahala ng pag-download."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Pinapayagan ang app na i-access ang download manager at gamitin ito upang mag-download ng mga file. Maaari itong gamitin ng mga nakapanghahamak na app upang gambalain ang mga download at mag-access ng pribadong impormasyon."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Mga advanced na pag-andar ng tagapamahala ng pag-download."</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index fa8359e4..eb013ca2 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"İndirme Yöneticisi"</string>
+ <string name="storage_description" msgid="7982444311558023664">"İndirilenler"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"İndirme yöneticisine erişin."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Uygulamaya, indirme yöneticisine erişme ve dosya indirmek için indirme yöneticisini kullanma izni verir. Zararlı uygulamalar indirme işlemlerini kesmek ve özel bilgilere erişmek için bunu kullanabilir."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Gelişmiş indirme yöneticisi işlevleri."</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index ce56c03d..b52fda2f 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Менеджер завантажень"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Завантаження"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Доступ до менедж. завантаж."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Дозволяє програмі отримувати доступ до менеджера завантажень і використовувати його для завантаження файлів. Шкідливі програми можуть використовувати це для переривання завантажень і доступу до особистої інформації."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Розширені функції менеджера завантаж."</string>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur/strings.xml
index 69b44ad1..42b72565 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"ڈاؤن لوڈ مینیجر"</string>
+ <string name="storage_description" msgid="7982444311558023664">"ڈاؤن لوڈز"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"ڈاؤن لوڈ مینیجر تک رسائی حاصل کریں۔"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"ایپ کو ڈاؤن لوڈ مینیجر تک رسائی حاصل کرنے اور فائلیں ڈاؤن لوڈ کرنے کیلئے اسے استعمال کرنے کی اجازت دیتا ہے۔ نقصان دہ ایپس ڈاؤن لوڈز کو معطل کرنے اور نجی معلومات تک رسائی حاصل کرنے کیلئے اس کا استعمال کر سکتی ہیں۔"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"ڈاؤن لوڈ مینیجر کے جدید فنکشنز۔"</string>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz/strings.xml
index d29ec693..ce905522 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Yuklanmalar boshqaruvi"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Yuklanmalar"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Yuklab olish menejeriga kirishga ruxsat"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Ilovaga yuklab olish menejeriga kirish va yuklab olish fayllaridan foydalanish uchun ruxsat beradi. Zararli dasturlar bundan yuklab olishlarga to‘sqinlik qilish va maxfiy ma’lumotlarga kirish uchun foydalanishi mumkin."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Qo‘shimcha yuklab olish menejeri funksiyalari."</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index a5193d9f..d9bf1746 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Trình quản lý Tải xuống"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Nội dung tải xuống"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Truy cập trình quản lý tải xuống."</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Cho phép ứng dụng truy cập trình quản lý tải xuống và sử dụng trình này để tải xuống tệp. Ứng dụng độc hại có thể lợi dụng điều này để làm gián đoạn quá trình tải xuống và truy cập thông tin riêng tư."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Chức năng nâng cao của trình quản lý tải xuống."</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 8f005295..834f3a45 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"下载管理程序"</string>
+ <string name="storage_description" msgid="7982444311558023664">"下载内容"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"访问下载管理器。"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"允许该应用使用下载管理器并通过它下载文件。恶意应用可能会借此中断下载并访问私人信息。"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"高级下载管理器功能。"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 3bc644d7..f5509de5 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"下載管理員"</string>
+ <string name="storage_description" msgid="7982444311558023664">"下載"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"存取下載管理員。"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"允許應用程式存取下載管理員,並用以下載檔案。惡意應用程式可藉此干擾檔案下載並存取私人資訊。"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"進階下載管理員功能。"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index a3aa89f1..b64067b5 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"下載管理員"</string>
+ <string name="storage_description" msgid="7982444311558023664">"下載"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"存取下載管理員。"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"允許應用程式存取下載管理員,並使用下載管理員下載檔案。惡意應用程式可能藉此干擾檔案下載並存取私人資訊。"</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"下載管理員進階功能。"</string>
@@ -38,9 +39,9 @@
<string name="notification_need_wifi_for_size" msgid="2556172885154833575">"這個檔案較大,需要透過 Wi-Fi 下載。"</string>
<string name="notification_paused_in_background" msgid="4328508073283591772">"在背景中暫停。"</string>
<string name="wifi_required_title" msgid="1995971416871498179">"檔案過大,無法透過行動電話業者的網路下載"</string>
- <string name="wifi_required_body" msgid="3067694630143784449">"您必須透過 Wi-Fi 才能完整下載這個 <xliff:g id="SIZE">%s </xliff:g> 的檔案。\n\n建議您改在下次連上 Wi-Fi 網路時,再輕觸 [<xliff:g id="QUEUE_TEXT">%s </xliff:g>] 開始下載。"</string>
+ <string name="wifi_required_body" msgid="3067694630143784449">"你必須透過 Wi-Fi 才能完整下載這個 <xliff:g id="SIZE">%s </xliff:g> 的檔案。\n\n建議你改在下次連上 Wi-Fi 網路時,再輕觸 [<xliff:g id="QUEUE_TEXT">%s </xliff:g>] 開始下載。"</string>
<string name="wifi_recommended_title" msgid="7441589306734687400">"排入佇列以供日後下載?"</string>
- <string name="wifi_recommended_body" msgid="1314735166699936073">"現在下載這個 <xliff:g id="SIZE">%s </xliff:g> 的檔案,可能會減少電池可使用的時間,並/或超額使用行動數據連線,導致行動通訊業者依據資費方案向您收費。\n\n建議您改在下次連上 Wi-Fi 網路時,再輕觸 [<xliff:g id="QUEUE_TEXT">%s</xliff:g>] 開始下載。"</string>
+ <string name="wifi_recommended_body" msgid="1314735166699936073">"現在下載這個 <xliff:g id="SIZE">%s </xliff:g> 的檔案,可能會減少電池可使用的時間,並/或超額使用行動數據連線,導致電信業者依據資費方案向你收費。\n\n建議你改在下次連上 Wi-Fi 網路時,再輕觸 [<xliff:g id="QUEUE_TEXT">%s</xliff:g>] 開始下載。"</string>
<string name="button_queue_for_wifi" msgid="422576726189179221">"佇列"</string>
<string name="button_cancel_download" msgid="2430166148737975604">"取消"</string>
<string name="button_start_now" msgid="792123674007840864">"立即開始"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 28713783..d02c6ca2 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -17,6 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3658948994665187911">"Umphathi wokulayisha"</string>
+ <string name="storage_description" msgid="7982444311558023664">"Okulandiwe"</string>
<string name="permlab_downloadManager" msgid="7779544811202855500">"Finyelela kumphathi wokulayisha"</string>
<string name="permdesc_downloadManager" msgid="4237406545998908947">"Ivumela uhlelo lokusebenza lufinyelele isiphathi sokulandiwe namafayela alandiwe. Izinhlelo zokusebenza ezinobungozi zingakusebenzisa lokhu ukuphazamisa ukulanda ziphinde zifinyelele emininingwaneni eyimfihlo."</string>
<string name="permlab_downloadManagerAdvanced" msgid="7103642833308809655">"Izici zomphathi wokulayisha othuthukisiwe."</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5ebb97db..c1529419 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -18,6 +18,9 @@
<!-- This is the name of the Download Manager application. -->
<string name="app_label">Download Manager</string>
+ <!-- Short description shown client applications describing storage location-->
+ <string name="storage_description">Downloads</string>
+
<!-- This is the short description of a permission associated with the
Android Download Manager. It is displayed as part of the description
of any application that was granted that permission.
diff --git a/src/com/android/providers/downloads/DownloadNotifier.java b/src/com/android/providers/downloads/DownloadNotifier.java
index d13bb5e2..c36dbd8c 100644
--- a/src/com/android/providers/downloads/DownloadNotifier.java
+++ b/src/com/android/providers/downloads/DownloadNotifier.java
@@ -26,6 +26,7 @@ import static com.android.providers.downloads.Constants.TAG;
import android.app.DownloadManager;
import android.app.Notification;
+import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ContentUris;
@@ -61,6 +62,10 @@ public class DownloadNotifier {
private static final int TYPE_WAITING = 2;
private static final int TYPE_COMPLETE = 3;
+ private static final String CHANNEL_ACTIVE = "active";
+ private static final String CHANNEL_WAITING = "waiting";
+ private static final String CHANNEL_COMPLETE = "complete";
+
private final Context mContext;
private final NotificationManager mNotifManager;
@@ -89,8 +94,18 @@ public class DownloadNotifier {
public DownloadNotifier(Context context) {
mContext = context;
- mNotifManager = (NotificationManager) context.getSystemService(
- Context.NOTIFICATION_SERVICE);
+ mNotifManager = context.getSystemService(NotificationManager.class);
+
+ // Ensure that all our channels are ready to use
+ mNotifManager.createNotificationChannel(new NotificationChannel(CHANNEL_ACTIVE,
+ context.getText(R.string.download_running),
+ NotificationManager.IMPORTANCE_LOW));
+ mNotifManager.createNotificationChannel(new NotificationChannel(CHANNEL_WAITING,
+ context.getText(R.string.download_queued),
+ NotificationManager.IMPORTANCE_DEFAULT));
+ mNotifManager.createNotificationChannel(new NotificationChannel(CHANNEL_COMPLETE,
+ context.getText(com.android.internal.R.string.done_label),
+ NotificationManager.IMPORTANCE_DEFAULT));
}
public void init() {
@@ -178,7 +193,20 @@ public class DownloadNotifier {
final IntArray cluster = clustered.valueAt(i);
final int type = getNotificationTagType(tag);
- final Notification.Builder builder = new Notification.Builder(mContext);
+ final Notification.Builder builder;
+ if (type == TYPE_ACTIVE) {
+ builder = new Notification.Builder(mContext, CHANNEL_ACTIVE);
+ builder.setSmallIcon(android.R.drawable.stat_sys_download);
+ } else if (type == TYPE_WAITING) {
+ builder = new Notification.Builder(mContext, CHANNEL_WAITING);
+ builder.setSmallIcon(android.R.drawable.stat_sys_warning);
+ } else if (type == TYPE_COMPLETE) {
+ builder = new Notification.Builder(mContext, CHANNEL_COMPLETE);
+ builder.setSmallIcon(android.R.drawable.stat_sys_download_done);
+ } else {
+ continue;
+ }
+
builder.setColor(res.getColor(
com.android.internal.R.color.system_notification_accent_color));
@@ -191,15 +219,7 @@ public class DownloadNotifier {
mActiveNotifs.put(tag, firstShown);
}
builder.setWhen(firstShown);
-
- // Show relevant icon
- if (type == TYPE_ACTIVE) {
- builder.setSmallIcon(android.R.drawable.stat_sys_download);
- } else if (type == TYPE_WAITING) {
- builder.setSmallIcon(android.R.drawable.stat_sys_warning);
- } else if (type == TYPE_COMPLETE) {
- builder.setSmallIcon(android.R.drawable.stat_sys_download_done);
- }
+ builder.setOnlyAlertOnce(true);
// Build action intents
if (type == TYPE_ACTIVE || type == TYPE_WAITING) {
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java
index 121ace46..210cabff 100644
--- a/src/com/android/providers/downloads/DownloadProvider.java
+++ b/src/com/android/providers/downloads/DownloadProvider.java
@@ -894,8 +894,6 @@ public final class DownloadProvider extends ContentProvider {
final String selection, final String[] selectionArgs,
final String sort) {
- Helpers.validateSelection(selection, sAppReadableColumnsSet);
-
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
int match = sURIMatcher.match(uri);
@@ -1052,8 +1050,9 @@ public final class DownloadProvider extends ContentProvider {
@Override
public int update(final Uri uri, final ContentValues values,
final String where, final String[] whereArgs) {
-
- Helpers.validateSelection(where, sAppReadableColumnsSet);
+ if (shouldRestrictVisibility()) {
+ Helpers.validateSelection(where, sAppReadableColumnsSet);
+ }
final Context context = getContext();
final ContentResolver resolver = context.getContentResolver();
diff --git a/src/com/android/providers/downloads/DownloadReceiver.java b/src/com/android/providers/downloads/DownloadReceiver.java
index a0dc6947..92d0bad4 100644
--- a/src/com/android/providers/downloads/DownloadReceiver.java
+++ b/src/com/android/providers/downloads/DownloadReceiver.java
@@ -139,13 +139,24 @@ public class DownloadReceiver extends BroadcastReceiver {
private void handleUidRemoved(Context context, Intent intent) {
final ContentResolver resolver = context.getContentResolver();
-
final int uid = intent.getIntExtra(Intent.EXTRA_UID, -1);
- final int count = resolver.delete(
- Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, Constants.UID + "=" + uid, null);
- if (count > 0) {
- Slog.d(TAG, "Deleted " + count + " downloads owned by UID " + uid);
+ // First, disown any downloads that live in shared storage
+ final ContentValues values = new ContentValues();
+ values.putNull(Constants.UID);
+ final int disowned = resolver.update(Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, values,
+ Constants.UID + "=" + uid + " AND " + Downloads.Impl.COLUMN_DESTINATION + " IN ("
+ + Downloads.Impl.DESTINATION_EXTERNAL + ","
+ + Downloads.Impl.DESTINATION_FILE_URI + ")",
+ null);
+
+ // Finally, delete any remaining downloads owned by UID
+ final int deleted = resolver.delete(Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI,
+ Constants.UID + "=" + uid, null);
+
+ if ((disowned + deleted) > 0) {
+ Slog.d(TAG, "Disowned " + disowned + " and deleted " + deleted
+ + " downloads owned by UID " + uid);
}
}
diff --git a/src/com/android/providers/downloads/DownloadStorageProvider.java b/src/com/android/providers/downloads/DownloadStorageProvider.java
index 4ec8e2d1..bbcb06d2 100644
--- a/src/com/android/providers/downloads/DownloadStorageProvider.java
+++ b/src/com/android/providers/downloads/DownloadStorageProvider.java
@@ -34,28 +34,33 @@ import android.os.FileUtils;
import android.os.ParcelFileDescriptor;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
+import android.provider.DocumentsContract.Path;
import android.provider.DocumentsContract.Root;
-import android.provider.DocumentsProvider;
import android.provider.Downloads;
-import android.support.provider.DocumentArchiveHelper;
import android.text.TextUtils;
import android.util.Log;
+import com.android.internal.content.FileSystemProvider;
+
+import libcore.io.IoUtils;
+
import java.io.File;
import java.io.FileNotFoundException;
-import java.io.IOException;
import java.text.NumberFormat;
+import java.util.HashSet;
+import java.util.Set;
import javax.annotation.Nullable;
import javax.annotation.concurrent.GuardedBy;
-import libcore.io.IoUtils;
-
/**
- * Presents a {@link DocumentsContract} view of {@link DownloadManager}
- * contents.
+ * Presents files located in {@link Environment#DIRECTORY_DOWNLOADS} and contents from
+ * {@link DownloadManager}. {@link DownloadManager} contents include active downloads and completed
+ * downloads added by other applications using
+ * {@link DownloadManager#addCompletedDownload(String, String, boolean, String, String, long, boolean, boolean, Uri, Uri)}
+ * .
*/
-public class DownloadStorageProvider extends DocumentsProvider {
+public class DownloadStorageProvider extends FileSystemProvider {
private static final String TAG = "DownloadStorageProvider";
private static final boolean DEBUG = false;
@@ -74,14 +79,13 @@ public class DownloadStorageProvider extends DocumentsProvider {
};
private DownloadManager mDm;
- private DocumentArchiveHelper mArchiveHelper;
@Override
public boolean onCreate() {
+ super.onCreate(DEFAULT_DOCUMENT_PROJECTION);
mDm = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE);
mDm.setAccessAllDownloads(true);
mDm.setAccessFilename(true);
- mArchiveHelper = new DocumentArchiveHelper(this, ':');
return true;
}
@@ -98,6 +102,10 @@ public class DownloadStorageProvider extends DocumentsProvider {
result.setNotificationUri(getContext().getContentResolver(), cursor.getNotificationUri());
}
+ /**
+ * Called by {@link DownloadProvider} when deleting a row in the {@link DownloadManager}
+ * database.
+ */
static void onDownloadProviderDelete(Context context, long id) {
final Uri uri = DocumentsContract.buildDocumentUri(AUTHORITY, Long.toString(id));
context.revokeUriPermission(uri, ~0);
@@ -105,11 +113,17 @@ public class DownloadStorageProvider extends DocumentsProvider {
@Override
public Cursor queryRoots(String[] projection) throws FileNotFoundException {
+ // It's possible that the folder does not exist on disk, so we will create the folder if
+ // that is the case. If user decides to delete the folder later, then it's OK to fail on
+ // subsequent queries.
+ getDownloadsDirectory().mkdirs();
+
final MatrixCursor result = new MatrixCursor(resolveRootProjection(projection));
final RowBuilder row = result.newRow();
row.add(Root.COLUMN_ROOT_ID, DOC_ID_ROOT);
- row.add(Root.COLUMN_FLAGS,
- Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_RECENTS | Root.FLAG_SUPPORTS_CREATE);
+ row.add(Root.COLUMN_FLAGS, Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_RECENTS
+ | Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_SEARCH
+ | Root.FLAG_SUPPORTS_IS_CHILD);
row.add(Root.COLUMN_ICON, R.mipmap.ic_launcher_download);
row.add(Root.COLUMN_TITLE, getContext().getString(R.string.root_downloads));
row.add(Root.COLUMN_DOCUMENT_ID, DOC_ID_ROOT);
@@ -117,34 +131,41 @@ public class DownloadStorageProvider extends DocumentsProvider {
}
@Override
- public String createDocument(String docId, String mimeType, String displayName)
- throws FileNotFoundException {
- displayName = FileUtils.buildValidFatFilename(displayName);
+ public Path findDocumentPath(String parentDocId, String docId) throws FileNotFoundException {
- if (Document.MIME_TYPE_DIR.equals(mimeType)) {
- throw new FileNotFoundException("Directory creation not supported");
+ if (parentDocId == null) {
+ parentDocId = DOC_ID_ROOT;
}
- final File parent = Environment.getExternalStoragePublicDirectory(
- Environment.DIRECTORY_DOWNLOADS);
- parent.mkdirs();
+ final File parent = getFileForDocId(parentDocId);
+ final File doc = getFileForDocId(docId);
+
+ final String rootId = (parentDocId == null) ? DOC_ID_ROOT : null;
+
+ return new Path(rootId, findDocumentPath(parent, doc));
+ }
+
+ /**
+ * Calls on {@link FileSystemProvider#createDocument(String, String, String)}, and then creates
+ * a new database entry in {@link DownloadManager} if it is not a raw file and not a folder.
+ */
+ @Override
+ public String createDocument(String parentDocId, String mimeType, String displayName)
+ throws FileNotFoundException {
// Delegate to real provider
final long token = Binder.clearCallingIdentity();
try {
- final File file = FileUtils.buildUniqueFile(parent, mimeType, displayName);
-
- try {
- if (!file.createNewFile()) {
- throw new IllegalStateException("Failed to touch " + file);
- }
- } catch (IOException e) {
- throw new IllegalStateException("Failed to touch " + file + ": " + e);
+ String newDocumentId = super.createDocument(parentDocId, mimeType, displayName);
+ if (!Document.MIME_TYPE_DIR.equals(mimeType)
+ && !RawDocumentsHelper.isRawDocId(parentDocId)) {
+ File newFile = getFileForDocId(newDocumentId);
+ newDocumentId = Long.toString(mDm.addCompletedDownload(
+ newFile.getName(), newFile.getName(), true, mimeType,
+ newFile.getAbsolutePath(), 0L,
+ false, true));
}
-
- return Long.toString(mDm.addCompletedDownload(
- file.getName(), file.getName(), true, mimeType, file.getAbsolutePath(), 0L,
- false, true));
+ return newDocumentId;
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -155,6 +176,10 @@ public class DownloadStorageProvider extends DocumentsProvider {
// Delegate to real provider
final long token = Binder.clearCallingIdentity();
try {
+ if (RawDocumentsHelper.isRawDocId(docId)) {
+ super.deleteDocument(docId);
+ return;
+ }
if (mDm.remove(Long.parseLong(docId)) != 1) {
throw new IllegalStateException("Failed to delete " + docId);
}
@@ -164,95 +189,113 @@ public class DownloadStorageProvider extends DocumentsProvider {
}
@Override
- public String renameDocument(String documentId, String displayName)
+ public String renameDocument(String docId, String displayName)
throws FileNotFoundException {
- displayName = FileUtils.buildValidFatFilename(displayName);
-
final long token = Binder.clearCallingIdentity();
+
try {
- final long id = Long.parseLong(documentId);
+ if (RawDocumentsHelper.isRawDocId(docId)) {
+ return super.renameDocument(docId, displayName);
+ }
+ displayName = FileUtils.buildValidFatFilename(displayName);
+ final long id = Long.parseLong(docId);
if (!mDm.rename(getContext(), id, displayName)) {
throw new IllegalStateException(
"Failed to rename to " + displayName + " in downloadsManager");
}
+ return null;
} finally {
Binder.restoreCallingIdentity(token);
}
- return null;
}
@Override
public Cursor queryDocument(String docId, String[] projection) throws FileNotFoundException {
- if (mArchiveHelper.isArchivedDocument(docId)) {
- return mArchiveHelper.queryDocument(docId, projection);
- }
+ // Delegate to real provider
+ final long token = Binder.clearCallingIdentity();
+ Cursor cursor = null;
+ try {
+ if (RawDocumentsHelper.isRawDocId(docId)) {
+ return super.queryDocument(docId, projection);
+ }
- final DownloadsCursor result =
- new DownloadsCursor(projection, getContext().getContentResolver());
+ final DownloadsCursor result = new DownloadsCursor(projection,
+ getContext().getContentResolver());
- if (DOC_ID_ROOT.equals(docId)) {
- includeDefaultDocument(result);
- } else {
- // Delegate to real provider
- final long token = Binder.clearCallingIdentity();
- Cursor cursor = null;
- try {
+ if (DOC_ID_ROOT.equals(docId)) {
+ includeDefaultDocument(result);
+ } else {
cursor = mDm.query(new Query().setFilterById(Long.parseLong(docId)));
copyNotificationUri(result, cursor);
+ Set<String> filePaths = new HashSet<>();
if (cursor.moveToFirst()) {
// We don't know if this queryDocument() call is from Downloads (manage)
// or Files. Safely assume it's Files.
- includeDownloadFromCursor(result, cursor);
+ includeDownloadFromCursor(result, cursor, filePaths);
}
- } finally {
- IoUtils.closeQuietly(cursor);
- Binder.restoreCallingIdentity(token);
}
+ result.start();
+ return result;
+ } finally {
+ IoUtils.closeQuietly(cursor);
+ Binder.restoreCallingIdentity(token);
}
+ }
- result.start();
- return result;
+ @Override
+ public Cursor queryChildDocuments(String parentDocId, String[] projection, String sortOrder)
+ throws FileNotFoundException {
+ return queryChildDocuments(parentDocId, projection, sortOrder, false);
}
@Override
- public Cursor queryChildDocuments(String docId, String[] projection, String sortOrder)
+ public Cursor queryChildDocumentsForManage(
+ String parentDocId, String[] projection, String sortOrder)
throws FileNotFoundException {
- if (mArchiveHelper.isArchivedDocument(docId) ||
- mArchiveHelper.isSupportedArchiveType(getDocumentType(docId))) {
- return mArchiveHelper.queryChildDocuments(docId, projection, sortOrder);
- }
+ return queryChildDocuments(parentDocId, projection, sortOrder, true);
+ }
- final DownloadsCursor result =
- new DownloadsCursor(projection, getContext().getContentResolver());
+ private Cursor queryChildDocuments(String parentDocId, String[] projection,
+ String sortOrder, boolean manage) throws FileNotFoundException {
// Delegate to real provider
final long token = Binder.clearCallingIdentity();
Cursor cursor = null;
try {
- cursor = mDm.query(new DownloadManager.Query().setOnlyIncludeVisibleInDownloadsUi(true)
- .setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL));
+ if (RawDocumentsHelper.isRawDocId(parentDocId)) {
+ return super.queryChildDocuments(parentDocId, projection, sortOrder);
+ }
+
+ assert (DOC_ID_ROOT.equals(parentDocId));
+ final DownloadsCursor result = new DownloadsCursor(projection,
+ getContext().getContentResolver());
+ if (manage) {
+ cursor = mDm.query(
+ new DownloadManager.Query().setOnlyIncludeVisibleInDownloadsUi(true));
+ } else {
+ cursor = mDm
+ .query(new DownloadManager.Query().setOnlyIncludeVisibleInDownloadsUi(true)
+ .setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL));
+ }
copyNotificationUri(result, cursor);
+ Set<String> filePaths = new HashSet<>();
while (cursor.moveToNext()) {
- includeDownloadFromCursor(result, cursor);
+ includeDownloadFromCursor(result, cursor, filePaths);
}
+ includeFilesFromSharedStorage(result, filePaths, null);
+
+ result.start();
+ return result;
} finally {
IoUtils.closeQuietly(cursor);
Binder.restoreCallingIdentity(token);
}
-
- result.start();
- return result;
}
@Override
- public Cursor queryChildDocumentsForManage(
- String parentDocumentId, String[] projection, String sortOrder)
+ public Cursor queryRecentDocuments(String rootId, String[] projection)
throws FileNotFoundException {
- if (mArchiveHelper.isArchivedDocument(parentDocumentId)) {
- return mArchiveHelper.queryDocument(parentDocumentId, projection);
- }
-
final DownloadsCursor result =
new DownloadsCursor(projection, getContext().getContentResolver());
@@ -260,11 +303,21 @@ public class DownloadStorageProvider extends DocumentsProvider {
final long token = Binder.clearCallingIdentity();
Cursor cursor = null;
try {
- cursor = mDm.query(
- new DownloadManager.Query().setOnlyIncludeVisibleInDownloadsUi(true));
+ cursor = mDm.query(new DownloadManager.Query().setOnlyIncludeVisibleInDownloadsUi(true)
+ .setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL));
copyNotificationUri(result, cursor);
- while (cursor.moveToNext()) {
- includeDownloadFromCursor(result, cursor);
+ while (cursor.moveToNext() && result.getCount() < 12) {
+ final String mimeType = cursor.getString(
+ cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_MEDIA_TYPE));
+ final String uri = cursor.getString(
+ cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_MEDIAPROVIDER_URI));
+
+ // Skip images that have been inserted into the MediaStore so we
+ // don't duplicate them in the recents list.
+ if (mimeType == null
+ || (mimeType.startsWith("image/") && !TextUtils.isEmpty(uri))) {
+ continue;
+ }
}
} finally {
IoUtils.closeQuietly(cursor);
@@ -276,7 +329,7 @@ public class DownloadStorageProvider extends DocumentsProvider {
}
@Override
- public Cursor queryRecentDocuments(String rootId, String[] projection)
+ public Cursor querySearchDocuments(String rootId, String query, String[] projection)
throws FileNotFoundException {
final DownloadsCursor result =
@@ -287,22 +340,19 @@ public class DownloadStorageProvider extends DocumentsProvider {
Cursor cursor = null;
try {
cursor = mDm.query(new DownloadManager.Query().setOnlyIncludeVisibleInDownloadsUi(true)
- .setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL));
+ .setFilterByString(query));
copyNotificationUri(result, cursor);
- while (cursor.moveToNext() && result.getCount() < 12) {
- final String mimeType = cursor.getString(
- cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_MEDIA_TYPE));
- final String uri = cursor.getString(
- cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_MEDIAPROVIDER_URI));
-
- // Skip images that have been inserted into the MediaStore so we
- // don't duplicate them in the recents list.
- if (mimeType == null
- || (mimeType.startsWith("image/") && !TextUtils.isEmpty(uri))) {
- continue;
- }
-
- includeDownloadFromCursor(result, cursor);
+ Set<String> filePaths = new HashSet<>();
+ while (cursor.moveToNext()) {
+ includeDownloadFromCursor(result, cursor, filePaths);
+ }
+ Cursor rawFilesCursor = super.querySearchDocuments(getDownloadsDirectory(), query,
+ projection, filePaths);
+ while (rawFilesCursor.moveToNext()) {
+ String docId = rawFilesCursor.getString(
+ rawFilesCursor.getColumnIndexOrThrow(Document.COLUMN_DOCUMENT_ID));
+ File rawFile = getFileForDocId(docId);
+ includeFileFromSharedStorage(result, rawFile);
}
} finally {
IoUtils.closeQuietly(cursor);
@@ -316,13 +366,13 @@ public class DownloadStorageProvider extends DocumentsProvider {
@Override
public ParcelFileDescriptor openDocument(String docId, String mode, CancellationSignal signal)
throws FileNotFoundException {
- if (mArchiveHelper.isArchivedDocument(docId)) {
- return mArchiveHelper.openDocument(docId, mode, signal);
- }
-
// Delegate to real provider
final long token = Binder.clearCallingIdentity();
try {
+ if (RawDocumentsHelper.isRawDocId(docId)) {
+ return super.openDocument(docId, mode, signal);
+ }
+
final long id = Long.parseLong(docId);
final ContentResolver resolver = getContext().getContentResolver();
return resolver.openFileDescriptor(mDm.getDownloadUri(id), mode, signal);
@@ -339,6 +389,46 @@ public class DownloadStorageProvider extends DocumentsProvider {
return new AssetFileDescriptor(pfd, 0, AssetFileDescriptor.UNKNOWN_LENGTH);
}
+ @Override
+ protected File getFileForDocId(String docId, boolean visible) throws FileNotFoundException {
+ if (RawDocumentsHelper.isRawDocId(docId)) {
+ return new File(RawDocumentsHelper.getAbsoluteFilePath(docId));
+ }
+
+ if (DOC_ID_ROOT.equals(docId)) {
+ return getDownloadsDirectory();
+ }
+
+ final long token = Binder.clearCallingIdentity();
+ Cursor cursor = null;
+ String localFilePath = null;
+ try {
+ cursor = mDm.query(new Query().setFilterById(Long.parseLong(docId)));
+ if (cursor.moveToFirst()) {
+ localFilePath = cursor.getString(
+ cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_LOCAL_FILENAME));
+ }
+ } finally {
+ IoUtils.closeQuietly(cursor);
+ Binder.restoreCallingIdentity(token);
+ }
+
+ if (localFilePath == null) {
+ throw new IllegalStateException("File has no filepath. Could not be found.");
+ }
+ return new File(localFilePath);
+ }
+
+ @Override
+ protected String getDocIdForFile(File file) throws FileNotFoundException {
+ return RawDocumentsHelper.getDocIdForFile(file);
+ }
+
+ @Override
+ protected Uri buildNotificationUri(String docId) {
+ return DocumentsContract.buildChildDocumentsUri(AUTHORITY, docId);
+ }
+
private void includeDefaultDocument(MatrixCursor result) {
final RowBuilder row = result.newRow();
row.add(Document.COLUMN_DOCUMENT_ID, DOC_ID_ROOT);
@@ -351,7 +441,8 @@ public class DownloadStorageProvider extends DocumentsProvider {
* Adds the entry from the cursor to the result only if the entry is valid. That is,
* if the file exists in the file system.
*/
- private void includeDownloadFromCursor(MatrixCursor result, Cursor cursor) {
+ private void includeDownloadFromCursor(MatrixCursor result, Cursor cursor,
+ Set<String> filePaths) {
final long id = cursor.getLong(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_ID));
final String docId = String.valueOf(id);
@@ -414,10 +505,6 @@ public class DownloadStorageProvider extends DocumentsProvider {
flags |= Document.FLAG_SUPPORTS_THUMBNAIL;
}
- if (mArchiveHelper.isSupportedArchiveType(mimeType)) {
- flags |= Document.FLAG_ARCHIVE;
- }
-
final long lastModified = cursor.getLong(
cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_LAST_MODIFIED_TIMESTAMP));
@@ -433,13 +520,50 @@ public class DownloadStorageProvider extends DocumentsProvider {
if (status != DownloadManager.STATUS_RUNNING) {
row.add(Document.COLUMN_LAST_MODIFIED, lastModified);
}
+ filePaths.add(localFilePath);
+ }
- if (localFilePath != null) {
- row.add(DocumentArchiveHelper.COLUMN_LOCAL_FILE_PATH, localFilePath);
+ /**
+ * Takes all the top-level files from the Downloads directory and adds them to the result.
+ *
+ * @param result cursor containing all documents to be returned by queryChildDocuments or
+ * queryChildDocumentsForManage.
+ * @param downloadedFilePaths The absolute file paths of all the files in the result Cursor.
+ * @param searchString query used to filter out unwanted results.
+ */
+ private void includeFilesFromSharedStorage(MatrixCursor result,
+ Set<String> downloadedFilePaths, @Nullable String searchString)
+ throws FileNotFoundException {
+ File downloadsDir = getDownloadsDirectory();
+ // Add every file from the Downloads directory to the result cursor. Ignore files that
+ // were in the supplied downloaded file paths.
+ for (File file : downloadsDir.listFiles()) {
+ boolean inResultsAlready = downloadedFilePaths.contains(file.getAbsolutePath());
+ boolean containsQuery = searchString == null || file.getName().contains(searchString);
+ if (!inResultsAlready && containsQuery) {
+ includeFileFromSharedStorage(result, file);
+ }
}
}
/**
+ * Adds a file to the result cursor. It uses a combination of {@code #RAW_PREFIX} and its
+ * absolute file path for its id. Directories are not to be included.
+ *
+ * @param result cursor containing all documents to be returned by queryChildDocuments or
+ * queryChildDocumentsForManage.
+ * @param file file to be included in the result cursor.
+ */
+ private void includeFileFromSharedStorage(MatrixCursor result, File file)
+ throws FileNotFoundException {
+ includeFile(result, null, file);
+ }
+
+ private static File getDownloadsDirectory() {
+ return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
+ }
+
+ /**
* A MatrixCursor that spins up a file observer when the first instance is
* started ({@link #start()}, and stops the file observer when the last instance
* closed ({@link #close()}. When file changes are observed, a content change
@@ -496,9 +620,7 @@ public class DownloadStorageProvider extends DocumentsProvider {
private static final int NOTIFY_EVENTS = ATTRIB | CLOSE_WRITE | MOVED_FROM | MOVED_TO
| CREATE | DELETE | DELETE_SELF | MOVE_SELF;
- private static final String DOWNLOADS_PATH =
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
- .getAbsolutePath();
+ private static final String DOWNLOADS_PATH = getDownloadsDirectory().getAbsolutePath();
private final ContentResolver mResolver;
public ContentChangedRelay(ContentResolver resolver) {
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java
index c6b4c71a..e101c74d 100644
--- a/src/com/android/providers/downloads/DownloadThread.java
+++ b/src/com/android/providers/downloads/DownloadThread.java
@@ -897,15 +897,7 @@ public class DownloadThread extends Thread {
}
@Override
- public void onRestrictBackgroundWhitelistChanged(int uid, boolean whitelisted) {
- // caller is NPMS, since we only register with them
- if (uid == mInfo.mUid) {
- mPolicyDirty = true;
- }
- }
-
- @Override
- public void onRestrictBackgroundBlacklistChanged(int uid, boolean blacklisted) {
+ public void onUidPoliciesChanged(int uid, int uidPolicies) {
// caller is NPMS, since we only register with them
if (uid == mInfo.mUid) {
mPolicyDirty = true;
diff --git a/src/com/android/providers/downloads/Helpers.java b/src/com/android/providers/downloads/Helpers.java
index e9549052..7354076b 100644
--- a/src/com/android/providers/downloads/Helpers.java
+++ b/src/com/android/providers/downloads/Helpers.java
@@ -796,7 +796,7 @@ public class Helpers {
mCurrentToken = TOKEN_COLUMN;
return;
}
- throw new IllegalArgumentException("unrecognized column or keyword");
+ throw new IllegalArgumentException("unrecognized column or keyword: " + word);
}
// quoted strings
diff --git a/src/com/android/providers/downloads/OpenHelper.java b/src/com/android/providers/downloads/OpenHelper.java
index 69a44922..c88902b7 100644
--- a/src/com/android/providers/downloads/OpenHelper.java
+++ b/src/com/android/providers/downloads/OpenHelper.java
@@ -28,8 +28,10 @@ import android.content.ActivityNotFoundException;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageInstaller;
import android.database.Cursor;
import android.net.Uri;
+import android.os.Process;
import android.provider.DocumentsContract;
import android.provider.Downloads.Impl.RequestHeaders;
import android.util.Log;
@@ -126,13 +128,16 @@ public class OpenHelper {
if (cursor != null) {
try {
if (cursor.moveToFirst()) {
- return cursor.getInt(cursor.getColumnIndexOrThrow(Constants.UID));
+ final int uid = cursor.getInt(cursor.getColumnIndexOrThrow(Constants.UID));
+ if (uid != Process.myUid()) {
+ return uid;
+ }
}
} finally {
cursor.close();
}
}
- return -1;
+ return PackageInstaller.SessionParams.UID_UNKNOWN;
}
private static String getCursorString(Cursor cursor, String column) {
diff --git a/src/com/android/providers/downloads/RawDocumentsHelper.java b/src/com/android/providers/downloads/RawDocumentsHelper.java
new file mode 100644
index 00000000..9b14cdd2
--- /dev/null
+++ b/src/com/android/providers/downloads/RawDocumentsHelper.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.providers.downloads;
+
+import static com.android.providers.downloads.Constants.TAG;
+
+import android.content.ActivityNotFoundException;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageInstaller;
+import android.net.Uri;
+import android.util.Log;
+
+import java.io.File;
+
+/**
+ * Contains helper methods to convert between raw document ids and their file-system file paths.
+ */
+public class RawDocumentsHelper {
+ /** The default prefix to raw file documentIds */
+ public static final String RAW_PREFIX = "raw:";
+
+ public static boolean isRawDocId(String docId) {
+ return docId != null && docId.startsWith(RAW_PREFIX);
+ }
+
+ public static String getDocIdForFile(File file) {
+ return RAW_PREFIX + file.getAbsolutePath();
+ }
+
+ public static String getAbsoluteFilePath(String rawDocumentId) {
+ return rawDocumentId.substring(RAW_PREFIX.length());
+ }
+
+ /**
+ * Build and start an {@link Intent} to view the download with given raw documentId.
+ */
+ public static boolean startViewIntent(Context context, Uri documentUri) {
+ final Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(documentUri);
+ intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
+ | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+ intent.putExtra(Intent.EXTRA_ORIGINATING_UID, PackageInstaller.SessionParams.UID_UNKNOWN);
+
+ try {
+ context.startActivity(intent);
+ return true;
+ } catch (ActivityNotFoundException e) {
+ Log.w(TAG, "Failed to start " + intent + ": " + e);
+ return false;
+ }
+ }
+
+}
diff --git a/src/com/android/providers/downloads/StorageUtils.java b/src/com/android/providers/downloads/StorageUtils.java
index 3bb57c8e..d7a5c33b 100644
--- a/src/com/android/providers/downloads/StorageUtils.java
+++ b/src/com/android/providers/downloads/StorageUtils.java
@@ -154,7 +154,7 @@ public class StorageUtils {
Collections.sort(files, new Comparator<ConcreteFile>() {
@Override
public int compare(ConcreteFile lhs, ConcreteFile rhs) {
- return (int) (lhs.file.lastModified() - rhs.file.lastModified());
+ return Long.compare(lhs.file.lastModified(), rhs.file.lastModified());
}
});
diff --git a/tests/Android.mk b/tests/Android.mk
index 655ec168..b654e12c 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -8,8 +8,12 @@ LOCAL_MODULE_TAGS := tests
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_INSTRUMENTATION_FOR := DownloadProvider
LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := mockwebserver dexmaker mockito-target
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ mockwebserver \
+ mockito-target \
+ legacy-android-test
LOCAL_PACKAGE_NAME := DownloadProviderTests
+LOCAL_COMPATIBILITY_SUITE := device-tests
LOCAL_CERTIFICATE := media
include $(BUILD_PACKAGE)
diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml
new file mode 100644
index 00000000..cad211a4
--- /dev/null
+++ b/tests/AndroidTest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Run Tests for Download Manager.">
+ <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+ <option name="test-file-name" value="DownloadProviderTests.apk" />
+ </target_preparer>
+
+ <option name="test-suite-tag" value="apct" />
+ <option name="test-tag" value="DownloadProviderTests" />
+ <test class="com.android.tradefed.testtype.InstrumentationTest" >
+ <option name="package" value="com.android.providers.downloads.tests" />
+ <option name="runner" value="android.test.InstrumentationTestRunner" />
+ </test>
+</configuration>
diff --git a/tests/permission/Android.mk b/tests/permission/Android.mk
index 41ceabc2..62f4d024 100644
--- a/tests/permission/Android.mk
+++ b/tests/permission/Android.mk
@@ -8,6 +8,7 @@ LOCAL_MODULE_TAGS := tests
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_STATIC_JAVA_LIBRARIES := junit legacy-android-test
LOCAL_PACKAGE_NAME := DownloadProviderPermissionTests
include $(BUILD_PACKAGE)
diff --git a/tests/public_api_access/Android.mk b/tests/public_api_access/Android.mk
index 6c6db1f4..66f2f101 100644
--- a/tests/public_api_access/Android.mk
+++ b/tests/public_api_access/Android.mk
@@ -8,6 +8,7 @@ LOCAL_MODULE_TAGS := tests
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_STATIC_JAVA_LIBRARIES := junit legacy-android-test
LOCAL_PACKAGE_NAME := DownloadPublicApiAccessTests
include $(BUILD_PACKAGE)
diff --git a/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java b/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
index 0330fd38..813252a8 100644
--- a/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
+++ b/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
@@ -172,6 +172,7 @@ public abstract class AbstractDownloadProviderFunctionalTest extends
mSystemFacade.setUp();
assertTrue(isDatabaseEmpty()); // ensure we're not messing with real data
+ assertTrue(isDatabaseSecureAgainstBadSelection());
mServer = new MockWebServer();
mServer.play();
}
@@ -200,6 +201,23 @@ public abstract class AbstractDownloadProviderFunctionalTest extends
}
}
+ private boolean isDatabaseSecureAgainstBadSelection() {
+ Cursor cursor = null;
+ try {
+ cursor = mResolver.query(Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, null,
+ "('1'='1'))) ORDER BY lastmod DESC--", null, null);
+ }
+ catch (Exception e) {
+ return true;
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+
+ return false;
+ }
+
/**
* Remove any downloaded files and delete any lingering downloads.
*/
diff --git a/ui/Android.mk b/ui/Android.mk
index 14211ea2..9a545550 100644
--- a/ui/Android.mk
+++ b/ui/Android.mk
@@ -6,7 +6,8 @@ LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src) \
../src/com/android/providers/downloads/OpenHelper.java \
../src/com/android/providers/downloads/Constants.java \
- ../src/com/android/providers/downloads/DownloadDrmHelper.java
+ ../src/com/android/providers/downloads/DownloadDrmHelper.java \
+ ../src/com/android/providers/downloads/RawDocumentsHelper.java
LOCAL_PACKAGE_NAME := DownloadProviderUi
LOCAL_CERTIFICATE := media
diff --git a/ui/res/values-az-rAZ/strings.xml b/ui/res/values-az/strings.xml
index 1741b87f..1741b87f 100644
--- a/ui/res/values-az-rAZ/strings.xml
+++ b/ui/res/values-az/strings.xml
diff --git a/ui/res/values-be-rBY/strings.xml b/ui/res/values-be/strings.xml
index a035f113..a035f113 100644
--- a/ui/res/values-be-rBY/strings.xml
+++ b/ui/res/values-be/strings.xml
diff --git a/ui/res/values-bn-rBD/strings.xml b/ui/res/values-bn/strings.xml
index 23f906e1..23f906e1 100644
--- a/ui/res/values-bn-rBD/strings.xml
+++ b/ui/res/values-bn/strings.xml
diff --git a/ui/res/values-bs-rBA/strings.xml b/ui/res/values-bs/strings.xml
index 099860bd..099860bd 100644
--- a/ui/res/values-bs-rBA/strings.xml
+++ b/ui/res/values-bs/strings.xml
diff --git a/ui/res/values-et-rEE/strings.xml b/ui/res/values-et/strings.xml
index b4e46c3a..b4e46c3a 100644
--- a/ui/res/values-et-rEE/strings.xml
+++ b/ui/res/values-et/strings.xml
diff --git a/ui/res/values-eu-rES/strings.xml b/ui/res/values-eu/strings.xml
index 9a5c0ba1..9a5c0ba1 100644
--- a/ui/res/values-eu-rES/strings.xml
+++ b/ui/res/values-eu/strings.xml
diff --git a/ui/res/values-gl-rES/strings.xml b/ui/res/values-gl/strings.xml
index 841851b5..841851b5 100644
--- a/ui/res/values-gl-rES/strings.xml
+++ b/ui/res/values-gl/strings.xml
diff --git a/ui/res/values-gu-rIN/strings.xml b/ui/res/values-gu/strings.xml
index 39bfce8c..39bfce8c 100644
--- a/ui/res/values-gu-rIN/strings.xml
+++ b/ui/res/values-gu/strings.xml
diff --git a/ui/res/values-hy-rAM/strings.xml b/ui/res/values-hy/strings.xml
index 26354c13..26354c13 100644
--- a/ui/res/values-hy-rAM/strings.xml
+++ b/ui/res/values-hy/strings.xml
diff --git a/ui/res/values-is-rIS/strings.xml b/ui/res/values-is/strings.xml
index 304d0b28..304d0b28 100644
--- a/ui/res/values-is-rIS/strings.xml
+++ b/ui/res/values-is/strings.xml
diff --git a/ui/res/values-ka-rGE/strings.xml b/ui/res/values-ka/strings.xml
index 456a584a..456a584a 100644
--- a/ui/res/values-ka-rGE/strings.xml
+++ b/ui/res/values-ka/strings.xml
diff --git a/ui/res/values-kk-rKZ/strings.xml b/ui/res/values-kk/strings.xml
index 7ce4213f..7ce4213f 100644
--- a/ui/res/values-kk-rKZ/strings.xml
+++ b/ui/res/values-kk/strings.xml
diff --git a/ui/res/values-km-rKH/strings.xml b/ui/res/values-km/strings.xml
index fa8e53c2..0b385d06 100644
--- a/ui/res/values-km-rKH/strings.xml
+++ b/ui/res/values-km/strings.xml
@@ -45,7 +45,7 @@
<string name="retry_download" msgid="7617100787922717912">"សាកល្បង​ម្ដងទៀត"</string>
<string name="start_now_download" msgid="1564642872809509681">"ចាប់ផ្ដើមឥឡូវនេះ"</string>
<string name="deselect_all" msgid="6348198946254776764">"មិន​ជ្រើស​ទាំងអស់"</string>
- <string name="select_all" msgid="634074918366265804">"ជ្រើស​ទាំងអស់"</string>
+ <string name="select_all" msgid="634074918366265804">"ជ្រើសរើសទាំងអស់"</string>
<string name="selected_count" msgid="2101564570019753277">"បាន​ជ្រើស <xliff:g id="NUMBER">%1$d</xliff:g> ក្នុង​ចំណោម <xliff:g id="TOTAL">%2$d</xliff:g>"</string>
<string name="download_share_dialog" msgid="3355867339806448955">"ចែករំលែក​តាម"</string>
</resources>
diff --git a/ui/res/values-kn-rIN/strings.xml b/ui/res/values-kn/strings.xml
index 0da768cf..3b0a81e9 100644
--- a/ui/res/values-kn-rIN/strings.xml
+++ b/ui/res/values-kn/strings.xml
@@ -39,7 +39,7 @@
<string name="dialog_media_not_found" msgid="4468088418758018765">"ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಬಾಹ್ಯ ಮಾಧ್ಯಮವು ಲಭ್ಯವಿಲ್ಲ."</string>
<string name="download_no_application_title" msgid="7024782176657362251">"ಫೈಲ್ ತೆರೆಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
<string name="remove_download" msgid="6372920256257247857">"ತೆಗೆದುಹಾಕಿ"</string>
- <string name="delete_download" msgid="76629022653866471">"ಅಳಿಸು"</string>
+ <string name="delete_download" msgid="76629022653866471">"ಅಳಿಸಿ"</string>
<string name="keep_queued_download" msgid="5144882786014818569">"ಇರಿಸಿ"</string>
<string name="cancel_running_download" msgid="5232704030969221112">"ರದ್ದುಮಾಡಿ"</string>
<string name="retry_download" msgid="7617100787922717912">"ಮರುಪ್ರಯತ್ನಿಸಿ"</string>
diff --git a/ui/res/values-ky-rKG/strings.xml b/ui/res/values-ky/strings.xml
index d20c7c09..7b153c69 100644
--- a/ui/res/values-ky-rKG/strings.xml
+++ b/ui/res/values-ky/strings.xml
@@ -41,7 +41,7 @@
<string name="remove_download" msgid="6372920256257247857">"Алып салуу"</string>
<string name="delete_download" msgid="76629022653866471">"Жок кылуу"</string>
<string name="keep_queued_download" msgid="5144882786014818569">"Калтыруу"</string>
- <string name="cancel_running_download" msgid="5232704030969221112">"Айнуу"</string>
+ <string name="cancel_running_download" msgid="5232704030969221112">"Токтотуу"</string>
<string name="retry_download" msgid="7617100787922717912">"Кайра аракеттенүү"</string>
<string name="start_now_download" msgid="1564642872809509681">"Азыр баштоо"</string>
<string name="deselect_all" msgid="6348198946254776764">"Баарын бошотуу"</string>
diff --git a/ui/res/values-lo-rLA/strings.xml b/ui/res/values-lo/strings.xml
index b62a203b..b62a203b 100644
--- a/ui/res/values-lo-rLA/strings.xml
+++ b/ui/res/values-lo/strings.xml
diff --git a/ui/res/values-mk-rMK/strings.xml b/ui/res/values-mk/strings.xml
index cb52bcd6..cb52bcd6 100644
--- a/ui/res/values-mk-rMK/strings.xml
+++ b/ui/res/values-mk/strings.xml
diff --git a/ui/res/values-ml-rIN/strings.xml b/ui/res/values-ml/strings.xml
index 6b3e89c0..6b3e89c0 100644
--- a/ui/res/values-ml-rIN/strings.xml
+++ b/ui/res/values-ml/strings.xml
diff --git a/ui/res/values-mn-rMN/strings.xml b/ui/res/values-mn/strings.xml
index a6608905..a6608905 100644
--- a/ui/res/values-mn-rMN/strings.xml
+++ b/ui/res/values-mn/strings.xml
diff --git a/ui/res/values-mr-rIN/strings.xml b/ui/res/values-mr/strings.xml
index 433fed54..433fed54 100644
--- a/ui/res/values-mr-rIN/strings.xml
+++ b/ui/res/values-mr/strings.xml
diff --git a/ui/res/values-ms-rMY/strings.xml b/ui/res/values-ms/strings.xml
index c7103b87..c7103b87 100644
--- a/ui/res/values-ms-rMY/strings.xml
+++ b/ui/res/values-ms/strings.xml
diff --git a/ui/res/values-my-rMM/strings.xml b/ui/res/values-my/strings.xml
index ba7bfcc5..ba7bfcc5 100644
--- a/ui/res/values-my-rMM/strings.xml
+++ b/ui/res/values-my/strings.xml
diff --git a/ui/res/values-ne-rNP/strings.xml b/ui/res/values-ne/strings.xml
index f9966a56..572c1d5c 100644
--- a/ui/res/values-ne-rNP/strings.xml
+++ b/ui/res/values-ne/strings.xml
@@ -28,7 +28,7 @@
<string name="download_success" msgid="7006048006543495236">"पुरा गर्नुहोस्"</string>
<string name="download_error" msgid="8081329546008568251">"असफल"</string>
<string name="dialog_title_not_available" msgid="5746317632356158515">"डाउनलोड गर्न सकेन"</string>
- <string name="dialog_failed_body" msgid="587545111677064427">"तपाईँ पछि फेरि फाइल डाउनलोड गर्ने प्रयास गर्न चाहनुहुन्छ कि लामबाट हटाउन चाहनुहुन्छ?"</string>
+ <string name="dialog_failed_body" msgid="587545111677064427">"तपाईं पछि फेरि फाइल डाउनलोड गर्ने प्रयास गर्न चाहनुहुन्छ कि लामबाट हटाउन चाहनुहुन्छ?"</string>
<string name="dialog_title_queued_body" msgid="6760681913815015219">"फाइल लाममा छ"</string>
<string name="dialog_queued_body" msgid="708552801635572720">"फाइल भविष्यमा डाउनलोड गर्नका लागि लाममा राखिएको छ, यसैले अझै उपलब्ध छैन।"</string>
<string name="dialog_file_missing_body" msgid="3223012612774276284">"डाउनलोड गरिएको फाइल फेला पार्न सकेन।"</string>
diff --git a/ui/res/values-pa-rIN/strings.xml b/ui/res/values-pa/strings.xml
index 4d26bb49..4d26bb49 100644
--- a/ui/res/values-pa-rIN/strings.xml
+++ b/ui/res/values-pa/strings.xml
diff --git a/ui/res/values-si-rLK/strings.xml b/ui/res/values-si/strings.xml
index d8e59830..d8e59830 100644
--- a/ui/res/values-si-rLK/strings.xml
+++ b/ui/res/values-si/strings.xml
diff --git a/ui/res/values-sq-rAL/strings.xml b/ui/res/values-sq/strings.xml
index 9fe520ef..9fe520ef 100644
--- a/ui/res/values-sq-rAL/strings.xml
+++ b/ui/res/values-sq/strings.xml
diff --git a/ui/res/values-ta-rIN/strings.xml b/ui/res/values-ta/strings.xml
index 1fb33ee8..1fb33ee8 100644
--- a/ui/res/values-ta-rIN/strings.xml
+++ b/ui/res/values-ta/strings.xml
diff --git a/ui/res/values-te-rIN/strings.xml b/ui/res/values-te/strings.xml
index 737a7c8f..737a7c8f 100644
--- a/ui/res/values-te-rIN/strings.xml
+++ b/ui/res/values-te/strings.xml
diff --git a/ui/res/values-ur-rPK/strings.xml b/ui/res/values-ur/strings.xml
index 15648481..15648481 100644
--- a/ui/res/values-ur-rPK/strings.xml
+++ b/ui/res/values-ur/strings.xml
diff --git a/ui/res/values-uz-rUZ/strings.xml b/ui/res/values-uz/strings.xml
index d8ed1685..d8ed1685 100644
--- a/ui/res/values-uz-rUZ/strings.xml
+++ b/ui/res/values-uz/strings.xml
diff --git a/ui/res/values-zh-rTW/strings.xml b/ui/res/values-zh-rTW/strings.xml
index 3d39299c..e82c9c3b 100644
--- a/ui/res/values-zh-rTW/strings.xml
+++ b/ui/res/values-zh-rTW/strings.xml
@@ -28,7 +28,7 @@
<string name="download_success" msgid="7006048006543495236">"完成"</string>
<string name="download_error" msgid="8081329546008568251">"失敗"</string>
<string name="dialog_title_not_available" msgid="5746317632356158515">"無法下載"</string>
- <string name="dialog_failed_body" msgid="587545111677064427">"您要日後再重試下載檔案,或是從佇列中刪除檔案?"</string>
+ <string name="dialog_failed_body" msgid="587545111677064427">"你要日後再重試下載檔案,或是從佇列中刪除檔案?"</string>
<string name="dialog_title_queued_body" msgid="6760681913815015219">"佇列中的檔案"</string>
<string name="dialog_queued_body" msgid="708552801635572720">"檔案已排入之後要下載的佇列中,因此目前尚無法取得。"</string>
<string name="dialog_file_missing_body" msgid="3223012612774276284">"找不到下載的檔案。"</string>
diff --git a/ui/src/com/android/providers/downloads/ui/TrampolineActivity.java b/ui/src/com/android/providers/downloads/ui/TrampolineActivity.java
index 5d4e7a45..41d7187a 100644
--- a/ui/src/com/android/providers/downloads/ui/TrampolineActivity.java
+++ b/ui/src/com/android/providers/downloads/ui/TrampolineActivity.java
@@ -23,17 +23,21 @@ import android.app.DialogFragment;
import android.app.DownloadManager;
import android.app.DownloadManager.Query;
import android.app.FragmentManager;
+import android.content.ActivityNotFoundException;
import android.content.ContentUris;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
+import android.net.Uri;
import android.os.Bundle;
+import android.provider.DocumentsContract;
import android.util.Log;
import android.widget.Toast;
import com.android.providers.downloads.Constants;
import com.android.providers.downloads.OpenHelper;
+import com.android.providers.downloads.RawDocumentsHelper;
import libcore.io.IoUtils;
@@ -53,8 +57,17 @@ public class TrampolineActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- final long id = ContentUris.parseId(getIntent().getData());
+ Uri documentUri = getIntent().getData();
+ if (RawDocumentsHelper.isRawDocId(DocumentsContract.getDocumentId(documentUri))) {
+ if (!RawDocumentsHelper.startViewIntent(this, documentUri)) {
+ Toast.makeText(this, R.string.download_no_application_title, Toast.LENGTH_SHORT)
+ .show();
+ }
+ finish();
+ return;
+ }
+ final long id = ContentUris.parseId(documentUri);
final DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
dm.setAccessAllDownloads(true);