[automerger skipped] DO NOT MERGE: Update DownloadProvider for correct meteredness
am: b627002ea9  -s ours

Change-Id: I30abd24766074caf2032db1885d900f21a389669
diff --git a/Android.mk b/Android.mk
index 084aea4..8d3c7b4 100644
--- a/Android.mk
+++ b/Android.mk
@@ -6,6 +6,7 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_PACKAGE_NAME := DownloadProvider
+LOCAL_PRIVATE_PLATFORM_APIS := true
 LOCAL_CERTIFICATE := media
 LOCAL_PRIVILEGED_MODULE := true
 LOCAL_STATIC_JAVA_LIBRARIES := guava
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
new file mode 100644
index 0000000..98cd379
--- /dev/null
+++ b/res/values-as/strings.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <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="default" msgid="140058400609165726">"এছডি কাৰ্ডত কৰা সকলো ডাউনল\'ড চাব পাৰে"</string>
+    <string name="permdesc_seeAllExternal" msgid="1672759909065511233">"এপটোক এছডি কাৰ্ডত কৰা সকলো ডাউনল\'ড চাবলৈ অনুমতি দিয়ে, সেইবোৰ যি এপেই ডাউনল\'ড নকৰক লাগে।"</string>
+    <string name="permlab_downloadCacheNonPurgeable" msgid="3069534308882047412">"ডাউন\'লড কেশ্বত ঠাই সংৰক্ষিত কৰিব পাৰে"</string>
+    <string name="permdesc_downloadCacheNonPurgeable" msgid="2408760720334570420">"এপটোক ডাউনল\'ড কেশ্বত ফাইল ডাউনল\'ড কৰিবলৈ অনুমতি দিয়ে, যাক ডাউনল\'ড মেনেজাৰক অধিক খালী ঠাই প্ৰয়োজন হ\'লে স্বয়ংক্ৰিয়ভাৱে মচি পেলাব নোৱাৰি।"</string>
+    <string name="permlab_downloadWithoutNotification" msgid="8837971946078327262">"জাননী নিদিয়াকৈ ফাইল ডাউনল\'ড কৰিব পাৰে"</string>
+    <string name="permdesc_downloadWithoutNotification" msgid="8483135034298639727">"এপটোক ব্যৱহাৰকাৰীক কোনো জাননী নিদিয়াকৈ ডাউনল\'ড মেনেজাৰ ব্যৱহাৰ কৰি ফাইল ডাউনল\'ড কৰিবলৈ অনুমতি দিয়ে।"</string>
+    <string name="permlab_accessAllDownloads" msgid="2436240495424393717">"সকলো ছিষ্টেম ডাউনল\'ডত প্ৰৱেশ কৰিব পাৰে"</string>
+    <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_need_wifi_for_size" msgid="2556172885154833575">"এই আকাৰৰ ডাউনল\'ডৰ বাবে ৱাই-ফাইৰ প্ৰয়োজন।"</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">"আপুনি এই <xliff:g id="SIZE">%s </xliff:g> আকাৰৰ ডাউনল\'ড কৰিবলৈ ৱাই-ফাই ব্যৱহাৰ কৰিবই লাগিব।\n\nআপুনি পিছত ৱাই-ফাইৰ সৈতে সংযুক্ত হ\'লে এই ডাউনল\'ডটো আৰম্ভ কৰিবলৈ <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আপুনি পিছত ৱাই-ফাইৰ সৈতে সংযুক্ত হ\'লে এই ডাউনল\'ডটো আৰম্ভ কৰিবলৈ <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>
+    <plurals name="notif_summary_active" formatted="false" msgid="7290448463204837173">
+      <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g>টা ফাইল ডাউনল\'ড কৰি থকা হৈছে</item>
+      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g>টা ফাইল ডাউনল\'ড কৰি থকা হৈছে</item>
+    </plurals>
+    <plurals name="notif_summary_waiting" formatted="false" msgid="2814217662029273005">
+      <item quantity="one"><xliff:g id="NUMBER">%d</xliff:g>টা ফাইল অপেক্ষাৰত</item>
+      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g>টা ফাইল অপেক্ষাৰত</item>
+    </plurals>
+    <string name="download_remaining" msgid="3139295890887972718">"<xliff:g id="DURATION">%s</xliff:g> বাকী আছে"</string>
+    <string name="download_no_application_title" msgid="7935659741162801699">"ফাইল খুলিব নোৱাৰি"</string>
+    <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_running_percent" msgid="4305080769167320204">"চলি আছে, <xliff:g id="PERCENTAGE">%s</xliff:g>"</string>
+</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 46f4e2d..ec099f7 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -36,15 +36,15 @@
     <string name="download_unknown_title" msgid="7015124071247271585">"&lt;Bez naslova&gt;"</string>
     <string name="notification_download_complete" msgid="5443563299253103667">"Preuzimanje završeno."</string>
     <string name="notification_download_failed" msgid="8612136111952014978">"Preuzimanje neuspješno."</string>
-    <string name="notification_need_wifi_for_size" msgid="2556172885154833575">"Veličina preuzimanja zahtjeva Wi-Fi."</string>
+    <string name="notification_need_wifi_for_size" msgid="2556172885154833575">"Veličina preuzimanja zahtjeva WiFi."</string>
     <string name="notification_paused_in_background" msgid="4328508073283591772">"Pauzirano u pozadini."</string>
     <string name="wifi_required_title" msgid="1995971416871498179">"Preuzimanje je preveliko za mrežu operatera"</string>
-    <string name="wifi_required_body" msgid="3067694630143784449">"Morate koristiti Wi-Fi kako biste dovršili ovo preuzimanje od <xliff:g id="SIZE">%s </xliff:g>. \n\nDodirnite <xliff:g id="QUEUE_TEXT">%s </xliff:g> kako biste pokrenuli ovo preuzimanje kada se narednog puta povežete na Wi-Fi mrežu."</string>
-    <string name="wifi_recommended_title" msgid="7441589306734687400">"Staviti u redoslijed za preuzimanje kasnije?"</string>
-    <string name="wifi_recommended_body" msgid="1314735166699936073">"Pokretanje ovog preuzimanja od <xliff:g id="SIZE">%s </xliff:g> sada može skratiti vijek trajanja baterije i/ili dovesti do prekomjernog korištenja mobilne veze za prenos podataka te se može desiti da vam operater naplati troškove ovisno o pretplati za prenos podataka koju imate.\n\n Dodirnite <xliff:g id="QUEUE_TEXT">%s</xliff:g> kako biste pokrenuli ovo preuzimanje kada se narednog puta povežete na Wi-Fi mrežu."</string>
-    <string name="button_queue_for_wifi" msgid="422576726189179221">"Redoslijed"</string>
+    <string name="wifi_required_body" msgid="3067694630143784449">"Morate koristiti WiFi kako biste dovršili ovo preuzimanje od <xliff:g id="SIZE">%s </xliff:g>. \n\nDodirnite <xliff:g id="QUEUE_TEXT">%s </xliff:g> kako biste pokrenuli ovo preuzimanje kada se narednog puta povežete na WiFi mrežu."</string>
+    <string name="wifi_recommended_title" msgid="7441589306734687400">"Staviti na čekanje za preuzimanje kasnije?"</string>
+    <string name="wifi_recommended_body" msgid="1314735166699936073">"Pokretanje ovog preuzimanja od <xliff:g id="SIZE">%s </xliff:g> sada može skratiti vijek trajanja baterije i/ili dovesti do prekomjernog korištenja mobilne veze za prenos podataka te se može desiti da vam operater naplati troškove ovisno o pretplati za prenos podataka koju imate.\n\n Dodirnite <xliff:g id="QUEUE_TEXT">%s</xliff:g> kako biste pokrenuli ovo preuzimanje kada se narednog puta povežete na WiFi mrežu."</string>
+    <string name="button_queue_for_wifi" msgid="422576726189179221">"Red čekanja"</string>
     <string name="button_cancel_download" msgid="2430166148737975604">"Otkaži"</string>
-    <string name="button_start_now" msgid="792123674007840864">"Pokreni sada"</string>
+    <string name="button_start_now" msgid="792123674007840864">"Započni odmah"</string>
     <plurals name="notif_summary_active" formatted="false" msgid="7290448463204837173">
       <item quantity="one">Preuzima se <xliff:g id="NUMBER">%d</xliff:g> fajl</item>
       <item quantity="few">Preuzimaju se <xliff:g id="NUMBER">%d</xliff:g> fajla</item>
@@ -58,7 +58,7 @@
     <string name="download_remaining" msgid="3139295890887972718">"Još <xliff:g id="DURATION">%s</xliff:g>"</string>
     <string name="download_no_application_title" msgid="7935659741162801699">"Nije moguće otvoriti datoteku"</string>
     <string name="root_downloads" msgid="4098414876292351487">"Preuzimanja"</string>
-    <string name="download_queued" msgid="3302638231377947451">"U redoslijedu"</string>
+    <string name="download_queued" msgid="3302638231377947451">"U U redu čekanja"</string>
     <string name="download_running" msgid="3925050393361158266">"U toku"</string>
     <string name="download_error" msgid="5144180777324573236">"Neuspješno"</string>
     <string name="download_running_percent" msgid="4305080769167320204">"U toku, <xliff:g id="PERCENTAGE">%s</xliff:g>"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 9de0c29..128d3dc 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -21,7 +21,7 @@
     <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="permdesc_downloadManagerAdvanced" msgid="2659546004160962761">"એપ્લિકેશનને ડાઉનલોડ સંચાલકના વિગતવાર Tasks ને ઍક્સેસ કરવાની મંજૂરી આપે છે.  દુભાવનાપૂર્ણ ઍપ્લિકેશનો આનો ઉપયોગ ડાઉનલોડ્સમાં વિક્ષેપ નાખવા અને ખાનગી માહિતીને ઍક્સેસ કરવા માટે કરી શકે છે."</string>
     <string name="permlab_downloadCompletedIntent" msgid="945913803765675685">"ડાઉનલોડ સૂચનાઓ મોકલો."</string>
     <string name="permdesc_downloadCompletedIntent" msgid="2094706189855699533">"એપ્લિકેશનને પૂર્ણ થયેલ ડાઉનલોડ્સ વિશે સૂચનાઓ મોકલવાની મંજૂરી આપે છે. દુર્ભાવનાપૂર્ણ ઍપ્લિકેશનો આનો ઉપયોગ ફાઇલો ડાઉનલોડ કરતી અન્ય ઍપ્લિકેશનોને મૂંઝવણમાં નાખવા માટે કરી શકે છે."</string>
     <string name="permlab_seeAllExternal" product="nosdcard" msgid="4084575448409212628">"USB સ્ટોરેજ પરના તમામ ડાઉનલોડને જુઓ"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 25e3be4..6163933 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -19,7 +19,7 @@
     <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="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>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
new file mode 100644
index 0000000..6c2f685
--- /dev/null
+++ b/res/values-or/strings.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <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">"USB ଷ୍ଟୋରେଜ୍‌ରେ ହୋଇଥିବା ସମସ୍ତ ଡାଉନଲୋଡ୍‌ ଦେଖନ୍ତୁ"</string>
+    <string name="permlab_seeAllExternal" product="default" msgid="140058400609165726">"SD କାର୍ଡରେ ହୋଇଥିବା ସମସ୍ତ ଡାଉନଲୋଡ୍‌ ଦେଖନ୍ତୁ"</string>
+    <string name="permdesc_seeAllExternal" msgid="1672759909065511233">"SD କାର୍ଡରେ ଡାଉନଲୋଡ୍‌ ହୋଇଥିବା ସମସ୍ତ ଆପ୍‌କୁ ଦେଖିବା ପାଇଁ ଆପ୍‌କୁ ଅନୁମତି ଦେଇଥାଏ, ସେଗୁଡ଼ିକୁ ଯେଉଁ ଆପ୍‌ ଡାଉନଲୋଡ୍‌ କରିଥାଉ ନା କାହିଁକି|"</string>
+    <string name="permlab_downloadCacheNonPurgeable" msgid="3069534308882047412">"ଡାଉନଲୋଡ୍‌ କ୍ୟାଶ୍‌ରେ ସ୍ପେସ୍‌ ରିଜର୍ଭ କରନ୍ତୁ"</string>
+    <string name="permdesc_downloadCacheNonPurgeable" msgid="2408760720334570420">"ଆପ୍‌କୁ ଡାଉନଲୋଡ୍‌ କ୍ୟାଶ୍‌ରେ ଫାଇଲ୍‌ଗୁଡ଼ିକୁ ଡାଉନଲୋଡ୍‌ କରିବାକୁ ଦେଇଥାଏ, ଯେଉଁଗୁଡ଼ିକୁ ଡାଉନଲୋଡ୍‌ ମ୍ୟାନେଜର୍‌କୁ ଅଧିକ ସ୍ଥାନ ଆବଶ୍ୟକ ହେଲେ ସ୍ୱଚାଳିତ ଭାବେ ଡିଲିଟ୍‌ କରିହେବ ନାହିଁ|"</string>
+    <string name="permlab_downloadWithoutNotification" msgid="8837971946078327262">"କୌଣସି ବିଜ୍ଞପ୍ତି ବିନା ଫାଇଲ୍‌ଗୁଡ଼ିକୁ ଡାଉନଲୋଡ୍‌ କରନ୍ତୁ"</string>
+    <string name="permdesc_downloadWithoutNotification" msgid="8483135034298639727">"ୟୁଜର୍‌ଙ୍କୁ ବିଜ୍ଞପ୍ତି ନଦେଖାଇ ଡାଉନଲୋଡ୍‌ ମ୍ୟାନେଜର୍‌ ମାଧ୍ୟମରେ ଫାଇଲ୍‌ଗୁଡ଼ିକୁ ଡାଉନଲୋଡ୍‌ କରିବା ପାଇଁ ଆପ୍‌କୁ ଅନୁମତି ଦେଇଥାଏ|"</string>
+    <string name="permlab_accessAllDownloads" msgid="2436240495424393717">"ସମସ୍ତ ସିଷ୍ଟମ୍‌ ଡାଉନଲୋଡ୍‌କୁ ଆକ୍ସେସ୍‌ କରନ୍ତୁ"</string>
+    <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_need_wifi_for_size" msgid="2556172885154833575">"ଡାଉନଲୋଡ୍‌ ଆକାର ୱାଇ-ଫାଇ ଆବଶ୍ୟକ କରେ|"</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">"ଏହି <xliff:g id="SIZE">%s </xliff:g>ର ଡାଉନଲୋଡ୍‌ ସାରିବା ପାଇଁ ଆପଣଙ୍କୁ ନିଶ୍ଚିତ ଭାବେ ୱାଇ-ଫାଇର ବ୍ୟବହାର କରିବାକୁ ପଡ଼ିବ| \n\nପରବର୍ତ୍ତୀ ସମୟରେ ଯେତେବେଳେ ଆପଣ କୌଣସି ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କ ସହିତ ଯୋଡ଼ିହେବେ, ଏହି ଡାଉନଲୋଡ୍‌ ଆରମ୍ଭ କରିବା ପାଇଁ <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 ଆଗାମୀ ଥର ଯେତେବେଳେ ଆପଣ ୱାଇ-ଫାଇ ନେଟୱର୍କ ସହିତ ଯୋଡ଼ିହେବେ, ଏହି ଡାଉନଲୋଡ୍‌ ଆରମ୍ଭ କରିବା ପାଇଁ <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>
+    <plurals name="notif_summary_active" formatted="false" msgid="7290448463204837173">
+      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g>ଟି ଫାଇଲ୍‌ ଡାଉନଲୋଡ୍‌ ହେଉଛି</item>
+      <item quantity="one">1ଟି ଫାଇଲ୍‌ ଡାଉନଲୋଡ୍‌ ହେଉଛି</item>
+    </plurals>
+    <plurals name="notif_summary_waiting" formatted="false" msgid="2814217662029273005">
+      <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g>ଟି ଫାଇଲ୍‌ ଅପେକ୍ଷାରତ</item>
+      <item quantity="one">1ଟି ଫାଇଲ୍‌ ଅପେକ୍ଷାରତ</item>
+    </plurals>
+    <string name="download_remaining" msgid="3139295890887972718">"<xliff:g id="DURATION">%s</xliff:g> ଅବଶିଷ୍ଟ ଅଛି"</string>
+    <string name="download_no_application_title" msgid="7935659741162801699">"ଫାଇଲ୍‌କୁ ଖୋଲିପାରିବ ନାହିଁ"</string>
+    <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_running_percent" msgid="4305080769167320204">"ଜାରି ଅଛି, <xliff:g id="PERCENTAGE">%s</xliff:g>"</string>
+</resources>
diff --git a/src/com/android/providers/downloads/DownloadJobService.java b/src/com/android/providers/downloads/DownloadJobService.java
index 0ce4266..d09738c 100644
--- a/src/com/android/providers/downloads/DownloadJobService.java
+++ b/src/com/android/providers/downloads/DownloadJobService.java
@@ -66,6 +66,10 @@
 
         final DownloadThread thread;
         synchronized (mActiveThreads) {
+            if (mActiveThreads.indexOfKey(id) >= 0) {
+                Log.w(TAG, "Odd, already running download " + id);
+                return false;
+            }
             thread = new DownloadThread(this, params, info);
             mActiveThreads.put(id, thread);
         }
@@ -93,14 +97,20 @@
     }
 
     public void jobFinishedInternal(JobParameters params, boolean needsReschedule) {
+        final int id = params.getJobId();
+
         synchronized (mActiveThreads) {
             mActiveThreads.remove(params.getJobId());
         }
+        if (needsReschedule) {
+            Helpers.scheduleJob(this, DownloadInfo.queryDownloadInfo(this, id));
+        }
 
         // Update notifications one last time while job is protecting us
         mObserver.onChange(false);
 
-        jobFinished(params, needsReschedule);
+        // We do our own rescheduling above
+        jobFinished(params, false);
     }
 
     private ContentObserver mObserver = new ContentObserver(Helpers.getAsyncHandler()) {
diff --git a/src/com/android/providers/downloads/DownloadStorageProvider.java b/src/com/android/providers/downloads/DownloadStorageProvider.java
index 92f4c02..afcba96 100644
--- a/src/com/android/providers/downloads/DownloadStorageProvider.java
+++ b/src/com/android/providers/downloads/DownloadStorageProvider.java
@@ -131,7 +131,11 @@
     }
 
     @Override
-    public Path findDocumentPath(String parentDocId, String docId) throws FileNotFoundException {
+    public Path findDocumentPath(@Nullable String parentDocId, String docId) throws FileNotFoundException {
+
+        // parentDocId is null if the client is asking for the path to the root of a doc tree.
+        // Don't share root information with those who shouldn't know it.
+        final String rootId = (parentDocId == null) ? DOC_ID_ROOT : null;
 
         if (parentDocId == null) {
             parentDocId = DOC_ID_ROOT;
@@ -141,8 +145,6 @@
 
         final File doc = getFileForDocId(docId);
 
-        final String rootId = (parentDocId == null) ? DOC_ID_ROOT : null;
-
         return new Path(rootId, findDocumentPath(parent, doc));
     }
 
@@ -364,6 +366,23 @@
     }
 
     @Override
+    public String getDocumentType(String docId) throws FileNotFoundException {
+        // Delegate to real provider
+        final long token = Binder.clearCallingIdentity();
+        try {
+            if (RawDocumentsHelper.isRawDocId(docId)) {
+                return super.getDocumentType(docId);
+            }
+
+            final long id = Long.parseLong(docId);
+            final ContentResolver resolver = getContext().getContentResolver();
+            return resolver.getType(mDm.getDownloadUri(id));
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+    }
+
+    @Override
     public ParcelFileDescriptor openDocument(String docId, String mode, CancellationSignal signal)
             throws FileNotFoundException {
         // Delegate to real provider
@@ -424,6 +443,9 @@
     private void includeDefaultDocument(MatrixCursor result) {
         final RowBuilder row = result.newRow();
         row.add(Document.COLUMN_DOCUMENT_ID, DOC_ID_ROOT);
+        // We have the same display name as our root :)
+        row.add(Document.COLUMN_DISPLAY_NAME,
+                getContext().getString(R.string.root_downloads));
         row.add(Document.COLUMN_MIME_TYPE, Document.MIME_TYPE_DIR);
         row.add(Document.COLUMN_FLAGS,
                 Document.FLAG_DIR_PREFERS_LAST_MODIFIED | Document.FLAG_DIR_SUPPORTS_CREATE);
@@ -497,6 +519,10 @@
             flags |= Document.FLAG_SUPPORTS_THUMBNAIL;
         }
 
+        if (typeSupportsMetadata(mimeType)) {
+            flags |= Document.FLAG_SUPPORTS_METADATA;
+        }
+
         final long lastModified = cursor.getLong(
                 cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_LAST_MODIFIED_TIMESTAMP));
 
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java
index d3ec568..54cc1a5 100644
--- a/src/com/android/providers/downloads/DownloadThread.java
+++ b/src/com/android/providers/downloads/DownloadThread.java
@@ -16,6 +16,8 @@
 
 package com.android.providers.downloads;
 
+import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING;
 import static android.provider.Downloads.Impl.COLUMN_CONTROL;
 import static android.provider.Downloads.Impl.COLUMN_DELETED;
 import static android.provider.Downloads.Impl.COLUMN_STATUS;
@@ -57,6 +59,7 @@
 import android.net.ConnectivityManager;
 import android.net.INetworkPolicyListener;
 import android.net.Network;
+import android.net.NetworkCapabilities;
 import android.net.NetworkInfo;
 import android.net.NetworkPolicyManager;
 import android.net.TrafficStats;
@@ -285,7 +288,7 @@
             // Use the caller's default network to make this connection, since
             // they might be subject to restrictions that we shouldn't let them
             // circumvent
-            mNetwork = mSystemFacade.getActiveNetwork(mInfo.mUid, mIgnoreBlocked);
+            mNetwork = mSystemFacade.getNetwork(mParams);
             if (mNetwork == null) {
                 throw new StopRequestException(STATUS_WAITING_FOR_NETWORK,
                         "No network associated with requesting UID");
@@ -384,6 +387,7 @@
             mNetworkPolicy.unregisterListener(mPolicyListener);
         }
 
+        boolean needsReschedule = false;
         if (Downloads.Impl.isStatusCompleted(mInfoDelta.mStatus)) {
             if (mInfo.shouldScanFile(mInfoDelta.mStatus)) {
                 DownloadScanner.requestScanBlocking(mContext, mInfo.mId, mInfoDelta.mFileName,
@@ -392,10 +396,10 @@
         } else if (mInfoDelta.mStatus == STATUS_WAITING_TO_RETRY
                 || mInfoDelta.mStatus == STATUS_WAITING_FOR_NETWORK
                 || mInfoDelta.mStatus == STATUS_QUEUED_FOR_WIFI) {
-            Helpers.scheduleJob(mContext, DownloadInfo.queryDownloadInfo(mContext, mId));
+            needsReschedule = true;
         }
 
-        mJobService.jobFinishedInternal(mParams, false);
+        mJobService.jobFinishedInternal(mParams, needsReschedule);
     }
 
     public void requestShutdown() {
@@ -417,7 +421,8 @@
             throw new StopRequestException(STATUS_BAD_REQUEST, e);
         }
 
-        boolean cleartextTrafficPermitted = mSystemFacade.isCleartextTrafficPermitted(mInfo.mUid);
+        boolean cleartextTrafficPermitted
+                = mSystemFacade.isCleartextTrafficPermitted(mInfo.mPackage, url.getHost());
         SSLContext appContext;
         try {
             appContext = mSystemFacade.getSSLContextForPackage(mContext, mInfo.mPackage);
@@ -431,7 +436,7 @@
             // because of HTTP redirects which can change the protocol between HTTP and HTTPS.
             if ((!cleartextTrafficPermitted) && ("http".equalsIgnoreCase(url.getProtocol()))) {
                 throw new StopRequestException(STATUS_BAD_REQUEST,
-                        "Cleartext traffic not permitted for UID " + mInfo.mUid + ": "
+                        "Cleartext traffic not permitted for package " + mInfo.mPackage + ": "
                         + Uri.parse(url.toString()).toSafeString());
             }
 
@@ -717,15 +722,16 @@
         // checking connectivity will apply current policy
         mPolicyDirty = false;
 
-        final NetworkInfo info = mSystemFacade.getNetworkInfo(mNetwork, mInfo.mUid,
-                mIgnoreBlocked);
+        final NetworkInfo info = mSystemFacade.getNetworkInfo(mNetwork, mInfo.mUid, mIgnoreBlocked);
+        final NetworkCapabilities caps = mSystemFacade.getNetworkCapabilities(mNetwork);
         if (info == null || !info.isConnected()) {
             throw new StopRequestException(STATUS_WAITING_FOR_NETWORK, "Network is disconnected");
         }
-        if (info.isRoaming() && !mInfo.isRoamingAllowed()) {
+        if (!caps.hasCapability(NET_CAPABILITY_NOT_ROAMING)
+                && !mInfo.isRoamingAllowed()) {
             throw new StopRequestException(STATUS_WAITING_FOR_NETWORK, "Network is roaming");
         }
-        if (mSystemFacade.isActiveNetworkMeteredForUid(mInfo.mUid)
+        if (!caps.hasCapability(NET_CAPABILITY_NOT_METERED)
                 && !mInfo.isMeteredAllowed(mInfoDelta.mTotalBytes)) {
             throw new StopRequestException(STATUS_WAITING_FOR_NETWORK, "Network is metered");
         }
@@ -858,7 +864,7 @@
         Log.e(TAG, "[" + mId + "] " + msg, t);
     }
 
-    private INetworkPolicyListener mPolicyListener = new INetworkPolicyListener.Stub() {
+    private INetworkPolicyListener mPolicyListener = new NetworkPolicyManager.Listener() {
         @Override
         public void onUidRulesChanged(int uid, int uidRules) {
             // caller is NPMS, since we only register with them
diff --git a/src/com/android/providers/downloads/Helpers.java b/src/com/android/providers/downloads/Helpers.java
index 2b55eb8..963ca9d 100644
--- a/src/com/android/providers/downloads/Helpers.java
+++ b/src/com/android/providers/downloads/Helpers.java
@@ -41,6 +41,7 @@
 import android.os.storage.StorageManager;
 import android.os.storage.StorageVolume;
 import android.provider.Downloads;
+import android.text.TextUtils;
 import android.util.Log;
 import android.webkit.MimeTypeMap;
 
@@ -164,6 +165,17 @@
             builder.setRequiresDeviceIdle(true);
         }
 
+        // Provide estimated network size, when possible
+        if (info.mTotalBytes > 0) {
+            if (info.mCurrentBytes > 0 && !TextUtils.isEmpty(info.mETag)) {
+                // If we're resuming an in-progress download, we only need to
+                // download the remaining bytes.
+                builder.setEstimatedNetworkBytes(info.mTotalBytes - info.mCurrentBytes);
+            } else {
+                builder.setEstimatedNetworkBytes(info.mTotalBytes);
+            }
+        }
+
         // If package name was filtered during insert (probably due to being
         // invalid), blame based on the requesting UID instead
         String packageName = info.mPackage;
diff --git a/src/com/android/providers/downloads/RealSystemFacade.java b/src/com/android/providers/downloads/RealSystemFacade.java
index 2d9b3a3..a0ce92c 100644
--- a/src/com/android/providers/downloads/RealSystemFacade.java
+++ b/src/com/android/providers/downloads/RealSystemFacade.java
@@ -17,6 +17,7 @@
 package com.android.providers.downloads;
 
 import android.app.DownloadManager;
+import android.app.job.JobParameters;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
@@ -30,13 +31,13 @@
 import android.security.NetworkSecurityPolicy;
 import android.security.net.config.ApplicationConfig;
 
+import com.android.internal.util.ArrayUtils;
+
 import java.security.GeneralSecurityException;
 
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.TrustManager;
 
-import com.android.internal.util.ArrayUtils;
-
 class RealSystemFacade implements SystemFacade {
     private Context mContext;
 
@@ -50,9 +51,8 @@
     }
 
     @Override
-    public Network getActiveNetwork(int uid, boolean ignoreBlocked) {
-        return mContext.getSystemService(ConnectivityManager.class)
-                .getActiveNetworkForUid(uid, ignoreBlocked);
+    public Network getNetwork(JobParameters params) {
+        return params.getNetwork();
     }
 
     @Override
@@ -62,15 +62,9 @@
     }
 
     @Override
-    public boolean isNetworkMetered(Network network) {
-        return !mContext.getSystemService(ConnectivityManager.class).getNetworkCapabilities(network)
-                .hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
-    }
-
-    @Override
-    public boolean isActiveNetworkMeteredForUid(int uid) {
+    public NetworkCapabilities getNetworkCapabilities(Network network) {
         return mContext.getSystemService(ConnectivityManager.class)
-                .isActiveNetworkMeteredForUid(uid);
+                .getNetworkCapabilities(network);
     }
 
     @Override
@@ -96,25 +90,6 @@
     }
 
     @Override
-    public boolean isCleartextTrafficPermitted(int uid) {
-        PackageManager packageManager = mContext.getPackageManager();
-        String[] packageNames = packageManager.getPackagesForUid(uid);
-        if (ArrayUtils.isEmpty(packageNames)) {
-            // Unknown UID -- fail safe: cleartext traffic not permitted
-            return false;
-        }
-
-        // Cleartext traffic is permitted from the UID if it's permitted for any of the packages
-        // belonging to that UID.
-        for (String packageName : packageNames) {
-            if (isCleartextTrafficPermitted(packageName)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
     public SSLContext getSSLContextForPackage(Context context, String packageName)
             throws GeneralSecurityException {
         ApplicationConfig appConfig;
@@ -130,22 +105,17 @@
     }
 
     /**
-     * Returns whether cleartext network traffic (HTTP) is permitted for the provided package.
+     * Returns whether cleartext network traffic (HTTP) is permitted for the provided package to
+     * {@code host}.
      */
-    private boolean isCleartextTrafficPermitted(String packageName) {
-        PackageManager packageManager = mContext.getPackageManager();
-        PackageInfo packageInfo;
+    public boolean isCleartextTrafficPermitted(String packageName, String host) {
+        ApplicationConfig appConfig;
         try {
-            packageInfo = packageManager.getPackageInfo(packageName, 0);
+            appConfig = NetworkSecurityPolicy.getApplicationConfigForPackage(mContext, packageName);
         } catch (NameNotFoundException e) {
-            // Unknown package -- fail safe: cleartext traffic not permitted
+            // Unknown package -- fail for safety
             return false;
         }
-        ApplicationInfo applicationInfo = packageInfo.applicationInfo;
-        if (applicationInfo == null) {
-            // No app info -- fail safe: cleartext traffic not permitted
-            return false;
-        }
-        return (applicationInfo.flags & ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC) != 0;
+        return appConfig.isCleartextTrafficPermitted(host);
     }
 }
diff --git a/src/com/android/providers/downloads/SystemFacade.java b/src/com/android/providers/downloads/SystemFacade.java
index dec0cb2..14002a1 100644
--- a/src/com/android/providers/downloads/SystemFacade.java
+++ b/src/com/android/providers/downloads/SystemFacade.java
@@ -16,6 +16,7 @@
 
 package com.android.providers.downloads;
 
+import android.app.job.JobParameters;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager.NameNotFoundException;
@@ -24,6 +25,7 @@
 import android.net.NetworkInfo;
 
 import java.security.GeneralSecurityException;
+
 import javax.net.ssl.SSLContext;
 
 interface SystemFacade {
@@ -32,13 +34,10 @@
      */
     public long currentTimeMillis();
 
-    public Network getActiveNetwork(int uid, boolean ignoreBlocked);
+    public Network getNetwork(JobParameters params);
 
     public NetworkInfo getNetworkInfo(Network network, int uid, boolean ignoreBlocked);
-
-    public boolean isNetworkMetered(Network network);
-
-    public boolean isActiveNetworkMeteredForUid(int uid);
+    public NetworkCapabilities getNetworkCapabilities(Network network);
 
     /**
      * @return maximum size, in bytes, of downloads that may go over a mobile connection; or null if
@@ -64,9 +63,10 @@
     public boolean userOwnsPackage(int uid, String pckg) throws NameNotFoundException;
 
     /**
-     * Returns true if cleartext network traffic is permitted for the specified UID.
+     * Returns true if cleartext network traffic is permitted from {@code packageName} to
+     * {@code host}.
      */
-    public boolean isCleartextTrafficPermitted(int uid);
+    public boolean isCleartextTrafficPermitted(String packageName, String host);
 
     /**
      * Return a {@link SSLContext} configured using the specified package's configuration.
diff --git a/tests/Android.mk b/tests/Android.mk
index b654e12..c3d9bcb 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -7,12 +7,12 @@
 # Include all test java files.
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 LOCAL_INSTRUMENTATION_FOR := DownloadProvider
-LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base android.test.mock
 LOCAL_STATIC_JAVA_LIBRARIES := \
     mockwebserver \
-    mockito-target \
-    legacy-android-test
+    mockito-target
 LOCAL_PACKAGE_NAME := DownloadProviderTests
+LOCAL_PRIVATE_PLATFORM_APIS := true
 LOCAL_COMPATIBILITY_SUITE := device-tests
 LOCAL_CERTIFICATE := media
 
diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml
index cad211a..6a09909 100644
--- a/tests/AndroidTest.xml
+++ b/tests/AndroidTest.xml
@@ -23,5 +23,6 @@
     <test class="com.android.tradefed.testtype.InstrumentationTest" >
         <option name="package" value="com.android.providers.downloads.tests" />
         <option name="runner" value="android.test.InstrumentationTestRunner" />
+        <option name="hidden-api-checks" value="false"/>
     </test>
 </configuration>
diff --git a/tests/permission/Android.mk b/tests/permission/Android.mk
index 62f4d02..ae96b5c 100644
--- a/tests/permission/Android.mk
+++ b/tests/permission/Android.mk
@@ -7,9 +7,10 @@
 # Include all test java files.
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := junit legacy-android-test
+LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base
+LOCAL_STATIC_JAVA_LIBRARIES := junit
 LOCAL_PACKAGE_NAME := DownloadProviderPermissionTests
+LOCAL_PRIVATE_PLATFORM_APIS := true
 
 include $(BUILD_PACKAGE)
 
diff --git a/tests/public_api_access/Android.mk b/tests/public_api_access/Android.mk
index 66f2f10..3bc2e8e 100644
--- a/tests/public_api_access/Android.mk
+++ b/tests/public_api_access/Android.mk
@@ -7,9 +7,10 @@
 # Include all test java files.
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner
-LOCAL_STATIC_JAVA_LIBRARIES := junit legacy-android-test
+LOCAL_JAVA_LIBRARIES := android.test.runner android.test.base
+LOCAL_STATIC_JAVA_LIBRARIES := junit
 LOCAL_PACKAGE_NAME := DownloadPublicApiAccessTests
+LOCAL_PRIVATE_PLATFORM_APIS := true
 
 include $(BUILD_PACKAGE)
 
diff --git a/tests/src/com/android/providers/downloads/FakeSystemFacade.java b/tests/src/com/android/providers/downloads/FakeSystemFacade.java
index aa7b8af..f381bd8 100644
--- a/tests/src/com/android/providers/downloads/FakeSystemFacade.java
+++ b/tests/src/com/android/providers/downloads/FakeSystemFacade.java
@@ -1,14 +1,19 @@
 package com.android.providers.downloads;
 
+import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
+import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING;
+
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import android.app.job.JobParameters;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.net.ConnectivityManager;
 import android.net.Network;
+import android.net.NetworkCapabilities;
 import android.net.NetworkInfo;
 import android.net.NetworkInfo.DetailedState;
 
@@ -65,7 +70,7 @@
     }
 
     @Override
-    public Network getActiveNetwork(int uid, boolean ignoreBlocked) {
+    public Network getNetwork(JobParameters params) {
         if (mActiveNetworkType == null) {
             return null;
         } else {
@@ -91,19 +96,20 @@
         } else {
             final NetworkInfo info = new NetworkInfo(mActiveNetworkType, 0, null, null);
             info.setDetailedState(DetailedState.CONNECTED, null, null);
-            info.setRoaming(mIsRoaming);
             return info;
         }
     }
 
     @Override
-    public boolean isNetworkMetered(Network network) {
-        return mIsMetered;
-    }
-
-    @Override
-    public boolean isActiveNetworkMeteredForUid(int uid) {
-        return mIsMetered;
+    public NetworkCapabilities getNetworkCapabilities(Network network) {
+        if (mActiveNetworkType == null) {
+            return null;
+        } else {
+            final NetworkCapabilities caps = new NetworkCapabilities();
+            caps.setCapability(NET_CAPABILITY_NOT_METERED, !mIsMetered);
+            caps.setCapability(NET_CAPABILITY_NOT_ROAMING, !mIsRoaming);
+            return caps;
+        }
     }
 
     @Override
@@ -127,7 +133,7 @@
     }
 
     @Override
-    public boolean isCleartextTrafficPermitted(int uid) {
+    public boolean isCleartextTrafficPermitted(String packageName, String hostname) {
         return mCleartextTrafficPermitted;
     }
 
diff --git a/ui/Android.mk b/ui/Android.mk
index 9a54555..f63d7e3 100644
--- a/ui/Android.mk
+++ b/ui/Android.mk
@@ -10,6 +10,8 @@
     ../src/com/android/providers/downloads/RawDocumentsHelper.java
 
 LOCAL_PACKAGE_NAME := DownloadProviderUi
+LOCAL_PRIVATE_PLATFORM_APIS := true
 LOCAL_CERTIFICATE := media
+LOCAL_PRIVILEGED_MODULE := true
 
 include $(BUILD_PACKAGE)
diff --git a/ui/CleanSpec.mk b/ui/CleanSpec.mk
new file mode 100644
index 0000000..9e8982b
--- /dev/null
+++ b/ui/CleanSpec.mk
@@ -0,0 +1,47 @@
+# Copyright (C) 2018 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.
+#
+
+# If you don't need to do a full clean build but would like to touch
+# a file or delete some intermediate files, add a clean step to the end
+# of the list.  These steps will only be run once, if they haven't been
+# run before.
+#
+# E.g.:
+#     $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
+#     $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
+#
+# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
+# files that are missing or have been moved.
+#
+# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
+# Use $(OUT_DIR) to refer to the "out" directory.
+#
+# If you need to re-do something that's already mentioned, just copy
+# the command and add it to the bottom of the list.  E.g., if a change
+# that you made last week required touching a file and a change you
+# made today requires touching the same file, just copy the old
+# touch step and add it to the end of the list.
+#
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
+
+# For example:
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
+#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
+#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
+
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/DownloadProviderUi)
\ No newline at end of file
diff --git a/ui/res/values-as/strings.xml b/ui/res/values-as/strings.xml
new file mode 100644
index 0000000..de6cac5
--- /dev/null
+++ b/ui/res/values-as/strings.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3070921713463294774">"ডাউনল\'ডসমূহ"</string>
+    <string name="download_title_sorted_by_date" msgid="5898014492155434221">"ডাউনল\'ডসমূহ - তাৰিখ অনুসৰি ক্ৰমবদ্ধ কৰক"</string>
+    <string name="download_title_sorted_by_size" msgid="1417193166677094813">"ডাউনল\'ডসমূহ - আকাৰ অনুসৰি ক্ৰমবদ্ধ কৰক"</string>
+    <string name="no_downloads" msgid="1029667411186146836">"কোনো ডাউনল\'ড নাই।"</string>
+    <string name="missing_title" msgid="830115697868833773">"&lt;অজ্ঞাত&gt;"</string>
+    <string name="button_sort_by_size" msgid="7331549713691146251">"আকাৰ অনুসৰি ক্ৰমবদ্ধ কৰক"</string>
+    <string name="button_sort_by_date" msgid="8800842892684101528">"তাৰিখ অনুসৰি ক্ৰমবদ্ধ কৰক"</string>
+    <string name="download_queued" msgid="104973307780629904">"লানি পাতি ৰখা হৈছে"</string>
+    <string name="download_running" msgid="4656462962155580641">"চলি আছে"</string>
+    <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_title_queued_body" msgid="6760681913815015219">"ফাইল লানি পাতি থোৱা হৈছে"</string>
+    <string name="dialog_queued_body" msgid="708552801635572720">"এই ফাইলটো ভৱিষ্যতে ডাউনল\'ড কৰিবলৈ লানি পাতি থোৱা হৈছে, গতিকে সদ্যহতে উপলব্ধ নহয়।"</string>
+    <string name="dialog_file_missing_body" msgid="3223012612774276284">"ডাউনল\'ড কৰা ফাইলটো বিচাৰি পোৱা নাই।"</string>
+    <string name="dialog_insufficient_space_on_external" msgid="8692452156251449195">"ডাউনল\'ড সম্পূৰ্ণ কৰিবপৰা নোৱাৰি। বাহ্যিক সঞ্চয়াগাৰত পৰ্যাপ্ত খালী ঠাই নাই।"</string>
+    <string name="dialog_insufficient_space_on_cache" msgid="6313630206163908994">"ডাউনল\'ড সম্পূৰ্ণ কৰিব নোৱাৰি। আভ্যন্তৰীণ ডাউনল\'ড সঞ্চয়াগাৰত পৰ্যাপ্ত খালী ঠাই নাই।"</string>
+    <string name="dialog_cannot_resume" msgid="8664509751358983543">"ডাউনল\'ডত বিঘিনি জন্মোৱা হৈছিল আৰু ইয়াক পুনৰায় আৰম্ভ কৰিবপৰা নাযাব।"</string>
+    <string name="dialog_file_already_exists" msgid="8308563940663449590">"ডাউনল\'ড কৰিব নোৱাৰি। লক্ষ্যস্থানত ফাইলটো ইতিমধ্যে আছে।"</string>
+    <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="keep_queued_download" msgid="5144882786014818569">"ৰাখক"</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>
+    <string name="select_all" msgid="634074918366265804">"সকলো বাছনি কৰক"</string>
+    <string name="selected_count" msgid="2101564570019753277">"<xliff:g id="TOTAL">%2$d</xliff:g>ৰ ভিতৰত <xliff:g id="NUMBER">%1$d</xliff:g>টা বাছনি কৰা হ\'ল"</string>
+    <string name="download_share_dialog" msgid="3355867339806448955">"ইয়াৰ জৰিয়তে শ্বেয়াৰ কৰক"</string>
+</resources>
diff --git a/ui/res/values-bs/strings.xml b/ui/res/values-bs/strings.xml
index c86fdf7..9b6e01b 100644
--- a/ui/res/values-bs/strings.xml
+++ b/ui/res/values-bs/strings.xml
@@ -23,12 +23,12 @@
     <string name="missing_title" msgid="830115697868833773">"&lt;Nepoznato&gt;"</string>
     <string name="button_sort_by_size" msgid="7331549713691146251">"Poredaj po veličini"</string>
     <string name="button_sort_by_date" msgid="8800842892684101528">"Poredaj po datumu"</string>
-    <string name="download_queued" msgid="104973307780629904">"U redoslijedu"</string>
+    <string name="download_queued" msgid="104973307780629904">"U U redu čekanja"</string>
     <string name="download_running" msgid="4656462962155580641">"U toku"</string>
     <string name="download_success" msgid="7006048006543495236">"Završeno"</string>
     <string name="download_error" msgid="8081329546008568251">"Neuspješno"</string>
     <string name="dialog_title_not_available" msgid="5746317632356158515">"Nije bilo moguće preuzeti"</string>
-    <string name="dialog_failed_body" msgid="587545111677064427">"Da li želite ponovo pokušati s preuzimanjem fajla kasnije ili je želite izbrisati s redoslijeda?"</string>
+    <string name="dialog_failed_body" msgid="587545111677064427">"Želite li ponovo kasnije pokušati s preuzimanjem fajla ili ga želite izbrisati iz reda čekanja?"</string>
     <string name="dialog_title_queued_body" msgid="6760681913815015219">"Fajl je u redu čekanja"</string>
     <string name="dialog_queued_body" msgid="708552801635572720">"Fajl je u redu čekanja za kasnije preuzimanje tako da još nije dostupan."</string>
     <string name="dialog_file_missing_body" msgid="3223012612774276284">"Nije moguće pronaći preuzetu datoteku."</string>
@@ -43,7 +43,7 @@
     <string name="keep_queued_download" msgid="5144882786014818569">"Zadrži"</string>
     <string name="cancel_running_download" msgid="5232704030969221112">"Otkaži"</string>
     <string name="retry_download" msgid="7617100787922717912">"Pokušaj ponovo"</string>
-    <string name="start_now_download" msgid="1564642872809509681">"Pokreni odmah"</string>
+    <string name="start_now_download" msgid="1564642872809509681">"Započni odmah"</string>
     <string name="deselect_all" msgid="6348198946254776764">"Poništi odabir svih"</string>
     <string name="select_all" msgid="634074918366265804">"Odaberi sve"</string>
     <string name="selected_count" msgid="2101564570019753277">"Odabrano <xliff:g id="NUMBER">%1$d</xliff:g> od <xliff:g id="TOTAL">%2$d</xliff:g>"</string>
diff --git a/ui/res/values-mr/strings.xml b/ui/res/values-mr/strings.xml
index 62b6389..ba3b2cc 100644
--- a/ui/res/values-mr/strings.xml
+++ b/ui/res/values-mr/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>
@@ -47,5 +47,5 @@
     <string name="deselect_all" msgid="6348198946254776764">"सर्व निवड रद्द करा"</string>
     <string name="select_all" msgid="634074918366265804">"सर्व निवडा"</string>
     <string name="selected_count" msgid="2101564570019753277">"<xliff:g id="TOTAL">%2$d</xliff:g> पैकी <xliff:g id="NUMBER">%1$d</xliff:g> निवडले"</string>
-    <string name="download_share_dialog" msgid="3355867339806448955">"द्वारे सामायिक करा"</string>
+    <string name="download_share_dialog" msgid="3355867339806448955">"द्वारे शेअर करा"</string>
 </resources>
diff --git a/ui/res/values-my/strings.xml b/ui/res/values-my/strings.xml
index ba7bfcc..7ed8931 100644
--- a/ui/res/values-my/strings.xml
+++ b/ui/res/values-my/strings.xml
@@ -20,7 +20,7 @@
     <string name="download_title_sorted_by_date" msgid="5898014492155434221">"ဒေါင်းလုဒ်များ -နေ့စွဲအလိုက် စီထားသည်"</string>
     <string name="download_title_sorted_by_size" msgid="1417193166677094813">"ဒေါင်းလုဒ်များ -အရွယ်အစားအလိုက် စီထားသည်"</string>
     <string name="no_downloads" msgid="1029667411186146836">"ဒေါင်းလုပ်မရှိပါ"</string>
-    <string name="missing_title" msgid="830115697868833773">"အကြောင်းအရာ မသိရှိ"</string>
+    <string name="missing_title" msgid="830115697868833773">"မသိပါ"</string>
     <string name="button_sort_by_size" msgid="7331549713691146251">"အရွယ်အစားအလိုက် စီရန်"</string>
     <string name="button_sort_by_date" msgid="8800842892684101528">"နေ့စွဲအလိုက် စီရန်"</string>
     <string name="download_queued" msgid="104973307780629904">"တန်းစီထားပြီး"</string>
diff --git a/ui/res/values-ne/strings.xml b/ui/res/values-ne/strings.xml
index 572c1d5..314e6c3 100644
--- a/ui/res/values-ne/strings.xml
+++ b/ui/res/values-ne/strings.xml
@@ -30,7 +30,7 @@
     <string name="dialog_title_not_available" msgid="5746317632356158515">"डाउनलोड गर्न सकेन"</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_queued_body" msgid="708552801635572720">"फाइल भविष्यमा डाउनलोड गर्नाका लागि लाममा राखिएको छ, यसैले अझै उपलब्ध छैन।"</string>
     <string name="dialog_file_missing_body" msgid="3223012612774276284">"डाउनलोड गरिएको फाइल फेला पार्न सकेन।"</string>
     <string name="dialog_insufficient_space_on_external" msgid="8692452156251449195">"डाउनलोड समाप्त पार्न सकेन। बाह्य भण्डारणमा पर्याप्त ठाउँ छैन।"</string>
     <string name="dialog_insufficient_space_on_cache" msgid="6313630206163908994">"डाउनलोड समाप्त पार्न सकेन। आन्तरिक डाउनलोड भण्डारणमा पर्याप्त ठाउँ छैन।"</string>
diff --git a/ui/res/values-or/strings.xml b/ui/res/values-or/strings.xml
new file mode 100644
index 0000000..a9e6fdb
--- /dev/null
+++ b/ui/res/values-or/strings.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3070921713463294774">"ଡାଉନଲୋଡ୍‌"</string>
+    <string name="download_title_sorted_by_date" msgid="5898014492155434221">"ଡାଉନଲୋଡ୍‌ - ତାରିଖ ଅନୁସାରେ କ୍ରମବଦ୍ଧ"</string>
+    <string name="download_title_sorted_by_size" msgid="1417193166677094813">"ଡାଉନଲୋଡ୍‌ - ଆକାର ଅନୁସାରେ କ୍ରମବଦ୍ଧ"</string>
+    <string name="no_downloads" msgid="1029667411186146836">"କୌଣସି ଡାଉନଲୋଡ୍‌ ନାହିଁ।"</string>
+    <string name="missing_title" msgid="830115697868833773">"&lt;ଅଜଣା&gt;"</string>
+    <string name="button_sort_by_size" msgid="7331549713691146251">"ଆକାର ଅନୁସାରେ କ୍ରମବଦ୍ଧ କରନ୍ତୁ"</string>
+    <string name="button_sort_by_date" msgid="8800842892684101528">"ତାରିଖ ଅନୁସାରେ କ୍ରମବଦ୍ଧ କରନ୍ତୁ"</string>
+    <string name="download_queued" msgid="104973307780629904">"ଧାଡ଼ିରେ ରଖାଯାଇଛି"</string>
+    <string name="download_running" msgid="4656462962155580641">"ଜାରି ଅଛି"</string>
+    <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_title_queued_body" msgid="6760681913815015219">"ଫାଇଲ୍‌ଟିକୁ ଧାଡ଼ିରେ ରଖାଯାଇଛି"</string>
+    <string name="dialog_queued_body" msgid="708552801635572720">"ଏହି ଫାଇଲ୍‌ଟି ଭବିଷ୍ୟତରେ ଡାଉନଲୋଡ୍‌ କରିବା ପାଇଁ ଧାଡ଼ିରେ ରଖାଯାଇଛି, ତେଣୁ ଏହା ଏବେ ଉପଲବ୍ଧ ନାହିଁ।"</string>
+    <string name="dialog_file_missing_body" msgid="3223012612774276284">"ଡାଉନଲୋଡ୍‌ ହୋଇଥିବା ଫାଇଲ୍‌ ମିଳୁନାହିଁ।"</string>
+    <string name="dialog_insufficient_space_on_external" msgid="8692452156251449195">"ଡାଉନଲୋଡ୍‌କୁ ସମ୍ପୂର୍ଣ୍ଣ କରିହେବ ନାହିଁ। ଏକ୍ସଟର୍ନଲ୍‌ ଡାଉନଲୋଡ୍‌ ଷ୍ଟୋରେଜ୍‌ରେ ଯଥେଷ୍ଟ ସ୍ପେସ୍‌ ନାହିଁ।"</string>
+    <string name="dialog_insufficient_space_on_cache" msgid="6313630206163908994">"ଡାଉନଲୋଡ୍‌କୁ ସମ୍ପୂର୍ଣ୍ଣ କରିହେବ ନାହିଁ। ଇଣ୍ଟର୍ନଲ୍‌ ଡାଉନଲୋଡ୍‌ ଷ୍ଟୋରେଜ୍‌ରେ ଯଥେଷ୍ଟ ସ୍ପେସ୍‌ ନାହିଁ।"</string>
+    <string name="dialog_cannot_resume" msgid="8664509751358983543">"ଡାଉନଲୋଡ୍‌ରେ ବାଧା ଉପୁଜିଥିଲା ଏବଂ ଏହାକୁ ଆଉଥରେ ଆରମ୍ଭ କରିହେବ ନାହିଁ।"</string>
+    <string name="dialog_file_already_exists" msgid="8308563940663449590">"ଡାଉନଲୋଡ୍‌ କରିହେବ ନାହିଁ। ସେହି ନାମରେ ଆଉ ଗୋଟିଏ ଫାଇଲ୍‌ ପୂର୍ବରୁ ରହିଛି।"</string>
+    <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="keep_queued_download" msgid="5144882786014818569">"ରଖନ୍ତୁ"</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>
+    <string name="select_all" msgid="634074918366265804">"ସବୁ ଚୟନ କରନ୍ତୁ"</string>
+    <string name="selected_count" msgid="2101564570019753277">"<xliff:g id="TOTAL">%2$d</xliff:g> ମଧ୍ୟରୁ <xliff:g id="NUMBER">%1$d</xliff:g> ଚୟନିତ"</string>
+    <string name="download_share_dialog" msgid="3355867339806448955">"ଏହା ମାଧ୍ୟମରେ ଶେୟାର୍‌ କରନ୍ତୁ"</string>
+</resources>