mirror of
https://github.com/apache/cordova-android.git
synced 2025-02-22 00:32:55 +08:00
Restore deleted classes (FileHelper, etc) and deprecate them instead.
The classes are: [CB-4766] JSONUtils.java [CB-4765] ExifHelper.java [CB-4764] DirectoryManager.java [CB-4763] FileHelper.java
This commit is contained in:
parent
7be1f018aa
commit
3351fdbc74
162
framework/src/org/apache/cordova/DirectoryManager.java
Normal file
162
framework/src/org/apache/cordova/DirectoryManager.java
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
/*
|
||||||
|
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;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Environment;
|
||||||
|
import android.os.StatFs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides file directory utilities.
|
||||||
|
* All file operations are performed on the SD card.
|
||||||
|
*
|
||||||
|
* It is used by the FileUtils class.
|
||||||
|
*/
|
||||||
|
@Deprecated // Deprecated in 3.1. To be removed in 4.0.
|
||||||
|
public class DirectoryManager {
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private static final String LOG_TAG = "DirectoryManager";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if a file or directory exists.
|
||||||
|
* @param name The name of the file to check.
|
||||||
|
* @return T=exists, F=not found
|
||||||
|
*/
|
||||||
|
public static boolean testFileExists(String name) {
|
||||||
|
boolean status;
|
||||||
|
|
||||||
|
// If SD card exists
|
||||||
|
if ((testSaveLocationExists()) && (!name.equals(""))) {
|
||||||
|
File path = Environment.getExternalStorageDirectory();
|
||||||
|
File newPath = constructFilePaths(path.toString(), name);
|
||||||
|
status = newPath.exists();
|
||||||
|
}
|
||||||
|
// If no SD card
|
||||||
|
else {
|
||||||
|
status = false;
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the free disk space
|
||||||
|
*
|
||||||
|
* @return Size in KB or -1 if not available
|
||||||
|
*/
|
||||||
|
public static long getFreeDiskSpace(boolean checkInternal) {
|
||||||
|
String status = Environment.getExternalStorageState();
|
||||||
|
long freeSpace = 0;
|
||||||
|
|
||||||
|
// If SD card exists
|
||||||
|
if (status.equals(Environment.MEDIA_MOUNTED)) {
|
||||||
|
freeSpace = freeSpaceCalculation(Environment.getExternalStorageDirectory().getPath());
|
||||||
|
}
|
||||||
|
else if (checkInternal) {
|
||||||
|
freeSpace = freeSpaceCalculation("/");
|
||||||
|
}
|
||||||
|
// If no SD card and we haven't been asked to check the internal directory then return -1
|
||||||
|
else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return freeSpace;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a path return the number of free KB
|
||||||
|
*
|
||||||
|
* @param path to the file system
|
||||||
|
* @return free space in KB
|
||||||
|
*/
|
||||||
|
private static long freeSpaceCalculation(String path) {
|
||||||
|
StatFs stat = new StatFs(path);
|
||||||
|
long blockSize = stat.getBlockSize();
|
||||||
|
long availableBlocks = stat.getAvailableBlocks();
|
||||||
|
return availableBlocks * blockSize / 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if SD card exists.
|
||||||
|
*
|
||||||
|
* @return T=exists, F=not found
|
||||||
|
*/
|
||||||
|
public static boolean testSaveLocationExists() {
|
||||||
|
String sDCardStatus = Environment.getExternalStorageState();
|
||||||
|
boolean status;
|
||||||
|
|
||||||
|
// If SD card is mounted
|
||||||
|
if (sDCardStatus.equals(Environment.MEDIA_MOUNTED)) {
|
||||||
|
status = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If no SD card
|
||||||
|
else {
|
||||||
|
status = false;
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new file object from two file paths.
|
||||||
|
*
|
||||||
|
* @param file1 Base file path
|
||||||
|
* @param file2 Remaining file path
|
||||||
|
* @return File object
|
||||||
|
*/
|
||||||
|
private static File constructFilePaths (String file1, String file2) {
|
||||||
|
File newPath;
|
||||||
|
if (file2.startsWith(file1)) {
|
||||||
|
newPath = new File(file2);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
newPath = new File(file1 + "/" + file2);
|
||||||
|
}
|
||||||
|
return newPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if we can use the SD Card to store the temporary file. If not then use
|
||||||
|
* the internal cache directory.
|
||||||
|
*
|
||||||
|
* @return the absolute path of where to store the file
|
||||||
|
*/
|
||||||
|
public static String getTempDirectoryPath(Context ctx) {
|
||||||
|
File cache = null;
|
||||||
|
|
||||||
|
// SD Card Mounted
|
||||||
|
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
||||||
|
cache = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +
|
||||||
|
"/Android/data/" + ctx.getPackageName() + "/cache/");
|
||||||
|
}
|
||||||
|
// Use internal storage
|
||||||
|
else {
|
||||||
|
cache = ctx.getCacheDir();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the cache directory if it doesn't exist
|
||||||
|
if (!cache.exists()) {
|
||||||
|
cache.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
return cache.getAbsolutePath();
|
||||||
|
}
|
||||||
|
}
|
186
framework/src/org/apache/cordova/ExifHelper.java
Normal file
186
framework/src/org/apache/cordova/ExifHelper.java
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
/*
|
||||||
|
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;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import android.media.ExifInterface;
|
||||||
|
|
||||||
|
@Deprecated // Deprecated in 3.1. To be removed in 4.0.
|
||||||
|
public class ExifHelper {
|
||||||
|
private String aperture = null;
|
||||||
|
private String datetime = null;
|
||||||
|
private String exposureTime = null;
|
||||||
|
private String flash = null;
|
||||||
|
private String focalLength = null;
|
||||||
|
private String gpsAltitude = null;
|
||||||
|
private String gpsAltitudeRef = null;
|
||||||
|
private String gpsDateStamp = null;
|
||||||
|
private String gpsLatitude = null;
|
||||||
|
private String gpsLatitudeRef = null;
|
||||||
|
private String gpsLongitude = null;
|
||||||
|
private String gpsLongitudeRef = null;
|
||||||
|
private String gpsProcessingMethod = null;
|
||||||
|
private String gpsTimestamp = null;
|
||||||
|
private String iso = null;
|
||||||
|
private String make = null;
|
||||||
|
private String model = null;
|
||||||
|
private String orientation = null;
|
||||||
|
private String whiteBalance = null;
|
||||||
|
|
||||||
|
private ExifInterface inFile = null;
|
||||||
|
private ExifInterface outFile = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The file before it is compressed
|
||||||
|
*
|
||||||
|
* @param filePath
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public void createInFile(String filePath) throws IOException {
|
||||||
|
this.inFile = new ExifInterface(filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The file after it has been compressed
|
||||||
|
*
|
||||||
|
* @param filePath
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public void createOutFile(String filePath) throws IOException {
|
||||||
|
this.outFile = new ExifInterface(filePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads all the EXIF data from the input file.
|
||||||
|
*/
|
||||||
|
public void readExifData() {
|
||||||
|
this.aperture = inFile.getAttribute(ExifInterface.TAG_APERTURE);
|
||||||
|
this.datetime = inFile.getAttribute(ExifInterface.TAG_DATETIME);
|
||||||
|
this.exposureTime = inFile.getAttribute(ExifInterface.TAG_EXPOSURE_TIME);
|
||||||
|
this.flash = inFile.getAttribute(ExifInterface.TAG_FLASH);
|
||||||
|
this.focalLength = inFile.getAttribute(ExifInterface.TAG_FOCAL_LENGTH);
|
||||||
|
this.gpsAltitude = inFile.getAttribute(ExifInterface.TAG_GPS_ALTITUDE);
|
||||||
|
this.gpsAltitudeRef = inFile.getAttribute(ExifInterface.TAG_GPS_ALTITUDE_REF);
|
||||||
|
this.gpsDateStamp = inFile.getAttribute(ExifInterface.TAG_GPS_DATESTAMP);
|
||||||
|
this.gpsLatitude = inFile.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
|
||||||
|
this.gpsLatitudeRef = inFile.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);
|
||||||
|
this.gpsLongitude = inFile.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
|
||||||
|
this.gpsLongitudeRef = inFile.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);
|
||||||
|
this.gpsProcessingMethod = inFile.getAttribute(ExifInterface.TAG_GPS_PROCESSING_METHOD);
|
||||||
|
this.gpsTimestamp = inFile.getAttribute(ExifInterface.TAG_GPS_TIMESTAMP);
|
||||||
|
this.iso = inFile.getAttribute(ExifInterface.TAG_ISO);
|
||||||
|
this.make = inFile.getAttribute(ExifInterface.TAG_MAKE);
|
||||||
|
this.model = inFile.getAttribute(ExifInterface.TAG_MODEL);
|
||||||
|
this.orientation = inFile.getAttribute(ExifInterface.TAG_ORIENTATION);
|
||||||
|
this.whiteBalance = inFile.getAttribute(ExifInterface.TAG_WHITE_BALANCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes the previously stored EXIF data to the output file.
|
||||||
|
*
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public void writeExifData() throws IOException {
|
||||||
|
// Don't try to write to a null file
|
||||||
|
if (this.outFile == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.aperture != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_APERTURE, this.aperture);
|
||||||
|
}
|
||||||
|
if (this.datetime != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_DATETIME, this.datetime);
|
||||||
|
}
|
||||||
|
if (this.exposureTime != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_EXPOSURE_TIME, this.exposureTime);
|
||||||
|
}
|
||||||
|
if (this.flash != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_FLASH, this.flash);
|
||||||
|
}
|
||||||
|
if (this.focalLength != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_FOCAL_LENGTH, this.focalLength);
|
||||||
|
}
|
||||||
|
if (this.gpsAltitude != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_GPS_ALTITUDE, this.gpsAltitude);
|
||||||
|
}
|
||||||
|
if (this.gpsAltitudeRef != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_GPS_ALTITUDE_REF, this.gpsAltitudeRef);
|
||||||
|
}
|
||||||
|
if (this.gpsDateStamp != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_GPS_DATESTAMP, this.gpsDateStamp);
|
||||||
|
}
|
||||||
|
if (this.gpsLatitude != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_GPS_LATITUDE, this.gpsLatitude);
|
||||||
|
}
|
||||||
|
if (this.gpsLatitudeRef != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, this.gpsLatitudeRef);
|
||||||
|
}
|
||||||
|
if (this.gpsLongitude != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, this.gpsLongitude);
|
||||||
|
}
|
||||||
|
if (this.gpsLongitudeRef != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, this.gpsLongitudeRef);
|
||||||
|
}
|
||||||
|
if (this.gpsProcessingMethod != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_GPS_PROCESSING_METHOD, this.gpsProcessingMethod);
|
||||||
|
}
|
||||||
|
if (this.gpsTimestamp != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_GPS_TIMESTAMP, this.gpsTimestamp);
|
||||||
|
}
|
||||||
|
if (this.iso != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_ISO, this.iso);
|
||||||
|
}
|
||||||
|
if (this.make != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_MAKE, this.make);
|
||||||
|
}
|
||||||
|
if (this.model != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_MODEL, this.model);
|
||||||
|
}
|
||||||
|
if (this.orientation != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_ORIENTATION, this.orientation);
|
||||||
|
}
|
||||||
|
if (this.whiteBalance != null) {
|
||||||
|
this.outFile.setAttribute(ExifInterface.TAG_WHITE_BALANCE, this.whiteBalance);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.outFile.saveAttributes();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOrientation() {
|
||||||
|
int o = Integer.parseInt(this.orientation);
|
||||||
|
|
||||||
|
if (o == ExifInterface.ORIENTATION_NORMAL) {
|
||||||
|
return 0;
|
||||||
|
} else if (o == ExifInterface.ORIENTATION_ROTATE_90) {
|
||||||
|
return 90;
|
||||||
|
} else if (o == ExifInterface.ORIENTATION_ROTATE_180) {
|
||||||
|
return 180;
|
||||||
|
} else if (o == ExifInterface.ORIENTATION_ROTATE_270) {
|
||||||
|
return 270;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void resetOrientation() {
|
||||||
|
this.orientation = "" + ExifInterface.ORIENTATION_NORMAL;
|
||||||
|
}
|
||||||
|
}
|
163
framework/src/org/apache/cordova/FileHelper.java
Normal file
163
framework/src/org/apache/cordova/FileHelper.java
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
/*
|
||||||
|
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;
|
||||||
|
|
||||||
|
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.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
@Deprecated // Deprecated in 3.1. To be removed in 4.0.
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
43
framework/src/org/apache/cordova/JSONUtils.java
Normal file
43
framework/src/org/apache/cordova/JSONUtils.java
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
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;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
|
||||||
|
@Deprecated // Deprecated in 3.1. To be removed in 4.0.
|
||||||
|
public class JSONUtils {
|
||||||
|
public static List<String> toStringList(JSONArray array) throws JSONException {
|
||||||
|
if(array == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
List<String> list = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (int i = 0; i < array.length(); i++) {
|
||||||
|
list.add(array.get(i).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user