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