updated from master

This commit is contained in:
Steven Gill 2013-06-10 17:15:05 -07:00
commit 9aaa152b9a
39 changed files with 1903 additions and 496 deletions

8
.reviewboardrc Normal file
View File

@ -0,0 +1,8 @@
#
# Settings for post-review (used for uploading diffs to reviews.apache.org).
#
GUESS_FIELDS = True
OPEN_BROWSER = True
TARGET_GROUPS = 'cordova'
REVIEWBOARD_URL = 'http://reviews.apache.org'

View File

@ -1,3 +1,23 @@
<!--
#
# 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.
#
-->
Cordova Android Cordova Android
=== ===
@ -14,23 +34,6 @@ Requires
- Java JDK 1.5 or greater - Java JDK 1.5 or greater
- Apache ANT 1.8.0 or greater - Apache ANT 1.8.0 or greater
- Android SDK [http://developer.android.com](http://developer.android.com) - Android SDK [http://developer.android.com](http://developer.android.com)
- Apache Commons Codec [http://commons.apache.org/codec/](http://commons.apache.org/codec/)
Test Requirements
---
- JUnit - [https://github.com/KentBeck/junit](https://github.com/KentBeck/junit)
Building
---
To create your `cordova.jar` file, copy the commons codec:
mv commons-codec-1.7.jar framework/libs
then run in the framework directory:
android update project -p . -t android-17
ant jar
Cordova Android Developer Tools Cordova Android Developer Tools
@ -93,6 +96,18 @@ Importing a Cordova Android Project into Eclipse
5. Right click on the project root: Run as > Run Configurations 5. Right click on the project root: Run as > Run Configurations
6. Click on the Target tab and select Manual (this way you can choose the emulator or device to build to) 6. Click on the Target tab and select Manual (this way you can choose the emulator or device to build to)
Building without the Tooling
---
Note: The Developer Tools handle this. This is only to be done if the tooling fails, or if
you are developing directly against the framework.
To create your `cordova.jar` file, run in the framework directory:
android update project -p . -t android-17
ant jar
Running Tests Running Tests
---- ----
Please see details under test/README.md. Please see details under test/README.md.
@ -101,5 +116,5 @@ Further Reading
--- ---
- [http://developer.android.com](http://developer.android.com) - [http://developer.android.com](http://developer.android.com)
- [http://incubator.apache.org/cordova/](http://incubator.apache.org/cordova/) - [http://cordova.apache.org/](http://cordova.apache.org)
- [http://wiki.apache.org/cordova/](http://wiki.apache.org/cordova/) - [http://wiki.apache.org/cordova/](http://wiki.apache.org/cordova/)

View File

@ -1,3 +1,20 @@
:: 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.
@ECHO OFF @ECHO OFF
SET full_path=%~dp0 SET full_path=%~dp0
IF EXIST %full_path%check_reqs.js ( IF EXIST %full_path%check_reqs.js (

View File

@ -99,16 +99,6 @@ then
# update the cordova-android framework for the desired target # update the cordova-android framework for the desired target
"$ANDROID_BIN" update project --target $TARGET --path "$BUILD_PATH"/framework &> /dev/null "$ANDROID_BIN" update project --target $TARGET --path "$BUILD_PATH"/framework &> /dev/null
if [ ! -e "$BUILD_PATH"/framework/libs/commons-codec-1.7.jar ]; then
# Use curl to get the jar (TODO: Support Apache Mirrors)
curl -OL http://archive.apache.org/dist/commons/codec/binaries/commons-codec-1.7-bin.zip &> /dev/null
unzip commons-codec-1.7-bin.zip &> /dev/null
mkdir -p "$BUILD_PATH"/framework/libs
cp commons-codec-1.7/commons-codec-1.7.jar "$BUILD_PATH"/framework/libs
# cleanup yo
rm commons-codec-1.7-bin.zip && rm -rf commons-codec-1.7
fi
# compile cordova.js and cordova.jar # compile cordova.js and cordova.jar
pushd "$BUILD_PATH"/framework > /dev/null pushd "$BUILD_PATH"/framework > /dev/null
ant jar > /dev/null ant jar > /dev/null
@ -153,6 +143,7 @@ cp "$BUILD_PATH"/bin/templates/cordova/build "$PROJECT_PATH"/cordova/build
cp "$BUILD_PATH"/bin/templates/cordova/clean "$PROJECT_PATH"/cordova/clean cp "$BUILD_PATH"/bin/templates/cordova/clean "$PROJECT_PATH"/cordova/clean
cp "$BUILD_PATH"/bin/templates/cordova/log "$PROJECT_PATH"/cordova/log cp "$BUILD_PATH"/bin/templates/cordova/log "$PROJECT_PATH"/cordova/log
cp "$BUILD_PATH"/bin/templates/cordova/run "$PROJECT_PATH"/cordova/run cp "$BUILD_PATH"/bin/templates/cordova/run "$PROJECT_PATH"/cordova/run
cp "$BUILD_PATH"/bin/templates/cordova/version "$PROJECT_PATH"/cordova/version
cp "$BUILD_PATH"/bin/templates/cordova/lib/cordova "$PROJECT_PATH"/cordova/lib/cordova cp "$BUILD_PATH"/bin/templates/cordova/lib/cordova "$PROJECT_PATH"/cordova/lib/cordova
cp "$BUILD_PATH"/bin/templates/cordova/lib/install-device "$PROJECT_PATH"/cordova/lib/install-device cp "$BUILD_PATH"/bin/templates/cordova/lib/install-device "$PROJECT_PATH"/cordova/lib/install-device
cp "$BUILD_PATH"/bin/templates/cordova/lib/install-emulator "$PROJECT_PATH"/cordova/lib/install-emulator cp "$BUILD_PATH"/bin/templates/cordova/lib/install-emulator "$PROJECT_PATH"/cordova/lib/install-emulator

View File

@ -120,46 +120,6 @@ function cleanup() {
} }
} }
function downloadCommonsCodec() {
if (!fso.FileExists(ROOT + '\\framework\\libs\\commons-codec-1.7.jar')) {
// We need the .jar
var url = 'http://archive.apache.org/dist/commons/codec/binaries/commons-codec-1.7-bin.zip';
var libsPath = ROOT + '\\framework\\libs';
var savePath = libsPath + '\\commons-codec-1.7-bin.zip';
if (!fso.FileExists(savePath)) {
if(!fso.FolderExists(ROOT + '\\framework\\libs')) {
fso.CreateFolder(libsPath);
}
// We need the zip to get the jar
var xhr = WScript.CreateObject('MSXML2.XMLHTTP');
xhr.open('GET', url, false);
xhr.send();
if (xhr.status == 200) {
var stream = WScript.CreateObject('ADODB.Stream');
stream.Open();
stream.Type = 1;
stream.Write(xhr.ResponseBody);
stream.Position = 0;
stream.SaveToFile(savePath);
stream.Close();
} else {
Log('Could not retrieve the commons-codec. Please download it yourself and put into the framework/libs directory. This process may fail now. Sorry.');
}
}
var app = WScript.CreateObject('Shell.Application');
var source = app.NameSpace(savePath).Items();
var target = app.NameSpace(ROOT + '\\framework\\libs');
target.CopyHere(source, 256);
// Move the jar into libs
fso.MoveFile(ROOT + '\\framework\\libs\\commons-codec-1.7\\commons-codec-1.7.jar', ROOT + '\\framework\\libs\\commons-codec-1.7.jar');
// Clean up
fso.DeleteFile(ROOT + '\\framework\\libs\\commons-codec-1.7-bin.zip');
fso.DeleteFolder(ROOT + '\\framework\\libs\\commons-codec-1.7', true);
}
}
// working dir // working dir
var ROOT = WScript.ScriptFullName.split('\\bin\\create.js').join(''); var ROOT = WScript.ScriptFullName.split('\\bin\\create.js').join('');
if (args.Count() > 0) { if (args.Count() > 0) {
@ -206,8 +166,6 @@ if (!fso.FileExists(ROOT+'\\cordova-'+VERSION+'.jar') &&
Log("Building jar and js files..."); Log("Building jar and js files...");
// update the cordova framework project to a target that exists on this machine // update the cordova framework project to a target that exists on this machine
exec('android.bat update project --target "'+TARGET+'" --path "'+ROOT+'\\framework"'); exec('android.bat update project --target "'+TARGET+'" --path "'+ROOT+'\\framework"');
// pull down commons codec if necessary
downloadCommonsCodec();
exec('ant.bat -f "'+ ROOT +'\\framework\\build.xml" jar'); exec('ant.bat -f "'+ ROOT +'\\framework\\build.xml" jar');
} }

View File

@ -1,2 +1,18 @@
:: 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.
@ECHO OFF @ECHO OFF
%~dp0\cordova.bat build %* %~dp0\cordova.bat build %*

View File

@ -1,2 +1,18 @@
:: 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.
@ECHO OFF @ECHO OFF
%~dp0\cordova.bat clean %* %~dp0\cordova.bat clean %*

View File

@ -1,5 +1,3 @@
@ECHO OFF
GOTO BEGIN
:: Licensed to the Apache Software Foundation (ASF) under one :: Licensed to the Apache Software Foundation (ASF) under one
:: or more contributor license agreements. See the NOTICE file :: or more contributor license agreements. See the NOTICE file
:: distributed with this work for additional information :: distributed with this work for additional information
@ -16,7 +14,7 @@ GOTO BEGIN
:: KIND, either express or implied. See the License for the :: KIND, either express or implied. See the License for the
:: specific language governing permissions and limitations :: specific language governing permissions and limitations
:: under the License. :: under the License.
:BEGIN @ECHO OFF
IF NOT DEFINED JAVA_HOME GOTO MISSING IF NOT DEFINED JAVA_HOME GOTO MISSING
FOR %%X in (java.exe ant.bat android.bat) do ( FOR %%X in (java.exe ant.bat android.bat) do (
SET FOUND=%%~$PATH:X SET FOUND=%%~$PATH:X

View File

@ -1,3 +1,19 @@
:: 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.
@ECHO OFF @ECHO OFF
SET full_path=%~dp0 SET full_path=%~dp0
IF EXIST %full_path%cordova.js ( IF EXIST %full_path%cordova.js (

View File

@ -1,3 +1,19 @@
:: 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.
@ECHO OFF @ECHO OFF
SET full_path=%~dp0 SET full_path=%~dp0
IF EXIST %full_path%cordova.js ( IF EXIST %full_path%cordova.js (

View File

@ -1,3 +1,19 @@
:: 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.
@ECHO OFF @ECHO OFF
SET full_path=%~dp0 SET full_path=%~dp0
IF EXIST %full_path%cordova.js ( IF EXIST %full_path%cordova.js (

View File

@ -1,3 +1,19 @@
:: 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.
@ECHO OFF @ECHO OFF
SET full_path=%~dp0 SET full_path=%~dp0
IF EXIST %full_path%cordova.js ( IF EXIST %full_path%cordova.js (

View File

@ -1,3 +1,19 @@
:: 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.
@ECHO OFF @ECHO OFF
SET full_path=%~dp0 SET full_path=%~dp0
IF EXIST %full_path%cordova.js ( IF EXIST %full_path%cordova.js (

View File

@ -1,3 +1,19 @@
:: 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.
@ECHO OFF @ECHO OFF
SET full_path=%~dp0 SET full_path=%~dp0
IF EXIST %full_path%cordova.js ( IF EXIST %full_path%cordova.js (

View File

@ -1,2 +1,18 @@
:: 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.
@ECHO OFF @ECHO OFF
%~dp0\cordova.bat log %* %~dp0\cordova.bat log %*

View File

@ -1,2 +1,18 @@
:: 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.
@ECHO OFF @ECHO OFF
%~dp0\cordova.bat run %* %~dp0\cordova.bat run %*

View File

@ -24,7 +24,7 @@ PROJECT_PATH="$(dirname "$CORDOVA_PATH")"
VERSION_FILE_PATH="$PROJECT_PATH/assets/www/cordova.js" VERSION_FILE_PATH="$PROJECT_PATH/assets/www/cordova.js"
if [ -f "$VERSION_FILE_PATH" ]; then if [ -f "$VERSION_FILE_PATH" ]; then
JSVersion=$(sed -n '2,2p' assets/www/cordova.js) JSVersion=$(sed -n '2,2p' $VERSION_FILE_PATH)
echo $JSVersion | sed -e 's/\/\/ //'| cut -f 1 -d '-' echo $JSVersion | sed -e 's/\/\/ //'| cut -f 1 -d '-'
else else
echo "The file \"$VERSION_FILE_PATH\" does not exist." echo "The file \"$VERSION_FILE_PATH\" does not exist."

View File

@ -45,9 +45,9 @@ fi
# cleanup after exit and/or on error # cleanup after exit and/or on error
function on_exit { function on_exit {
if [ -f "$BUILD_PATH"/framework/assets/www/cordova-$VERSION.js ] if [ -f "$BUILD_PATH"/framework/assets/www/cordova.js ]
then then
rm "$BUILD_PATH"/framework/assets/www/cordova-$VERSION.js rm "$BUILD_PATH"/framework/assets/www/cordova.js
fi fi
if [ -f "$BUILD_PATH"/framework/cordova-$VERSION.jar ] if [ -f "$BUILD_PATH"/framework/cordova-$VERSION.jar ]
then then
@ -64,8 +64,6 @@ function createAppInfoJar {
function on_error { function on_error {
echo "An unexpected error occurred: $previous_command exited with $?" echo "An unexpected error occurred: $previous_command exited with $?"
echo "Deleting project..."
[ -d "$PROJECT_PATH" ] && rm -rf "$PROJECT_PATH"
exit 1 exit 1
} }
@ -122,10 +120,10 @@ fi
# copy cordova.js, cordova.jar and res/xml # copy cordova.js, cordova.jar and res/xml
if [ -d "$BUILD_PATH"/framework ] if [ -d "$BUILD_PATH"/framework ]
then then
cp "$BUILD_PATH"/framework/assets/www/cordova-$VERSION.js "$PROJECT_PATH"/assets/www/cordova-$VERSION.js cp "$BUILD_PATH"/framework/assets/www/cordova.js "$PROJECT_PATH"/assets/www/cordova.js
cp "$BUILD_PATH"/framework/cordova-$VERSION.jar "$PROJECT_PATH"/libs/cordova-$VERSION.jar cp "$BUILD_PATH"/framework/cordova-$VERSION.jar "$PROJECT_PATH"/libs/cordova-$VERSION.jar
else else
cp "$BUILD_PATH"/cordova-$VERSION.js "$PROJECT_PATH"/assets/www/cordova-$VERSION.js cp "$BUILD_PATH"/cordova.js "$PROJECT_PATH"/assets/www/cordova.js
cp "$BUILD_PATH"/cordova-$VERSION.jar "$PROJECT_PATH"/libs/cordova-$VERSION.jar cp "$BUILD_PATH"/cordova-$VERSION.jar "$PROJECT_PATH"/libs/cordova-$VERSION.jar
fi fi

View File

@ -96,46 +96,6 @@ function cleanup() {
} }
} }
function downloadCommonsCodec() {
if (!fso.FileExists(ROOT + '\\framework\\libs\\commons-codec-1.7.jar')) {
// We need the .jar
var url = 'http://archive.apache.org/dist/commons/codec/binaries/commons-codec-1.7-bin.zip';
var libsPath = ROOT + '\\framework\\libs';
var savePath = libsPath + '\\commons-codec-1.7-bin.zip';
if (!fso.FileExists(savePath)) {
if(!fso.FolderExists(ROOT + '\\framework\\libs')) {
fso.CreateFolder(libsPath);
}
// We need the zip to get the jar
var xhr = WScript.CreateObject('MSXML2.XMLHTTP');
xhr.open('GET', url, false);
xhr.send();
if (xhr.status == 200) {
var stream = WScript.CreateObject('ADODB.Stream');
stream.Open();
stream.Type = 1;
stream.Write(xhr.ResponseBody);
stream.Position = 0;
stream.SaveToFile(savePath);
stream.Close();
} else {
WScript.Echo('Could not retrieve the commons-codec. Please download it yourself and put into the framework/libs directory. This process may fail now. Sorry.');
}
}
var app = WScript.CreateObject('Shell.Application');
var source = app.NameSpace(savePath).Items();
var target = app.NameSpace(ROOT + '\\framework\\libs');
target.CopyHere(source, 256);
// Move the jar into libs
fso.MoveFile(ROOT + '\\framework\\libs\\commons-codec-1.7\\commons-codec-1.7.jar', ROOT + '\\framework\\libs\\commons-codec-1.7.jar');
// Clean up
fso.DeleteFile(ROOT + '\\framework\\libs\\commons-codec-1.7-bin.zip');
fso.DeleteFolder(ROOT + '\\framework\\libs\\commons-codec-1.7', true);
}
}
var args = WScript.Arguments, PROJECT_PATH="example", var args = WScript.Arguments, PROJECT_PATH="example",
shell=WScript.CreateObject("WScript.Shell"); shell=WScript.CreateObject("WScript.Shell");
@ -161,8 +121,6 @@ if (!fso.FileExists(ROOT+'\\cordova-'+VERSION+'.jar') &&
WScript.Echo("Building jar and js files..."); WScript.Echo("Building jar and js files...");
// update the cordova framework project to a target that exists on this machine // update the cordova framework project to a target that exists on this machine
exec('android.bat update project --target '+TARGET+' --path '+ROOT+'\\framework'); exec('android.bat update project --target '+TARGET+' --path '+ROOT+'\\framework');
// pull down commons codec if necessary
downloadCommonsCodec();
exec('ant.bat -f \"'+ ROOT +'\\framework\\build.xml\" jar'); exec('ant.bat -f \"'+ ROOT +'\\framework\\build.xml\" jar');
} }

View File

@ -3,7 +3,6 @@
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/> <classpathentry kind="src" path="gen"/>
<classpathentry kind="lib" path="libs/commons-codec-1.7.jar"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry kind="output" path="bin/classes"/> <classpathentry kind="output" path="bin/classes"/>
</classpath> </classpath>

File diff suppressed because it is too large Load Diff

View File

@ -31,22 +31,6 @@
<fail message="The required minimum version of ant is 1.8.0, you have ${ant.version}" <fail message="The required minimum version of ant is 1.8.0, you have ${ant.version}"
unless="thisantversion" /> unless="thisantversion" />
<!-- check that commons codec is available. You should copy the codec jar to
framework/libs, as it is not included in the Cordova distribution.
The name of the jar file in framework/libs does not matter. -->
<available classname="org.apache.commons.codec.binary.Base64"
property="exists.base64"
ignoresystemclasses="true">
<classpath>
<pathelement path="${classpath}" />
<fileset dir="libs">
<include name="*.jar" />
</fileset>
</classpath>
</available>
<fail message="You need to put a copy of Apache Commons Codec jar in the framework/libs directory"
unless="exists.base64" />
<!-- The local.properties file is created and updated by the 'android' <!-- The local.properties file is created and updated by the 'android'
tool. (For example "sdkdir/tools/android update project -p ." inside tool. (For example "sdkdir/tools/android update project -p ." inside
of this directory where the AndroidManifest.xml file exists. This of this directory where the AndroidManifest.xml file exists. This

View File

@ -7,6 +7,9 @@
to you under the Apache License, Version 2.0 (the to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at 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, Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

View File

@ -50,10 +50,9 @@ public class Config {
private static Config self = null; private static Config self = null;
public static void init(Activity action) { public static void init(Activity action) {
if (self == null) { //Just re-initialize this! Seriously, we lose this all the time
self = new Config(action); self = new Config(action);
} }
}
// Intended to be used for testing only; creates an empty configuration. // Intended to be used for testing only; creates an empty configuration.
public static void init() { public static void init() {

View File

@ -64,11 +64,10 @@ import android.widget.LinearLayout;
* As an example: * As an example:
* *
* package org.apache.cordova.examples; * package org.apache.cordova.examples;
* import android.app.Activity;
* import android.os.Bundle; * import android.os.Bundle;
* import org.apache.cordova.*; * import org.apache.cordova.*;
* *
* public class Examples extends DroidGap { * public class Example extends CordovaActivity {
* @Override * @Override
* public void onCreate(Bundle savedInstanceState) { * public void onCreate(Bundle savedInstanceState) {
* super.onCreate(savedInstanceState); * super.onCreate(savedInstanceState);
@ -77,9 +76,6 @@ import android.widget.LinearLayout;
* super.setStringProperty("loadingDialog", "Title,Message"); // show loading dialog * super.setStringProperty("loadingDialog", "Title,Message"); // show loading dialog
* super.setStringProperty("errorUrl", "file:///android_asset/www/error.html"); // if error loading file in super.loadUrl(). * super.setStringProperty("errorUrl", "file:///android_asset/www/error.html"); // if error loading file in super.loadUrl().
* *
* // Initialize activity
* super.init();
*
* // Clear cache if you want * // Clear cache if you want
* super.appView.clearCache(true); * super.appView.clearCache(true);
* *
@ -121,7 +117,7 @@ import android.widget.LinearLayout;
* Cordova.xml configuration: * Cordova.xml configuration:
* Cordova uses a configuration file at res/xml/cordova.xml to specify the following settings. * Cordova uses a configuration file at res/xml/cordova.xml to specify the following settings.
* *
* Approved list of URLs that can be loaded into DroidGap * Approved list of URLs that can be loaded into Cordova
* <access origin="http://server regexp" subdomains="true" /> * <access origin="http://server regexp" subdomains="true" />
* Log level: ERROR, WARN, INFO, DEBUG, VERBOSE (default=ERROR) * Log level: ERROR, WARN, INFO, DEBUG, VERBOSE (default=ERROR)
* <log level="DEBUG" /> * <log level="DEBUG" />
@ -138,7 +134,7 @@ import android.widget.LinearLayout;
* </plugins> * </plugins>
*/ */
public class CordovaActivity extends Activity implements CordovaInterface { public class CordovaActivity extends Activity implements CordovaInterface {
public static String TAG = "DroidGap"; public static String TAG = "CordovaActivity";
// The webview for our app // The webview for our app
protected CordovaWebView appView; protected CordovaWebView appView;
@ -263,7 +259,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
Config.init(this); Config.init(this);
LOG.d(TAG, "DroidGap.onCreate()"); LOG.d(TAG, "CordovaActivity.onCreate()");
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if(savedInstanceState != null) if(savedInstanceState != null)
@ -336,7 +332,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
*/ */
@SuppressLint("NewApi") @SuppressLint("NewApi")
public void init(CordovaWebView webView, CordovaWebViewClient webViewClient, CordovaChromeClient webChromeClient) { public void init(CordovaWebView webView, CordovaWebViewClient webViewClient, CordovaChromeClient webChromeClient) {
LOG.d(TAG, "DroidGap.init()"); LOG.d(TAG, "CordovaActivity.init()");
// Set up web container // Set up web container
this.appView = webView; this.appView = webView;
@ -599,7 +595,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
* @param value * @param value
*/ */
public void setBooleanProperty(String name, boolean value) { public void setBooleanProperty(String name, boolean value) {
Log.d(TAG, "Setting boolean properties in DroidGap will be deprecated in 3.0 on July 2013, please use config.xml"); Log.d(TAG, "Setting boolean properties in CordovaActivity will be deprecated in 3.0 on July 2013, please use config.xml");
this.getIntent().putExtra(name, value); this.getIntent().putExtra(name, value);
} }
@ -610,7 +606,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
* @param value * @param value
*/ */
public void setIntegerProperty(String name, int value) { public void setIntegerProperty(String name, int value) {
Log.d(TAG, "Setting integer properties in DroidGap will be deprecated in 3.1 on August 2013, please use config.xml"); Log.d(TAG, "Setting integer properties in CordovaActivity will be deprecated in 3.1 on August 2013, please use config.xml");
this.getIntent().putExtra(name, value); this.getIntent().putExtra(name, value);
} }
@ -621,7 +617,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
* @param value * @param value
*/ */
public void setStringProperty(String name, String value) { public void setStringProperty(String name, String value) {
Log.d(TAG, "Setting string properties in DroidGap will be deprecated in 3.0 on July 2013, please use config.xml"); Log.d(TAG, "Setting string properties in CordovaActivity will be deprecated in 3.0 on July 2013, please use config.xml");
this.getIntent().putExtra(name, value); this.getIntent().putExtra(name, value);
} }
@ -632,7 +628,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
* @param value * @param value
*/ */
public void setDoubleProperty(String name, double value) { public void setDoubleProperty(String name, double value) {
Log.d(TAG, "Setting double properties in DroidGap will be deprecated in 3.0 on July 2013, please use config.xml"); Log.d(TAG, "Setting double properties in CordovaActivity will be deprecated in 3.0 on July 2013, please use config.xml");
this.getIntent().putExtra(name, value); this.getIntent().putExtra(name, value);
} }
@ -716,7 +712,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
* The final call you receive before your activity is destroyed. * The final call you receive before your activity is destroyed.
*/ */
public void onDestroy() { public void onDestroy() {
LOG.d(TAG, "onDestroy()"); LOG.d(TAG, "CordovaActivity.onDestroy()");
super.onDestroy(); super.onDestroy();
// hide the splash screen to avoid leaking a window // hide the splash screen to avoid leaking a window
@ -856,18 +852,13 @@ public class CordovaActivity extends Activity implements CordovaInterface {
mUploadMessage = null; mUploadMessage = null;
} }
CordovaPlugin callback = this.activityResultCallback; CordovaPlugin callback = this.activityResultCallback;
if(callback == null) if(callback == null && initCallbackClass != null) {
{ // The application was restarted, but had defined an initial callback
if(initCallbackClass != null) // before being shut down.
{
this.activityResultCallback = appView.pluginManager.getPlugin(initCallbackClass); this.activityResultCallback = appView.pluginManager.getPlugin(initCallbackClass);
callback = activityResultCallback; callback = this.activityResultCallback;
LOG.d(TAG, "We have a callback to send this result to");
callback.onActivityResult(requestCode, resultCode, intent);
} }
} if(callback != null) {
else
{
LOG.d(TAG, "We have a callback to send this result to"); LOG.d(TAG, "We have a callback to send this result to");
callback.onActivityResult(requestCode, resultCode, intent); callback.onActivityResult(requestCode, resultCode, intent);
} }
@ -961,7 +952,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
} }
/* /*
* Hook in DroidGap for menu plugins * Hook in Cordova for menu plugins
* *
*/ */
@Override @Override
@ -1000,7 +991,7 @@ public class CordovaActivity extends Activity implements CordovaInterface {
* @param url The url to load. * @param url The url to load.
* @param openExternal Load url in browser instead of Cordova webview. * @param openExternal Load url in browser instead of Cordova webview.
* @param clearHistory Clear the history stack, so new page becomes top of history * @param clearHistory Clear the history stack, so new page becomes top of history
* @param params DroidGap parameters for new app * @param params Parameters for new app
*/ */
public void showWebPage(String url, boolean openExternal, boolean clearHistory, HashMap<String, Object> params) { public void showWebPage(String url, boolean openExternal, boolean clearHistory, HashMap<String, Object> params) {
if (this.appView != null) { if (this.appView != null) {

View File

@ -222,6 +222,7 @@ public class CordovaChromeClient extends WebChromeClient {
result.confirm(r == null ? "" : r); result.confirm(r == null ? "" : r);
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
return false;
} }
} }
@ -286,7 +287,7 @@ public class CordovaChromeClient extends WebChromeClient {
public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize,
long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater)
{ {
LOG.d(TAG, "DroidGap: onExceededDatabaseQuota estimatedSize: %d currentQuota: %d totalUsedQuota: %d", estimatedSize, currentQuota, totalUsedQuota); LOG.d(TAG, "onExceededDatabaseQuota estimatedSize: %d currentQuota: %d totalUsedQuota: %d", estimatedSize, currentQuota, totalUsedQuota);
if (estimatedSize < MAX_QUOTA) if (estimatedSize < MAX_QUOTA)
{ {

View File

@ -485,7 +485,7 @@ public class CordovaWebView extends WebView {
// If first page, then show splashscreen // If first page, then show splashscreen
else { else {
LOG.d(TAG, "DroidGap.loadUrl(%s, %d)", url, time); LOG.d(TAG, "loadUrlIntoView(%s, %d)", url, time);
// Send message to show splashscreen now if desired // Send message to show splashscreen now if desired
this.postMessage("splashscreen", "show"); this.postMessage("splashscreen", "show");
@ -555,7 +555,7 @@ public class CordovaWebView extends WebView {
* @param url The url to load. * @param url The url to load.
* @param openExternal Load url in browser instead of Cordova webview. * @param openExternal Load url in browser instead of Cordova webview.
* @param clearHistory Clear the history stack, so new page becomes top of history * @param clearHistory Clear the history stack, so new page becomes top of history
* @param params DroidGap parameters for new app * @param params Parameters for new app
*/ */
public void showWebPage(String url, boolean openExternal, boolean clearHistory, HashMap<String, Object> params) { public void showWebPage(String url, boolean openExternal, boolean clearHistory, HashMap<String, Object> params) {
LOG.d(TAG, "showWebPage(%s, %b, %b, HashMap", url, openExternal, clearHistory); LOG.d(TAG, "showWebPage(%s, %b, %b, HashMap", url, openExternal, clearHistory);
@ -601,7 +601,7 @@ public class CordovaWebView extends WebView {
/** /**
* Check configuration parameters from Config. * Check configuration parameters from Config.
* Approved list of URLs that can be loaded into DroidGap * Approved list of URLs that can be loaded into Cordova
* <access origin="http://server regexp" subdomains="true" /> * <access origin="http://server regexp" subdomains="true" />
* Log level: ERROR, WARN, INFO, DEBUG, VERBOSE (default=ERROR) * Log level: ERROR, WARN, INFO, DEBUG, VERBOSE (default=ERROR)
* <log level="DEBUG" /> * <log level="DEBUG" />

View File

@ -101,7 +101,7 @@ public class Device extends CordovaPlugin {
/** /**
* Listen for telephony events: RINGING, OFFHOOK and IDLE * Listen for telephony events: RINGING, OFFHOOK and IDLE
* Send these events to all plugins using * Send these events to all plugins using
* DroidGap.onMessage("telephone", "ringing" | "offhook" | "idle") * CordovaActivity.onMessage("telephone", "ringing" | "offhook" | "idle")
*/ */
private void initTelephonyReceiver() { private void initTelephonyReceiver() {
IntentFilter intentFilter = new IntentFilter(); IntentFilter intentFilter = new IntentFilter();

View File

@ -26,11 +26,10 @@ import org.apache.cordova.api.CordovaInterface;
import org.apache.cordova.api.LOG; import org.apache.cordova.api.LOG;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.net.URLConnection;
import java.util.Locale;
public class FileHelper { public class FileHelper {
private static final String LOG_TAG = "FileUtils"; private static final String LOG_TAG = "FileUtils";
@ -91,65 +90,26 @@ public class FileHelper {
* @throws IOException * @throws IOException
*/ */
public static InputStream getInputStreamFromUriString(String uriString, CordovaInterface cordova) throws IOException { public static InputStream getInputStreamFromUriString(String uriString, CordovaInterface cordova) throws IOException {
if (uriString.startsWith("content:")) { if (uriString.startsWith("content")) {
Uri uri = Uri.parse(uriString); Uri uri = Uri.parse(uriString);
return cordova.getActivity().getContentResolver().openInputStream(uri); return cordova.getActivity().getContentResolver().openInputStream(uri);
} else if (uriString.startsWith("file:///android_asset/")) { } 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); Uri uri = Uri.parse(uriString);
String relativePath = uri.getPath().substring(15); String relativePath = uri.getPath().substring(15);
return cordova.getActivity().getAssets().open(relativePath); return cordova.getActivity().getAssets().open(relativePath);
} else if (uriString.startsWith("file://")) { } else {
return new FileInputStream(getRealPath(uriString, cordova)); return new FileInputStream(getRealPath(uriString, cordova));
}
} else { } else {
return null; return new FileInputStream(getRealPath(uriString, cordova));
} }
} }
public static OutputStream getOutputStreamFromUriString(String uriString, CordovaInterface cordova) throws FileNotFoundException{
if (uriString.startsWith("content:")) {
Uri uri = Uri.parse(uriString);
return cordova.getActivity().getContentResolver().openOutputStream(uri);
} else if (uriString.startsWith("file:") && !uriString.startsWith("file:///android_asset/")) {
String realPath = uriString.substring(7);
return new FileOutputStream(realPath);
} else {
return null;
}
}
/**
* Returns whether the uri can be written to by openeing a File to that uri
*
* @param the URI to test
* @return boolean indicating whether the uri is writable
*/
public static boolean isUriWritable(String uriString) {
String scheme = uriString.split(":")[0];
if(scheme.equals("file")){
// special case file
return !uriString.startsWith("file:///android_asset/");
}
return "content".equals(scheme);
}
/**
* Ensures the "file://" prefix exists for the given string
* If the given URI string already has a scheme, it is returned unchanged
*
* @param path - the path string to operate on
* @return a String with the "file://" scheme set
*/
public static String insertFileProtocol(String path) {
if(!path.matches("^[a-z0-9+.-]+:.*")){
//Ensure it is not a relative path
if(!path.startsWith("/")){
throw new IllegalArgumentException("Relative paths" + path + "are not allowed.");
}
path = "file://" + path;
}
return path;
}
/** /**
* Removes the "file://" prefix from the given URI string, if applicable. * 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. * If the given URI string doesn't have a "file://" prefix, it is returned unchanged.

View File

@ -22,8 +22,6 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import org.apache.cordova.api.CordovaInterface; import org.apache.cordova.api.CordovaInterface;
import org.apache.cordova.api.DataResource;
import org.apache.cordova.api.DataResourceContext;
import org.apache.cordova.api.LOG; import org.apache.cordova.api.LOG;
import android.annotation.TargetApi; import android.annotation.TargetApi;
@ -45,27 +43,41 @@ public class IceCreamCordovaWebViewClient extends CordovaWebViewClient {
@Override @Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) { public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
// We need to support the new DataResource intercepts without breaking the shouldInterceptRequest mechanism.
DataResource dataResource = DataResource.initiateNewDataRequestForUri(url, this.appView.pluginManager, cordova,
"WebViewClient.shouldInterceptRequest");
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 //Check if plugins intercept the request
WebResourceResponse ret = super.shouldInterceptRequest(view, url); WebResourceResponse ret = super.shouldInterceptRequest(view, url);
if(ret == null && (url.contains("?") || url.contains("#") || needsIceCreamSpaceInAssetUrlFix(url))){
if(ret == null) { ret = generateWebResourceResponse(url);
try {
InputStream is;
String mimeType;
if((is = dataResource.getInputStream()) != null && (mimeType = dataResource.getMimeType()) != null) {
// If we don't know how to open this file, let the browser continue loading
ret = new WebResourceResponse(mimeType, "UTF-8", is);
}
} catch(IOException e) {
LOG.e("IceCreamCordovaWebViewClient", "Error occurred while loading a file.", e);
}
} }
return ret; return ret;
} }
private WebResourceResponse generateWebResourceResponse(String url) {
if (url.startsWith("file:///android_asset/")) {
String mimetype = FileHelper.getMimeType(url, cordova);
try {
InputStream stream = FileHelper.getInputStreamFromUriString(url, cordova);
WebResourceResponse response = new WebResourceResponse(mimetype, "UTF-8", stream);
return response;
} catch (IOException e) {
LOG.e("generateWebResourceResponse", e.getMessage(), e);
}
}
return null;
}
private static boolean needsIceCreamSpaceInAssetUrlFix(String url) {
if (!url.contains("%20")){
return false;
}
switch(android.os.Build.VERSION.SDK_INT){
case android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH:
case android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1:
return true;
default:
return false;
}
}
} }

View File

@ -1,3 +1,21 @@
/*
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; package org.apache.cordova;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -1,3 +1,21 @@
/*
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.api; package org.apache.cordova.api;
import org.json.JSONArray; import org.json.JSONArray;

View File

@ -24,7 +24,7 @@ import android.content.Intent;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
/** /**
* The Cordova activity abstract class that is extended by DroidGap. * The Activity interface that is implemented by CordovaActivity.
* It is used to isolate plugin development, and remove dependency on entire Cordova library. * It is used to isolate plugin development, and remove dependency on entire Cordova library.
*/ */
public interface CordovaInterface { public interface CordovaInterface {

View File

@ -175,20 +175,6 @@ public class CordovaPlugin {
return null; return null;
} }
/**
* All plugins can now choose if they want to modify any uri requests. This includes all webview requests, opening of files, content uri's etc.
* This mechanism allows several plugins to modify the same request
* @param requestSource The source of the incoming request
*
* @param dataResource The resource to be loaded.
* @param dataResourceContext Context associated with the resource load
* @return Return a new DataResource if the plugin wants to assist in loading the request or null if it doesn't.
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public DataResource handleDataResourceRequest(DataResource dataResource, DataResourceContext dataResourceContext) {
return null;
}
/** /**
* Called when the WebView does a top-level navigation or refreshes. * Called when the WebView does a top-level navigation or refreshes.
* *

View File

@ -1,141 +0,0 @@
package org.apache.cordova.api;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.cordova.FileHelper;
import android.net.Uri;
/*
* All requests to access files, browser network requests etc have to go through this class.
*/
public class DataResource {
private CordovaInterface cordova;
// Uri of the request. Always required.
private Uri uri;
// Remaining fields may or may not be null
private InputStream is;
private OutputStream os;
private String mimeType;
private Boolean writable;
private File realFile;
private boolean retryIsLoad = true;
private boolean retryOsLoad = true;
private boolean retryMimeTypeLoad = true;
private boolean retryWritableLoad = true;
private boolean retryRealFileLoad = true;
public DataResource(CordovaInterface cordova, Uri uri) {
this.cordova = cordova;
this.uri = uri;
}
public DataResource(CordovaInterface cordova, Uri uri, InputStream is,
OutputStream os, String mimeType, boolean writable, File realFile) {
this(cordova, uri);
this.is = is;
this.mimeType = mimeType;
this.writable = Boolean.valueOf(writable);
this.realFile = realFile;
}
public Uri getUri() {
// Uri is always provided
return uri;
}
public InputStream getInputStream() throws IOException {
if(is == null && retryIsLoad) {
try {
is = FileHelper.getInputStreamFromUriString(uri.toString(), cordova);
} finally {
// We failed loading once, don't try loading anymore
if(is == null) {
retryIsLoad = false;
}
}
}
return is;
}
public OutputStream getOutputStream() throws FileNotFoundException {
if(os == null && retryOsLoad) {
try {
os = FileHelper.getOutputStreamFromUriString(uri.toString(), cordova);
} finally {
// We failed loading once, don't try loading anymore
if(os == null) {
retryOsLoad = false;
}
}
}
return os;
}
public String getMimeType() {
if(mimeType == null && retryMimeTypeLoad) {
try {
mimeType = FileHelper.getMimeType(uri.toString(), cordova);
} finally {
// We failed loading once, don't try loading anymore
if(mimeType == null) {
retryMimeTypeLoad = false;
}
}
}
return mimeType;
}
public boolean isWritable() {
if(writable == null && retryWritableLoad) {
try {
writable = FileHelper.isUriWritable(uri.toString());
} finally {
// We failed loading once, don't try loading anymore
if(writable == null) {
retryWritableLoad = false;
}
}
}
// default to false
return writable != null && writable.booleanValue();
}
public File getRealFile() {
if(realFile == null && retryRealFileLoad) {
try {
String realPath = FileHelper.getRealPath(uri, cordova);
if(realPath != null) {
realFile = new File(realPath);
}
} finally {
// We failed loading once, don't try loading anymore
if(realFile == null) {
retryRealFileLoad = false;
}
}
}
return realFile;
}
// static instantiation methods
public static DataResource initiateNewDataRequestForUri(String uriString, PluginManager pluginManager, CordovaInterface cordova, String requestSourceTag){
// if no protocol is specified, assume its file:
uriString = FileHelper.insertFileProtocol(uriString);
return initiateNewDataRequestForUri(Uri.parse(uriString), pluginManager, cordova, requestSourceTag);
}
public static DataResource initiateNewDataRequestForUri(Uri uri, PluginManager pluginManager, CordovaInterface cordova, String requestSourceTag){
return initiateNewDataRequestForUri(uri, pluginManager, cordova, new DataResourceContext(requestSourceTag));
}
public static DataResource initiateNewDataRequestForUri(String uriString, PluginManager pluginManager, CordovaInterface cordova, DataResourceContext dataResourceContext){
// if no protocol is specified, assume its file:
uriString = FileHelper.insertFileProtocol(uriString);
return initiateNewDataRequestForUri(Uri.parse(uriString), pluginManager, cordova, dataResourceContext);
}
public static DataResource initiateNewDataRequestForUri(Uri uri, PluginManager pluginManager, CordovaInterface cordova, DataResourceContext dataResourceContext){
DataResource dataResource = new DataResource(cordova, uri);
if (pluginManager != null) {
// get the resource as returned by plugins
dataResource = pluginManager.handleDataResourceRequestWithPlugins(dataResource, dataResourceContext);
}
return dataResource;
}
}

View File

@ -1,31 +0,0 @@
package org.apache.cordova.api;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
/*
* Some context information associated with a DataRequest.
*/
public class DataResourceContext {
// A random id that is unique for a particular request.
private int requestId;
// A tag associated with the source of this dataResourceContext
private String source;
// If needed, any data associated with core plugins can be a part of the context object
// If needed, any data associated with non core plugins should store data in a Map so as to not clutter the context object
private Map<String, Object> dataMap;
public DataResourceContext(String source) {
this.requestId = new Random().nextInt();
this.source = source;
this.dataMap = new HashMap<String, Object>();
}
public int getRequestId() {
return requestId;
}
public String getSource() {
return source;
}
public Map<String, Object> getDataMap() {
return dataMap;
}
}

View File

@ -54,7 +54,6 @@ public class PluginManager {
// Map URL schemes like foo: to plugins that want to handle those schemes // Map URL schemes like foo: to plugins that want to handle those schemes
// This would allow how all URLs are handled to be offloaded to a plugin // This would allow how all URLs are handled to be offloaded to a plugin
protected HashMap<String, String> urlMap = new HashMap<String, String>(); protected HashMap<String, String> urlMap = new HashMap<String, String>();
private int MAX_REPITIONS = 1000;
/** /**
* Constructor. * Constructor.
@ -401,32 +400,4 @@ public class PluginManager {
LOG.e(TAG, "https://git-wip-us.apache.org/repos/asf?p=incubator-cordova-android.git;a=blob;f=framework/res/xml/plugins.xml"); LOG.e(TAG, "https://git-wip-us.apache.org/repos/asf?p=incubator-cordova-android.git;a=blob;f=framework/res/xml/plugins.xml");
LOG.e(TAG, "====================================================================================="); LOG.e(TAG, "=====================================================================================");
} }
/**
* Called when the any resource is going to be loaded - either from the webview, files or any other resource
*
*
* @param dataResource The resource request to be loaded.
* @param dataResourceContext The context of the dataResource request
* @return Return the resource request that will be loaded. The returned request may be modified or unchanged.
*/
public DataResource handleDataResourceRequestWithPlugins(DataResource dataResource, DataResourceContext dataResourceContext){
int repetitions = 0;
boolean requestModified = true;
while(requestModified && repetitions < MAX_REPITIONS) {
requestModified = false;
repetitions ++;
for (PluginEntry entry : this.entries.values()) {
if (entry.plugin != null) {
DataResource ret = entry.plugin.handleDataResourceRequest(dataResource, dataResourceContext);
if(ret != null) {
dataResource = ret;
requestModified = true;
break;
}
}
}
}
return dataResource;
}
} }

View File

@ -1,3 +1,23 @@
<!--
#
# 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.
#
-->
# Android Native Tests # # Android Native Tests #
These tests are designed to verify Android native features and other Android specific features. These tests are designed to verify Android native features and other Android specific features.

View File

@ -1,4 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<widget xmlns = "http://www.w3.org/ns/widgets" <widget xmlns = "http://www.w3.org/ns/widgets"
id = "io.cordova.helloCordova" id = "io.cordova.helloCordova"
version = "2.0.0"> version = "2.0.0">