Snap for 7550844 from cb5fc13b8f9f91271cd37d9445001ce591756815 to mainline-conscrypt-release

Change-Id: Ic9d6743fbe9ff9de224d3d34059ffd64264d04f1
diff --git a/Android.bp b/Android.bp
index 78c8072..106ed1e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -13,8 +13,28 @@
 // limitations under the License.
 //
 
+package {
+    default_applicable_licenses: [
+        "packages_providers_DownloadProvider_license",
+    ],
+}
+
+// Added automatically by a large-scale-change
+// See: http://go/android-license-faq
+license {
+    name: "packages_providers_DownloadProvider_license",
+    visibility: [":__subpackages__"],
+    license_kinds: [
+        "SPDX-license-identifier-Apache-2.0",
+    ],
+    license_text: [
+        "NOTICE",
+    ],
+}
+
 android_app {
     name: "DownloadProvider",
+    defaults: ["platform_app_defaults"],
 
     manifest: "AndroidManifest.xml",
 
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6ef1b54..43cf258 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -60,6 +60,7 @@
     <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/>
     <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
     <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"/>
 
     <application android:process="android.process.media"
                  android:label="@string/app_label"
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/OWNERS b/OWNERS
index 8134437..79add9e 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,2 +1,3 @@
-jsharkey@android.com
-sudheersai@google.com
+# Bug component: 95221
+
+include platform/frameworks/base:/core/java/android/os/storage/OWNERS
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index af2995e..75a81bf 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -41,7 +41,7 @@
     <string name="wifi_recommended_body" msgid="8710820743211704403">"Ovim preuzimanjem od <xliff:g id="SIZE">%1$s </xliff:g> možete da skratite vek trajanja baterije i/ili preterano koristite mobilnu vezu za prenos podataka, što može da dovede do troškova kod mobilnog operatera shodno tarifnom paketu.\n\n Dodirnite <xliff:g id="QUEUE_TEXT">%2$s</xliff:g> da biste započeli ovo preuzimanje kada se ponovo povežete sa WiFi mrežom."</string>
     <string name="button_queue_for_wifi" msgid="6650185573566994738">"Red"</string>
     <string name="button_cancel_download" msgid="4135046775536601831">"Otkaži"</string>
-    <string name="button_start_now" msgid="3817100969365441730">"Započni odmah"</string>
+    <string name="button_start_now" msgid="3817100969365441730">"Započni"</string>
     <plurals name="notif_summary_active" formatted="false" msgid="8652501374845637331">
       <item quantity="one">Preuzima se <xliff:g id="NUMBER">%d</xliff:g> datoteka</item>
       <item quantity="few">Preuzimaju se <xliff:g id="NUMBER">%d</xliff:g> datoteke</item>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index fd860a2..2c54582 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -40,7 +40,7 @@
     <string name="wifi_recommended_title" msgid="6488158053932133804">"Asetetaanko myöhemmin ladattavaksi?"</string>
     <string name="wifi_recommended_body" msgid="8710820743211704403">"Jos aloitat tämän <xliff:g id="SIZE">%1$s </xliff:g>:n latauksen nyt, akun virtaa voi kulua tav. enemmän ja/tai operaattori voi veloittaa ylim. mobiilitiedons.\n\nAloita lataus seuraavan kerran, kun yhdistät Wi-Fi-verkkoon, koskettamalla <xliff:g id="QUEUE_TEXT">%2$s</xliff:g>."</string>
     <string name="button_queue_for_wifi" msgid="6650185573566994738">"Jono"</string>
-    <string name="button_cancel_download" msgid="4135046775536601831">"Peruuta"</string>
+    <string name="button_cancel_download" msgid="4135046775536601831">"Peru"</string>
     <string name="button_start_now" msgid="3817100969365441730">"Aloita nyt"</string>
     <plurals name="notif_summary_active" formatted="false" msgid="8652501374845637331">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> tiedostoa ladataan.</item>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 57763c1..37768a3 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -16,11 +16,11 @@
 
 <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="5264040740662487684">"डाउनलोड प्रबंधक"</string>
+    <string name="app_label" msgid="5264040740662487684">"डाउनलोड मैनेजर"</string>
     <string name="storage_description" msgid="169690279447532621">"डाउनलोड"</string>
     <string name="permlab_downloadManager" msgid="4241473724446132797">"डाउनलोड मैनेजर में ऐक्सेस पाएं."</string>
     <string name="permdesc_downloadManager" msgid="5562734314998369030">"ऐप को डाउनलोड मैनेजर तक पहुंचने देता है और फ़ाइलें डाउनलोड करने के लिए इसका इस्तेमाल करने देता है. धोखा देने वाले ऐप इसका इस्तेमाल डाउनलोड को रोकने और निजी जानकारी तक पहुंचने के लिए कर सकते हैं."</string>
-    <string name="permlab_downloadManagerAdvanced" msgid="2225663947531460795">"बेहतर डाउनलोड प्रबंधक फ़क्शन."</string>
+    <string name="permlab_downloadManagerAdvanced" msgid="2225663947531460795">"बेहतर डाउनलोड मैनेजर फ़क्शन."</string>
     <string name="permdesc_downloadManagerAdvanced" msgid="3902478062563030716">"ऐप्लिकेशन को डाउनलोड मैनेजर के बेहतर फ़ंक्शन के इस्तेमाल की मंज़ूरी देता है. धोखा देने वाले ऐप्लिकेशन इसका इस्तेमाल डाउनलोड को रोकने और निजी जानकारी तक पहुंचने के लिए कर सकते हैं."</string>
     <string name="permlab_downloadCompletedIntent" msgid="2674407390116052956">"डाउनलोड सूचनाएं भेजें."</string>
     <string name="permdesc_downloadCompletedIntent" msgid="3384693829639860032">"पूरे किए गए डाउनलोड के बारे में ऐप को सूचना भेजने देता है. धोखा देने वाले ऐप इसका इस्तेमाल फ़ाइलों को डाउनलोड करने वाले दूसरे ऐप को भ्रम में डालने के लिए कर सकते हैं."</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 4cf0e88..d6907f7 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -41,7 +41,7 @@
     <string name="wifi_recommended_body" msgid="8710820743211704403">"यस <xliff:g id="SIZE">%1$s </xliff:g> डाउनलोडलाई सुरु गर्दा तपाईंको ब्याट्रिको काल छोट्टिन सक्छ र/वा तपाईंको मोबाइल डेटा जडानको अधिकतम प्रयोग भई तपाईंको डेटा योजना अनुसार मोबाइल अपरेटरले थप शुल्क लिन सक्छ। \n\n छुनुहोस् <xliff:g id="QUEUE_TEXT">%2$s</xliff:g>तल यस डाउनलोडलाई सुरु गर्न अर्को पटक तपाईं Wi-Fi सन्जालमा जडित हुने बेला।"</string>
     <string name="button_queue_for_wifi" msgid="6650185573566994738">"लाम"</string>
     <string name="button_cancel_download" msgid="4135046775536601831">"रद्द गर्नुहोस्"</string>
-    <string name="button_start_now" msgid="3817100969365441730">"अहिले सुरु गर्नुहोस्"</string>
+    <string name="button_start_now" msgid="3817100969365441730">"अहिले न"</string>
     <plurals name="notif_summary_active" formatted="false" msgid="8652501374845637331">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g> फाइलहरू डाउनलोड हुँदैछन्</item>
       <item quantity="one">१ फाइल डाउनलोड हुँदैछ</item>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 3121473..4470f93 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -40,7 +40,7 @@
     <string name="wifi_recommended_title" msgid="6488158053932133804">"ପରେ ଡାଉନଲୋଡ୍‌ କରିବା ପାଇଁ ଧାଡ଼ିରେ ରଖିବେ?"</string>
     <string name="wifi_recommended_body" msgid="8710820743211704403">"ଏହି <xliff:g id="SIZE">%1$s </xliff:g>ର ଡାଉନଲୋଡ୍‌ ଆରମ୍ଭ କଲେ ଆପଣଙ୍କ ବ୍ୟାଟେରୀ ଶୀଘ୍ର ସରିଯାଇପାରେ ଏବଂ/କିମ୍ୱା ମୋବାଇଲ୍‌ର ଅନେକ ଡାଟା ଖର୍ଚ୍ଚ ହୋଇପାରେ, ଯାହା ପାଇଁ ମୋବାଇଲ୍‌ ଅପରେଟର୍‌, ଆପଣଙ୍କ ଡାଟା ପ୍ଲାନ୍‌ ହିସାବରେ ଆପଣଙ୍କଠାରୁ ପଇସା ନେଇପାରେ|\n\n ଆଗାମୀ ଥର ଯେତେବେଳେ ଆପଣ ୱାଇ-ଫାଇ ନେଟୱର୍କ ସହିତ ଯୋଡ଼ିହେବେ, ଏହି ଡାଉନଲୋଡ୍‌ ଆରମ୍ଭ କରିବା ପାଇଁ <xliff:g id="QUEUE_TEXT">%2$s</xliff:g>କୁ ସ୍ପର୍ଶ କରନ୍ତୁ|"</string>
     <string name="button_queue_for_wifi" msgid="6650185573566994738">"ଧାଡ଼ିରେ ରଖନ୍ତୁ"</string>
-    <string name="button_cancel_download" msgid="4135046775536601831">"ବାତିଲ୍‍"</string>
+    <string name="button_cancel_download" msgid="4135046775536601831">"ବାତିଲ୍ କରନ୍ତୁ"</string>
     <string name="button_start_now" msgid="3817100969365441730">"ବର୍ତ୍ତମାନ ଆରମ୍ଭ କରନ୍ତୁ"</string>
     <plurals name="notif_summary_active" formatted="false" msgid="8652501374845637331">
       <item quantity="other"><xliff:g id="NUMBER">%d</xliff:g>ଟି ଫାଇଲ୍‌ ଡାଉନଲୋଡ୍‌ ହେଉଛି</item>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 38e41b3..6a259cb 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -41,7 +41,7 @@
     <string name="wifi_recommended_body" msgid="8710820743211704403">"Овим преузимањем од <xliff:g id="SIZE">%1$s </xliff:g> можете да скратите век трајања батерије и/или претерано користите мобилну везу за пренос података, што може да доведе до трошкова код мобилног оператера сходно тарифном пакету.\n\n Додирните <xliff:g id="QUEUE_TEXT">%2$s</xliff:g> да бисте започели ово преузимање када се поново повежете са WiFi мрежом."</string>
     <string name="button_queue_for_wifi" msgid="6650185573566994738">"Ред"</string>
     <string name="button_cancel_download" msgid="4135046775536601831">"Откажи"</string>
-    <string name="button_start_now" msgid="3817100969365441730">"Започни одмах"</string>
+    <string name="button_start_now" msgid="3817100969365441730">"Започни"</string>
     <plurals name="notif_summary_active" formatted="false" msgid="8652501374845637331">
       <item quantity="one">Преузима се <xliff:g id="NUMBER">%d</xliff:g> датотека</item>
       <item quantity="few">Преузимају се <xliff:g id="NUMBER">%d</xliff:g> датотеке</item>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 1aa5f1c..e8fc369 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -33,12 +33,12 @@
     <string name="download_unknown_title" msgid="1017800350818840396">"&lt;Okänd&gt;"</string>
     <string name="notification_download_complete" msgid="466652037490092787">"Nedladdningen har slutförts."</string>
     <string name="notification_download_failed" msgid="3932167763860605874">"Det gick inte att ladda ned."</string>
-    <string name="notification_need_wifi_for_size" msgid="4743443900432303646">"Nedladdningen kräver Wi-Fi."</string>
+    <string name="notification_need_wifi_for_size" msgid="4743443900432303646">"Nedladdningen kräver wifi."</string>
     <string name="notification_paused_in_background" msgid="6393408819031041778">"Pausad i bakgrunden."</string>
     <string name="wifi_required_title" msgid="7266700488421122218">"Nedladdningen är för stor för operatörsnätverket"</string>
-    <string name="wifi_required_body" msgid="4005023496578941958">"Du måste använda Wi-Fi om du vill slutföra nedladdningen på <xliff:g id="SIZE">%1$s </xliff:g>. \n \n Tryck på <xliff:g id="QUEUE_TEXT">%2$s </xliff:g> om du vill påbörja nedladdningen nästa gång du är ansluten till ett Wi-Fi-nätverk."</string>
+    <string name="wifi_required_body" msgid="4005023496578941958">"Du måste använda wifi om du vill slutföra nedladdningen på <xliff:g id="SIZE">%1$s </xliff:g>. \n \n Tryck på <xliff:g id="QUEUE_TEXT">%2$s </xliff:g> om du vill påbörja nedladdningen nästa gång du är ansluten till ett wifi-nätverk."</string>
     <string name="wifi_recommended_title" msgid="6488158053932133804">"Vill du ställa den i kö för nedladdning senare?"</string>
-    <string name="wifi_recommended_body" msgid="8710820743211704403">"Om du laddar ned <xliff:g id="SIZE">%1$s </xliff:g> kan det leda till att batteritiden minskar eller att dataanslutningen överbelastas. Det kan i sin tur innebära att operatören tar ut högre avgifter, beroende på abonnemang.\n\n Tryck på <xliff:g id="QUEUE_TEXT">%2$s</xliff:g> om du vill starta nedladdningen nästa gång mobilen är ansluten till ett Wi-Fi-nätverk."</string>
+    <string name="wifi_recommended_body" msgid="8710820743211704403">"Om du laddar ned <xliff:g id="SIZE">%1$s </xliff:g> kan det leda till att batteritiden minskar eller att dataanslutningen överbelastas. Det kan i sin tur innebära att operatören tar ut högre avgifter, beroende på abonnemang.\n\n Tryck på <xliff:g id="QUEUE_TEXT">%2$s</xliff:g> om du vill starta nedladdningen nästa gång mobilen är ansluten till ett wifi-nätverk."</string>
     <string name="button_queue_for_wifi" msgid="6650185573566994738">"Kö"</string>
     <string name="button_cancel_download" msgid="4135046775536601831">"Avbryt"</string>
     <string name="button_start_now" msgid="3817100969365441730">"Starta nu"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 96eac7c..de56339 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -19,15 +19,15 @@
     <string name="app_label" msgid="5264040740662487684">"பதிவிறக்க நிர்வாகி"</string>
     <string name="storage_description" msgid="169690279447532621">"பதிவிறக்கங்கள்"</string>
     <string name="permlab_downloadManager" msgid="4241473724446132797">"பதிவிறக்க நிர்வாகியை அணுகவும்."</string>
-    <string name="permdesc_downloadManager" msgid="5562734314998369030">"பதிவிறக்க நிர்வாகியை அணுகவும், கோப்புகளைப் பதிவிறக்குவதற்காக அதைப் பயன்படுத்தவும் ஆப்ஸை அனுமதிக்கிறது. பதிவிறக்கங்களைத் தடைசெய்யவும், தனிப்பட்டத் தகவலை அணுகவும் தீங்கிழைக்கும் ஆப்ஸ் இதைப் பயன்படுத்தலாம்."</string>
+    <string name="permdesc_downloadManager" msgid="5562734314998369030">"பதிவிறக்க நிர்வாகியை அணுகவும், ஃபைல்களைப் பதிவிறக்குவதற்காக அதைப் பயன்படுத்தவும் ஆப்ஸை அனுமதிக்கிறது. பதிவிறக்கங்களைத் தடைசெய்யவும், தனிப்பட்டத் தகவலை அணுகவும் தீங்கிழைக்கும் ஆப்ஸ் இதைப் பயன்படுத்தலாம்."</string>
     <string name="permlab_downloadManagerAdvanced" msgid="2225663947531460795">"மேம்பட்ட பதிவிறக்க நிர்வாகி செயல்பாடுகள்."</string>
     <string name="permdesc_downloadManagerAdvanced" msgid="3902478062563030716">"பதிவிறக்க நிர்வாகியின் மேம்பட்ட செயல்பாடுகளை அணுகுவதற்குப் ஆப்ஸை அனுமதிக்கிறது. பதிவிறக்கங்களைத் தடைசெய்யவும், தனிப்பட்டத் தகவலை அணுகவும் தீங்கிழைக்கும் ஆப்ஸ் இதைப் பயன்படுத்தலாம்."</string>
     <string name="permlab_downloadCompletedIntent" msgid="2674407390116052956">"பதிவிறக்க அறிவிப்புகளை அனுப்பவும்."</string>
-    <string name="permdesc_downloadCompletedIntent" msgid="3384693829639860032">"முடிந்த பதிவிறக்கங்கள் குறித்த அறிவிப்புகளை அனுப்புவதற்குப் ஆப்ஸை அனுமதிக்கிறது. கோப்புகளைப் பதிவிறக்கும் பிற பயன்பாடுகளைக் குழப்புவதற்கு தீங்கிழைக்கும் ஆப்ஸ் இதைப் பயன்படுத்தலாம்."</string>
+    <string name="permdesc_downloadCompletedIntent" msgid="3384693829639860032">"முடிந்த பதிவிறக்கங்கள் குறித்த அறிவிப்புகளை அனுப்புவதற்குப் ஆப்ஸை அனுமதிக்கிறது. ஃபைல்களைப் பதிவிறக்கும் பிற பயன்பாடுகளைக் குழப்புவதற்கு தீங்கிழைக்கும் ஆப்ஸ் இதைப் பயன்படுத்தலாம்."</string>
     <string name="permlab_downloadCacheNonPurgeable" msgid="4538031250425141333">"தற்காலிகச் சேமிப்பில் இடத்தை முன்பதிவு செய்தல்"</string>
-    <string name="permdesc_downloadCacheNonPurgeable" msgid="3071381088686444674">"பதிவிறக்க நிர்வாகிக்கு அதிகப்படியான இடம் தேவைப்படும்போது தானாகவே நீக்கப்படாத, தற்காலிகச் சேமிப்பில் கோப்புகளைப் பதிவிறக்க ஆப்ஸை அனுமதிக்கிறது."</string>
-    <string name="permlab_downloadWithoutNotification" msgid="4877101864770265405">"அறிவிப்பு இல்லாமல் கோப்புகளைப் பதிவிறக்குதல்"</string>
-    <string name="permdesc_downloadWithoutNotification" msgid="7699189763226483523">"எந்த அறிவிப்பையும் பயனருக்குக் காட்டாமல் பதிவிறக்க நிர்வாகியின் மூலம் கோப்புகளைப் பதிவிறக்கப் ஆப்ஸை அனுமதிக்கிறது."</string>
+    <string name="permdesc_downloadCacheNonPurgeable" msgid="3071381088686444674">"பதிவிறக்க நிர்வாகிக்கு அதிகப்படியான இடம் தேவைப்படும்போது தானாகவே நீக்கப்படாத, தற்காலிகச் சேமிப்பில் ஃபைல்களைப் பதிவிறக்க ஆப்ஸை அனுமதிக்கிறது."</string>
+    <string name="permlab_downloadWithoutNotification" msgid="4877101864770265405">"அறிவிப்பு இல்லாமல் ஃபைல்களைப் பதிவிறக்குதல்"</string>
+    <string name="permdesc_downloadWithoutNotification" msgid="7699189763226483523">"எந்த அறிவிப்பையும் பயனருக்குக் காட்டாமல் பதிவிறக்க நிர்வாகியின் மூலம் ஃபைல்களைப் பதிவிறக்கப் ஆப்ஸை அனுமதிக்கிறது."</string>
     <string name="permlab_accessAllDownloads" msgid="8227356876527248611">"அமைப்பின் எல்லா பதிவிறக்கங்களையும் அணுகுதல்"</string>
     <string name="permdesc_accessAllDownloads" msgid="7541731738152145079">"அமைப்பில் உள்ள எந்தப் பயன்பாட்டினாலும் தொடங்கப்படும் எல்லா பதிவிறக்கங்களையும் கண்டு மாற்றுவதற்குப் ஆப்ஸை அனுமதிக்கிறது."</string>
     <string name="download_unknown_title" msgid="1017800350818840396">"&lt;பெயரிடப்படாதது&gt;"</string>
diff --git a/src/com/android/providers/downloads/DownloadNotifier.java b/src/com/android/providers/downloads/DownloadNotifier.java
index d38aa75..224aee4 100644
--- a/src/com/android/providers/downloads/DownloadNotifier.java
+++ b/src/com/android/providers/downloads/DownloadNotifier.java
@@ -233,7 +233,8 @@
                 intent.putExtra(DownloadManager.EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS,
                         downloadIds);
                 builder.setContentIntent(PendingIntent.getBroadcast(mContext,
-                        0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
+                        0, intent,
+                        PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE));
                 if (type == TYPE_ACTIVE) {
                     builder.setOngoing(true);
                 }
@@ -250,7 +251,8 @@
                     android.R.drawable.ic_menu_close_clear_cancel,
                     res.getString(R.string.button_cancel_download),
                     PendingIntent.getBroadcast(mContext,
-                            0, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT));
+                            0, cancelIntent,
+                            PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE));
 
             } else if (type == TYPE_COMPLETE) {
                 cursor.moveToPosition(cluster.get(0));
@@ -274,12 +276,14 @@
                 intent.putExtra(DownloadManager.EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS,
                         getDownloadIds(cursor, cluster));
                 builder.setContentIntent(PendingIntent.getBroadcast(mContext,
-                        0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
+                        0, intent,
+                        PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE));
 
                 final Intent hideIntent = new Intent(Constants.ACTION_HIDE,
                         uri, mContext, DownloadReceiver.class);
                 hideIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-                builder.setDeleteIntent(PendingIntent.getBroadcast(mContext, 0, hideIntent, 0));
+                builder.setDeleteIntent(PendingIntent.getBroadcast(mContext, 0, hideIntent,
+                            PendingIntent.FLAG_IMMUTABLE));
             }
 
             // Calculate and show progress
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java
index b629f14..f7e25d5 100644
--- a/src/com/android/providers/downloads/DownloadProvider.java
+++ b/src/com/android/providers/downloads/DownloadProvider.java
@@ -1246,6 +1246,7 @@
                     error.append(", ");
                 }
                 error.append(entry.getKey());
+                first = false;
             }
             throw new SecurityException(error.toString());
         }
@@ -1809,7 +1810,7 @@
                         final ContentValues values = new ContentValues();
                         values.put(Downloads.Impl.COLUMN_TOTAL_BYTES, file.length());
                         values.put(Downloads.Impl.COLUMN_LAST_MODIFICATION,
-                                System.currentTimeMillis());
+                                mSystemFacade.currentTimeMillis());
                         update(uri, values, null, null);
 
                         if (shouldScan) {
diff --git a/src/com/android/providers/downloads/DownloadStorageProvider.java b/src/com/android/providers/downloads/DownloadStorageProvider.java
index 36304aa..421c261 100644
--- a/src/com/android/providers/downloads/DownloadStorageProvider.java
+++ b/src/com/android/providers/downloads/DownloadStorageProvider.java
@@ -18,7 +18,7 @@
 
 import static com.android.providers.downloads.MediaStoreDownloadsHelper.getDocIdForMediaStoreDownload;
 import static com.android.providers.downloads.MediaStoreDownloadsHelper.getMediaStoreIdString;
-import static com.android.providers.downloads.MediaStoreDownloadsHelper.getMediaStoreUri;
+import static com.android.providers.downloads.MediaStoreDownloadsHelper.getMediaStoreUriForQuery;
 import static com.android.providers.downloads.MediaStoreDownloadsHelper.isMediaStoreDownload;
 import static com.android.providers.downloads.MediaStoreDownloadsHelper.isMediaStoreDownloadDir;
 
@@ -28,7 +28,6 @@
 import android.app.DownloadManager.Query;
 import android.content.ContentResolver;
 import android.content.ContentUris;
-import android.content.ContentValues;
 import android.content.Context;
 import android.content.UriPermission;
 import android.database.Cursor;
@@ -67,6 +66,7 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 
 /**
@@ -251,7 +251,7 @@
 
             displayName = FileUtils.buildValidFatFilename(displayName);
             if (isMediaStoreDownload(docId)) {
-                renameMediaStoreDownload(docId, displayName);
+                return renameMediaStoreDownload(docId, displayName);
             } else {
                 final long id = Long.parseLong(docId);
                 if (!mDm.rename(getContext(), id, displayName)) {
@@ -281,7 +281,7 @@
             if (DOC_ID_ROOT.equals(docId)) {
                 includeDefaultDocument(result);
             } else if (isMediaStoreDownload(docId)) {
-                cursor = getContext().getContentResolver().query(getMediaStoreUri(docId),
+                cursor = getContext().getContentResolver().query(getMediaStoreUriForQuery(docId),
                         null, null, null);
                 copyNotificationUri(result, cursor);
                 if (cursor.moveToFirst()) {
@@ -513,7 +513,7 @@
             final ContentResolver resolver = getContext().getContentResolver();
             final Uri contentUri;
             if (isMediaStoreDownload(docId)) {
-                contentUri = getMediaStoreUri(docId);
+                contentUri = getMediaStoreUriForQuery(docId);
             } else {
                 final long id = Long.parseLong(docId);
                 contentUri = mDm.getDownloadUri(id);
@@ -537,7 +537,7 @@
             final ContentResolver resolver = getContext().getContentResolver();
             final Uri contentUri;
             if (isMediaStoreDownload(docId)) {
-                contentUri = getMediaStoreUri(docId);
+                contentUri = getMediaStoreUriForQuery(docId);
             } else {
                 final long id = Long.parseLong(docId);
                 contentUri = mDm.getDownloadUri(id);
@@ -769,7 +769,7 @@
         return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
     }
 
-    private void renameMediaStoreDownload(String docId, String displayName) {
+    private String renameMediaStoreDownload(String docId, String displayName) {
         final File before = getFileForMediaStoreDownload(docId);
         final File after = new File(before.getParentFile(), displayName);
 
@@ -780,25 +780,34 @@
             throw new IllegalStateException("Failed to rename from " + before + " to " + after);
         }
 
-        final long token = Binder.clearCallingIdentity();
-        try {
-            final Uri mediaStoreUri = getMediaStoreUri(docId);
-            final ContentValues values = new ContentValues();
-            values.put(DownloadColumns.DATA, after.getAbsolutePath());
-            values.put(DownloadColumns.DISPLAY_NAME, displayName);
-            final int count = getContext().getContentResolver().update(mediaStoreUri, values,
-                    null, null);
-            if (count != 1) {
-                throw new IllegalStateException("Failed to update " + mediaStoreUri
-                        + ", values=" + values);
-            }
-        } finally {
-            Binder.restoreCallingIdentity(token);
+        final String noMedia = ".nomedia";
+        // Scan the file to update the database
+        // For file, check whether the file is renamed to .nomedia. If yes, to scan the parent
+        // directory to update all files in the directory. We don't consider the case of renaming
+        // .nomedia file. We don't show .nomedia file.
+        if (!after.isDirectory() && displayName.toLowerCase(Locale.ROOT).endsWith(noMedia)) {
+            final Uri newUri = MediaStore.scanFile(getContext().getContentResolver(),
+                    after.getParentFile());
+            // the file will not show in the list, return the parent docId to avoid not finding
+            // the detail for the file.
+            return getDocIdForMediaStoreDownloadUri(newUri, true /* isDir */);
         }
+        // update the database for the old file
+        MediaStore.scanFile(getContext().getContentResolver(), before);
+        // Update tne database for the new file and get the new uri
+        final Uri newUri = MediaStore.scanFile(getContext().getContentResolver(), after);
+        return getDocIdForMediaStoreDownloadUri(newUri, after.isDirectory());
+    }
+
+    private static String getDocIdForMediaStoreDownloadUri(Uri uri, boolean isDir) {
+        if (uri != null) {
+            return getDocIdForMediaStoreDownload(Long.parseLong(uri.getLastPathSegment()), isDir);
+        }
+        return null;
     }
 
     private File getFileForMediaStoreDownload(String docId) {
-        final Uri mediaStoreUri = getMediaStoreUri(docId);
+        final Uri mediaStoreUri = getMediaStoreUriForQuery(docId);
         final long token = Binder.clearCallingIdentity();
         try (Cursor cursor = queryForSingleItem(mediaStoreUri,
                 new String[] { DownloadColumns.DATA }, null, null, null)) {
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java
index 752dbfc..00fa30a 100644
--- a/src/com/android/providers/downloads/DownloadThread.java
+++ b/src/com/android/providers/downloads/DownloadThread.java
@@ -90,6 +90,7 @@
 import java.net.URL;
 import java.net.URLConnection;
 import java.security.GeneralSecurityException;
+import java.util.Arrays;
 
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLContext;
@@ -233,8 +234,6 @@
     private boolean mIgnoreBlocked;
     private Network mNetwork;
 
-    private int mNetworkType = ConnectivityManager.TYPE_NONE;
-
     /** Historical bytes/second speed of this download. */
     private long mSpeed;
     /** Time when current sample started. */
@@ -294,14 +293,6 @@
                         "No network associated with requesting UID");
             }
 
-            // Remember which network this download started on; used to
-            // determine if errors were due to network changes.
-            final NetworkInfo info = mSystemFacade.getNetworkInfo(mNetwork, mInfo.mUid,
-                    mIgnoreBlocked);
-            if (info != null) {
-                mNetworkType = info.getType();
-            }
-
             // Network traffic on this thread should be counted against the
             // requesting UID, and is tagged with well-known value.
             TrafficStats.setThreadStatsTag(TrafficStats.TAG_SYSTEM_DOWNLOAD);
@@ -340,13 +331,11 @@
                 }
 
                 if (mInfoDelta.mNumFailed < Constants.MAX_RETRIES) {
-                    final NetworkInfo info = mSystemFacade.getNetworkInfo(mNetwork, mInfo.mUid,
-                            mIgnoreBlocked);
-                    if (info != null && info.getType() == mNetworkType && info.isConnected()) {
+                    if (null != mSystemFacade.getNetworkCapabilities(mNetwork)) {
                         // Underlying network is still intact, use normal backoff
                         mInfoDelta.mStatus = STATUS_WAITING_TO_RETRY;
                     } else {
-                        // Network changed, retry on any next available
+                        // Network unavailable, retry on any next available
                         mInfoDelta.mStatus = STATUS_WAITING_FOR_NETWORK;
                     }
 
@@ -724,9 +713,8 @@
         // checking connectivity will apply current policy
         mPolicyDirty = false;
 
-        final NetworkInfo info = mSystemFacade.getNetworkInfo(mNetwork, mInfo.mUid, mIgnoreBlocked);
         final NetworkCapabilities caps = mSystemFacade.getNetworkCapabilities(mNetwork);
-        if (info == null || !info.isConnected()) {
+        if (caps == null) {
             throw new StopRequestException(STATUS_WAITING_FOR_NETWORK, "Network is disconnected");
         }
         if (!caps.hasCapability(NET_CAPABILITY_NOT_ROAMING)
diff --git a/src/com/android/providers/downloads/MediaStoreDownloadsHelper.java b/src/com/android/providers/downloads/MediaStoreDownloadsHelper.java
index c4f347c..9c86d53 100644
--- a/src/com/android/providers/downloads/MediaStoreDownloadsHelper.java
+++ b/src/com/android/providers/downloads/MediaStoreDownloadsHelper.java
@@ -47,8 +47,18 @@
         return docId != null && docId.startsWith(MEDIASTORE_DOWNLOAD_DIR_PREFIX);
     }
 
-    public static Uri getMediaStoreUri(String docId) {
-        return ContentUris.withAppendedId(MediaStore.Downloads.EXTERNAL_CONTENT_URI,
-                getMediaStoreId(docId));
+    /**
+     * The returned uri always appends external volume {@link MediaStore#VOLUME_EXTERNAL}.
+     * It doesn't consider the item is located on second volume. It can't be used to update
+     * or insert.
+     * @param docId the doc id
+     * @return external uri for query
+     */
+    public static Uri getMediaStoreUriForQuery(String docId) {
+        return getMediaStoreUri(MediaStore.VOLUME_EXTERNAL, docId);
+    }
+
+    public static Uri getMediaStoreUri(String volume, String docId) {
+        return MediaStore.Downloads.getContentUri(volume, getMediaStoreId(docId));
     }
 }
diff --git a/src/com/android/providers/downloads/RealSystemFacade.java b/src/com/android/providers/downloads/RealSystemFacade.java
index 94461a6..ba4068e 100644
--- a/src/com/android/providers/downloads/RealSystemFacade.java
+++ b/src/com/android/providers/downloads/RealSystemFacade.java
@@ -57,12 +57,6 @@
     }
 
     @Override
-    public NetworkInfo getNetworkInfo(Network network, int uid, boolean ignoreBlocked) {
-        return mContext.getSystemService(ConnectivityManager.class)
-                .getNetworkInfoForUid(network, uid, ignoreBlocked);
-    }
-
-    @Override
     public NetworkCapabilities getNetworkCapabilities(Network network) {
         return mContext.getSystemService(ConnectivityManager.class)
                 .getNetworkCapabilities(network);
diff --git a/src/com/android/providers/downloads/SystemFacade.java b/src/com/android/providers/downloads/SystemFacade.java
index d73fe11..1fda858 100644
--- a/src/com/android/providers/downloads/SystemFacade.java
+++ b/src/com/android/providers/downloads/SystemFacade.java
@@ -37,7 +37,6 @@
 
     public Network getNetwork(JobParameters params);
 
-    public NetworkInfo getNetworkInfo(Network network, int uid, boolean ignoreBlocked);
     public NetworkCapabilities getNetworkCapabilities(Network network);
 
     /**
diff --git a/tests/Android.bp b/tests/Android.bp
index 3c03c82..d0ba0a5 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -13,6 +13,17 @@
 // limitations under the License.
 //
 
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "packages_providers_DownloadProvider_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "packages_providers_DownloadProvider_license",
+    ],
+}
+
 android_test {
     name: "DownloadProviderTests",
 
@@ -27,6 +38,8 @@
     ],
 
     static_libs: [
+        "androidx.core_core",
+        "androidx.test.rules",
         "mockito-target",
         "mockwebserver",
     ],
diff --git a/tests/permission/Android.bp b/tests/permission/Android.bp
index 274106f..a96621f 100644
--- a/tests/permission/Android.bp
+++ b/tests/permission/Android.bp
@@ -13,6 +13,17 @@
 // limitations under the License.
 //
 
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "packages_providers_DownloadProvider_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "packages_providers_DownloadProvider_license",
+    ],
+}
+
 android_test {
     name: "DownloadProviderPermissionTests",
     test_suites: ["device-tests"],
diff --git a/tests/public_api_access/Android.bp b/tests/public_api_access/Android.bp
index 1f982b3..3d2cd98 100644
--- a/tests/public_api_access/Android.bp
+++ b/tests/public_api_access/Android.bp
@@ -13,6 +13,17 @@
 // limitations under the License.
 //
 
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "packages_providers_DownloadProvider_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "packages_providers_DownloadProvider_license",
+    ],
+}
+
 android_test {
     name: "DownloadPublicApiAccessTests",
     test_suites: ["device-tests"],
diff --git a/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java b/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
index a505632..4afe3b7 100644
--- a/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
+++ b/tests/src/com/android/providers/downloads/AbstractDownloadProviderFunctionalTest.java
@@ -127,11 +127,6 @@
         public Bundle call(String method, String request, Bundle args) {
           return new Bundle();
         }
-
-        @Override
-        public IBinder getIContentProviderBinder() {
-            return new Binder();
-        }
     }
 
     /**
@@ -213,6 +208,7 @@
         setupService();
         Helpers.setSystemFacade(mSystemFacade);
 
+        cleanUpDownloads();
         mSystemFacade.setUp();
         assertDatabaseEmpty(); // ensure we're not messing with real data
         assertDatabaseSecureAgainstBadSelection();
diff --git a/tests/src/com/android/providers/downloads/FakeInputStream.java b/tests/src/com/android/providers/downloads/FakeInputStream.java
index 3f68e31..65724ac 100644
--- a/tests/src/com/android/providers/downloads/FakeInputStream.java
+++ b/tests/src/com/android/providers/downloads/FakeInputStream.java
@@ -16,8 +16,6 @@
 
 package com.android.providers.downloads;
 
-import libcore.util.ArrayUtils;
-
 import java.io.InputStream;
 
 /**
@@ -43,7 +41,7 @@
 
     @Override
     public int read(byte[] buffer, int offset, int length) {
-        ArrayUtils.throwsIfOutOfBounds(buffer.length, offset, length);
+        throwsIfOutOfBounds(buffer.length, offset, length);
 
         if (length > mRemaining) {
             length = (int) mRemaining;
@@ -56,4 +54,15 @@
             return length;
         }
     }
+
+    private static void throwsIfOutOfBounds(int len, int offset, int count) {
+        if (len < 0) {
+            throw new ArrayIndexOutOfBoundsException("Negative length: " + len);
+        }
+
+        if ((offset | count) < 0 || offset > len - count) {
+            throw new ArrayIndexOutOfBoundsException(
+                    "length=" + len + "; regionStart=" + offset + "; regionLength=" + count);
+        }
+    }
 }
diff --git a/tests/src/com/android/providers/downloads/FakeSystemFacade.java b/tests/src/com/android/providers/downloads/FakeSystemFacade.java
index d11e0ac..fadcd36 100644
--- a/tests/src/com/android/providers/downloads/FakeSystemFacade.java
+++ b/tests/src/com/android/providers/downloads/FakeSystemFacade.java
@@ -93,25 +93,14 @@
     }
 
     @Override
-    public NetworkInfo getNetworkInfo(Network network, int uid, boolean ignoreBlocked) {
-        if (mActiveNetworkType == null) {
-            return null;
-        } else {
-            final NetworkInfo info = new NetworkInfo(mActiveNetworkType, 0, null, null);
-            info.setDetailedState(DetailedState.CONNECTED, null, null);
-            return info;
-        }
-    }
-
-    @Override
     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;
+            final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder();
+            if (!mIsMetered) builder.addCapability(NET_CAPABILITY_NOT_METERED);
+            if (!mIsRoaming) builder.addCapability(NET_CAPABILITY_NOT_ROAMING);
+            return builder.build();
         }
     }
 
diff --git a/tests/src/com/android/providers/downloads/FsHelper.java b/tests/src/com/android/providers/downloads/FsHelper.java
new file mode 100644
index 0000000..d83827c
--- /dev/null
+++ b/tests/src/com/android/providers/downloads/FsHelper.java
@@ -0,0 +1,24 @@
+package com.android.providers.downloads;
+
+import java.io.File;
+
+public class FsHelper {
+
+    /**
+     * Deletes all files under a given directory. Deliberately ignores errors, on the assumption
+     * that test cleanup is only supposed to be best-effort.
+     *
+     * @param directory directory to clear its contents
+     */
+    public static void deleteContents(File directory) {
+        File[] files = directory.listFiles();
+        if (files != null) {
+            for (File file : files) {
+                if (file.isDirectory()) {
+                    deleteContents(file);
+                }
+                file.delete();
+            }
+        }
+    }
+}
diff --git a/tests/src/com/android/providers/downloads/HelpersTest.java b/tests/src/com/android/providers/downloads/HelpersTest.java
index 61515ce..08c0b13 100644
--- a/tests/src/com/android/providers/downloads/HelpersTest.java
+++ b/tests/src/com/android/providers/downloads/HelpersTest.java
@@ -79,8 +79,8 @@
     @Override
     protected void tearDown() throws Exception {
         mMockitoHelper.tearDown();
-        IoUtils.deleteContents(getContext().getFilesDir());
-        IoUtils.deleteContents(getContext().getCacheDir());
+        FsHelper.deleteContents(getContext().getFilesDir());
+        FsHelper.deleteContents(getContext().getCacheDir());
 
         super.tearDown();
     }
diff --git a/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java b/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
index 0652f24..f45e102 100644
--- a/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
+++ b/tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java
@@ -52,7 +52,7 @@
 import android.test.suitebuilder.annotation.Suppress;
 import android.text.format.DateUtils;
 
-import libcore.io.IoUtils;
+import androidx.test.filters.FlakyTest;
 
 import com.google.mockwebserver.MockResponse;
 import com.google.mockwebserver.RecordedRequest;
@@ -91,7 +91,7 @@
                 Environment.DIRECTORY_DOWNLOADS)
                 + File.separator + "download_manager_functional_test");
         if (mTestDirectory.exists()) {
-            IoUtils.deleteContents(mTestDirectory);
+            FsHelper.deleteContents(mTestDirectory);
         } else {
             mTestDirectory.mkdir();
         }
@@ -100,7 +100,7 @@
     @Override
     protected void tearDown() throws Exception {
         if (mTestDirectory != null && mTestDirectory.exists()) {
-            IoUtils.deleteContents(mTestDirectory);
+            FsHelper.deleteContents(mTestDirectory);
             mTestDirectory.delete();
         }
         super.tearDown();
@@ -691,6 +691,7 @@
         download.runUntilStatus(DownloadManager.STATUS_SUCCESSFUL);
     }
 
+    @FlakyTest(bugId = 177499952)
     public void testManyInterruptions() throws Exception {
         final int length = FILE_CONTENT.length();
         for (int i = 0; i < length; i++) {
diff --git a/ui/Android.bp b/ui/Android.bp
index 5192ead..04606c2 100644
--- a/ui/Android.bp
+++ b/ui/Android.bp
@@ -13,6 +13,17 @@
 // limitations under the License.
 //
 
+package {
+    // See: http://go/android-license-faq
+    // A large-scale-change added 'default_applicable_licenses' to import
+    // all of the 'license_kinds' from "packages_providers_DownloadProvider_license"
+    // to get the below license kinds:
+    //   SPDX-license-identifier-Apache-2.0
+    default_applicable_licenses: [
+        "packages_providers_DownloadProvider_license",
+    ],
+}
+
 android_app {
     name: "DownloadProviderUi",
 
diff --git a/ui/AndroidManifest.xml b/ui/AndroidManifest.xml
index d08ec19..8eae933 100644
--- a/ui/AndroidManifest.xml
+++ b/ui/AndroidManifest.xml
@@ -1,30 +1,30 @@
 <?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.providers.downloads.ui"
-        android:sharedUserId="android.media">
 
-    <uses-permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" />
-    <uses-permission android:name="android.permission.ACCESS_ALL_DOWNLOADS" />
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+     package="com.android.providers.downloads.ui"
+     android:sharedUserId="android.media">
+
+    <uses-permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS"/>
+    <uses-permission android:name="android.permission.ACCESS_ALL_DOWNLOADS"/>
 
     <application android:process="android.process.media"
-                 android:label="@string/app_label"
-                 android:icon="@mipmap/ic_launcher_download"
-                 android:hardwareAccelerated="true"
-                 android:supportsRtl="true"
-                 android:requiredForAllUsers="true"
-                 android:usesCleartextTraffic="true">
+         android:label="@string/app_label"
+         android:icon="@mipmap/ic_launcher_download"
+         android:hardwareAccelerated="true"
+         android:supportsRtl="true"
+         android:requiredForAllUsers="true"
+         android:usesCleartextTraffic="true">
 
-        <activity
-            android:name=".TrampolineActivity"
-            android:theme="@android:style/Theme.Translucent.NoTitleBar"
-            android:permission="android.permission.MANAGE_DOCUMENTS">
+        <activity android:name=".TrampolineActivity"
+             android:theme="@android:style/Theme.Translucent.NoTitleBar"
+             android:permission="android.permission.MANAGE_DOCUMENTS"
+             android:exported="true">
             <intent-filter>
-                <action android:name="android.provider.action.MANAGE_DOCUMENT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data
-                    android:scheme="content"
-                    android:host="com.android.providers.downloads.documents"
-                    android:mimeType="*/*" />
+                <action android:name="android.provider.action.MANAGE_DOCUMENT"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+                <data android:scheme="content"
+                     android:host="com.android.providers.downloads.documents"
+                     android:mimeType="*/*"/>
             </intent-filter>
         </activity>
     </application>
diff --git a/ui/res/values-b+sr+Latn/strings.xml b/ui/res/values-b+sr+Latn/strings.xml
index 7722211..2f83c97 100644
--- a/ui/res/values-b+sr+Latn/strings.xml
+++ b/ui/res/values-b+sr+Latn/strings.xml
@@ -43,7 +43,7 @@
     <string name="keep_queued_download" msgid="6905870466259272973">"Zadrži"</string>
     <string name="cancel_running_download" msgid="8586888328847044473">"Otkaži"</string>
     <string name="retry_download" msgid="6957856437473044831">"Probaj ponovo"</string>
-    <string name="start_now_download" msgid="1518778561803897734">"Započni odmah"</string>
+    <string name="start_now_download" msgid="1518778561803897734">"Započni"</string>
     <string name="deselect_all" msgid="4673983454506880405">"Opozovi sve izbore"</string>
     <string name="select_all" msgid="7469093306474000460">"Izaberi sve"</string>
     <string name="selected_count" msgid="5876842902167894010">"Izabrano je <xliff:g id="NUMBER">%1$d</xliff:g> od <xliff:g id="TOTAL">%2$d</xliff:g>"</string>
diff --git a/ui/res/values-fi/strings.xml b/ui/res/values-fi/strings.xml
index 5bab4ff..f5b9f37 100644
--- a/ui/res/values-fi/strings.xml
+++ b/ui/res/values-fi/strings.xml
@@ -41,7 +41,7 @@
     <string name="remove_download" msgid="244394809285977300">"Poista"</string>
     <string name="delete_download" msgid="1861638125603383676">"Poista"</string>
     <string name="keep_queued_download" msgid="6905870466259272973">"Säilytä"</string>
-    <string name="cancel_running_download" msgid="8586888328847044473">"Peruuta"</string>
+    <string name="cancel_running_download" msgid="8586888328847044473">"Peru"</string>
     <string name="retry_download" msgid="6957856437473044831">"Yritä uudelleen"</string>
     <string name="start_now_download" msgid="1518778561803897734">"Aloita nyt"</string>
     <string name="deselect_all" msgid="4673983454506880405">"Poista kaikki valinnat"</string>
diff --git a/ui/res/values-gl/strings.xml b/ui/res/values-gl/strings.xml
index df24c3a..0370c41 100644
--- a/ui/res/values-gl/strings.xml
+++ b/ui/res/values-gl/strings.xml
@@ -38,7 +38,7 @@
     <string name="dialog_file_already_exists" msgid="6849168874901909994">"Non se pode descargar. O ficheiro de destino xa existe."</string>
     <string name="dialog_media_not_found" msgid="7376030905821161865">"Non se pode realizar a descarga. O soporte externo non está dispoñible."</string>
     <string name="download_no_application_title" msgid="1209223807604231431">"Non se pode abrir o ficheiro"</string>
-    <string name="remove_download" msgid="244394809285977300">"Eliminar"</string>
+    <string name="remove_download" msgid="244394809285977300">"Quitar"</string>
     <string name="delete_download" msgid="1861638125603383676">"Eliminar"</string>
     <string name="keep_queued_download" msgid="6905870466259272973">"Manter"</string>
     <string name="cancel_running_download" msgid="8586888328847044473">"Cancelar"</string>
diff --git a/ui/res/values-ky/strings.xml b/ui/res/values-ky/strings.xml
index 6f80d70..142adaa 100644
--- a/ui/res/values-ky/strings.xml
+++ b/ui/res/values-ky/strings.xml
@@ -38,7 +38,7 @@
     <string name="dialog_file_already_exists" msgid="6849168874901909994">"Жүктөө мүмкүн эмес. Мындай файл мурунтан бар."</string>
     <string name="dialog_media_not_found" msgid="7376030905821161865">"Жүктөөнү аягына чыгаруу мүмкүн эмес. Тышкы медиа жеткиликтүү эмес."</string>
     <string name="download_no_application_title" msgid="1209223807604231431">"Файл ачылбады"</string>
-    <string name="remove_download" msgid="244394809285977300">"Алып салуу"</string>
+    <string name="remove_download" msgid="244394809285977300">"Өчүрүү"</string>
     <string name="delete_download" msgid="1861638125603383676">"Жок кылуу"</string>
     <string name="keep_queued_download" msgid="6905870466259272973">"Калтыруу"</string>
     <string name="cancel_running_download" msgid="8586888328847044473">"Токтотуу"</string>
diff --git a/ui/res/values-ne/strings.xml b/ui/res/values-ne/strings.xml
index 0df4d5a..21c01cd 100644
--- a/ui/res/values-ne/strings.xml
+++ b/ui/res/values-ne/strings.xml
@@ -43,7 +43,7 @@
     <string name="keep_queued_download" msgid="6905870466259272973">"राख्नुहोस्"</string>
     <string name="cancel_running_download" msgid="8586888328847044473">"रद्द गर्नुहोस्"</string>
     <string name="retry_download" msgid="6957856437473044831">"पुनःप्रयास गर्नुहोस्"</string>
-    <string name="start_now_download" msgid="1518778561803897734">"अहिले सुरु गर्नुहोस्"</string>
+    <string name="start_now_download" msgid="1518778561803897734">"अहिले न"</string>
     <string name="deselect_all" msgid="4673983454506880405">"सबै अचयन गर्नुहोस्"</string>
     <string name="select_all" msgid="7469093306474000460">"सबै चयन गर्नुहोस्"</string>
     <string name="selected_count" msgid="5876842902167894010">"छानिएको <xliff:g id="TOTAL">%2$d</xliff:g> को <xliff:g id="NUMBER">%1$d</xliff:g> बाट"</string>
diff --git a/ui/res/values-or/strings.xml b/ui/res/values-or/strings.xml
index 62079ee..fc75304 100644
--- a/ui/res/values-or/strings.xml
+++ b/ui/res/values-or/strings.xml
@@ -41,7 +41,7 @@
     <string name="remove_download" msgid="244394809285977300">"କାଢ଼ିଦିଅନ୍ତୁ"</string>
     <string name="delete_download" msgid="1861638125603383676">"ଡିଲିଟ୍‌ କରନ୍ତୁ"</string>
     <string name="keep_queued_download" msgid="6905870466259272973">"Keep"</string>
-    <string name="cancel_running_download" msgid="8586888328847044473">"ବାତିଲ୍‍"</string>
+    <string name="cancel_running_download" msgid="8586888328847044473">"ବାତିଲ୍ କରନ୍ତୁ"</string>
     <string name="retry_download" msgid="6957856437473044831">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
     <string name="start_now_download" msgid="1518778561803897734">"ବର୍ତ୍ତମାନ ଆରମ୍ଭ କରନ୍ତୁ"</string>
     <string name="deselect_all" msgid="4673983454506880405">"କିଛି ବି ଚୟନ କରନ୍ତୁ ନାହିଁ"</string>
diff --git a/ui/res/values-sr/strings.xml b/ui/res/values-sr/strings.xml
index 801ebd2..2892c79 100644
--- a/ui/res/values-sr/strings.xml
+++ b/ui/res/values-sr/strings.xml
@@ -43,7 +43,7 @@
     <string name="keep_queued_download" msgid="6905870466259272973">"Задржи"</string>
     <string name="cancel_running_download" msgid="8586888328847044473">"Откажи"</string>
     <string name="retry_download" msgid="6957856437473044831">"Пробај поново"</string>
-    <string name="start_now_download" msgid="1518778561803897734">"Започни одмах"</string>
+    <string name="start_now_download" msgid="1518778561803897734">"Започни"</string>
     <string name="deselect_all" msgid="4673983454506880405">"Опозови све изборе"</string>
     <string name="select_all" msgid="7469093306474000460">"Изабери све"</string>
     <string name="selected_count" msgid="5876842902167894010">"Изабрано је <xliff:g id="NUMBER">%1$d</xliff:g> од <xliff:g id="TOTAL">%2$d</xliff:g>"</string>
diff --git a/ui/res/values-te/strings.xml b/ui/res/values-te/strings.xml
index b6afeb1..8fb2c86 100644
--- a/ui/res/values-te/strings.xml
+++ b/ui/res/values-te/strings.xml
@@ -47,5 +47,5 @@
     <string name="deselect_all" msgid="4673983454506880405">"అన్నింటి ఎంపికను తీసివేయి"</string>
     <string name="select_all" msgid="7469093306474000460">"అన్నీ ఎంచుకోండి"</string>
     <string name="selected_count" msgid="5876842902167894010">"<xliff:g id="TOTAL">%2$d</xliff:g>లో <xliff:g id="NUMBER">%1$d</xliff:g> ఎంచుకోబడ్డాయి"</string>
-    <string name="download_share_dialog" msgid="5212760257251501969">"వీటి ద్వారా భాగస్వామ్యం చేయండి"</string>
+    <string name="download_share_dialog" msgid="5212760257251501969">"వీటి ద్వారా షేర్ చేయండి"</string>
 </resources>