Fixes build issues with sample content/documentsUi/StorageClient

Change-Id: I6bebbd3f4e828f20f9ae7f6f25507ff035fbfbff
diff --git a/content/documentsUi/StorageClient/Application/src/main/java/com/example/android/storageclient/StorageClientFragment.java b/content/documentsUi/StorageClient/Application/src/main/java/com/example/android/storageclient/StorageClientFragment.java
index 7f9f73e..97733b0 100644
--- a/content/documentsUi/StorageClient/Application/src/main/java/com/example/android/storageclient/StorageClientFragment.java
+++ b/content/documentsUi/StorageClient/Application/src/main/java/com/example/android/storageclient/StorageClientFragment.java
@@ -117,69 +117,27 @@
             // Since the URI is to an image, create and show a DialogFragment to display the
             // image to the user.
             FragmentManager fm = getActivity().getSupportFragmentManager();
-            ImageDialogFragment imageDialog = new ImageDialogFragment(uri);
+            ImageDialogFragment imageDialog = new ImageDialogFragment();
+            Bundle fragmentArguments = new Bundle();
+            fragmentArguments.putParcelable("URI", uri);
+            imageDialog.setArguments(fragmentArguments);
             imageDialog.show(fm, "image_dialog");
         }
         // END_INCLUDE (create_show_image_dialog)
     }
 
-    /**
-     * Grabs metadata for a document specified by URI, logs it to the screen.
-     *
-     * @param uri The uri for the document whose metadata should be printed.
-     */
-    public void dumpImageMetaData(Uri uri) {
-        // BEGIN_INCLUDE (dump_metadata)
-
-        // The query, since it only applies to a single document, will only return one row.
-        // no need to filter, sort, or select fields, since we want all fields for one
-        // document.
-        Cursor cursor = getActivity().getContentResolver()
-                .query(uri, null, null, null, null, null);
-
-        try {
-        // moveToFirst() returns false if the cursor has 0 rows.  Very handy for
-        // "if there's anything to look at, look at it" conditionals.
-            if (cursor != null && cursor.moveToFirst()) {
-
-                // Note it's called "Display Name".  This is provider-specific, and
-                // might not necessarily be the file name.
-                String displayName = cursor.getString(
-                        cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
-                Log.i(TAG, "Display Name: " + displayName);
-
-                int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE);
-                // If the size is unknown, the value stored is null.  But since an int can't be
-                // null in java, the behavior is implementation-specific, which is just a fancy
-                // term for "unpredictable".  So as a rule, check if it's null before assigning
-                // to an int.  This will happen often:  The storage API allows for remote
-                // files, whose size might not be locally known.
-                String size = null;
-                if (!cursor.isNull(sizeIndex)) {
-                    // Technically the column stores an int, but cursor.getString will do the
-                    // conversion automatically.
-                    size = cursor.getString(sizeIndex);
-                } else {
-                    size = "Unknown";
-                }
-                Log.i(TAG, "Size: " + size);
-            }
-        } finally {
-            cursor.close();
-        }
-        // END_INCLUDE (dump_metadata)
-    }
 
     /**
      * DialogFragment which displays an image, given a URI.
      */
-    private class ImageDialogFragment extends DialogFragment {
+    public static class ImageDialogFragment extends DialogFragment {
         private Dialog mDialog;
         private Uri mUri;
 
-        public ImageDialogFragment(Uri uri) {
-            super();
-            mUri = uri;
+        @Override
+        public void onCreate(Bundle savedInstanceState) {
+            super.onCreate(savedInstanceState);
+            mUri = getArguments().getParcelable("URI");
         }
 
         /** Create a Bitmap from the URI for that image and return it.
@@ -251,5 +209,54 @@
                 getDialog().dismiss();
             }
         }
+
+        /**
+         * Grabs metadata for a document specified by URI, logs it to the screen.
+         *
+         * @param uri The uri for the document whose metadata should be printed.
+         */
+        public void dumpImageMetaData(Uri uri) {
+            // BEGIN_INCLUDE (dump_metadata)
+
+            // The query, since it only applies to a single document, will only return one row.
+            // no need to filter, sort, or select fields, since we want all fields for one
+            // document.
+            Cursor cursor = getActivity().getContentResolver()
+                    .query(uri, null, null, null, null, null);
+
+            try {
+                // moveToFirst() returns false if the cursor has 0 rows.  Very handy for
+                // "if there's anything to look at, look at it" conditionals.
+                if (cursor != null && cursor.moveToFirst()) {
+
+                    // Note it's called "Display Name".  This is provider-specific, and
+                    // might not necessarily be the file name.
+                    String displayName = cursor.getString(
+                            cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+                    Log.i(TAG, "Display Name: " + displayName);
+
+                    int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE);
+                    // If the size is unknown, the value stored is null.  But since an int can't be
+                    // null in java, the behavior is implementation-specific, which is just a fancy
+                    // term for "unpredictable".  So as a rule, check if it's null before assigning
+                    // to an int.  This will happen often:  The storage API allows for remote
+                    // files, whose size might not be locally known.
+                    String size = null;
+                    if (!cursor.isNull(sizeIndex)) {
+                        // Technically the column stores an int, but cursor.getString will do the
+                        // conversion automatically.
+                        size = cursor.getString(sizeIndex);
+                    } else {
+                        size = "Unknown";
+                    }
+                    Log.i(TAG, "Size: " + size);
+                }
+            } finally {
+                if (cursor != null) {
+                    cursor.close();
+                }
+            }
+            // END_INCLUDE (dump_metadata)
+        }
     }
 }
diff --git a/content/documentsUi/StorageClient/Application/tests/src/com/example/android/storageclient/tests/SampleTests.java b/content/documentsUi/StorageClient/Application/tests/src/com/example/android/storageclient/tests/SampleTests.java
index 5ed779a..198596d 100644
--- a/content/documentsUi/StorageClient/Application/tests/src/com/example/android/storageclient/tests/SampleTests.java
+++ b/content/documentsUi/StorageClient/Application/tests/src/com/example/android/storageclient/tests/SampleTests.java
@@ -30,12 +30,12 @@
 */
 package com.example.android.storageclient.tests;
 
-import com.example.android.storageclient.*;
-
 import android.net.Uri;
-import android.support.v4.app.FragmentManager;
 import android.test.ActivityInstrumentationTestCase2;
 
+import com.example.android.storageclient.MainActivity;
+import com.example.android.storageclient.StorageClientFragment;
+
 /**
 * Tests for StorageClient sample.
 */
@@ -76,6 +76,6 @@
      */
     public void testDumpMetadataInvalidUri() {
         Uri uri = Uri.parse("content://HAHADOESNTEXIST");
-        mTestFragment.dumpImageMetaData(uri);
+        StorageClientFragment.ImageDialogFragment.dumpImageMetaData(mTestActivity, uri);
     }
 }
\ No newline at end of file
diff --git a/content/documentsUi/StorageClient/README.md b/content/documentsUi/StorageClient/README.md
index bb6c434..e7ce5fa 100644
--- a/content/documentsUi/StorageClient/README.md
+++ b/content/documentsUi/StorageClient/README.md
@@ -1,5 +1,5 @@
 Android StorageClient Sample
-==============================
+===================================
 
 Using the OPEN_DOCUMENT intent, a client app can access a list of Document Providers
 on the device, and choose a file from any of them.
@@ -10,8 +10,8 @@
 Pre-requisites
 --------------
 
-- Android SDK v20
-- Android Build Tools v20
+- Android SDK v21
+- Android Build Tools v21.1.1
 - Android Support Repository
 
 Getting Started
@@ -44,7 +44,7 @@
 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
+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
diff --git a/content/documentsUi/StorageClient/template-params.xml b/content/documentsUi/StorageClient/template-params.xml
index d1ac386..01c57c6 100644
--- a/content/documentsUi/StorageClient/template-params.xml
+++ b/content/documentsUi/StorageClient/template-params.xml
@@ -19,7 +19,7 @@
     <group>Content</group>
     <package>com.example.android.storageclient</package>
     <!-- change minSdk if needed-->
-    <minSdk>4</minSdk>
+    <minSdk>16</minSdk>
 
     <strings>
         <intro>