Work around an issue with aapt

AAPT option noCompress no longer works as of gradle plugin 2.2. This
change works around the issue by copying the asset file into the cache
directory.

Change-Id: I08388ccfb2fb3460d0b4db2d7a06a2a478913032
diff --git a/ui/graphics/PdfRendererBasic/Application/src/main/java/com/example/android/pdfrendererbasic/PdfRendererBasicFragment.java b/ui/graphics/PdfRendererBasic/Application/src/main/java/com/example/android/pdfrendererbasic/PdfRendererBasicFragment.java
index e413c65..20b0a7f 100644
--- a/ui/graphics/PdfRendererBasic/Application/src/main/java/com/example/android/pdfrendererbasic/PdfRendererBasicFragment.java
+++ b/ui/graphics/PdfRendererBasic/Application/src/main/java/com/example/android/pdfrendererbasic/PdfRendererBasicFragment.java
@@ -30,7 +30,10 @@
 import android.widget.ImageView;
 import android.widget.Toast;
 
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 
 /**
  * This fragment has a big {@ImageView} that shows PDF pages, and 2 {@link android.widget.Button}s to move between
@@ -44,6 +47,11 @@
     private static final String STATE_CURRENT_PAGE_INDEX = "current_page_index";
 
     /**
+     * The filename of the PDF.
+     */
+    private static final String FILENAME = "sample.pdf";
+
+    /**
      * File descriptor of the PDF.
      */
     private ParcelFileDescriptor mFileDescriptor;
@@ -136,7 +144,21 @@
      */
     private void openRenderer(Context context) throws IOException {
         // In this sample, we read a PDF from the assets directory.
-        mFileDescriptor = context.getAssets().openFd("sample.pdf").getParcelFileDescriptor();
+        File file = new File(context.getCacheDir(), FILENAME);
+        if (!file.exists()) {
+            // Since PdfRenderer cannot handle the compressed asset file directly, we copy it into
+            // the cache directory.
+            InputStream asset = context.getAssets().open(FILENAME);
+            FileOutputStream output = new FileOutputStream(file);
+            final byte[] buffer = new byte[1024];
+            int size;
+            while ((size = asset.read(buffer)) != -1) {
+                output.write(buffer, 0, size);
+            }
+            asset.close();
+            output.close();
+        }
+        mFileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
         // This is the PdfRenderer we use to render the PDF.
         mPdfRenderer = new PdfRenderer(mFileDescriptor);
     }
diff --git a/ui/graphics/PdfRendererBasic/template-params.xml b/ui/graphics/PdfRendererBasic/template-params.xml
index 79ebf17..fe198b4 100644
--- a/ui/graphics/PdfRendererBasic/template-params.xml
+++ b/ui/graphics/PdfRendererBasic/template-params.xml
@@ -33,10 +33,6 @@
         </intro>
     </strings>
 
-    <aapt>
-        <noCompress>pdf</noCompress>
-    </aapt>
-
     <template src="base"/>
 
     <metadata>
@@ -71,15 +67,8 @@
 [PdfRenderer.Page][5] into a bitmap.
 
 This sample loads the PDF from assets. Contents of assets are compressed by
-default, but we disable it since PdfRenderer class cannot handle it.
-
-```groovy
-android {
-    aaptOptions {
-        noCompress "pdf"
-    }
-}
-```
+default, and the PdfRenderer class cannot open it. In this sample, we work
+around this by copying the file into the cache directory.
 
 [1]: https://developer.android.com/reference/android/graphics/pdf/PdfRenderer.html
 [2]: https://developer.android.com/reference/android/os/ParcelFileDescriptor.html