Revert "Changed all usages of FileHelper to use the new DataResource mechanism."

This reverts commit 867358ea81619ce2b0e674758f1d66f1bc22172c.
Reverting all DataResource changes for the 2.8.0 release.


Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/56587bfb
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/56587bfb
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/56587bfb

Branch: refs/heads/2.8.x
Commit: 56587bfb46c80cee376e49a28edc65f277b3ef0c
Parents: 0264019
Author: Andrew Grieve <[email protected]>
Authored: Mon May 27 22:22:16 2013 -0400
Committer: Andrew Grieve <[email protected]>
Committed: Mon May 27 22:22:16 2013 -0400

----------------------------------------------------------------------
 framework/src/org/apache/cordova/AudioHandler.java |   13 +-
 .../src/org/apache/cordova/CameraLauncher.java     |   61 +++-----
 framework/src/org/apache/cordova/Capture.java      |   13 +-
 framework/src/org/apache/cordova/FileUtils.java    |  121 +++++++++-----
 .../cordova/IceCreamCordovaWebViewClient.java      |    1 -
 5 files changed, 108 insertions(+), 101 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/56587bfb/framework/src/org/apache/cordova/AudioHandler.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/AudioHandler.java 
b/framework/src/org/apache/cordova/AudioHandler.java
index 20c3c4e..fd8c9df 100644
--- a/framework/src/org/apache/cordova/AudioHandler.java
+++ b/framework/src/org/apache/cordova/AudioHandler.java
@@ -20,7 +20,7 @@ package org.apache.cordova;
 
 import org.apache.cordova.api.CallbackContext;
 import org.apache.cordova.api.CordovaPlugin;
-import org.apache.cordova.api.DataResource;
+
 import android.content.Context;
 import android.media.AudioManager;
 
@@ -56,11 +56,6 @@ public class AudioHandler extends CordovaPlugin {
         this.pausedForPhone = new ArrayList<AudioPlayer>();
     }
 
-    public String getFilePath(String url, String source){
-        DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(url, this.webView.pluginManager, 
cordova, source);
-        return dataResource.getRealFile().getPath();
-    }
-
     /**
      * Executes the request and returns PluginResult.
      * @param action           The action to execute.
@@ -73,13 +68,13 @@ public class AudioHandler extends CordovaPlugin {
         String result = "";
 
         if (action.equals("startRecordingAudio")) {
-            this.startRecordingAudio(args.getString(0), 
getFilePath(args.getString(1), "AudioHandler.startRecordingAudio"));
+            this.startRecordingAudio(args.getString(0), 
FileHelper.stripFileProtocol(args.getString(1)));
         }
         else if (action.equals("stopRecordingAudio")) {
             this.stopRecordingAudio(args.getString(0));
         }
         else if (action.equals("startPlayingAudio")) {
-            this.startPlayingAudio(args.getString(0), 
getFilePath(args.getString(1), "AudioHandler.startPlayingAudio"));
+            this.startPlayingAudio(args.getString(0), 
FileHelper.stripFileProtocol(args.getString(1)));
         }
         else if (action.equals("seekToAudio")) {
             this.seekToAudio(args.getString(0), args.getInt(1));
@@ -107,7 +102,7 @@ public class AudioHandler extends CordovaPlugin {
         }
         else if (action.equals("create")) {
             String id = args.getString(0);
-            String src = getFilePath(args.getString(1), "AudioHandler.create");
+            String src = FileHelper.stripFileProtocol(args.getString(1));
             AudioPlayer audio = new AudioPlayer(this, id, src);
             this.players.put(id, audio);
         }

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/56587bfb/framework/src/org/apache/cordova/CameraLauncher.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CameraLauncher.java 
b/framework/src/org/apache/cordova/CameraLauncher.java
index 7597a81..426d250 100755
--- a/framework/src/org/apache/cordova/CameraLauncher.java
+++ b/framework/src/org/apache/cordova/CameraLauncher.java
@@ -20,16 +20,15 @@ package org.apache.cordova;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.OutputStream;
 
 import org.apache.commons.codec.binary.Base64;
 import org.apache.cordova.api.CallbackContext;
 import org.apache.cordova.api.CordovaPlugin;
-import org.apache.cordova.api.DataResource;
 import org.apache.cordova.api.LOG;
 import org.apache.cordova.api.PluginResult;
 import org.json.JSONArray;
@@ -43,6 +42,7 @@ import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Matrix;
 import android.graphics.Bitmap.CompressFormat;
+import android.graphics.Rect;
 import android.media.MediaScannerConnection;
 import android.media.MediaScannerConnection.MediaScannerConnectionClient;
 import android.net.Uri;
@@ -290,7 +290,7 @@ public class CameraLauncher extends CordovaPlugin 
implements MediaScannerConnect
 
                     // If sending base64 image back
                     if (destType == DATA_URL) {
-                        bitmap = getScaledBitmap(imageUri.toString());
+                        bitmap = 
getScaledBitmap(FileHelper.stripFileProtocol(imageUri.toString()));
                         if (bitmap == null) {
                             // Try to get the bitmap from intent.
                             bitmap = (Bitmap)intent.getExtras().get("data");
@@ -316,9 +316,7 @@ public class CameraLauncher extends CordovaPlugin 
implements MediaScannerConnect
                         if (this.saveToPhotoAlbum) {
                             Uri inputUri = getUriFromMediaStore();
                             //Just because we have a media URI doesn't mean we 
have a real file, we need to make it
-                            DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(inputUri, webView.pluginManager, 
cordova, "CameraLauncher.CameraExitIntent");
-                            File file = dataResource.getRealFile();
-                            uri = Uri.fromFile(file);
+                            uri = Uri.fromFile(new 
File(FileHelper.getRealPath(inputUri, this.cordova)));
                         } else {
                             uri = Uri.fromFile(new 
File(DirectoryManager.getTempDirectoryPath(this.cordova.getActivity()), 
System.currentTimeMillis() + ".jpg"));
                         }
@@ -334,15 +332,14 @@ public class CameraLauncher extends CordovaPlugin 
implements MediaScannerConnect
 
                             this.callbackContext.success(uri.toString());
                         } else {
-                            bitmap = getScaledBitmap(imageUri.toString());
+                            bitmap = 
getScaledBitmap(FileHelper.stripFileProtocol(imageUri.toString()));
 
                             if (rotate != 0 && this.correctOrientation) {
                                 bitmap = getRotatedBitmap(rotate, bitmap, 
exif);
                             }
 
                             // Add compressed version of captured image to 
returned media store Uri
-                            DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(uri, webView.pluginManager, cordova, 
"CameraLauncher.CameraExitIntent");
-                            OutputStream os = dataResource.getOs();
+                            OutputStream os = 
this.cordova.getActivity().getContentResolver().openOutputStream(uri);
                             bitmap.compress(Bitmap.CompressFormat.JPEG, 
this.mQuality, os);
                             os.close();
 
@@ -350,7 +347,7 @@ public class CameraLauncher extends CordovaPlugin 
implements MediaScannerConnect
                             if (this.encodingType == JPEG) {
                                 String exifPath;
                                 if (this.saveToPhotoAlbum) {
-                                    exifPath = 
dataResource.getRealFile().getPath();
+                                    exifPath = FileHelper.getRealPath(uri, 
this.cordova);
                                 } else {
                                     exifPath = uri.getPath();
                                 }
@@ -401,9 +398,8 @@ public class CameraLauncher extends CordovaPlugin 
implements MediaScannerConnect
                         this.callbackContext.success(uri.toString());
                     } else {
                         String uriString = uri.toString();
-                        DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(uri, webView.pluginManager, cordova, 
"CameraLauncher.CameraExitIntent");
                         // Get the path to the image. Makes loading so much 
easier.
-                        String mimeType = dataResource.getMimeType();
+                        String mimeType = FileHelper.getMimeType(uriString, 
this.cordova);
                         // If we don't have a valid image so quit.
                         if (!("image/jpeg".equalsIgnoreCase(mimeType) || 
"image/png".equalsIgnoreCase(mimeType))) {
                                Log.d(LOG_TAG, "I either have a null image path 
or bitmap");
@@ -444,8 +440,7 @@ public class CameraLauncher extends CordovaPlugin 
implements MediaScannerConnect
                                     // Create an ExifHelper to save the exif 
data that is lost during compression
                                     String resizePath = 
DirectoryManager.getTempDirectoryPath(this.cordova.getActivity()) + 
"/resize.jpg";
                                     // Some content: URIs do not map to file 
paths (e.g. picasa).
-                                    File realFile = 
DataResource.initiateNewDataRequestForUri(uri, webView.pluginManager, cordova, 
"CameraLauncher.CameraExitIntent").getRealFile();
-                                    String realPath = realFile != null? 
realFile.getPath() : null;
+                                    String realPath = 
FileHelper.getRealPath(uri, this.cordova);
                                     ExifHelper exif = new ExifHelper();
                                     if (realPath != null && this.encodingType 
== JPEG) {
                                         try {
@@ -539,15 +534,8 @@ public class CameraLauncher extends CordovaPlugin 
implements MediaScannerConnect
      */
     private void writeUncompressedImage(Uri uri) throws FileNotFoundException,
             IOException {
-        DataResource inputDataResource = 
DataResource.initiateNewDataRequestForUri(imageUri, webView.pluginManager, 
cordova, "CameraLauncher.writeUncompressedImage");
-        InputStream fis = inputDataResource.getIs();
-        DataResource outDataResource = 
DataResource.initiateNewDataRequestForUri(uri, webView.pluginManager, cordova, 
"CameraLauncher.writeUncompressedImage");
-        OutputStream os = outDataResource.getOs();
-        if(fis == null) {
-            throw new FileNotFoundException("Could not get the input file");
-        } else if(os == null) {
-            throw new FileNotFoundException("Could not get the output file");
-        }
+        FileInputStream fis = new 
FileInputStream(FileHelper.stripFileProtocol(imageUri.toString()));
+        OutputStream os = 
this.cordova.getActivity().getContentResolver().openOutputStream(uri);
         byte[] buffer = new byte[4096];
         int len;
         while ((len = fis.read(buffer)) != -1) {
@@ -590,15 +578,14 @@ public class CameraLauncher extends CordovaPlugin 
implements MediaScannerConnect
      */
     private Bitmap getScaledBitmap(String imageUrl) throws IOException {
         // If no new width or height were specified return the original bitmap
-        DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(imageUrl, webView.pluginManager, 
cordova, "CameraLauncher.getScaledBitmap");
         if (this.targetWidth <= 0 && this.targetHeight <= 0) {
-            return BitmapFactory.decodeStream(dataResource.getIs());
+            return 
BitmapFactory.decodeStream(FileHelper.getInputStreamFromUriString(imageUrl, 
cordova));
         }
 
         // figure out the original width and height of the image
         BitmapFactory.Options options = new BitmapFactory.Options();
         options.inJustDecodeBounds = true;
-        BitmapFactory.decodeStream(dataResource.getIs(), null, options);
+        
BitmapFactory.decodeStream(FileHelper.getInputStreamFromUriString(imageUrl, 
cordova), null, options);
         
         //CB-2292: WTF? Why is the width null?
         if(options.outWidth == 0 || options.outHeight == 0)
@@ -612,7 +599,7 @@ public class CameraLauncher extends CordovaPlugin 
implements MediaScannerConnect
         // Load in the smallest bitmap possible that is closest to the size we 
want
         options.inJustDecodeBounds = false;
         options.inSampleSize = calculateSampleSize(options.outWidth, 
options.outHeight, this.targetWidth, this.targetHeight);
-        Bitmap unscaledBitmap = 
BitmapFactory.decodeStream(dataResource.getIs(), null, options);
+        Bitmap unscaledBitmap = 
BitmapFactory.decodeStream(FileHelper.getInputStreamFromUriString(imageUrl, 
cordova), null, options);
         if (unscaledBitmap == null) {
             return null;
         }
@@ -711,20 +698,16 @@ public class CameraLauncher extends CordovaPlugin 
implements MediaScannerConnect
             bitmap.recycle();
         }
 
-        DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(oldImage, webView.pluginManager, 
cordova, "CameraLauncher.cleanup");
-        File file = dataResource.getRealFile();
-        if(file != null) {
-            // Clean up initial camera-written image file.
-            file.delete();
-
-            checkForDuplicateImage(imageType);
-            // Scan for the gallery to update pic refs in gallery
-            if (this.saveToPhotoAlbum && newImage != null) {
-                this.scanForGallery(newImage);
-            }
+        // Clean up initial camera-written image file.
+        (new File(FileHelper.stripFileProtocol(oldImage.toString()))).delete();
 
-            System.gc();
+        checkForDuplicateImage(imageType);
+        // Scan for the gallery to update pic refs in gallery
+        if (this.saveToPhotoAlbum && newImage != null) {
+            this.scanForGallery(newImage);
         }
+
+        System.gc();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/56587bfb/framework/src/org/apache/cordova/Capture.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/Capture.java 
b/framework/src/org/apache/cordova/Capture.java
index d7ad419..5f737ca 100644
--- a/framework/src/org/apache/cordova/Capture.java
+++ b/framework/src/org/apache/cordova/Capture.java
@@ -26,7 +26,6 @@ import java.io.OutputStream;
 import android.os.Build;
 import org.apache.cordova.api.CallbackContext;
 import org.apache.cordova.api.CordovaPlugin;
-import org.apache.cordova.api.DataResource;
 import org.apache.cordova.api.LOG;
 import org.apache.cordova.api.PluginResult;
 import org.json.JSONArray;
@@ -130,8 +129,7 @@ public class Capture extends CordovaPlugin {
         // If the mimeType isn't set the rest will fail
         // so let's see if we can determine it.
         if (mimeType == null || mimeType.equals("") || 
"null".equals(mimeType)) {
-            DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(filePath, webView.pluginManager, 
cordova, "Capture.dataResource");
-            mimeType = dataResource.getMimeType();
+            mimeType = FileHelper.getMimeType(filePath, cordova);
         }
         Log.d(LOG_TAG, "Mime type = " + mimeType);
 
@@ -158,8 +156,7 @@ public class Capture extends CordovaPlugin {
     private JSONObject getImageData(String filePath, JSONObject obj) throws 
JSONException {
         BitmapFactory.Options options = new BitmapFactory.Options();
         options.inJustDecodeBounds = true;
-        DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(filePath, webView.pluginManager, 
cordova, "Capture.getImageData");
-        BitmapFactory.decodeFile(dataResource.getRealFile().getPath(), 
options);
+        BitmapFactory.decodeFile(FileHelper.stripFileProtocol(filePath), 
options);
         obj.put("height", options.outHeight);
         obj.put("width", options.outWidth);
         return obj;
@@ -351,8 +348,7 @@ public class Capture extends CordovaPlugin {
      * @throws IOException
      */
     private JSONObject createMediaFile(Uri data) {
-        DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(data, webView.pluginManager, cordova, 
"Capture.createMediaFile");
-        File fp = dataResource.getRealFile();
+        File fp = new File(FileHelper.getRealPath(data, this.cordova));
         JSONObject obj = new JSONObject();
 
         try {
@@ -362,7 +358,6 @@ public class Capture extends CordovaPlugin {
             // Because of an issue with MimeTypeMap.getMimeTypeFromExtension() 
all .3gpp files
             // are reported as video/3gpp. I'm doing this hacky check of the 
URI to see if it
             // is stored in the audio or video content store.
-
             if (fp.getAbsoluteFile().toString().endsWith(".3gp") || 
fp.getAbsoluteFile().toString().endsWith(".3gpp")) {
                 if (data.toString().contains("/audio/")) {
                     obj.put("type", AUDIO_3GPP);
@@ -370,7 +365,7 @@ public class Capture extends CordovaPlugin {
                     obj.put("type", VIDEO_3GPP);
                 }
             } else {
-                obj.put("type", dataResource.getMimeType());
+                obj.put("type", FileHelper.getMimeType(fp.getAbsolutePath(), 
cordova));
             }
 
             obj.put("lastModifiedDate", fp.lastModified());

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/56587bfb/framework/src/org/apache/cordova/FileUtils.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/FileUtils.java 
b/framework/src/org/apache/cordova/FileUtils.java
index cf0e5a4..2135be9 100755
--- a/framework/src/org/apache/cordova/FileUtils.java
+++ b/framework/src/org/apache/cordova/FileUtils.java
@@ -18,6 +18,8 @@
  */
 package org.apache.cordova;
 
+import android.database.Cursor;
+import android.net.Uri;
 import android.os.Environment;
 import android.provider.MediaStore;
 import android.util.Log;
@@ -25,7 +27,6 @@ import android.util.Log;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.cordova.api.CallbackContext;
 import org.apache.cordova.api.CordovaPlugin;
-import org.apache.cordova.api.DataResource;
 import org.apache.cordova.api.PluginResult;
 import org.apache.cordova.file.EncodingException;
 import org.apache.cordova.file.FileExistsException;
@@ -45,6 +46,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.RandomAccessFile;
 import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLDecoder;
 import java.nio.channels.FileChannel;
 
 /**
@@ -231,7 +234,7 @@ public class FileUtils extends CordovaPlugin {
      * @param filePath the path to check
      */
     private void notifyDelete(String filePath) {
-        String newFilePath = 
DataResource.initiateNewDataRequestForUri(filePath, webView.pluginManager, 
cordova, "FileUtils.notifyDelete").getRealFile().getPath();
+        String newFilePath = FileHelper.getRealPath(filePath, cordova);
         try {
             
this.cordova.getActivity().getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                     MediaStore.Images.Media.DATA + " = ?",
@@ -253,10 +256,37 @@ public class FileUtils extends CordovaPlugin {
      * @throws IOException if the user can't read the file
      * @throws JSONException
      */
+    @SuppressWarnings("deprecation")
     private JSONObject resolveLocalFileSystemURI(String url) throws 
IOException, JSONException {
-        File fp = DataResource.initiateNewDataRequestForUri(url, 
webView.pluginManager, cordova, 
"FileUtils.resolveLocalFileSystemURI").getRealFile();
+        String decoded = URLDecoder.decode(url, "UTF-8");
 
-        if (fp == null || !fp.exists()) {
+        File fp = null;
+
+        // Handle the special case where you get an Android content:// uri.
+        if (decoded.startsWith("content:")) {
+            Cursor cursor = 
this.cordova.getActivity().managedQuery(Uri.parse(decoded), new String[] { 
MediaStore.Images.Media.DATA }, null, null, null);
+            // Note: MediaStore.Images/Audio/Video.Media.DATA is always "_data"
+            int column_index = 
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
+            cursor.moveToFirst();
+            fp = new File(cursor.getString(column_index));
+        } else {
+            // Test to see if this is a valid URL first
+            @SuppressWarnings("unused")
+            URL testUrl = new URL(decoded);
+
+            if (decoded.startsWith("file://")) {
+                int questionMark = decoded.indexOf("?");
+                if (questionMark < 0) {
+                    fp = new File(decoded.substring(7, decoded.length()));
+                } else {
+                    fp = new File(decoded.substring(7, questionMark));
+                }
+            } else {
+                fp = new File(decoded);
+            }
+        }
+
+        if (!fp.exists()) {
             throw new FileNotFoundException();
         }
         if (!fp.canRead()) {
@@ -274,9 +304,9 @@ public class FileUtils extends CordovaPlugin {
      * @throws JSONException
      */
     private JSONArray readEntries(String fileName) throws 
FileNotFoundException, JSONException {
-        File fp = DataResource.initiateNewDataRequestForUri(fileName, 
webView.pluginManager, cordova, "FileUtils.readEntries").getRealFile();
+        File fp = createFileObject(fileName);
 
-        if (fp == null || !fp.exists()) {
+        if (!fp.exists()) {
             // The directory we are listing doesn't exist so we should fail.
             throw new FileNotFoundException();
         }
@@ -311,10 +341,8 @@ public class FileUtils extends CordovaPlugin {
      * @throws FileExistsException
      */
     private JSONObject transferTo(String fileName, String newParent, String 
newName, boolean move) throws JSONException, NoModificationAllowedException, 
IOException, InvalidModificationException, EncodingException, 
FileExistsException {
-        DataResource dataResourceFrom = 
DataResource.initiateNewDataRequestForUri(fileName, webView.pluginManager, 
cordova, "FileUtils.transferTo");
-        String newFileName = dataResourceFrom.getRealFile().getPath();
-        DataResource dataResourceTo = 
DataResource.initiateNewDataRequestForUri(newParent, webView.pluginManager, 
cordova, "FileUtils.transferTo");
-        newParent = dataResourceTo.getRealFile().getPath();
+        String newFileName = FileHelper.getRealPath(fileName, cordova);
+        newParent = FileHelper.getRealPath(newParent, cordova);
 
         // Check for invalid file name
         if (newName != null && newName.contains(":")) {
@@ -585,7 +613,7 @@ public class FileUtils extends CordovaPlugin {
      * @throws FileExistsException
      */
     private boolean removeRecursively(String filePath) throws 
FileExistsException {
-        File fp = DataResource.initiateNewDataRequestForUri(filePath, 
webView.pluginManager, cordova, "FileUtils.readEntries").getRealFile();
+        File fp = createFileObject(filePath);
 
         // You can't delete the root directory.
         if (atRootDirectory(filePath)) {
@@ -626,7 +654,7 @@ public class FileUtils extends CordovaPlugin {
      * @throws InvalidModificationException
      */
     private boolean remove(String filePath) throws 
NoModificationAllowedException, InvalidModificationException {
-        File fp = DataResource.initiateNewDataRequestForUri(filePath, 
webView.pluginManager, cordova, "FileUtils.readEntries").getRealFile();
+        File fp = createFileObject(filePath);
 
         // You can't delete the root directory.
         if (atRootDirectory(filePath)) {
@@ -670,8 +698,7 @@ public class FileUtils extends CordovaPlugin {
             throw new EncodingException("This file has a : in it's name");
         }
 
-        String filePath = getFullFilePath(dirPath, fileName);
-        File fp = DataResource.initiateNewDataRequestForUri(filePath, 
webView.pluginManager, cordova, "FileUtils.getFile").getRealFile();
+        File fp = createFileObject(dirPath, fileName);
 
         if (create) {
             if (exclusive && fp.exists()) {
@@ -713,14 +740,15 @@ public class FileUtils extends CordovaPlugin {
      * @param fileName new file name
      * @return
      */
-    private String getFullFilePath(String dirPath, String fileName) {
+    private File createFileObject(String dirPath, String fileName) {
+        File fp = null;
         if (fileName.startsWith("/")) {
-            return fileName;
+            fp = new File(fileName);
         } else {
-            DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(dirPath, webView.pluginManager, 
cordova, "FileUtils.getFullFilePath");
-            dirPath = dataResource.getRealFile().getPath();
-            return dirPath + File.separator + fileName;
+            dirPath = FileHelper.getRealPath(dirPath, cordova);
+            fp = new File(dirPath + File.separator + fileName);
         }
+        return fp;
     }
 
     /**
@@ -732,13 +760,12 @@ public class FileUtils extends CordovaPlugin {
      * @throws JSONException
      */
     private JSONObject getParent(String filePath) throws JSONException {
-        DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(filePath, webView.pluginManager, 
cordova, "FileUtils.getParent");
-        filePath = dataResource.getRealFile().getPath();
+        filePath = FileHelper.getRealPath(filePath, cordova);
 
         if (atRootDirectory(filePath)) {
             return getEntry(filePath);
         }
-        return getEntry(dataResource.getRealFile().getParent());
+        return getEntry(new File(filePath).getParent());
     }
 
     /**
@@ -749,7 +776,7 @@ public class FileUtils extends CordovaPlugin {
      * @return true if we are at the root, false otherwise.
      */
     private boolean atRootDirectory(String filePath) {
-        filePath = DataResource.initiateNewDataRequestForUri(filePath, 
webView.pluginManager, cordova, 
"FileUtils.atRootDirectory").getRealFile().getPath();
+        filePath = FileHelper.getRealPath(filePath, cordova);
 
         if 
(filePath.equals(Environment.getExternalStorageDirectory().getAbsolutePath() + 
"/Android/data/" + cordova.getActivity().getPackageName() + "/cache") ||
                 
filePath.equals(Environment.getExternalStorageDirectory().getAbsolutePath()) ||
@@ -760,6 +787,19 @@ public class FileUtils extends CordovaPlugin {
     }
 
     /**
+     * Create a File object from the passed in path
+     *
+     * @param filePath
+     * @return
+     */
+    private File createFileObject(String filePath) {
+        filePath = FileHelper.getRealPath(filePath, cordova);
+
+        File file = new File(filePath);
+        return file;
+    }
+
+    /**
      * Look up metadata about this entry.
      *
      * @param filePath to entry
@@ -767,9 +807,9 @@ public class FileUtils extends CordovaPlugin {
      * @throws FileNotFoundException
      */
     private long getMetadata(String filePath) throws FileNotFoundException {
-        File file = DataResource.initiateNewDataRequestForUri(filePath, 
webView.pluginManager, cordova, "FileUtils.getMetadata").getRealFile();
+        File file = createFileObject(filePath);
 
-        if (file == null || !file.exists()) {
+        if (!file.exists()) {
             throw new FileNotFoundException("Failed to find file in 
getMetadata");
         }
 
@@ -785,16 +825,15 @@ public class FileUtils extends CordovaPlugin {
      * @throws JSONException
      */
     private JSONObject getFileMetadata(String filePath) throws 
FileNotFoundException, JSONException {
-        DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(filePath, webView.pluginManager, 
cordova, "FileUtils.getMetadata");
-        File file = dataResource.getRealFile();
+        File file = createFileObject(filePath);
 
-        if (file == null || !file.exists()) {
+        if (!file.exists()) {
             throw new FileNotFoundException("File: " + filePath + " does not 
exist.");
         }
 
         JSONObject metadata = new JSONObject();
         metadata.put("size", file.length());
-        metadata.put("type", dataResource.getMimeType());
+        metadata.put("type", FileHelper.getMimeType(filePath, cordova));
         metadata.put("name", file.getName());
         metadata.put("fullPath", filePath);
         metadata.put("lastModifiedDate", file.lastModified());
@@ -896,8 +935,7 @@ public class FileUtils extends CordovaPlugin {
         this.cordova.getThreadPool().execute(new Runnable() {
             public void run() {
                 try {
-                    DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(filename, webView.pluginManager, 
cordova, "FileUtils.readFileAs");
-                    byte[] bytes = readAsBinaryHelper(dataResource.getIs(), 
start, end);
+                    byte[] bytes = readAsBinaryHelper(filename, start, end);
                     
                     PluginResult result;
                     switch (resultType) {
@@ -911,7 +949,7 @@ public class FileUtils extends CordovaPlugin {
                             result = new PluginResult(PluginResult.Status.OK, 
bytes, true);
                             break;
                         default: // Base64.
-                            String contentType = dataResource.getMimeType();
+                            String contentType = 
FileHelper.getMimeType(filename, cordova);
                             byte[] base64 = Base64.encodeBase64(bytes);
                             String s = "data:" + contentType + ";base64," + 
new String(base64, "US-ASCII");
                             result = new PluginResult(PluginResult.Status.OK, 
s);
@@ -938,9 +976,10 @@ public class FileUtils extends CordovaPlugin {
      * @return                  Contents of the file as a byte[].
      * @throws IOException
      */
-    private byte[] readAsBinaryHelper(InputStream inputStream, int start, int 
end) throws IOException {
+    private byte[] readAsBinaryHelper(String filename, int start, int end) 
throws IOException {
         int numBytesToRead = end - start;
         byte[] bytes = new byte[numBytesToRead];
+        InputStream inputStream = 
FileHelper.getInputStreamFromUriString(filename, cordova);
         int numBytesRead = 0;
 
         if (start > 0) {
@@ -969,8 +1008,7 @@ public class FileUtils extends CordovaPlugin {
             throw new NoModificationAllowedException("Couldn't write to file 
given its content URI");
         }
 
-        DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(filename, webView.pluginManager, 
cordova, "FileUtils.write");
-        filename = dataResource.getRealFile().getPath();
+        filename = FileHelper.getRealPath(filename, cordova);
 
         boolean append = false;
         if (offset > 0) {
@@ -999,16 +1037,13 @@ public class FileUtils extends CordovaPlugin {
      * @throws NoModificationAllowedException
      */
     private long truncateFile(String filename, long size) throws 
FileNotFoundException, IOException, NoModificationAllowedException {
-        DataResource dataResource = 
DataResource.initiateNewDataRequestForUri(filename, webView.pluginManager, 
cordova, "FileUtils.truncateFile");
-        if(!dataResource.isWritable()) {
-            throw new NoModificationAllowedException("Couldn't truncate file 
as it is not writable");
-        }
-        File file = dataResource.getRealFile();
-        if(file == null) {
-            throw new FileNotFoundException("Couldn't get the file");
+        if (filename.startsWith("content://")) {
+            throw new NoModificationAllowedException("Couldn't truncate file 
given its content URI");
         }
 
-        RandomAccessFile raf = new RandomAccessFile(file, "rw");
+        filename = FileHelper.getRealPath(filename, cordova);
+
+        RandomAccessFile raf = new RandomAccessFile(filename, "rw");
         try {
             if (raf.length() >= size) {
                 FileChannel channel = raf.getChannel();

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/56587bfb/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java 
b/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
index 3a17dc1..c4c4d3e 100644
--- a/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
+++ b/framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
@@ -49,7 +49,6 @@ public class IceCreamCordovaWebViewClient extends 
CordovaWebViewClient {
                 new 
DataResourceContext("WebViewClient.shouldInterceptRequest", true /* this is 
from a browser request*/));
         url = dataResource.getUri().toString();
 
-        // This mechanism is no longer needed due to the dataResource 
mechanism. It would be awesome to just get rid of it.
         //Check if plugins intercept the request
         WebResourceResponse ret = super.shouldInterceptRequest(view, url);
 //      The below bugfix is taken care of by the dataResource mechanism

Reply via email to