Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0a96dae8 authored by Steve McKay's avatar Steve McKay Committed by Android (Google) Code Review
Browse files

Merge "Run all downloads through trampoline." into nyc-dev

parents bded63d9 3e63e7de
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -283,10 +283,16 @@ public class FilesActivity extends BaseActivity {
     */
    private void openDocument(DocumentInfo doc, Model model) {

        // Provide specialized handling of downloaded APKs This sends the APK
        // details off to get extra security information added, and finally
        // to be handled by the package manager.
        if (MimePredicate.isApkType(doc.mimeType)) {
        // Anything on downloads goes through the back through downloads manager
        // (that's the MANAGE_DOCUMENT bit).
        // This is done for two reasons:
        // 1) The file in question might be a failed/queued or otherwise have some
        //    specialized download handling.
        // 2) For APKs, the download manager will add on some important security stuff
        //    like origin URL.
        // All other files not on downloads, event APKs, would get no benefit from this
        // treatment, thusly the "isDownloads" check.
        if (getCurrentRoot().isDownloads()) {
            // First try managing the document; we expect manager to filter
            // based on authority, so we don't grant.
            final Intent manage = new Intent(DocumentsContract.ACTION_MANAGE_DOCUMENT);
+2 −0
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.documentsui.tests">

    <uses-permission android:name="android.permission.INTERNET" />

    <application>
        <uses-library android:name="android.test.runner" />
        <provider
+40 −0
Original line number Diff line number Diff line
@@ -19,10 +19,17 @@ package com.android.documentsui;
import static com.android.documentsui.StubProvider.ROOT_0_ID;
import static com.android.documentsui.StubProvider.ROOT_1_ID;

import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.Context;
import android.net.Uri;
import android.os.RemoteException;
import android.support.test.uiautomator.Configurator;
import android.support.test.uiautomator.UiObject;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.Suppress;
import android.view.KeyEvent;
import android.view.MotionEvent;

import com.android.documentsui.model.RootInfo;

@@ -173,4 +180,37 @@ public class FilesActivityUiTest extends ActivityTest<FilesActivity> {
            bots.roots.assertHasFocus();
        }
    }

    // We don't really need to test the entirety of download support
    // since downloads is (almost) just another provider.
    public void testDownload_Queued() throws Exception {
        DownloadManager dm = (DownloadManager) context.getSystemService(
                Context.DOWNLOAD_SERVICE);
        // This downloads ends up being queued (because DNS can't be resolved).
        // We'll still see an entry in the downloads UI with a "Queued" label.
        dm.enqueue(new Request(Uri.parse("http://hammychamp.toodles")));

        bots.roots.openRoot("Downloads");
        bots.directory.assertDocumentsPresent("Queued");
    }

    public void testDownload_RetryUnsuccessful() throws Exception {
        DownloadManager dm = (DownloadManager) context.getSystemService(
                Context.DOWNLOAD_SERVICE);
        // This downloads fails! But it'll still show up.
        dm.enqueue(new Request(Uri.parse("http://www.google.com/hamfancy")));

        bots.roots.openRoot("Downloads");
        UiObject doc = bots.directory.findDocument("Unsuccessful");
        doc.waitForExists(TIMEOUT);

        int toolType = Configurator.getInstance().getToolType();
        Configurator.getInstance().setToolType(MotionEvent.TOOL_TYPE_FINGER);
        doc.click();
        Configurator.getInstance().setToolType(toolType);

        assertTrue(bots.main.findDownloadRetryDialog().exists());

        device.pressBack(); // to clear the dialog.
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -173,6 +173,13 @@ public class UiBot extends BaseBot {
        return findObject("android:id/content", "android:id/text1");
    }

    public UiObject findDownloadRetryDialog() {
        UiSelector selector = new UiSelector().text("Couldn't download");
        UiObject title = mDevice.findObject(selector);
        title.waitForExists(mTimeout);
        return title;
    }

    public UiObject findDialogOkButton() {
        UiObject object = findObject("android:id/content", "android:id/button1");
        object.waitForExists(mTimeout);