You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2015/03/11 16:35:15 UTC

[04/13] cordova-plugin-file git commit: android: Use CordovaResourceApi rather than FileHelper

android: Use CordovaResourceApi rather than FileHelper


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/commit/80f37d6c
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/tree/80f37d6c
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/diff/80f37d6c

Branch: refs/heads/master
Commit: 80f37d6c0389731ccf2bef7c23c064e854699faa
Parents: 2ed379c
Author: Andrew Grieve <ag...@chromium.org>
Authored: Mon Mar 9 13:12:04 2015 -0400
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Wed Mar 11 11:35:07 2015 -0400

----------------------------------------------------------------------
 plugin.xml                       |   4 +-
 src/android/FileHelper.java      | 158 ----------------------------------
 src/android/FileUtils.java       |   6 +-
 src/android/LocalFilesystem.java |  28 +++---
 4 files changed, 16 insertions(+), 180 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/80f37d6c/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index ac1bc17..10c0c65 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -28,6 +28,9 @@ xmlns:android="http://schemas.android.com/apk/res/android"
     <keywords>cordova,file</keywords>
     <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-file.git</repo>
     <issue>https://issues.apache.org/jira/browse/CB/component/12320651</issue>
+    <engines>
+        <engine name="cordova-android" version=">=3.1.0" /><!-- Uses CordovaResourceApi -->
+    </engines>
 
     <js-module src="www/DirectoryEntry.js" name="DirectoryEntry">
         <clobbers target="window.DirectoryEntry" />
@@ -121,7 +124,6 @@ xmlns:android="http://schemas.android.com/apk/res/android"
         <source-file src="src/android/NoModificationAllowedException.java" target-dir="src/org/apache/cordova/file" />
         <source-file src="src/android/TypeMismatchException.java" target-dir="src/org/apache/cordova/file" />
         <source-file src="src/android/FileUtils.java" target-dir="src/org/apache/cordova/file" />
-        <source-file src="src/android/FileHelper.java" target-dir="src/org/apache/cordova/file" />
         <source-file src="src/android/DirectoryManager.java" target-dir="src/org/apache/cordova/file" />
         <source-file src="src/android/LocalFilesystemURL.java" target-dir="src/org/apache/cordova/file" />
         <source-file src="src/android/Filesystem.java" target-dir="src/org/apache/cordova/file" />

http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/80f37d6c/src/android/FileHelper.java
----------------------------------------------------------------------
diff --git a/src/android/FileHelper.java b/src/android/FileHelper.java
deleted file mode 100644
index 9e8b626..0000000
--- a/src/android/FileHelper.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-       Licensed to the Apache Software Foundation (ASF) under one
-       or more contributor license agreements.  See the NOTICE file
-       distributed with this work for additional information
-       regarding copyright ownership.  The ASF licenses this file
-       to you under the Apache License, Version 2.0 (the
-       "License"); you may not 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
-
-       Unless required by applicable law or agreed to in writing,
-       software distributed under the License is distributed on an
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-       KIND, either express or implied.  See the License for the
-       specific language governing permissions and limitations
-       under the License.
- */
-package org.apache.cordova.file;
-
-import android.database.Cursor;
-import android.net.Uri;
-import android.webkit.MimeTypeMap;
-
-import org.apache.cordova.CordovaInterface;
-import org.apache.cordova.LOG;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Locale;
-
-public class FileHelper {
-    private static final String LOG_TAG = "FileUtils";
-    private static final String _DATA = "_data";
-
-    /**
-     * Returns the real path of the given URI string.
-     * If the given URI string represents a content:// URI, the real path is retrieved from the media store.
-     *
-     * @param uriString the URI string of the audio/image/video
-     * @param cordova the current application context
-     * @return the full path to the file
-     */
-    @SuppressWarnings("deprecation")
-    public static String getRealPath(String uriString, CordovaInterface cordova) {
-        String realPath = null;
-
-        if (uriString.startsWith("content://")) {
-            String[] proj = { _DATA };
-            Cursor cursor = cordova.getActivity().managedQuery(Uri.parse(uriString), proj, null, null, null);
-            int column_index = cursor.getColumnIndexOrThrow(_DATA);
-            cursor.moveToFirst();
-            realPath = cursor.getString(column_index);
-            if (realPath == null) {
-                LOG.e(LOG_TAG, "Could get real path for URI string %s", uriString);
-            }
-        } else if (uriString.startsWith("file://")) {
-            realPath = uriString.substring(7);
-            if (realPath.startsWith("/android_asset/")) {
-                LOG.e(LOG_TAG, "Cannot get real path for URI string %s because it is a file:///android_asset/ URI.", uriString);
-                realPath = null;
-            }
-        } else {
-            realPath = uriString;
-        }
-
-        return realPath;
-    }
-
-    /**
-     * Returns the real path of the given URI.
-     * If the given URI is a content:// URI, the real path is retrieved from the media store.
-     *
-     * @param uri the URI of the audio/image/video
-     * @param cordova the current application context
-     * @return the full path to the file
-     */
-    public static String getRealPath(Uri uri, CordovaInterface cordova) {
-        return FileHelper.getRealPath(uri.toString(), cordova);
-    }
-
-    /**
-     * Returns an input stream based on given URI string.
-     *
-     * @param uriString the URI string from which to obtain the input stream
-     * @param cordova the current application context
-     * @return an input stream into the data at the given URI or null if given an invalid URI string
-     * @throws IOException
-     */
-    public static InputStream getInputStreamFromUriString(String uriString, CordovaInterface cordova) throws IOException {
-        if (uriString.startsWith("content")) {
-            Uri uri = Uri.parse(uriString);
-            return cordova.getActivity().getContentResolver().openInputStream(uri);
-        } else if (uriString.startsWith("file://")) {
-            int question = uriString.indexOf("?");
-            if (question > -1) {
-            	uriString = uriString.substring(0,question);
-            }
-            if (uriString.startsWith("file:///android_asset/")) {
-                Uri uri = Uri.parse(uriString);
-                String relativePath = uri.getPath().substring(15);
-                return cordova.getActivity().getAssets().open(relativePath);
-            } else {
-                return new FileInputStream(getRealPath(uriString, cordova));
-            }
-        } else {
-            return new FileInputStream(getRealPath(uriString, cordova));
-        }
-    }
-
-    /**
-     * Removes the "file://" prefix from the given URI string, if applicable.
-     * If the given URI string doesn't have a "file://" prefix, it is returned unchanged.
-     *
-     * @param uriString the URI string to operate on
-     * @return a path without the "file://" prefix
-     */
-    public static String stripFileProtocol(String uriString) {
-        if (uriString.startsWith("file://")) {
-            uriString = uriString.substring(7);
-        }
-        return uriString;
-    }
-
-    public static String getMimeTypeForExtension(String path) {
-        String extension = path;
-        int lastDot = extension.lastIndexOf('.');
-        if (lastDot != -1) {
-            extension = extension.substring(lastDot + 1);
-        }
-        // Convert the URI string to lower case to ensure compatibility with MimeTypeMap (see CB-2185).
-        extension = extension.toLowerCase(Locale.getDefault());
-        if (extension.equals("3ga")) {
-            return "audio/3gpp";
-        }
-        return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
-    }
-    
-    /**
-     * Returns the mime type of the data specified by the given URI string.
-     *
-     * @param uriString the URI string of the data
-     * @return the mime type of the specified data
-     */
-    public static String getMimeType(String uriString, CordovaInterface cordova) {
-        String mimeType = null;
-
-        Uri uri = Uri.parse(uriString);
-        if (uriString.startsWith("content://")) {
-            mimeType = cordova.getActivity().getContentResolver().getType(uri);
-        } else {
-            mimeType = getMimeTypeForExtension(uri.getPath());
-        }
-
-        return mimeType;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/80f37d6c/src/android/FileUtils.java
----------------------------------------------------------------------
diff --git a/src/android/FileUtils.java b/src/android/FileUtils.java
index 08205d1..676d297 100644
--- a/src/android/FileUtils.java
+++ b/src/android/FileUtils.java
@@ -112,7 +112,7 @@ public class FileUtils extends CordovaPlugin {
                 if (fsRoot != null) {
                     File newRoot = new File(fsRoot);
                     if (newRoot.mkdirs() || newRoot.isDirectory()) {
-                        registerFilesystem(new LocalFilesystem(fsName, cordova, Uri.fromFile(newRoot)));
+                        registerFilesystem(new LocalFilesystem(fsName, webView.getContext(), webView.getResourceApi(), Uri.fromFile(newRoot)));
                         installedFileSystems.add(fsName);
                     } else {
                        Log.d(LOG_TAG, "Unable to create root dir for filesystem \"" + fsName + "\", skipping");
@@ -192,8 +192,8 @@ public class FileUtils extends CordovaPlugin {
     		// Note: The temporary and persistent filesystems need to be the first two
     		// registered, so that they will match window.TEMPORARY and window.PERSISTENT,
     		// per spec.
-    		this.registerFilesystem(new LocalFilesystem("temporary", cordova, tempRoot));
-    		this.registerFilesystem(new LocalFilesystem("persistent", cordova, persistentRoot));
+    		this.registerFilesystem(new LocalFilesystem("temporary", webView.getContext(), webView.getResourceApi(), tempRoot));
+    		this.registerFilesystem(new LocalFilesystem("persistent", webView.getContext(), webView.getResourceApi(), persistentRoot));
     		this.registerFilesystem(new ContentFilesystem(cordova, webView));
 
             registerExtraFileSystems(getExtraFileSystemsPreference(activity), getAvailableFileSystems(activity));

http://git-wip-us.apache.org/repos/asf/cordova-plugin-file/blob/80f37d6c/src/android/LocalFilesystem.java
----------------------------------------------------------------------
diff --git a/src/android/LocalFilesystem.java b/src/android/LocalFilesystem.java
index 28985fa..884771c 100644
--- a/src/android/LocalFilesystem.java
+++ b/src/android/LocalFilesystem.java
@@ -32,6 +32,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 
 import org.apache.cordova.CordovaInterface;
+import org.apache.cordova.CordovaResourceApi;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -44,14 +45,16 @@ import android.app.Activity;
 
 public class LocalFilesystem extends Filesystem {
 
-	private CordovaInterface cordova;
+    private final CordovaResourceApi resourceApi;
+    private final Context context;
 
-    public LocalFilesystem(String name, CordovaInterface cordova, String rootPath) {
-        this(name, cordova, Uri.fromFile(new File(rootPath)));
+    public LocalFilesystem(String name, Context context, CordovaResourceApi resourceApi, String rootPath) {
+        this(name, context, resourceApi, Uri.fromFile(new File(rootPath)));
     }
-	public LocalFilesystem(String name, CordovaInterface cordova, Uri rootUri) {
+	public LocalFilesystem(String name, Context context, CordovaResourceApi resourceApi, Uri rootUri) {
         super(rootUri, name);
-		this.cordova = cordova;
+		this.context = context;
+        this.resourceApi = resourceApi;
 	}
 
     public String filesystemPathForFullPath(String fullPath) {
@@ -276,7 +279,7 @@ public class LocalFilesystem extends Filesystem {
         try {
             // Ensure that directories report a size of 0
         	metadata.put("size", file.isDirectory() ? 0 : file.length());
-        	metadata.put("type", FileHelper.getMimeType(file.getAbsolutePath(), cordova));
+        	metadata.put("type", resourceApi.getMimeType(Uri.fromFile(file)));
         	metadata.put("name", file.getName());
         	metadata.put("fullPath", inputURL.fullPath);
         	metadata.put("lastModifiedDate", file.lastModified());
@@ -520,7 +523,7 @@ public class LocalFilesystem extends Filesystem {
 			ReadFileCallback readFileCallback) throws IOException {
 
 		File file = new File(this.filesystemPathForURL(inputURL));
-        String contentType = FileHelper.getMimeTypeForExtension(file.getAbsolutePath());
+        String contentType = resourceApi.getMimeType(Uri.fromFile(file));
 		
         if (end < 0) {
             end = file.length();
@@ -588,19 +591,8 @@ public class LocalFilesystem extends Filesystem {
     private void broadcastNewFile(LocalFilesystemURL inputURL) {
         File file = new File(this.filesystemPathForURL(inputURL));
         if (file.exists()) {
-            //Get the activity
-            Activity activity = this.cordova.getActivity();
-
-            //Get the context
-            Context context = activity.getApplicationContext();
-
-            //Create the URI
             Uri uri = Uri.fromFile(file);
-
-            //Create the intent
             Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
-
-            //Send broadcast of new file
             context.sendBroadcast(intent);
         }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org