Compare commits

...

1507 Commits

Author SHA1 Message Date
Steve Gill
6b7eaf2386 Set VERSION to 4.0.1 (via coho) 2015-05-08 15:33:04 -07:00
Steve Gill
1d7c033e52 Update JS snapshot to version 4.0.1 (via coho) 2015-05-08 15:33:03 -07:00
Andrew Grieve
f224b1f2d4 CB-8834 Don't fail to install on VERSION_DOWNGRADE 2015-04-09 11:29:18 -04:00
Andrew Grieve
4ac6916dd0 Set VERSION to 4.0.0 (via coho) 2015-04-09 11:05:47 -04:00
Andrew Grieve
a31107e389 Update JS snapshot to version 4.0.0 (via coho) 2015-04-09 11:05:47 -04:00
Andrew Grieve
b0d5ffec8f Delete unused packate "which" from package.json 2015-04-09 11:03:36 -04:00
Andrew Grieve
09ff81c411 Add some missing license headers 2015-04-09 10:56:33 -04:00
Andrew Grieve
a0293578b1 CB-8829 Set targetSdk to 22 2015-04-08 21:34:15 -04:00
Andrew Grieve
4595403a99 CB-8828 Delete onScrollChanged event 2015-04-08 21:34:15 -04:00
Andrew Grieve
0f73884c8d CB-8827 Call onResume for plugins on start-up
As a result, simplifies CordovaActivity by removing the now unused "activityState" field
2015-04-08 21:06:23 -04:00
Andrew Grieve
2e9cbdcb0d Remove unused CordovaWebViewImpl parameter, and make pluginManager private
It was public by accident - with the final design leaving it public does
not help with backwards-compatibility.
2015-04-08 21:01:50 -04:00
Tony Homer
a652d892ca CB-8684 Add onStart/onStop hooks for plugins (close #173) 2015-04-08 20:33:31 -04:00
Andrew Grieve
581252febc CB-8814 Deprecate ScrollEvent 2015-04-07 21:15:33 -04:00
Andrew Grieve
b27d283f21 CB-8548 Fix keystore type detection (broken by 97718a0a25) 2015-04-07 20:36:13 -04:00
Andrew Grieve
f2d7c49acf Fix manual tests not finding activity plugin
Was broken by recent refactor: 5b87380749
2015-04-07 13:30:26 -04:00
Andrew Grieve
a397a23a9c Update Android Studio test instructions 2015-04-07 10:12:20 -04:00
Andrew Grieve
9f7e179288 Update test/README.md to say they are no longer in disrepair, and that robotium isn't used. 2015-04-07 09:52:12 -04:00
Nikhil Khandelwal
ad1c3d2438 CB-8484 Add signing flags to build and run scripts
Parameters for creating signed archives can be specified using command line or build.json file as part of the --buildConfig argument.
close #164
2015-04-01 19:53:56 -04:00
Andrew Grieve
51adf81918 CB-8781 Add building of .so files within libs/ to gradle rules 2015-04-01 13:33:48 -04:00
Andrew Grieve
97718a0a25 CB-8548 Allow ant-style property key for key.store.type
Other properties already allowed ant-style. This one was missed.
2015-03-31 20:42:26 -04:00
Serge Huijben
1aaba440b5 CB-8768 Fix onActivityResult called before plugins are loaded (after MainActivity gets killed)
situation: one of the plugins launches startActivityForResult and the Android OS decides to kill our MainActivity.
once the launched activity is fulfilled it comes back to our MainActivity, which has to be recreated first.
unfortunately Android calls onActivityResult before our Activity has fully loaded our installed plugins.

close #171
2015-03-31 13:58:22 -04:00
Andrew Grieve
b8f2b8948f Fix lint errors breaking travis CI 2015-03-31 10:07:27 -04:00
Andrew Grieve
d96d49329b CB-8717 Add note to releasenotes about removal of hidekeyboard and showkeyboard events 2015-03-30 10:33:29 -04:00
Andrew Grieve
4db421ca36 CB-8717 Add OkHttp removal to RELEASENOTES 2015-03-27 16:33:43 -04:00
Andrew Grieve
c3991c8164 CB-8717 Tweak RELEASENOTES.md 2015-03-27 16:30:21 -04:00
Jason Chase
e904bab206 CB-8717 Write cordova-android@4.0.0 release notes (close #167) 2015-03-27 16:21:17 -04:00
Serge Huijben
500ccd8e80 CB-8764 Store serviceName instead of class (close #169) 2015-03-27 10:15:48 -04:00
Serge Huijben
7cf7311a9d CB-8764 Save instanceState before calling super 2015-03-27 10:15:41 -04:00
Andrew Grieve
0669edddae Notify plugins of pause/resume before queing JS event (no-op)
This is actually already the order things happen in since JS events are async. Might as well be clearer about it.
2015-03-25 22:07:50 -04:00
Jason Chase
38a8d7742e CB-8715 Update comments to match whitelist code (close #166) 2015-03-25 09:34:13 -04:00
Tim Lancina
32e84d2316 CB-7085 Add onConfigurationChanged hook for plugins (close #165) 2015-03-24 13:36:25 -04:00
Joe Bowser
151b86cb7b CB-8735: Adding link as per Ian's suggestion 2015-03-23 15:54:05 -07:00
Joe Bowser
e4c9bebe34 CB-8735: Fixing the regex so that it's more compliant with Java package rules 2015-03-23 15:23:30 -07:00
Andrew Grieve
8d5cb00bec CB-8702 Add API for plugins to override shouldInterceptRequest with a stream 2015-03-18 11:02:27 -04:00
Andrew Grieve
15530a4820 Add CordovaPlugin.getServiceName() 2015-03-18 10:47:23 -04:00
Andrew Grieve
f6e56b345d CB-8699 Fix CordovaResourceApi copyResource creating zero-length files when src=uncompressed asset 2015-03-17 21:36:11 -04:00
Andrew Grieve
56d61eb44f Delete a couple of unreferenced .java files 2015-03-17 11:58:19 -04:00
Andrew Grieve
2103da7b9d CB-8693 Delete framework/res and framework/assets
They were being merged into apps unwantingly.
2015-03-17 11:56:02 -04:00
Andrew Grieve
679069729c CB-7747 When both allow-navigation and allow-external are set, navigate instead of opening external
Also: Move shouldOverrideUrlLoading logic into CordovaWebViewEngine.Client
2015-03-13 11:32:54 -04:00
Andrew Grieve
f764448ccc Tweak PluginManager.setPluginEntries() to create startup plugins when called post init() 2015-03-12 16:33:55 -04:00
Andrew Grieve
e1828696f7 CB-8295 Update app template with fix to CSP string 2015-03-11 21:14:39 -04:00
Joe Bowser
5b87380749 Updating use case to use ConfigXmlParser() instead of deprecated config class 2015-03-11 15:08:06 -07:00
Andrew Grieve
917d0dfc49 XmlPullParserFactory -> XmlPullParser in ConfigXmlParser
This allows clients to parse non-resourse XML
2015-03-06 16:16:06 -05:00
Andrew Grieve
191839f764 Tweak CSP of default template 2015-03-06 09:54:48 -05:00
Andrew Grieve
316cf057f3 Update project template with new whitelist defaults 2015-03-05 22:31:48 -05:00
Andrew Grieve
55be212594 CB-7747 Update default network whitelist to allow for ChromVox scripts 2015-03-05 21:38:21 -05:00
Andrew Grieve
489e63f8e7 CB-8608 Add blob: to default shouldAllowRequest policy 2015-03-04 11:09:38 -05:00
Andrew Grieve
62c081dc85 CB-8592 Fix NPE if lifecycle events reach CordovaWebView before init() has been called 2015-03-03 09:51:39 -05:00
Andrew Grieve
023ad9ddf8 CB-8510 Enforce that CordovaWebViewImpl is instantiated with an Engine
No reason to not enforce this.
2015-03-03 09:51:03 -05:00
Andrew Grieve
eccf486162 Add about:blank and data: to default shouldAllowNavigation() 2015-03-02 21:40:28 -05:00
Andrew Grieve
a6da46a00e CB-8510 Remove shouldOverrideUrlLoading from CordovaWebViewEngine.Client.
It's logic that's pretty webview-specific, so it doesn't make sense to
share.
2015-03-02 21:04:21 -05:00
Andrew Grieve
747d2c97cd CB-8588 Add CATEGORY_BROWSABLE to intents from showWebPage openExternal=true 2015-03-02 21:04:20 -05:00
Andrew Grieve
af2969dec5 CB-8587 Don't allow webview navigations within showWebPage that are not whitelisted 2015-03-02 21:04:20 -05:00
Andrew Grieve
53dba8678c Delete no longer relevant comments about <url-filter> 2015-03-02 20:43:10 -05:00
Andrew Grieve
afdac9b413 Split out shouldAllowBridgeAccess from shouldAllowNavigation
This will allow a plugin to be created that allows iframes to be
navigated to, but disallow them from accessing the bridge.

Note: This isn't a configuration that we're planning on supporting with
the default whitelist plugin, but still does make sense to enable for
the experts in the room
2015-03-02 20:40:08 -05:00
Andrew Grieve
1ad280db98 Add an isSecretEstablished() getter to CordovaBridge
Not being used, but might be of use to an Engine plugin or a Whitelist
plugin.
2015-03-02 20:37:33 -05:00
Andrew Grieve
035c3ad319 Simplify default navigation policy to allow navigations within /app_webview/
It's really on XHRs to it that are an issue.
2015-02-27 15:46:17 -05:00
Andrew Grieve
c237a1c0d2 Log a warning when a navigation is blocked by the whitelist 2015-02-27 15:45:37 -05:00
Andrew Grieve
f1d093548e Make ConfigXmlParser take a Context rather than Activity 2015-02-27 15:45:16 -05:00
Andrew Grieve
beab74adf5 CB-8548 Allow ant-style property keys in signing.properties files
Provides easier backwards compatibility
close #155
2015-02-25 15:41:58 -05:00
Nikhil Khandelwal
2a49e8a931 CB-8520 Fix for extra args being added twice for build command (close #159) 2015-02-25 14:28:06 -05:00
Andrew Grieve
395857c37c close #160 2015-02-25 14:27:40 -05:00
Andrew Grieve
9a34f25edc close #161 2015-02-25 14:27:18 -05:00
Andrew Grieve
0af02fb9ae close #161 2015-02-25 14:25:48 -05:00
Connor Pearson
dcff8794ad CB-7827 Add --activity-name for bin/create
Also adds in nopt
2015-02-25 14:23:26 -05:00
Andrew Grieve
1b4f5b13f1 CB-8548 Use debug-signing.properties and release-signing.properties when they exist 2015-02-25 14:16:29 -05:00
Andrew Grieve
3950818030 CB-8545 Don't add a layout as a parent of the WebView
Sanity checked mobilespec with --thirdpartyplugins that this doesn't
break any of them.
2015-02-25 12:27:48 -05:00
Andrew Grieve
d6da2ef096 CB-8510 Fix back button not exiting activity in manual tests 2015-02-25 12:27:06 -05:00
Andrew Grieve
455298d736 CB-8510 CB-7159 Fix background color manual test page not showing flash of green 2015-02-25 12:26:11 -05:00
Andrew Grieve
d99856c52b CB-8510 Move requestFocusFromTouch into createViews from init()
Makes more sense there since it's view-creation-related
2015-02-25 12:14:39 -05:00
Andrew Grieve
087ec11e6a CB-8510 Create a new abstraction for sharing common logic of WebView engines
Having CordovaWebViewImpl separate from CordovaWebViewEngine is helpful because
now each webview doesn't have to re-implement non-webview-specific
featrues. e.g.:
1. load timeout
2. keyboard events
3. showCustomView
4. lifecycle events

Moved AndroidWebView into its own package to ensure that it doesn't use
any package-private symbols (since plugins cannot use them).
2015-02-19 12:21:30 -05:00
Andrew Grieve
00c0a84e4e Remove unused imports from MainTestActivity 2015-02-19 11:33:32 -05:00
Andrew Grieve
be229b1ac6 Make ErrorUrlTest INVALID_URL point to an existing file to make it test the right thing 2015-02-19 11:32:54 -05:00
Andrew Grieve
8106981bb6 Extract alert, confirm, prompt Dialog logic into a helper for use by other engines 2015-02-19 10:43:25 -05:00
Andrew Grieve
de4d7cd10d Deprecate custom view methods in CordovaWebView.
They are just helper methods that plugins should just be implementing
for themselves.
2015-02-19 10:33:06 -05:00
Andrew Grieve
804dcac12f Address TODO: Move requestFocusFromTouch() to CordovaActivity rather than AndroidWebView 2015-02-19 10:32:29 -05:00
Andrew Grieve
fb0987b824 Delete some dead code. Add a license header. 2015-02-19 10:31:44 -05:00
Andrew Grieve
88f50a66ff Make showWebPage() take a Map instead of a HashMap 2015-02-19 10:30:26 -05:00
Andrew Grieve
7be600d8e9 Make cookieManager a field in AndroidCookieManager rather than using getInstance() every time 2015-02-19 10:28:18 -05:00
Andrew Grieve
11d6b8029f Remove explicit whitelisting of content: in CordovaBridge
It was redundant since we now check if the URL should be allowed to
be navigated to.
2015-02-19 10:06:36 -05:00
Andrew Grieve
f1d4c01190 Merge IceCreamCordovaWebViewClient into AndroidWebViewClient.
There was no reason to have it separate.
2015-02-19 10:03:50 -05:00
Andrew Grieve
c12d93e77f Move newly added should* methods of CordovaUriHelper into PluginManager
Doing this so that clients won't mistakenly call the wrong one.
2015-02-19 10:00:56 -05:00
Andrew Grieve
204130a598 Remove stale info from README.md (close #156) 2015-02-18 21:37:59 -05:00
Murat Sutunc
dbd45d4173 fix jshint errors (close #157) 2015-02-18 21:31:43 -05:00
Ian Clelland
7e0bfbbad2 Merge branch 'unplug-whitelist' 2015-02-18 09:37:00 -05:00
Andrew Grieve
db18e1480e CB-8469 Create gradle build files as part of create script
Makes project imporatable by Android Studio before first build
2015-02-12 16:15:43 -05:00
Andrew Grieve
9baa27508a Add back a test that url (and errorUrl) are not settable via Intent extras 2015-02-12 15:03:44 -05:00
Andrew Grieve
c3267def97 Revert "Reverting the refactor. I'd rather have 4 failures due to timing than tests completely disappear"
This reverts commit 390927772e.
2015-02-12 14:48:49 -05:00
Joe Bowser
390927772e Reverting the refactor. I'd rather have 4 failures due to timing than tests completely disappear 2015-02-11 14:28:50 -08:00
Ian Clelland
a8bec4ec9c Remove redundant whitelist checks 2015-02-11 16:19:54 -05:00
Ian Clelland
167e283450 Update native tests 2015-02-11 14:01:11 -05:00
Ian Clelland
0c3254fd48 Remove whitelist config.xml parsing 2015-02-11 14:01:11 -05:00
Ian Clelland
0faf2f0461 Remove whitelists from WebView classes 2015-02-11 14:01:11 -05:00
Ian Clelland
dd6e42aacc Remove unused Config methods (Breaking Change) 2015-02-11 14:01:11 -05:00
Ian Clelland
18e5e9dcc5 Refactor ConfigXmlParser to allow subclasses 2015-02-11 14:01:11 -05:00
Ian Clelland
c8f44ab460 Use /app_webview/ rather than app_webview to filter bad requests 2015-02-11 14:01:11 -05:00
Ian Clelland
ac1f9c790a Defer whitelist decisions to plugins
There is a default policy, which is implemented in the case where no plugins override any of the whitelist methods:
 * Error URLs must start with file://
 * Navigation is allowed to file:// and data: URLs which do not contain "app_webview"
 * External URLs do not launch intents
 * XHRs are allowed to file:// and data: URLs which do not contain "app_webview"
2015-02-11 14:01:11 -05:00
Ian Clelland
7533996fac Add hooks in CordovaPlugin and PluginManager for whitelist plugins
This adds three hooks to CordovaPlugin objects. In each case, a null
value can be returned to indicate "I don't care". This null value is
the default.

    public Boolean shouldAllowRequest(String url)
    public Boolean shouldAllowNavigation(String url)
    public Boolean shouldOpenExternalUrl(String url)
2015-02-11 10:03:34 -05:00
Andrew Grieve
1721571012 Delete unused field in CordovaActivity 2015-02-10 22:06:07 -05:00
Andrew Grieve
4358a04730 Big Refactor of integration tests: use locks rather than timeouts, deleted disabled tests, Use same activity for most tests 2015-02-10 22:04:42 -05:00
Andrew Grieve
c552d912a0 Add gradlew.bat to .gitignore 2015-02-10 20:14:05 -05:00
Steve Gill
ad7ce085f7 CB-8417 renamed platform_modules into cordova-js-src 2015-02-06 17:35:35 -08:00
Steve Gill
828edb3a43 CB-8417 moved platform specific js into platforms 2015-02-06 16:40:15 -08:00
Andrew Grieve
4cb64580fd Separate the registering of BridgeModes from NativeToJsMessageQueue
This makes the class usable no matter how a webview's bridge is
implemented under-the-hood.
This also deletes the PrivateApi bridge mode, which has never been a
good idea to use, and which we should replace with a Lollipop
"evaluateJavascript"-based bridge.
2015-02-06 14:03:10 -05:00
Andrew Grieve
5b2fa128a4 AndroidCookieManager: flush is a level 21 API. Add a missing API level guard 2015-02-06 13:50:03 -05:00
Andrew Grieve
b7abb64661 Make CoreAndroid package-private
Since we're renaming it anyways, makes sense to just remove it from the
public API.
2015-02-06 13:49:00 -05:00
Andrew Grieve
66424b7ed5 Update JS snapshot (was missing "CoreAndroid" name change) 2015-02-05 20:45:14 -05:00
Andrew Grieve
81dafb7b3f CB-8415 updated RELEASENOTES 2015-02-03 20:49:48 -05:00
Joe Bowser
cea81c2dc1 CB-8382: Fixed type mismatch that caused the build breakage 2015-02-03 17:24:00 -08:00
Joe Bowser
4b1e99ef93 Reverting the change to CordovaActivity.java for now until we fix the init() problem that appeared when fixing 3.7.0 bug 2015-02-03 17:01:04 -08:00
Andrew Grieve
83120a5bea CB-8382 Make CordovaActivity not implement CordovaInterface
Instead, use a CordovaInterfaceImpl class. This also makes it easier
for apps to implement the interface without extending CordovaActivity.
2015-02-03 16:27:16 -05:00
Andrew Grieve
20723896e1 CB-8411 Initialize plugins only after createViews() is called 2015-02-03 16:03:15 -05:00
Murat Sutunc
aed4859642 CB-8410 Fix all jshint issues for Android platform (close #153) 2015-02-03 15:21:57 -05:00
Murat Sutunc
d0ade1d190 CB-8410 Enable jshint for Android platform 2015-02-03 15:21:56 -05:00
Andrew Grieve
fb8e35bb44 Prune 3.7.0 RELEASENOTES to a more glanceable list 2015-02-03 14:47:42 -05:00
Andrew Grieve
ce351f5c38 CB-8390 Add Gradle support for Play Services and Support libraries 2015-02-02 23:26:53 -05:00
Andrew Grieve
26ee1c4547 CB-8389 Allow plugins to handle exit and onReceivedError messages before CordovaInterface
Also switches to LinkedHashMap for plugins so that activity can insert a
plugin and have it be the first one to receive messages
2015-01-30 11:59:30 -05:00
Andrew Grieve
bf327f3916 Allow cdvMinSdkVersion and cdvVersionCode to be set to ints (instead of just strings) 2015-01-30 11:42:56 -05:00
Andrew Grieve
e3dd6d8c88 CB-8387 Address TODO and have DisallowOverscroll preference set by AndroidWebView instead of CordovaActivity
Now the preference will work even when not using CordovaActivity
2015-01-30 11:18:41 -05:00
Andrew Grieve
137fe12c43 CB-8386 Don't fallback on system webview if custom webview fails to construct 2015-01-30 11:03:56 -05:00
Andrew Grieve
a2fed200fe CB-8378 Remove reference to LinearLayoutSoftKeyboardDetect from unit tests 2015-01-30 10:26:33 -05:00
Andrew Grieve
efeeef214b Paste in the command for downloading robotium in tests readme 2015-01-30 10:17:18 -05:00
Andrew Grieve
37617c67f8 CB-8378 Delete LinearLayoutSoftKeyboardDetect (hidekeyboard and showkeyboard events) 2015-01-29 15:13:58 -05:00
Joe Bowser
56f675f188 Updating RELASENOTES.md, this is in a weird spot, since you need the branch to exist to generate the notes
(This didn't get updated with the 3.7.0 release)
2015-01-29 09:08:55 -08:00
Andrew Grieve
7e7dc7694c CB-8373 Add gradle plugin includes based on project.properties (where plugman now puts them) 2015-01-28 16:27:05 -05:00
Darryl Pogue
8cf8da5776 CB-5059 Adds CookieManager abstraction for pluggable webviews (close #151)
Crosswalk and GeckoView implementations of CordovaWebView can provide
their own ICordovaCookieManager implementation for plugins to use.
2015-01-28 10:17:05 -05:00
Andrew Grieve
b59705bed4 CB-7947 Don't force-pauseTimers() for startActivityForResult 2015-01-26 21:26:47 -05:00
Andrew Grieve
3b909253bb Merge branch 'master' into 4.0.x (gradle plugin extension) 2015-01-26 16:28:31 -05:00
Andrew Grieve
98f90340f3 Make plugin .gradle extensions run at the same point as build-extras.gradle
This lets them change cdv* property defaults, and allows modifying
values at the end as well.
2015-01-26 16:26:57 -05:00
Andrew Grieve
a4c9bf7d30 CB-8358 Make --link an alias for --shared for create/update. Make it work with gradle 2015-01-26 10:07:14 -05:00
Marcel Kinard
f459eaa5ea Add missing license to gradle file. 2015-01-22 15:22:55 -05:00
Andrew Grieve
8d8b874c20 Merge branch 'master' into 4.0.x (about:blank)
Conflicts:
	framework/src/org/apache/cordova/CordovaWebView.java
2015-01-20 19:47:48 -05:00
shingotoda
ccceaeaca2 CB-8317 Make it work to load about:blank and to dispatch exit message (close #149) 2015-01-20 19:45:43 -05:00
Andrew Grieve
076e93184b Make unit tests compile on 4.0.x (couple APIs changed) 2015-01-20 15:03:46 -05:00
Andrew Grieve
c352b296da Merge branch 'master' into 4.0.x (gradlify tests)
Conflicts:
	test/androidTest/src/org/apache/cordova/test/junit/MenuTest.java
2015-01-20 14:55:44 -05:00
Andrew Grieve
9e04eec9dd Make BackButtonMultiPageTest tests not hang forever.
They still don't pass, but at least fail now.
2015-01-20 14:53:31 -05:00
Andrew Grieve
0e19f88a04 Make unit tests work with Gradle
Had to split the test app from the tests, since that's how gradle forces
you to do it.
2015-01-20 14:31:59 -05:00
Andrew Grieve
e788e8fa0f Delete test/ ant files and cordova scripts 2015-01-20 14:14:39 -05:00
Andrew Grieve
a56c406aa3 Made check_reqs script echo ANDROID_HOME and JAVA_HOME when run directly 2015-01-20 14:14:39 -05:00
Andrew Grieve
a3457d9408 CB-8026 Remove default target value from gradle file
Wasn't being used anyways, and it still referenced android-19
This also switches to using a Properties object rather than a RegEx
for parsing project.properties
2015-01-20 11:33:55 -05:00
Andrew Grieve
b69fed18e2 Move cordova.gradle from project template to CordovaLib
Make it easier to share with tests project.
Also, one less file in the project template is a good thing.
2015-01-20 11:04:40 -05:00
Andrew Grieve
2964aea447 gradle: Fix incorrect buildTools dependencies in framework's build.gradle
(although it didn't seem to hurt anything?)
2015-01-20 10:49:19 -05:00
Andrew Grieve
587488a1b1 Merge branch 'master' into 4.0.x (cert challenges)
Conflicts:
	framework/src/org/apache/cordova/AndroidWebViewClient.java
2015-01-19 22:22:02 -05:00
Marcus Pridham
623b394c83 CB-8328 Allow plugins to handle certificate challenges (close #150)
This is a new API for Lollipop
2015-01-19 22:17:39 -05:00
Andrew Grieve
e671ffdab1 Merge branch 'master' into 4.0.x (gradle fixes) 2015-01-19 22:04:10 -05:00
Andrew Grieve
92d1080b2f Adds cdvPrintProps gradle task: dumps out all cdv properties
Useful for debugging.
2015-01-19 21:59:02 -05:00
Andrew Grieve
893c0e9b67 CB-8255 Pass arch to gradle regardless of cdvBuildMultipleApks
This also pushes the "which target to build" logic into gradle, since
build.js doesn't actually know the value of `cdvBuildMultipleApks`.
2015-01-19 21:56:46 -05:00
Andrew Grieve
af60f71ea3 CB-8255 Fix cordova/build --gradleVar=--foo=bar stripping off =bar 2015-01-19 21:54:29 -05:00
Andrew Grieve
9a952f1004 Fix cordova/build not printing out all gradle args in console message 2015-01-19 21:53:08 -05:00
Andrew Grieve
3ec7dfff8b Fix cordova/run not finding apk when multi-arch is specified but only arch-independent apk exists 2015-01-19 21:51:57 -05:00
Andrew Grieve
d30a5e0388 Fix exception for unknown flag in cordova/run 2015-01-19 21:50:14 -05:00
Andrew Grieve
fcece7e189 Allow --ant, --gradle for cordova/run 2015-01-19 21:49:36 -05:00
Andrew Grieve
3949d9633c Merge branch 'master' into 4.0.x (file input, auth dialogs)
Conflicts:
	framework/src/org/apache/cordova/AndroidChromeClient.java
	framework/src/org/apache/cordova/CordovaActivity.java
	framework/src/org/apache/cordova/SplashScreenInternal.java
2015-01-19 16:34:06 -05:00
Andrew Grieve
62c1c5f38b CB-8017 Add support for <input type=file> for Lollipop
Also refactors a bit to remove related special-case code from CordovaActivity
2015-01-19 16:15:25 -05:00
Andrew Grieve
56204c5748 CB-8329 Cancel outstanding ActivityResult requests when a new startActivityForResult occurs 2015-01-19 16:13:48 -05:00
Andrew Grieve
34c163be88 CB-8280 android: Don't apply SplashScreenDelay when .show() is called explicitly 2015-01-19 13:42:11 -05:00
sgrebnov
11002d4a56 CB-8201 Add support for auth dialogs into Cordova Android 2015-01-16 13:06:10 +03:00
Bas Bosman
240f27ce97 CB-8314 Speed up Travis CI (close #148) 2015-01-15 20:36:30 -05:00
Andrew Grieve
5295be1c25 Revert "Delete VERSION file (superseded by package.json)"
This reverts commit 238a67af3a.

cordova-lib depends on the file:
0f5dbaffac/cordova-lib/src/cordova/platform.js (L495)
2015-01-13 15:35:25 -05:00
Andrew Grieve
238a67af3a Delete VERSION file (superseded by package.json) 2015-01-13 10:02:00 -05:00
Andrew Grieve
4382234676 Merge branch 'master' into 4.0.x (fix windows space-in-path bug)
close #147
Conflicts:
	VERSION
	bin/templates/cordova/version
	framework/assets/www/cordova.js
	framework/src/org/apache/cordova/CordovaWebView.java
	package.json
2015-01-13 10:01:31 -05:00
Murat Sutunc
8e5c93a31f CB-4914 Fix build whitespace issue 2015-01-13 09:59:29 -05:00
Joe Bowser
0e5d72dc5d Update JS snapshot to version 3.8.0-dev (via coho) 2015-01-12 14:55:49 -08:00
Joe Bowser
4b8069f5ec Set VERSION to 3.8.0-dev (via coho) 2015-01-12 14:55:48 -08:00
Andrew Grieve
a816a48416 Merge branch 'master' into 4.0.x (delete onDestroy)
Conflicts:
	framework/assets/www/cordova.js
	framework/src/org/apache/cordova/CordovaWebView.java
2015-01-12 10:58:00 -05:00
Jason Chase
5415440829 CB-8210 Remove unused onDestroy channel (close #146)
- Channel was defined as internal event and fired by javascript eval()
- Rather than change firing of event, simpler to remove as was not used
2015-01-12 10:50:36 -05:00
Joe Bowser
9668272b80 Merge branch 'master' into 4.0.x
* Fix CB-8062 on 4.0.x branch

Conflicts:
	framework/src/org/apache/cordova/CordovaWebView.java
2015-01-09 13:38:38 -08:00
Joe Bowser
15e19489e3 CB-8026: Bumping up Android Version and setting it up to allow third-party cookies. This might change later. 2015-01-09 11:31:29 -08:00
Andrew Grieve
2083f683ad Merge branch 'master' into 4.0.x (gradle properties)
Conflicts:
	bin/templates/cordova/lib/build.js
2015-01-08 15:43:22 -05:00
Andrew Grieve
c3610aa43c CB-8255 Use properties rather than environment variables for gradle settings 2015-01-08 15:26:24 -05:00
Andrew Grieve
df4fbc272a CB-8210 Update JS snapshot with 4.0.x-specific platformVersion to fix CoreAndroid vs App plugin name 2015-01-05 22:09:12 -05:00
Andrew Grieve
9698a995fb Merge branch 'master' into 4.0.x (drop events before startup) 2015-01-05 16:33:05 -05:00
Andrew Grieve
c1ac3aa483 CB-8210 Drop events from native that occur before start-up 2015-01-05 16:32:39 -05:00
Andrew Grieve
311bdbd360 Merge branch 'master' into 4.0.x (loadUrl->sendEvent)
Conflicts:
	framework/src/org/apache/cordova/CordovaWebView.java
2015-01-05 16:26:58 -05:00
Jason Chase
291f111913 CB-8210 Use PluginResult for various events from native (close #144)
- Change to send events via plugin message channel: various buttons, pause/resume
2015-01-05 16:15:17 -05:00
Andrew Grieve
95e10bdb9e Merge branch 'master' into 4.0.x (run --list) 2015-01-03 21:06:07 -05:00
Murat Sutunc
c2a6dcb6bd CB-8168 Add support for cordova/run --list (closes #139) 2015-01-03 21:05:52 -05:00
Andrew Grieve
61c4bb9888 Merge branch 'master' into 4.0.x (keyboard events via PluginResult)
Conflicts:
	framework/src/org/apache/cordova/CordovaWebView.java
2014-12-30 23:30:42 -05:00
Jason Chase
3439746645 CB-8210 Use PluginResult instead of sendJavascript() for keyboard events (close #142)
- Initialize a message channel for native -> Javascript in the core App plugin
- Change keyboard detection to send events via plugin message channel, instead
  using eval() (i.e. webView.sendJavascript())
2014-12-30 23:25:56 -05:00
Andrew Grieve
b10fe465ab Closing stale pull request: close #114 2014-12-30 23:20:52 -05:00
Andrew Grieve
c6b171ba95 CB-6630 Delete bundled (and outdated) copy of OkHttp
Those that want to use OkHttp can use a plugin.
2014-12-30 23:00:18 -05:00
Andrew Grieve
5a17d6cd5f Merge branch 'master' into 4.0.x (gradle - maven and CordovaLib dep) 2014-12-30 22:59:50 -05:00
Andrew Grieve
480af2644c CB-8228 Gradle: Allow plugins to use Maven dependencies 2014-12-30 22:57:53 -05:00
Andrew Grieve
ecd2e06883 CB-8229 Gradle: Add CordovaLib as a dependency to all plugin sub-projects 2014-12-30 22:56:43 -05:00
Andrew Grieve
4f3ae23170 Merge branch 'master' into 4.0.x (--minSdkVersion and --versionCode)
Conflicts:
	bin/templates/project/build.gradle
2014-12-24 13:35:39 -05:00
Andrew Grieve
7cfb33d0ef CB-7980 Add --minSdkVersion and --versionCode flags to cordova/build command
These are also exposed via environment variables: ANDROID_VERSION_CODE, ANDROID_MIN_SDK_VERSION
This also fixes build.gradle modifying the value set by ANDROID_VERSION_CODE when multi-apk is enabled (override should never be modified)
2014-12-23 16:26:43 -05:00
Mark Koudritsky
9224ab1592 CB-7980: Add 9 to versionCode for minSdk 20+ if not multiarch 2014-12-23 15:29:40 -05:00
Ian Clelland
a696ff37f1 Merge branch 'master' into 4.0.x (Plugin set multiarach) 2014-12-22 23:19:56 -05:00
fujunwei
931a996dab Allow plugins to set ext.multiarch to enable multiple APK building
The xwalk webView need build multiple apks by default after install
cordova-crosswalk-engine plugin, we can set ext.multiarch=true to open
the flag in plugin, it don't necessary set system environment BUILD_MULTIPLE_APKS
manually.

This closes #141
2014-12-22 23:19:27 -05:00
Ian Clelland
68c03090a3 Merge branch 'master' into 4.0.x (Gradle lint stages) 2014-12-22 13:29:50 -05:00
Ian Clelland
98fe46757f CB-8204: Reinstate link tasks to avoid gradle build failures 2014-12-22 13:24:58 -05:00
Andrew Grieve
cefd137634 Merge branch 'master' into 4.0.x (gradle version bump) 2014-12-22 11:45:02 -05:00
Andrew Grieve
6b6e887c2f CB-8143 Use gradle 2.2.1 instead of 1.12 to appease Android Studio 1.0 warning-on-startup 2014-12-22 11:37:06 -05:00
Andrew Grieve
20cd4f806a Merge branch 'master' into 4.0.x (gradle version for Android Studio) 2014-12-22 11:25:59 -05:00
Andrew Grieve
b92303b1c9 CB-8143 Use gradle plugin 1.0.0 for Android Studio 1.0.0 2014-12-22 11:19:21 -05:00
Andrew Grieve
59d23e05b1 Merge branch 'master' into 4.0.x (apk signing with interactive passwords) 2014-12-22 10:22:41 -05:00
Andrew Grieve
731a36d3a0 CB-8202 Fix gradle build signing when passwords provided interactively 2014-12-22 10:21:17 -05:00
Andrew Grieve
162fc0720e Merge branch 'master' into 4.0.x (SDK search path) 2014-12-16 14:18:58 -05:00
Andrew Grieve
342bbaa3ae CB-8176 Update Android SDK search path for Android Studio 1.0 2014-12-16 14:17:55 -05:00
Andrew Grieve
f086ef5cad Merge branch 'master' into 4.0.x (adb CWD & build --unknown-flag)
Conflicts:
	framework/src/org/apache/cordova/SplashScreenInternal.java
2014-12-11 13:47:07 -05:00
Daniel Toplak
56a3ee5fe6 CB-8079 Use activity class package name, but fallback to application
package name when looking for splash screen drawable

Close #136
2014-12-10 21:19:28 -05:00
Andrew Grieve
d80d532a2a Fix syntax error in 3aca14d530 2014-12-10 21:16:54 -05:00
Andrew Grieve
3aca14d530 CB-8147 Have corodva/build warn about unrecognized flags rather than fail
Close #127
2014-12-10 21:02:57 -05:00
Andrew Grieve
aa2d3962bf Close #126 (not-a-problem) 2014-12-10 21:02:57 -05:00
Andrew Grieve
f7c717e393 Close #137 (already merged). 2014-12-10 21:02:57 -05:00
sgrebnov
268fea58ee CB-7881 Android tooling shouldn't lock application directory
Close #130
2014-12-10 21:02:48 -05:00
Andrew Grieve
87cdc5ad1c Merge branch 'master' into 4.0.x (SplashScreen breakout)
Conflicts:
	framework/src/org/apache/cordova/CordovaActivity.java
	framework/src/org/apache/cordova/CordovaWebView.java
2014-12-10 16:09:22 -05:00
fujunwei
ba140a8a84 Add a section for plugin extensions
The build.gradle will apply gradle srcipte from plugin extension
When install the plugin with "gradleReference" framework.
The gradle can set ext.multiarch=true to support multiple APKs by
default, so add this section in here.
2014-12-10 15:44:39 -05:00
Andrew Grieve
27f1181d53 CB-3679 Move splashscreen logic into splashscreen plugin
Tried as hard as possible for this not to be a breaking change (all
symbols were preserved). Planning to remove delegating symbols in 4.0.x
though.

Also for backwards compatability - a copy of the plugin is bundled. It
will likewise be removed in 4.0.x
2014-12-10 15:40:03 -05:00
Ian Clelland
f953e6adb8 CB-8143: Use the correct Android Gradle plugin for the installed Gradle version 2014-12-10 10:07:05 -05:00
Brian Geppert
ffd14fe7d9 Revert Gradle distributionUrlRegex cleanup.
This reverts commit 75a0a6752a.
2014-12-09 14:23:38 -05:00
Ian Clelland
3206c2100d Merge branch 'plugin-gradle' into 4.0.x 2014-12-09 09:43:37 -05:00
Andrew Grieve
66fa12a091 CB-8119 Restart adb when we detect it's hung 2014-12-04 10:00:26 -05:00
Andrew Grieve
b1bdf23d9c Switch default build type to gradle (4.0.x only) 2014-12-03 10:12:31 -05:00
Andrew Grieve
12bf07d560 Merge branch 'master' into 4.0.x (volume stream & setMediaPlaybackRequiresUserGesture)
Conflicts:
	framework/src/org/apache/cordova/CordovaActivity.java
	framework/src/org/apache/cordova/CordovaWebView.java
2014-12-03 10:09:05 -05:00
Andrew Grieve
132650df28 CB-8112 Turn off mediaPlaybackRequiresUserGesture 2014-12-03 10:04:54 -05:00
Andrew Grieve
81a77949fc CB-6153 Add a preference for controlling hardware button audio stream (DefaultVolumeStream)
This, along with the commit to the audio plugin, makes it so that by
default apps control the ringer volume, but when any audio players are
active, the media volume is controlled.
2014-11-27 10:52:19 -05:00
Andrew Grieve
e597f98c62 Merge branch 'master' into 4.0.x (gradle java 6 & PluginManager race fix) 2014-11-26 11:48:08 -05:00
Andrew Grieve
7fbb2b195f CB-8081 Allow gradle builds to use Java 6 instead of requiring 7 2014-11-26 11:44:49 -05:00
Andrew Grieve
1feaa7fed7 CB-8031 Fix race condition that shows as ConcurrentModificationException 2014-11-17 22:11:21 -08:00
fujunwei
9b82ae19b0 Add a section for plugin extensions
The build.gradle will apply gradle srcipte from plugin extension
When install the plugin with "gradleReference" framework.
The gradle can set ext.multiarch=true to support multiple APKs by
default, so add this section in here.
2014-11-17 15:52:40 +08:00
Mark Koudritsky
9d3c13065b CB-7980: Add 9 to versionCode for minSdk 20+ if not multiarch 2014-11-06 18:27:36 -05:00
Andrew Grieve
4859f8f759 Merge branch 'master' into 4.0.x (receiver context) 2014-11-06 16:23:49 -05:00
Andrew Grieve
ac284fd39c CB-7976 Use webView's context rather than Activity's context for intent receiver 2014-11-06 16:23:32 -05:00
Andrew Grieve
fdef0db87c Merge branch 'master' into 4.0.x (Load timeout, bridge secret, content: URI)
Conflicts:
	framework/src/org/apache/cordova/CordovaWebView.java
2014-11-06 15:37:30 -05:00
Andrew Grieve
e78db000c6 CB-7974 Cancel timeout timer if view is destroyed 2014-11-06 15:33:10 -05:00
Andrew Grieve
032ea8a8d3 CB-7940 Disable exec bridge if bridgeSecret is wrong 2014-11-04 15:57:51 -05:00
Ian Clelland
fc63f66e89 CB-7758: Allow content-url-hosted pages to access the bridge
This allows e.g. jsHybugger to create pages with access to Cordova APIs.
We restrict access to content provider URLs which are at subdomains of the application itself, ie, begin with "content://com.your.package.id."
2014-10-27 15:26:38 -04:00
Chris Alfano
832e626573 CB-7726 fix typo in gitignore: ant-built -> ant-build
github: close #131
2014-10-27 12:33:09 -04:00
Andrew Grieve
cc7d352209 Merge branch 'master' into 4.0.x (gradle signing+SecureRandom) 2014-10-21 13:00:07 -04:00
Andrew Grieve
ce5d9a2ee8 gradle: Allow storeType to be set (allows using .p12 files) 2014-10-21 12:59:34 -04:00
Andrew Grieve
77c51d3ae7 gradle: Allow absolute paths to keystore files 2014-10-21 12:43:30 -04:00
Joe Bowser
53dae45430 Fixed the SecureRandom so it only returns positive values 2014-10-17 15:30:28 -07:00
Joe Bowser
16343ffe70 Undoing change to Math.random() for now, this creates a weird bug 2014-10-17 13:52:33 -07:00
Joe Bowser
b37498d5f6 Replacing Math.random() with something a little more random. 2014-10-14 10:11:09 -07:00
Andrew Grieve
7ad16e5b0c Merge branch 'master' into 4.0.x (Hardcode activity name) 2014-10-07 15:25:56 -04:00
Vladimir Kotikov
9f41906895 CB-6511 Fixes build for android when app name contains unicode characters.
github: close #124
2014-10-07 15:24:12 -04:00
Andrew Grieve
2af8daff1d Merge branch 'master' into 4.0.x (multipart PluginResult) 2014-10-07 15:18:07 -04:00
Rui Zhao
fbeb379f1b CB-7707 Added multipart PluginResult (close #125)
Corresponds to cordova-js commit: a1f866606b3
2014-10-07 15:17:56 -04:00
Andrew Grieve
9577735ff7 Merge branch 'master' into 4.0.x (check_reqs for brew) 2014-10-06 10:34:19 -04:00
Andrew Grieve
2dcd50c11b CB-7714 Teach check_reqs about brew's install location for android SDK 2014-10-06 10:33:31 -04:00
Andrew Grieve
862c223e11 Merge branch 'master' into 4.0.x (.gitignore, create --shared) 2014-10-04 15:30:30 -04:00
Andrew Grieve
7f4d5aeb0e Merge branch 'master' into 4.0.x (move preference activation, alert dialog leak)
Conflicts:
	framework/src/org/apache/cordova/AndroidChromeClient.java
	framework/src/org/apache/cordova/CordovaActivity.java
	framework/src/org/apache/cordova/CordovaWebView.java
	test/src/org/apache/cordova/test/menus.java

closes #123
2014-10-04 15:30:25 -04:00
Andrew Grieve
30681eb772 Fix --shared flag of create script (broke in recent gradle changes) 2014-10-04 15:14:51 -04:00
Andrew Grieve
52e575e1e7 Update .gitignore to ignore /framework/build and /node_modules 2014-10-04 15:14:45 -04:00
Martin Gonzalez
890e12c306 CB-6837 Fix leaked window when hitting back button while alert being rendered
Keep track of the last AlertDialog showed.
The last dialog showed that is rendered while hitting back button it
causes a leaked window.
Instead of perform a full track of all dialogs created, only destroy the
last one showed, this fixes the problem.

close #122
2014-10-04 14:44:06 -04:00
Joe Bowser
6cbf6b7875 CB-7674: Added sleep to avoid null error after most recent change to not break API 2014-09-30 17:57:42 -07:00
Marcel Kinard
c255a84941 CB-7674 move preference activation back into onCreate()
The preference creation actually needs to be before
super.onCreate(savedInstance) in order to avoid the exception
"requestFeature() must be called before adding content". Also ran into an
issue in the native tests "Whitelist" and "User WebView/Client/Chrome" where
it would throw an exception that the CordovaWebView appView already had
a parent and needed to be removed from that parent before the invocation
to root.addView(appView). So I conditionally remove the wrong parent.
Also made a change to the native tests so the menus test would work.
I also put super.init() back into the template, though invoking it is optional
as loadUrl will call it automatically if needed.
2014-09-30 19:38:34 -04:00
Steven Gill
ce7d6d69d9 updated release notes 2014-09-30 13:10:16 -07:00
Steven Gill
d5538b7076 updated .gitignore to include npm-debug.log 2014-09-29 23:49:12 -07:00
Steven Gill
cdfa13b265 Update JS snapshot to version 3.7.0-dev (via coho) 2014-09-29 14:59:07 -07:00
Andrew Grieve
e5efc91ef4 Merge branch 'master' into 4.0.x (JAVA_HOME on Ubuntu) 2014-09-29 10:16:33 -04:00
Andrew Grieve
e31c911c30 CB-7634 Detect JAVA_HOME properly on Ubuntu 2014-09-29 10:16:22 -04:00
Marcel Kinard
a658ea1573 CB-7410 update the docs to match the actual title 2014-09-25 11:25:09 -04:00
Andrew Grieve
6d5b88d7b9 Merge branch 'master' into 4.0.x (per-arch gradle builds) 2014-09-24 16:18:51 -04:00
Max Woghiren
a986e72338 Added gradle distribution URL updating. (commit fix-up) 2014-09-24 16:18:18 -04:00
Andrew Grieve
162d9b6c2e gradle: Build only the active architecture when applicable 2014-09-24 16:16:59 -04:00
Andrew Grieve
f7f49d27c5 Merge branch 'master' into 4.0.x (gradle Android Studio) 2014-09-23 21:04:55 -04:00
Andrew Grieve
9e3ccf4b3e gradle: Fix warning about dynamic properties being deprecated 2014-09-23 21:04:04 -04:00
Andrew Grieve
6b71c2f392 gradle: Have project's build.gradle look for a build-extras.gradle 2014-09-23 21:03:17 -04:00
Andrew Grieve
0d313a3964 gradle: Write sub-project list explicitly to make Android Studio happy 2014-09-23 21:03:00 -04:00
Max Woghiren
75a0a6752a Improved a regex. 2014-09-23 14:27:54 -04:00
Andrew Grieve
363fc8deb5 Merge branch 'master' into 4.0.x (gradle plugin template)
Conflicts:
	bin/templates/cordova/lib/build.js
	framework/build.gradle
2014-09-22 22:28:59 -04:00
Max Woghiren
ddac192c4a Added gradle distribution URL updating.
Conflicts:
	bin/templates/cordova/lib/build.js
	framework/build.gradle
2014-09-22 22:27:43 -04:00
Andrew Grieve
69a03c2e16 CB-7512 Use a standard build.gradle for all plugins
Plugins can extend it by providing a "build-extras.gradle"
2014-09-22 22:27:43 -04:00
Andrew Grieve
2b128b85f7 CB-7512 Make gradle build only a single config for sub-libraries (release vs debug) 2014-09-22 20:54:28 -04:00
Max Woghiren
b09f973231 Added gradle distribution URL updating. 2014-09-22 16:47:01 -04:00
Andrew Grieve
95815a558c Merge branch 'master' into 4.0.x (fix ant run command) 2014-09-22 15:38:59 -04:00
Andrew Grieve
879da03438 CB-7579 Fix run script's ability to use non-arch-specific APKs 2014-09-22 14:23:30 -04:00
Andrew Grieve
d022be547b Merge branch 'master' into 4.0.x (gradle) 2014-09-17 21:27:55 -04:00
Andrew Grieve
3f83fdbfc1 CB-7512 Fix gradle asking for release password when building for debug 2014-09-17 21:27:06 -04:00
purplecabbage
949152532c Merge branch 'CB-7493' of https://github.com/MSOpenTech/cordova-android 2014-09-17 14:58:08 -07:00
Ian Clelland
215adab1f9 Merge branch 'master' into 4.0.x (Gradle env vars) 2014-09-17 15:58:46 -04:00
Ian Clelland
7ce46ed60c CB-3445: Make minSdkVersion and base versionCode settable through env vars 2014-09-17 15:58:22 -04:00
Andrew Grieve
c32bcca67b Merge branch 'master' into 4.0.x (gradle optional password) 2014-09-17 15:30:20 -04:00
Andrew Grieve
cb442364ca CB-7512 Make key password optional & prompt for it when missing 2014-09-17 15:29:57 -04:00
Andrew Grieve
6bdc01290d Merge branch 'master' into 4.0.x (gradle fix) 2014-09-16 15:15:11 -04:00
Andrew Grieve
ac34bf1e54 CB-7512 Fix gradle not copying all archs to out/ (broken by prev commit) 2014-09-16 15:14:40 -04:00
Andrew Grieve
6fb164d200 Merge branch 'master' into 4.0.x (unaligned apk fix) 2014-09-16 15:00:54 -04:00
Andrew Grieve
a5d300c6ff CB-7512 Use aligned apk rather than unaligned apk when sorting 2014-09-16 14:59:43 -04:00
Andrew Grieve
6eb4409a72 Merge branch 'master' into 4.0.x (gradle debug v release) 2014-09-16 14:14:46 -04:00
Andrew Grieve
533677df8b CB-7512 Speed up gradle builds by building debug or release (not both) 2014-09-16 14:13:49 -04:00
Andrew Grieve
8f27b2ab56 Merge branch 'master' into 4.0.x (gradle fixes) 2014-09-16 13:02:55 -04:00
Andrew Grieve
25be42d385 CB-7512 Add gradle environment vars for signing apks 2014-09-16 13:01:25 -04:00
Andrew Grieve
00f6d30e08 CB-7512 Change gradle android plugins from 0.10 -> 0.12 2014-09-16 13:00:27 -04:00
Andrew Grieve
090822eb41 CB-7536 check_reqs: windows tweaks + sdk manager error message
1. Don't escape \s since those are used by windows for directory seperators
2. Don't warn about missing directories on windows when we're just
testing for their existence
3. Don't give command to install sdk from command-line, since they also
require Build-tools and Platform-tools (which are not installed by
default with IDE-less SDK installer).
2014-09-16 11:13:15 -04:00
mbillau
d9900a725d Second part of CB-7499, support RTL text direction 2014-09-15 16:03:00 -04:00
Andrew Grieve
a10106c61a Merge branch 'master' into 4.0.x (x86 deploy) 2014-09-15 14:24:45 -04:00
Andrew Grieve
5cb01f2ae9 CB-7554 Use x86 apk when deploying to an intel device / emulator 2014-09-15 14:23:26 -04:00
Ian Clelland
4c1efe7ad4 Merge branch 'master' into 4.0.x 2014-09-15 12:16:03 -04:00
Ian Clelland
4be92f285a CB-7512: Fix logic for detecting SDK directory 2014-09-15 12:15:32 -04:00
Michal Mocny
f9b89e98c2 Fix invalid syntax (missing + in multiline string) 2014-09-15 10:34:43 -04:00
Michal Mocny
be01ce03d0 Fix invalid syntax (missing + in multiline string) 2014-09-12 17:00:29 -04:00
Marcel Kinard
f221441877 Update JS snapshot to version 3.7.0-dev (via coho) 2014-09-12 16:34:06 -04:00
Andrew Grieve
18fda7ec68 Merge branch 'master' into 4.0.x (more error message) 2014-09-12 16:18:12 -04:00
Andrew Grieve
f2e8c00f49 CB-7536 Tweak Android SDK not installed error message.
We no longer require you to edit your PATH
2014-09-12 16:17:42 -04:00
Andrew Grieve
30e8b818f5 Merge branch 'master' into 4.0.x (error messages) 2014-09-12 14:21:47 -04:00
Andrew Grieve
525ce0e0ad CB-7536 Tweak error messages for missing JDK / SDK / AVDs 2014-09-12 14:19:13 -04:00
Andrew Grieve
3cd567dc95 Merge branch 'master' into 4.0.x (better auto-detect sdk) 2014-09-11 16:01:01 -04:00
Andrew Grieve
2f7ffa3636 CB-7511 Auto-detect android sdk when using stand-alone sdk installer 2014-09-11 15:37:22 -04:00
Ian Clelland
d99386ef1e Merge branch 'master' into 4.0.x 2014-09-11 15:12:31 -04:00
Ian Clelland
9ae3d2c074 CB-7512: Copy cordova.gradle file to project root on build 2014-09-11 15:12:07 -04:00
Ian Clelland
dd5a337a49 Merge branch 'master' into 4.0.x
Conflicts:
	framework/src/org/apache/cordova/CordovaActivity.java
2014-09-11 10:18:35 -04:00
Ian Clelland
51e634ccb4 Merge branch 'master' into 4.0.x (up to 3.7.0-dev)
Conflicts:
	VERSION
	bin/templates/cordova/version
	framework/src/org/apache/cordova/CordovaWebView.java
	package.json
	test/src/org/apache/cordova/test/basicauth.java
	test/src/org/apache/cordova/test/menus.java
2014-09-11 10:16:46 -04:00
Ian Clelland
31b1a821ca Merge branch 'master' into 4.0.x (External whitelist changes) 2014-09-11 10:08:45 -04:00
Andrew Grieve
bf13fd48ce Use add --compact flag in check_reqs when listing targets. No functional change. 2014-09-10 12:44:17 -04:00
Andrew Grieve
3b99760a42 CB-7330 Don't run check_reqs for bin/create.
The create / update script doesn't require any dependencies, so we
shouldn't fail without them.
2014-09-10 12:44:17 -04:00
Ian Clelland
0e78dc35d8 CB-7512: Read android target from project.properties if possible 2014-09-10 11:39:29 -04:00
Ian Clelland
c8bbdb23de CB-7512: Determine SDK and build tools version dynamcally at build time 2014-09-10 10:57:43 -04:00
Ian Clelland
7ee8117186 CB-7463: Adding licence to project template gradle file 2014-09-10 10:54:21 -04:00
Andrew Grieve
8237c41143 CB-7511 Auto-detect Android SDK when Android Studio is installed 2014-09-10 10:14:38 -04:00
Vladimir Kotikov
d52ca93ba6 CB-7493 Adds test-build command to package.json 2014-09-09 17:53:22 +04:00
Joe Bowser
8354651059 CB-7463: Looked at the Apache BigTop git, gradle uses C-style comments 2014-09-04 10:49:43 -07:00
Joe Bowser
81cc3c260f CB-7463: Adding licences. I don't know what the gradle syntax is for comments, that still needs to be done. 2014-09-04 10:32:29 -07:00
Joe Bowser
4dc32e194b CB-7460: Fixing bug with KitKat where the background colour would override the CSS colours on the application 2014-09-03 15:42:39 -07:00
Steven Gill
5a82dd5110 updated releasenotes 2014-09-02 17:09:24 -07:00
Steven Gill
f20708a5e7 Update JS snapshot to version 3.7.0-dev (via coho) 2014-08-29 16:34:17 -07:00
Steven Gill
91cf78f183 Set VERSION to 3.7.0-dev (via coho) 2014-08-29 16:34:12 -07:00
Marcel Kinard
0cde8819cf CB-7410 fix the menu test
Need to show the title in order for the options menu button to be visible.
2014-08-29 18:07:29 -04:00
Marcel Kinard
07632b0eeb CB-7410 Fix the errorUrl test
Make the error.html page a well-formed html document, otherwise it
won't display.
2014-08-29 17:38:03 -04:00
Marcel Kinard
4a7f825cfe CB-7410 Fix Basic Authentication test
Looks like the Chromium webview does not include the port number on the
hostname during the callback challenge, but the classic webview does
include the port number. Handle both cases here.
2014-08-29 16:41:51 -04:00
Ian Clelland
0b6b068097 CB-3445: Allow build and run scripts to select APK by architecture 2014-08-29 16:00:54 -04:00
Ian Clelland
4bc2051f44 CB-3445: Allow build and run scripts to select APK by architecture 2014-08-29 16:00:13 -04:00
Ian Clelland
623b2306ca CB-3445: Add environment variable 'BUILD_MULTIPLE_APKS' for splitting APKs based on architecture 2014-08-28 16:18:51 -04:00
Ian Clelland
34dde53506 CB-3445: Add environment variable 'BUILD_MULTIPLE_APKS' for splitting APKs based on architecture 2014-08-28 16:18:02 -04:00
Ian Clelland
7a09182446 CB-3445: Ensure that JAR files in libs directory are included 2014-08-28 13:17:26 -04:00
Ian Clelland
233e513860 CB-3445: Ensure that JAR files in libs directory are included 2014-08-28 11:26:58 -04:00
Marcel Kinard
eb8cf56e8e CB-7267 update RELEASENOTES for 3.5.1 2014-08-28 09:42:53 -04:00
Marcel Kinard
12a27643db CB-7410 clarify the title 2014-08-27 13:56:31 -04:00
Marcel Kinard
c6ccde0558 CB-7385 update cordova.js for testing prior to branch/tag 2014-08-27 09:04:32 -04:00
Marcel Kinard
16e3ebd87b CB-7410 add whitelist entries to get iframe/GoogleMaps working 2014-08-26 17:20:58 -04:00
Marcel Kinard
94c096dd5b CB-7291 propogate change in method signature to the native tests 2014-08-26 16:38:04 -04:00
Ian Clelland
2e3e4ec3b2 Merge branch 'CB-7291' 2014-08-26 15:25:41 -04:00
Ian Clelland
6e222c3938 CB-7291: Restrict meaning of "*" in internal whitelist to just http and https 2014-08-26 15:23:24 -04:00
Ian Clelland
3b3bd9b6c9 CB-7291: Only add file, content and data URLs to internal whitelist 2014-08-21 16:27:48 -04:00
Ian Clelland
4e3331ba66 CB-7291: Add defaults to external whitelist 2014-08-21 16:27:48 -04:00
Ian Clelland
7caa96abcd Fix previous merges
Build scripts (create and build) were mangled somewhat by the previous
merge commits. This resets them to (almost) exactly the same state as
the 3.6.x (master) branch.

Conflicts:
	bin/lib/create.js
2014-08-20 11:45:35 -04:00
Ian Clelland
b2776269cf Merge branch 'master' into 4.0.x (Gradle library dependencies) 2014-08-20 11:43:58 -04:00
Ian Clelland
b6c5a5fc9a CB-3445: Read project.properties to configure gradle libraries 2014-08-20 11:42:04 -04:00
Refael Ackermann
94943a9a84 CB-7325 Fix error message in android_sdk_version.js when missing SDK on windows
github: close #113
2014-08-20 11:20:02 -04:00
Andrew Grieve
4c1942e3fe Merge branch 'master' into 4.0.x (build & create script updates)
Conflicts:
	bin/lib/check_reqs.js
	bin/lib/create.js
	bin/node_modules/which/package.json
	bin/templates/cordova/lib/build.js
2014-08-19 12:02:36 -04:00
Andrew Grieve
71e72f215d CB-7335 Add a .gitignore to android project template 2014-08-19 11:59:18 -04:00
Andrew Grieve
58cdfd86d0 CB-7330 Fix dangling function call in last commit (broke gradle builds) 2014-08-19 11:53:53 -04:00
Andrew Grieve
dfa66b9dd4 CB-7330 Don't run "android update" during creation
Instead, have the build script copy do the equivalent logic on each
build.

Advantages:
- Scripts run much faster
- No more duplicate CordovaLib entries in project.properties
- Building is more independent from create/update script (more robust)
2014-08-18 23:24:29 -04:00
Andrew Grieve
d56ea25816 CB-3445 Add gradle support clean command (plus some code cleanup)
* Don't run ant clean for gradle ever
* Don't set sdk.dir since ANDROID_HOME is not always set
* Don't export builders
2014-08-18 16:19:40 -04:00
Andrew Grieve
c91b272648 CB-7044 Fix typo in prev commit causing check_reqs to always fail. 2014-08-18 15:26:52 -04:00
Andrew Grieve
ca8bb75b40 CB-3445 Copy gradle wrapper in build instead of create
This should play nicer with updates to the android SDK.
2014-08-18 14:51:40 -04:00
Andrew Grieve
36eab713a1 CB-3445 Add .gradle template files for "update" as well as "create" 2014-08-18 14:50:27 -04:00
Andrew Grieve
7133576fe9 CB-7044 Add JAVA_HOME when not set. Be stricter about ANDROID_HOME
Also switches to using the which module over shelljs.which (better
support for .bat files)
2014-08-18 14:45:23 -04:00
Andrew Grieve
effffcba1d CB-3445 Speed up gradle building (incremental builds go from 10s -> 1.5s for me)
Biggest win is disabling the linter.
2014-08-18 14:17:34 -04:00
Ian Clelland
404ce8bc3e Merge branch 'gradle-build-3.x'
This introduces the gradle build system to Cordova-android, behind a flag currently
2014-08-18 09:58:01 -04:00
Ian Clelland
a91bd095b0 CB-3445: android: Copy Gradle wrapper from Android SDK rather than bundling a JAR 2014-08-18 09:48:31 -04:00
Ian Clelland
fd6a1e5ed0 CB-3445: Add which to checked-in node_modules 2014-08-18 09:48:31 -04:00
Ian Clelland
7d6ac87033 CB-3445: Add option to build and install with gradle
This gives build/cordova two new command-line arguments: --ant and
--gradle, and will select the build type from those. As a fallback
for the Cordova CLI, the environment variable ANDROID_BUILD can also be
used, set to either "ant" or "gradle".

The default is currently "ant", but it is intended for this to change in
the future.
2014-08-18 09:48:31 -04:00
Ian Clelland
8aa813b862 CB-3445: Add an initial set of Gradle build scripts
These scripts will build an android project, in debug and release mode.
They also support additional library projects, such as Crosswalk, being
added to libraries.gradle (and settings.gradle). A flag can be set in
libraries.gradle to enable multi-architecture builds.
2014-08-18 09:48:31 -04:00
Andrew Grieve
95aa5c9f1c CB-7321 Don't require ant for create script 2014-08-15 13:58:53 -04:00
Andrew Grieve
4319447cb5 CB-7044, CB-7299 Fix up PATH problems when possible.
Uses heuristics:
- Adds javac to PATH based on default install paths on Windows
- Adds javac to PATH based on JAVA_HOME
- Adds android and adb to PATH based on ANDROID_HOME
- Sets ANDROID_HOME based on location of "android"
2014-08-15 13:46:20 -04:00
Joe Bowser
50ea162251 Change in test's AndroidManifest.xml needed for the test to run properly. Forgot the manifest. 2014-08-14 14:30:31 -07:00
Joe Bowser
9c239804d3 Change in test's AndroidManifest.xml needed for the test to run properly 2014-08-14 14:29:54 -07:00
Joe Bowser
a7ccb9243d Merging latest master, including new tests 2014-08-14 14:20:49 -07:00
Joe Bowser
320e31bb10 Adding tests related to 3.5.1 2014-08-12 11:09:53 -07:00
Ian Clelland
8b55a16986 CB-7291: Add external-launch-whitelist and use it for filtering intent launches 2014-08-12 11:26:47 -04:00
Ian Clelland
f9b8f9a45f CB-7159: Fix setBackgroundColor() call to support 4.0.x view classes 2014-08-11 13:25:21 -04:00
Andrew Grieve
41125ea1e2 CB-7261 Fix setNativeToJsBridgeMode sometimes crashing when switching to ONLINE_EVENT 2014-08-07 16:18:56 -04:00
Martin Bektchiev
73219bf2d2 CB-7265 Fix crash when navigating to custom protocol (introduced in 3.5.1)
Conflicts:
	framework/src/org/apache/cordova/CordovaUriHelper.java

Github: close #111
2014-08-07 09:58:40 -04:00
Ian Clelland
d6eb723b7f Filter out non-launchable intents 2014-08-06 09:55:03 -04:00
Ian Clelland
993d73762c Handle unsupported protocol errors in webview better 2014-08-06 09:55:03 -04:00
Joe Bowser
48b51c451a CB-7238: I should have collapsed this, but Config.init() must go before the creation of CordovaWebView 2014-07-31 09:23:14 -07:00
Joe Bowser
3d191d5884 CB-7238: Minor band-aid to get tests running again, this has to go away before 3.6.0 is released, since this is an API change. 2014-07-31 08:17:31 -07:00
Ian Clelland
955133f173 Extend whitelist to handle URLs without // chars 2014-07-31 08:11:40 -07:00
Andrew Grieve
5054b714e2 Set version to 4.0.0-dev in package.json 2014-07-25 20:03:42 -04:00
Andrey Kurdyumov
c2cafb4b45 CB-7172 Force window to have focus after resume
Workaround for some devices (Samsung Galaxy Note 3 at least)

github: close #108
2014-07-22 22:33:53 -04:00
Andrew Grieve
05868b541b Merge branch 'master' into 4.0.x (background color) 2014-07-21 15:47:03 -04:00
Jan Velecký
67f474ef42 CB-7159 Set background color of webView as well as its parent
github: close #109, close #110
2014-07-21 15:46:23 -04:00
Andrew Grieve
a40424e75c Merge branch 'master' into 4.0.x (setButtonPlumbedToJs)
Conflicts:
	framework/src/org/apache/cordova/CordovaWebView.java
2014-07-18 13:49:04 -04:00
Andrew Grieve
cd6c0e1de9 CB-7018 Fix setButtonPlumbedToJs never un-listening 2014-07-18 13:46:29 -04:00
Andrew Grieve
a99c8219bd Make private PluginManager.clearPluginObjects, .startupPlugins 2014-07-14 14:30:10 -04:00
Andrew Grieve
a03fdaba39 Merge branch 'master' into 4.0.x (undeprecate) 2014-07-14 14:28:56 -04:00
Andrew Grieve
92be0033a8 Undeprecate some just-deprecated symbols in PluginManager.
Forgot about custom engines again :(
2014-07-14 14:28:27 -04:00
Andrew Grieve
6f301576eb Mark PluginEntry fields as final
Makes the intention of the class more clear, and the public fields less
bad.
2014-07-14 14:26:21 -04:00
Andrew Grieve
e2b3f76a10 Merge branch 'master' into 4.0.x (PluginEntry refactor)
Conflicts:
	framework/src/org/apache/cordova/PluginEntry.java
	framework/src/org/apache/cordova/PluginManager.java
	test/src/org/apache/cordova/test/CordovaWebViewTestActivity.java
2014-07-14 14:18:10 -04:00
Andrew Grieve
b934c1be6a @Deprecate methods of PluginManager that were never meant to be public 2014-07-14 14:10:19 -04:00
Andrew Grieve
145b50a320 Move plugin instantiation and instance storing logic PluginEntry->PluginManager
Instantiation and storing of the instance should be owned privately by
PluginManager, not exposed via an unprotected public API. That said,
this refactoring does not make any breaking changes to the public API,
except for removing the createPlugin call in PluginEntry, which should
not be called by anyone other than PluginManager anyway.
2014-07-14 14:08:27 -04:00
Andrew Grieve
a33cdc9c7b Fix broken unit test due to missing Config.init() call 2014-07-14 14:06:47 -04:00
Matt Ray
62101e85ff Update to check for Google Glass APIs
This prevents the 'cordova build android' process from blowing up on this step if you assign the GDK as the target and want to rebuild via the CLI.

close #100
2014-07-14 10:30:23 -04:00
Eion Robb
0a3714e5e0 Fix for android not being in PATH check on Windows
close #103
2014-07-14 10:28:27 -04:00
Ankit Jain
86a2830d75 Displaying error when regex does not match.
On my ubuntu when `android` is not found typical output is:

```
   /bin/sh: 1: android: not found
```
close #104
2014-07-14 10:28:13 -04:00
Andrew Grieve
b277202838 Add PluginManager.setPluginEntries, delete setPluginWhitelist 2014-07-10 16:39:46 -04:00
Andrew Grieve
a4f6d9f6e7 Merge branch 'master' into 4.0.x (unbreak compile) 2014-07-10 15:14:57 -04:00
Andrew Grieve
9300e97d2b Fix broken compile due to previous commit :( 2014-07-10 15:14:39 -04:00
Andrew Grieve
1d4aa44d3d Merge branch 'master' into 4.0.x (CordovaPlugin.pluginInitialize tweak)
Conflicts:
	framework/src/org/apache/cordova/CordovaPlugin.java
2014-07-10 15:05:40 -04:00
Andrew Grieve
3792f75281 Tweak CordovaPlugin.initialize method to be less deprecated.
Thinking here is that we need a while for both initialize and
pluginInitialize to exist before plugin authors would bother not using
the deprecated one anyways. Really, no harm in keeping both for some
time.
2014-07-10 15:03:53 -04:00
Andrew Grieve
b52fcb8aa9 Merge branch 'master' into 4.0.x (CordovaBridge tweaks)
Conflicts:
	framework/src/org/apache/cordova/CordovaActivity.java
2014-07-10 11:36:58 -04:00
Andrew Grieve
a14c794255 Un-deprecate CordovaActivity.init() - it's needed to tweak prefs in onCreate 2014-07-10 11:36:20 -04:00
Andrew Grieve
aef96e95e8 Tweak log messages in CordovaBridge with bridgeSecret is wrong 2014-07-10 11:36:20 -04:00
Andrew Grieve
f0da63a8ff Merge branch 'master' into 4.0.x (backport of CordovaBridge) 2014-07-10 10:45:55 -04:00
Andrew Grieve
cc860804f6 Backport CordovaBridge from 4.0.x -> master 2014-07-10 10:43:37 -04:00
Andrew Grieve
f38c460588 Merge branch 'master' into 4.0.x (Unbreak unit tests)
Conflicts:
	test/src/org/apache/cordova/test/junit/GapClientTest.java
	test/src/org/apache/cordova/test/userwebview.java
	test/src/org/apache/cordova/test/whitelist.java
2014-07-10 10:30:05 -04:00
Andrew Grieve
d8a19b5565 Update unit tests to not use most deprecated things (e.g. DroidGap) 2014-07-10 10:23:44 -04:00
Andrew Grieve
1c5b5e2ce6 Add non-String overloades for CordovaPreferences.set() 2014-07-10 10:23:26 -04:00
Andrew Grieve
9b9c59766f Add back CordovaWebView.getUrl() - needed by tests & does make sense to have 2014-07-10 10:15:34 -04:00
Andrew Grieve
fc2a202afa Log friendlier messages when bridge calls are recieved from previous page 2014-07-10 10:14:47 -04:00
Andrew Grieve
4b4b71ff32 CordovaActivity: don't create WebView until loadUrl() so that apps can tweak preferences after super.onCreate() 2014-07-10 10:10:38 -04:00
Andrew Grieve
9358838dab Merge branch 'master' into 4.0.x (unit test tweaks)
Conflicts:
	framework/src/org/apache/cordova/CordovaWebView.java
2014-07-09 21:12:45 -04:00
Andrew Grieve
2f24e42dc1 Make CordovaWebview resilient to init() not being called (for backwards-compatibility)
This can happen when apps are not utilizing CordovaActivity and instead
creating their own CordovaWebView.
2014-07-09 21:08:29 -04:00
Andrew Grieve
0c12aa163e Add node_module licenses to LICENSE 2014-07-09 16:08:18 -04:00
Andrew Grieve
a4d9f702e4 Merge branch 'master' into 4.0.x (cordova.js snapshot) 2014-07-09 13:32:10 -04:00
Andrew Grieve
ec47274fbd Update cordova.js snapshot to work with bridge changes 2014-07-09 13:31:44 -04:00
Andrew Grieve
efcedabee0 Delete Cordova*Client classes, Create CordovaBridge, Delete more CordovaWebView symbols
Changes made in order to get xwalk working again
2014-07-09 09:29:33 -04:00
Andrew Grieve
25a7b66296 Delete deprecated methods from PluginManager 2014-07-08 14:46:05 -04:00
Andrew Grieve
ac194cd34f Merge branch 'master' into 4.0.x (remove Config.* references)
Conflicts:
	framework/src/org/apache/cordova/CordovaActivity.java
	framework/src/org/apache/cordova/CordovaChromeClient.java
	framework/src/org/apache/cordova/CordovaWebView.java
2014-07-08 14:45:41 -04:00
Andrew Grieve
04ccb06e3f Provide CordovaPlugin with CordovaPreferences. Add new Plugin.initialize()
This adds CordovaPlugin.initialize() (no args) and deprecates
CordovaPlugin.initialize(app, webView). This will allow us to refactor
more easily by using the package-private privateInitialize() to set
fields.
2014-07-08 14:26:21 -04:00
Andrew Grieve
d31ee20ba5 Convert usages of Config.* to use the non-static versions 2014-07-08 14:11:14 -04:00
Andrew Grieve
9b25d45b93 Change getProperty -> prefs.get* within CordovaActivity 2014-07-08 14:08:15 -04:00
Andrew Grieve
eca05e6bad Delete deprecated symbols from CordovaActivity (4.0.x) 2014-07-08 12:15:34 -04:00
Andrew Grieve
84bf20152b Merge branch 'master' into 4.0.x (CordovaUriHelper visibility) 2014-07-08 12:06:04 -04:00
Andrew Grieve
d51abdd73e Make CordovaUriHelper class package-private 2014-07-08 12:05:41 -04:00
Andrew Grieve
200e9f1a8e Delete deprecated classes: DirectoryManager, DroidGap, ExifHelper (4.0.x) 2014-07-08 12:04:40 -04:00
Andrew Grieve
7dc09b4019 Delete JSONUtils.java (in 4.0.x only) 2014-07-08 12:00:02 -04:00
Andrew Grieve
dbb196a17e Delete url-filters logic (in 4.0.x branch only) 2014-07-08 11:58:56 -04:00
Andrew Grieve
05a95c699f Merge branch 'master' into 4.0.x (Fix setPluginEntries) 2014-07-08 11:55:04 -04:00
Andrew Grieve
9ea8b2237a Fix PluginManager.setPluginEntries not removing old entries 2014-07-08 11:54:38 -04:00
Andrew Grieve
9c5e340fb8 Merge branch 'master' into 4.0.x (App plugin from config.xml -> code)
Conflicts:
	bin/templates/cordova/defaults.xml
	framework/res/xml/config.xml
	framework/src/org/apache/cordova/CordovaWebView.java
2014-07-08 11:52:44 -04:00
Andrew Grieve
e86c2e5970 Move registration of App plugin from config.xml -> code
Less fragile this way.
2014-07-08 11:47:26 -04:00
Andrew Grieve
67006add53 Merge branch 'master' into 4.0.x (tweaks to setWebViewClient)
Conflicts:
	framework/src/org/apache/cordova/CordovaWebView.java
	framework/src/org/apache/cordova/CordovaWebViewClient.java
2014-07-07 16:38:50 -04:00
Andrew Grieve
caeb86843d Make setWebViewClient an override instead of an overload. Delete Location-change JS->Native bridge mode (missed some of it). 2014-07-07 16:31:29 -04:00
Andrew Grieve
1571b26a65 Merge branch 'master' into 4.0.x (ConfigXmlParser + two-phase init)
Conflicts:
	framework/src/org/apache/cordova/CordovaActivity.java
	framework/src/org/apache/cordova/CordovaChromeClient.java
	framework/src/org/apache/cordova/CordovaWebView.java
	framework/src/org/apache/cordova/CordovaWebViewClient.java
	framework/src/org/apache/cordova/PluginManager.java
2014-07-07 16:23:51 -04:00
Andrew Grieve
0f15608175 CB-4404 Revert setting android:windowSoftInputMode to "adjustPan"
"adjustResize" is what the value has been set to for the longest time (due to it
being in the wrong place in the manifest). "adjustResize" is a better default value anyways.
2014-07-07 13:07:51 -04:00
Andrew Grieve
705991e5b0 Refactor: Use ConfigXmlParser in activity. Adds CordovaWebView.init()
This does subtly change the API surface due to CordovaWebView.init(),
but only minimally, and is backwards compatibly with the default
generated projects from prior versions.
2014-07-04 16:32:09 -04:00
Andrew Grieve
b636874bd9 Deprecate some convenience methods on CordovaActivity
They don't add much convenience and the file is too big already.
2014-07-04 16:31:19 -04:00
Andrew Grieve
965e4e9b19 Fix CordovaPreferences not correctly parsing hex values (valueOf->decode) 2014-07-04 16:27:16 -04:00
Andrew Grieve
af77977fda Refactor: Move url-filter information into PluginEntry. 2014-07-04 14:53:00 -04:00
Andrew Grieve
e74baf188f Don't re-parse config.xml in onResume.
There shouldn't be any need to.
2014-07-04 12:19:28 -04:00
Andrew Grieve
663a71255f Move handling of Fullscreen preference to CordovaActivity
Makes more sense here since that's where the other FullScreen related
changes are.
2014-07-04 12:11:19 -04:00
Andrew Grieve
bdf2f22f81 Merge branch 'master' into 4.0.x (ConfigXmlParser breakout)
Conflicts:
	framework/src/org/apache/cordova/CordovaActivity.java
	framework/src/org/apache/cordova/PluginManager.java
2014-07-04 11:48:49 -04:00
Andrew Grieve
79aa3e159d Delete dead code from CordovaActivity 2014-07-04 11:46:03 -04:00
Andrew Grieve
95118398dd Update .classpath to make Eclipse happy (just re-orders one line) 2014-07-04 11:38:31 -04:00
Andrew Grieve
4d18a8e55f Delete "CB-3064: The errorUrl is..." Log message left over from debugging presumably 2014-07-04 11:38:16 -04:00
Andrew Grieve
3bab41f138 Refactor Config into ConfigXmlParser, CordovaPreferences
Intention here is to be 100% backwards compatible.
2014-07-04 11:31:32 -04:00
Andrew Grieve
a8330773ca Add missing changes from previous merge commit 2014-07-04 10:32:02 -04:00
Andrew Grieve
4ca2305693 Merge branch 'master' into 4.0.x (Bridge fixes)
Conflicts:
	framework/src/org/apache/cordova/CordovaChromeClient.java
	framework/src/org/apache/cordova/CordovaUriHelper.java
	framework/src/org/apache/cordova/CordovaWebView.java
	framework/src/org/apache/cordova/CordovaWebViewClient.java
	framework/src/org/apache/cordova/ExposedJsApi.java
	framework/src/org/apache/cordova/NativeToJsMessageQueue.java
	framework/src/org/apache/cordova/PluginManager.java
2014-07-03 23:02:02 -04:00
Andrew Grieve
f577af0886 Delete Location-change JS->Native bridge mode
It was always disabled, and there's really no reason to keep it around.
2014-07-03 22:18:18 -04:00
Andrew Grieve
aab47bd453 CB-5988 Allow exec() only from file: or start-up URL's domain
Uses prompt() to validate the origin of the calling JS.
This change also simplifies the start-up logic by explicitly disabling
the bridge during page transitions and explictly enabling it when the
JS asks for the bridgeSecret.

We now wait to fire onNativeReady in JS until the bridge is initialized.
It is therefore safe to delete the queue-clear/new exec race condition
code that was in PluginManager.
2014-07-03 22:06:09 -04:00
Andrew Grieve
445ddd89fb CB-6761 Fix native->JS bridge ceasing to fire when page changes and online is set to false and the JS loads quickly 2014-07-03 13:27:30 -04:00
Joe Bowser
6f21a96238 Update the errorurl to no longer use intents 2014-06-24 12:57:46 -07:00
Joe Bowser
c47bcb2f54 This breaks running the JUnit tests, we'll bring it back soon 2014-06-24 12:55:56 -07:00
Joe Bowser
b0b628ffc2 Refactoring the URI handling on Cordova, removing dead code 2014-06-24 12:30:34 -07:00
Andrew Grieve
428e1bc14d Remove fields from CordovaWebView interface
Fields don't make sense in an interface.
2014-06-24 15:28:53 -04:00
Andrew Grieve
d66bb84924 Delete onReset and resetJsMessageQueue from CordovaWebView interface
These are implementation details that do not need to be exposed.
2014-06-24 15:26:43 -04:00
Andrew Grieve
4ce5123a12 Merge branch 'master' into 4.0.x (bindButton changes)
Conflicts:
	framework/src/org/apache/cordova/CordovaWebView.java
	package.json
2014-06-24 15:22:27 -04:00
Andrew Grieve
4b4a2e9f9e CB-7018 Clean up and deprecation of some button-related functions 2014-06-24 15:08:47 -04:00
Andrew Grieve
58afd0b604 CB-7017 Fix onload=true being set on all subsequent plugins 2014-06-24 14:55:34 -04:00
Ian Clelland
4352456129 CB-5971: Fix package / project validation 2014-06-24 14:05:56 -04:00
Ian Clelland
bb141a70e8 CB-5971: Add unit tests to cordova-android 2014-06-24 14:05:56 -04:00
Ian Clelland
ff260c03ca CB-5971: Factor out package/project name validation logic 2014-06-24 14:05:56 -04:00
Andrew Grieve
96a1192474 Merge branch 'master' into 4.0.x (back button default behaviour fix)
Conflicts:
	framework/src/org/apache/cordova/CordovaChromeClient.java
	framework/src/org/apache/cordova/CordovaWebView.java
2014-06-23 14:50:01 -04:00
Andrew Grieve
297f862ccc Delete explicit activity.finish() in back button handling. No change in behaviour.
The default handling calls through to Activity.onBackPressed(), which
by default results in activity.finish(), but can be customized by the
app.
2014-06-23 14:18:54 -04:00
Andrew Grieve
c052f40ef8 Remove onKey* from CordovaWebView interface (these exist on View already) 2014-06-20 16:09:14 -04:00
Andrew Grieve
98246c0e35 Add a whitelist to PluginManager to be used by App Harness
App Harness needs a way to restrict which plugins get loaded for
embedded apps. This seemed like the simplest way, although a better
API would be to have PluginManager recieve the list of PluginEntry.
2014-06-20 12:34:08 -04:00
Joe Bowser
8ac067da89 Rethinking the URI helper 2014-06-19 13:20:44 -07:00
Ian Clelland
0ffb5d253a CB-3445: android: Copy Gradle wrapper from Android SDK rather than bundling a JAR 2014-06-19 16:12:40 -04:00
Andrew Grieve
3a9898a6a6 CB-6971 Fix infinite recursion for onReceiveError 2014-06-18 13:20:47 -04:00
Andrew Grieve
693ec14df5 Rename App->CoreAndroid in defaults.xml (related to 635a6279a9) 2014-06-17 20:55:55 -04:00
Ian Clelland
fa189b3234 CB-3445: Add an initial set of Gradle build scripts
These scripts will build an android project, in debug and release mode.
They also support additional library projects, such as Crosswalk, being
added to libraries.gradle (and settings.gradle). A flag can be set in
libraries.gradle to enable multi-architecture builds.
2014-06-17 17:36:26 -04:00
Joe Bowser
3b27cd093b CB-6873: Removing from cordova-android, still in the camera plugin 2014-06-17 11:22:42 -07:00
Joe Bowser
141bbfb051 CB-5971: This would have been a good first bug, too bad 2014-06-12 17:51:22 -07:00
Joe Bowser
663a919ed1 CB-4404: Changing where android:windowSoftInputMode is in the manifest so it works 2014-06-12 11:47:41 -07:00
Marcel Kinard
483babe3bc Add documentation referencing other implementation. 2014-06-09 15:50:20 -04:00
Andrew Grieve
6abb9da88a Merge branch 'master' into 4.0.x
Conflicts:
	bin/templates/project/custom_rules.xml
	framework/src/org/apache/cordova/CordovaWebView.java
	test/src/org/apache/cordova/test/junit/MessageTest.java
2014-06-08 22:54:21 -04:00
Andrew Grieve
b407641049 CB-6851 Deprecate WebView.sendJavascript() 2014-06-08 22:47:41 -04:00
Andrew Grieve
d5e8807756 Set version to 4.0.0-dev 2014-06-06 15:00:41 -04:00
Ian Clelland
7e9fdb3555 Remove Ant custom build directories 2014-06-05 13:11:14 -04:00
Marcel Kinard
32e07c22d0 CB-6876 Show the correct executable name 2014-06-04 19:23:43 -04:00
Marcel Kinard
d427c52aac CB-6876 Fix the "print usage" 2014-06-04 19:12:55 -04:00
Joe Bowser
eb623a84d5 Trivial spelling fix in comments when reading CordovaResourceApi 2014-06-04 11:13:37 -07:00
Joe Bowser
07290277ba CB-6818: I want to remove this code, because Square didn't do their headers properly 2014-06-03 15:22:10 -07:00
Andrew Grieve
743541218f CB-6860 Add activity_name and launcher_name to AndroidManifest.xml & strings.xml 2014-06-03 16:08:35 -04:00
Andrew Grieve
94de0a7ce2 Add a comment to custom_rules.xml saying why we move AndroidManifest.xml 2014-06-03 15:29:06 -04:00
Andrew Grieve
36e9fb292b Remove +x from README.md 2014-06-03 15:29:06 -04:00
Marcel Kinard
2661e010d9 CB-6784 Add missing licenses
for ./test/assets/www/cordova_plugins.js and ./test/res/xml/config.xml
2014-05-30 15:10:54 -04:00
Marcel Kinard
7687becfee CB-6784 Add license to CONTRIBUTING.md 2014-05-30 11:45:13 -04:00
Michal Mocny
1641f09dc9 Revert "defaults.xml: Add AndroidLaunchMode preference"
This reverts commit 11fc6be328.
2014-05-29 14:50:01 -04:00
Ian Clelland
b42faea2eb Merge branch 'pluggable_webview' into 4.0.x 2014-05-29 11:20:35 -04:00
Steven Gill
1505673393 updated RELEASENOTES 2014-05-27 14:12:16 -07:00
Joe Bowser
635a6279a9 Renaming app plugin CoreAndroid to avoid confusion. It is now trivial to fix the JS away from App, but this will have to be a 4.x change 2014-05-26 13:11:27 -07:00
Joe Bowser
404d3e0959 CB-6315: Wrapping this so it runs on the UI thread 2014-05-23 11:31:13 -07:00
Marcel Kinard
f77b20bbca CB-6723 Update package name for Robotium 2014-05-23 11:31:13 -07:00
Marcel Kinard
1d0a1664e6 CB-6707 Update minSdkVersion to 10 consistently
Update minSdkVersion in the AndroidManifest for the cordova.jar and the
test project.
2014-05-23 11:30:58 -07:00
Martin Gonzalez
410afbf9a1 CB-5652 make visible cordova version
Log the cordova version using version string from CordovaWebView.java

This closes #101
2014-05-23 11:30:58 -07:00
Steven Gill
aaddfa6f3a Update JS snapshot to version 3.6.0-dev (via coho) 2014-05-23 11:30:58 -07:00
Joe Bowser
2d9a16e857 Update JS snapshot to version 3.6.0-dev (via coho) 2014-05-23 11:30:58 -07:00
Joe Bowser
1dcba51092 Set VERSION to 3.6.0-dev (via coho) 2014-05-23 11:30:57 -07:00
Joe Bowser
7c63b30de1 Added dash to test push 2014-05-23 11:23:29 -07:00
Andrew Grieve
c0eae1ad52 Revert accidentally removed lines from NOTICE 2014-05-23 11:23:29 -07:00
Steven Gill
c012b98223 CB-6552: updated author to apache software foundation in pacakge.json 2014-05-23 11:23:29 -07:00
Steven Gill
559493babd CB-6552: updated test field 2014-05-23 11:23:29 -07:00
Steven Gill
990ab2c7ef CB-6552: added top level package.json 2014-05-23 11:23:28 -07:00
Marcel Kinard
437003de29 CB-6491 add CONTRIBUTING.md 2014-05-23 11:23:28 -07:00
Joe Bowser
629e05b7b1 CB-6315: Wrapping this so it runs on the UI thread 2014-05-22 12:00:42 -07:00
Ian Clelland
22b1959333 Manually fix Android sdk location to support library projects without local.properties 2014-05-22 14:04:00 -04:00
Marcel Kinard
e98f6ae570 CB-6723 Update package name for Robotium 2014-05-20 07:09:02 -04:00
Marcel Kinard
0b5bf0c098 CB-6707 Update minSdkVersion to 10 consistently
Update minSdkVersion in the AndroidManifest for the cordova.jar and the
test project.
2014-05-20 07:00:21 -04:00
Martin Gonzalez
1deefa48ee CB-5652 make visible cordova version
Log the cordova version using version string from CordovaWebView.java

This closes #101
2014-05-19 11:10:58 -04:00
Ian Clelland
97008305ff Merge branch 'master' into pluggable_webview
Conflicts:
	framework/src/org/apache/cordova/CordovaWebView.java
2014-05-15 15:59:11 -04:00
Ian Clelland
1a17083e8c Add more required methods on CordovaWebView interface 2014-05-15 15:56:10 -04:00
Joe Bowser
b6664cc859 Added two more required methods to CordovaWebView to get the Junit tests running, removed tests that make no sense 2014-05-14 11:09:21 -07:00
Steven Gill
50c4aef873 Update JS snapshot to version 3.6.0-dev (via coho) 2014-05-08 15:32:28 -07:00
Joe Bowser
cf42d31214 Update JS snapshot to version 3.6.0-dev (via coho) 2014-05-06 15:51:17 -07:00
Joe Bowser
00caa1c0a0 Set VERSION to 3.6.0-dev (via coho) 2014-05-06 15:51:14 -07:00
Joe Bowser
93c8ba920a Added dash to test push 2014-05-06 13:59:13 -07:00
Andrew Grieve
8702c04d39 Revert accidentally removed lines from NOTICE 2014-05-06 15:18:31 -04:00
Ian Clelland
e595c313a1 Use correct client object in recent versions of android again 2014-05-02 10:29:53 -04:00
Ian Clelland
955da2e360 Clean up merge commit
Reinstate fix for github issue #96 (b715d20)
Re-remove extra calls to set up client objects (8e31ef7b)
Reinstate license header in CordovaChromeClient.java
2014-05-02 10:22:38 -04:00
Joe Bowser
04b3fc0268 Outsmarted by vim, needed Eclipse to clean this up 2014-04-30 15:09:54 -07:00
Joe Bowser
105ccc81a5 This is an ugly merge commit, because the rebase made even less sense.
This should add the old setProperty methods required for the tests. We
decided to not deprecate them.  I don't make a habit of doing merge
commits, due to their destructive nature, but I think I might have
merged too much stuff in.

Merge branch 'pluggable_webview' of https://git-wip-us.apache.org/repos/asf/cordova-android into pluggable_webview

Conflicts:
	framework/src/org/apache/cordova/AndroidChromeClient.java
	framework/src/org/apache/cordova/AndroidWebView.java
	framework/src/org/apache/cordova/CordovaActivity.java
	framework/src/org/apache/cordova/CordovaWebView.java
2014-04-30 14:59:40 -07:00
Steven Gill
c349892c5b CB-6552: updated author to apache software foundation in pacakge.json 2014-04-30 12:55:28 -07:00
Steven Gill
3d4b8ce99b CB-6552: updated test field 2014-04-30 11:59:29 -07:00
Joe Bowser
3571307df5 Adding setIntegerProperty, setBooleanProperty and setStringProperty back, due to possible demand, and due to the fact that I don't want to rewrite my tests 2014-04-30 11:33:26 -07:00
Steven Gill
64fd87134f CB-6552: added top level package.json 2014-04-30 10:54:58 -07:00
Marcel Kinard
82bba44538 CB-6491 add CONTRIBUTING.md 2014-04-30 08:44:21 -04:00
Ian Clelland
df05f3a3c0 Try other constructors besides first 2014-04-29 22:50:12 -04:00
Ian Clelland
8e31ef7be6 Defer construction of client objects to WebView 2014-04-29 22:50:12 -04:00
Joe Bowser
f4555f7c96 Removing the xwalk_core_library reference so we can use this with MozillaView 2014-04-29 22:50:11 -04:00
Ningxin Hu
8408da55ea Add getView() API into CordovaWebView.
This API is to get the actual View.

The concrete webview implementation can use compositing instead of extending
underlying webview.
2014-04-29 22:50:11 -04:00
Ningxin Hu
4a67dd2e28 Crosswalk runtime needs the two permissions to auto detect connection status.
See more details at: https://crosswalk-project.org/jira/browse/XWALK-1324
2014-04-29 22:50:11 -04:00
Joe Bowser
bd806a34d8 Removing XWalkWebView and making it a plugin component 2014-04-29 22:50:11 -04:00
Joe Bowser
2f7e833a79 Got the bridge to work with Crosswalk 2014-04-29 22:50:11 -04:00
Joe Bowser
c17503ab78 w00t! Managed to get XWalk to work. Next Step: Make it installable
like a Cordova Plugin!
2014-04-29 22:50:11 -04:00
Joe Bowser
19f76d34db Hurray! It runs! Now that we have the default WebView working, it's time
to make things a little more pluggable.
2014-04-29 22:50:11 -04:00
Joe Bowser
25c8b2fabb Removing the deprecated setAttribute methods to clean up the codebase 2014-04-29 22:44:05 -04:00
Joe Bowser
bfd8bf9ca4 Merge pull request #3 from huningxin/pluggable_webview
Make correct webview client and chrome client for specific webview engin...
2014-04-29 13:25:19 -07:00
Ningxin Hu
e6adbb0e42 CB-6543 Fix cordova/run failure when no custom_rules.xml available
Github: Close #99
2014-04-28 22:50:22 -04:00
Fardjad Davari
11fc6be328 defaults.xml: Add AndroidLaunchMode preference 2014-04-25 00:27:33 +04:30
Ningxin Hu
7a5405d2ab Delegate making WebViewClient and ChromeClient to webview engine.
Revert the change of webview preference name.
2014-04-24 09:42:51 +08:00
Joe Bowser
b9a24f00ad Removing the xwalk_core_library reference so we can use this with MozillaView 2014-04-23 14:31:30 -07:00
Ningxin Hu
dbfc292353 Make correct webview client and chrome client for specific webview engine.
It changes the webview preference naming from full name to prefix, since the
prefix is also used to construct the name of WebView, WebViewClient and
ChromeClient.

For example, for Crosswalk webview, config.xml contains:
<preference name="webView" value="org.apache.cordova.engine.crosswalk.XWalkCordova" />
2014-04-23 16:33:31 +08:00
Joe Bowser
a09255b2ff Merge pull request #2 from huningxin/pluggable_webview
Pluggable webview
2014-04-22 15:55:52 -07:00
Ningxin Hu
9d1c72cc07 Add getView() API into CordovaWebView.
This API is to get the actual View.

The concrete webview implementation can use compositing instead of extending
underlying webview.
2014-04-21 15:22:19 +08:00
Ningxin Hu
09ac30ef2e Crosswalk runtime needs the two permissions to auto detect connection status.
See more details at: https://crosswalk-project.org/jira/browse/XWALK-1324
2014-04-21 15:17:23 +08:00
Andrew Grieve
0ec8f5d283 Add JavaDoc for CordovaResourceApi 2014-04-17 15:51:59 -04:00
Ian Clelland
b872df0f31 CB-6388: Handle binary data correctly in LOAD_URL bridge 2014-04-02 13:42:19 -04:00
Ian Clelland
0add4af208 Update JS snapshot to version 3.5.0-dev-81f9a00 2014-04-02 13:42:19 -04:00
Michal Mocny
298cd9e065 Fix CB-6048: Set launchMode=singleTop so tapping app icon does not always restart app 2014-04-01 11:33:40 -04:00
hadeslee
b715d20385 Remove incorrect usage of AlertDialog.Builder.create
AlertDialog.Builder.show() will create an AlertDialog before it show. This is the source code snippet:

        /**
         * Creates a {@link AlertDialog} with the arguments supplied to this builder and
         * {@link Dialog#show()}'s the dialog.
         */
        public AlertDialog show() {
            AlertDialog dialog = create();
            dialog.show();
            return dialog;
        }

github: close #96
2014-03-28 13:40:43 -04:00
Andrew Grieve
79e313a0c0 Catch uncaught exceptions in from plugins and turn them into error responses.
When a plugin throws an unchecked exception, we're not catching it
anywhere and so the error callback is not being called.

This change adds a try/catch to catch such exceptions.
2014-03-17 11:58:14 -07:00
Andrew Grieve
9f4c75d1c2 Add NOTICE file 2014-03-17 11:58:14 -07:00
Joe Bowser
b37492644c Removing XWalkWebView and making it a plugin component 2014-03-12 15:04:28 -07:00
Joe Bowser
04a792a8c2 Got the bridge to work with Crosswalk 2014-03-10 14:39:43 -07:00
Joe Bowser
35ec24c3f0 w00t! Managed to get XWalk to work. Next Step: Make it installable
like a Cordova Plugin!
2014-03-07 15:03:22 -08:00
Andrew Grieve
9a00ccdacc Catch uncaught exceptions in from plugins and turn them into error responses.
When a plugin throws an unchecked exception, we're not catching it
anywhere and so the error callback is not being called.

This change adds a try/catch to catch such exceptions.
2014-03-06 21:27:44 -05:00
Joe Bowser
61b23677d1 Hurray! It runs! Now that we have the default WebView working, it's time
to make things a little more pluggable.
2014-03-05 15:50:02 -08:00
Joe Bowser
90037dc6cd Removing the deprecated setAttribute methods to clean up the codebase 2014-03-04 15:02:30 -08:00
Andrew Grieve
e8d48e1f43 Add NOTICE file 2014-02-27 15:36:30 -05:00
Andrew Grieve
a2f8c9c75b CB-6047 Fix online sometimes getting in a bad state on page transitions.
The online bridge toggles between on & off. Turns out that starting with
Android 4.3, navigation resets the online state, so the code had a 50/50
chance of being caught in the wrong state.

We now forcefully reset the online state on page transitions.
2014-02-26 20:23:07 -05:00
Andrew Grieve
5fb83e7f52 Add another convenience overload for CordovaResourceApi.copyResource 2014-02-26 20:20:10 -05:00
Andrew Grieve
dd6bf568d1 Update framework's .classpath to what Eclipse wants it to be. 2014-02-26 20:18:35 -05:00
Andrew Magee
00ee164cef README.md: android update to android-19. 2014-02-18 22:12:03 -05:00
Andrew Grieve
448071b02d Fix NPE when POLLING bridge mode is used. 2014-02-18 22:11:38 -05:00
Andrew Grieve
4dad9d0e37 Add RELEASENOTES for 3.4.0 2014-02-18 22:11:38 -05:00
Joe Bowser
3a2117c5d3 Updating NOTICE to include Square for OkHttp 2014-02-18 18:31:28 -08:00
Joe Bowser
26a3f6ddc3 Update JS snapshot to version 3.5.0-dev (via coho) 2014-02-14 13:52:31 -08:00
Andrew Grieve
7741312673 CB-5398 Apply KitKat content URI fix to all content URIs 2014-02-14 11:02:17 -05:00
Andrew Grieve
954a1723f1 CB-5398 Work-around for KitKat content: URLs not rendering in <img> tags 2014-02-13 16:10:40 -05:00
Marcel Kinard
87285d94f7 CB-5908: add splascreen images to template
This will enable the default splashscreens to reside in the correct place
after creating a new project. Before only the default icons were present.
I copied these from cordova-app-hello-world.
2014-02-10 16:56:45 -05:00
arudenko
d260d0c182 Added Log.e when Config is not initialised but accessed 2014-02-08 21:24:20 -05:00
Ian Clelland
137eb40fab CB-5395: Make scheme and host (but not path) case-insensitive in whitelist 2014-02-07 15:02:09 -05:00
Andrew Grieve
af440460e1 Fix broken build from prev. commit (copy & paste error?) 2014-02-04 10:00:58 -05:00
Andrew Grieve
a5c8472a37 Ignore multiple onPageFinished() callbacks & onReceivedError due to stopLoading()
I believe this happens only when using custom schemes.
2014-02-04 00:12:11 -05:00
Joe Bowser
dfae37421d Removing addJavascriptInterface support from all Android versions lower than 4.2 due to security vulnerability 2014-02-03 10:11:53 -08:00
Bas Bosman
438a8d8b75 CB-4984 Don't create on CordovaActivity name 2014-01-28 14:25:26 -08:00
Andrew Grieve
ac2034561d CB-5917 Add a loadUrlIntoView overload that doesn't recreate plugins. 2014-01-28 10:30:39 -05:00
Andrew Grieve
c42cd4233d Use thread pool for load timeout. 2014-01-28 10:30:39 -05:00
Andrew Grieve
5b2a73e3eb CB-5715 For CLI, hide assets/www and res/xml/config.xml by default
Add a helper file under assets to say how to re-show the hidden files.
Move the config.xml, www, merges entries to the root to be more discoverable.
2014-01-28 00:28:42 -05:00
Andrew Grieve
6f163a6ba5 CB-5793 ant builds: Rename AndroidManifest during -post-build to avoid Eclipse detecting ant-build/ as a project when importing 2014-01-25 21:58:28 -05:00
Andrew Grieve
cc94cc7d01 CB-5889 Make update script find project name instead of using "null" for CordovaLib 2014-01-24 10:40:40 -05:00
Andrew Grieve
94934ae2cf CB-5889 Add a message in the update script about needing to import CordovaLib when using an IDE. 2014-01-24 10:29:04 -05:00
Joe Bowser
e361f88501 Update JS snapshot to version 3.5.0-dev (via coho) 2014-01-22 16:30:05 -08:00
Joe Bowser
708c042b61 Set VERSION to 3.5.0-dev (via coho) 2014-01-22 16:30:02 -08:00
Andrew Grieve
600599f49e Fix type "LANCH" -> "LAUNCH" 2014-01-22 14:53:40 -05:00
Andrew Grieve
1fe7bbbbc4 CB-5793 Make ant work-around work on windows. 2014-01-21 21:14:32 -05:00
Andrew Grieve
f83d7a7cd1 CB-5793 Add work-around for library references not working with custom output directory (ugh). 2014-01-21 15:09:15 -05:00
Andrew Grieve
7094047b3d CB-5793 Forgot to update ant path for clean. 2014-01-20 10:26:53 -05:00
Andrew Grieve
11d3607688 CB-5793 Don't clean before build and change output directory to ant-build to avoid conflicts with Eclipse. 2014-01-19 23:09:00 -05:00
Andrew Grieve
fcae58d355 CB-4910 Fix CLI's eclipse project template not working on windows due to "*" in the virtual folder name. 2014-01-17 12:00:29 -05:00
Andrew Grieve
ef9ace9e65 CB-5803 Fix cordova/emulate on windows. 2014-01-16 13:19:39 -05:00
Andrew Grieve
22e4039133 CB-5801 Add spawn work-around on windows for it not being able to execute .cmd files
More info: https://github.com/joyent/node/issues/2318
2014-01-16 12:11:31 -05:00
Andrew Grieve
4971670e56 CB-5801 exec->spawn in build to make sure compile errors are shown. 2014-01-15 11:41:34 -05:00
Andrew Grieve
e16cab6b9c CB-5799 Update version of OkHTTP to 1.3 2014-01-15 11:36:43 -05:00
Andrew Grieve
a643c3dba6 Remove package.json within bin/ since we never intend to ship bin/ as an npm module 2014-01-14 16:21:57 -05:00
Andrew Grieve
51abf5b0a6 CB-4910 Update CLI project template to point to config.xml at the root now that it's not in www/ by default. 2014-01-14 12:29:53 -05:00
Andrew Grieve
1cee6e309b Silence excessive logging from scroll events 2014-01-13 12:07:54 -05:00
Joe Bowser
0777a660bf CB-5504: Adding onDestroy to app plugin to deregister telephonyReceiver 2014-01-08 13:12:00 -08:00
Andrew Grieve
5e0479e414 CB-5715 Add Eclipse .project file to create template.
Adds resource filter to hide CordovaLib/, platform_www/, and cordova/.
Adds linked resources to root www/, merges/, config.xml
2014-01-02 16:40:48 -05:00
Andrew Grieve
942c77816d CB-5447 Removed android:debuggable=“true” from project template. 2013-12-30 11:27:17 -05:00
Vyacheslav Shabelnik
8e260d5c40 CB-5714 Fix of android build when too big output stops build with error due to buffer overflow. 2013-12-30 11:06:37 -05:00
Andrew Grieve
7951eee8a3 Fix incorrect MIME type for .js files loaded through CordovaResourceAPI.
This fixes devtools complaining about .js files being served as "text/plain"
when they have gone through remapUrl().
2013-12-23 15:04:54 -05:00
Justin Wark
be2f7d7a8a Remove 2 X console.log from exec.js
With these console.log statements the output from commands such as 'list-devices' is very messy and hence difficult to parse the output programatically.
2013-12-23 08:54:46 -05:00
Andrew Grieve
59c8e8b46e CB-5592 Set MIME type for openExternal when scheme is file: 2013-12-20 11:17:24 -05:00
Andrew Grieve
98c8b28bf3 Add RELEASENOTES for 3.3.0 release 2013-12-16 13:58:45 -05:00
Andrew Grieve
7bb5bc01b7 Backfill 3.2.0 release notes 2013-12-16 13:58:45 -05:00
Marcel Kinard
1482c07ae4 CB-5489: clean up docs for deprecated methods
- fixed grammer in log message in Config.java
- updated the class javadoc in CordovaActivity to catch up to reality: use config.xml instead of set*Property() methods.
- added deprecation message for SetFullscreen
2013-12-14 08:02:58 -05:00
Joe Bowser
adba84ae6a CB-5504: Moving code to the App plugin inside Cordova, the place where the grey area beween plugin and platform exists 2013-12-09 14:03:22 -08:00
Michal Mocny
146e296826 CB-5047: Adding a defaults.xml template
This template will be consumed by the CLI, instead of the default
platform config.xml which is consumed by the bin/create workflow.  We
remove the user app specific settings since those are to be edited in
the top level app config.xml by the user, and are injected by the CLI.
2013-12-05 14:33:21 -05:00
Håkon Nilsen
28c10dba09 CB-5481 Fix for Cordova trying to get config.xml from the wrong namespace 2013-12-05 12:45:34 -05:00
charles bourasseau
e646a0840d Add missing semicolon 2013-12-05 12:41:28 -05:00
Josh Soref
74ea6bf00a Spelling fixes 2013-12-05 12:20:58 -05:00
Rich Trott
d7ad784809 CB-5144 Spelling & grammar fixes in README. 2013-12-05 12:13:07 -05:00
Joe Bowser
642bd10dcc Forgot Apache Headers on MessageTest 2013-12-03 15:52:38 -08:00
Joe Bowser
7c566c36f4 Update JS snapshot to version 3.4.0-dev (via coho) 2013-12-03 15:44:23 -08:00
Joe Bowser
dbbe038939 Set VERSION to 3.4.0-dev (via coho) 2013-12-03 15:44:21 -08:00
ignisvulpis
e3430a916c prevent ClassNotFound exception for emtpy class name
Signed-off-by: Joe Bowser <bowserj@apache.org>
2013-12-03 15:09:32 -08:00
Joe Bowser
ea1f041e11 CB-5487: Remote Debugging is on when your Android app is debuggable. 2013-11-29 15:54:07 -08:00
Joe Bowser
0fe6d9f367 Updating the README 2013-11-29 14:28:11 -08:00
Joe Bowser
46e7359372 Making the object less chatty 2013-11-29 14:28:11 -08:00
Joe Bowser
41cace9a96 Updating tests to KitKat, and making the tests more thread-safe 2013-11-29 14:28:10 -08:00
Joe Bowser
4638331cb4 Incrementing API target 2013-11-29 14:28:10 -08:00
Joe Bowser
e339a7583c CB-5445: Adding onScrollChanged and the ScrollEvent object. (Forgot to add the WebView) 2013-11-29 14:28:10 -08:00
Joe Bowser
0b7570c9ee CB-5445: Adding onScrollChanged and the ScrollEvent object 2013-11-29 14:28:10 -08:00
Joe Bowser
a85acfcfc5 Updated CordovaWebView to experiment with onScrollChanged messages 2013-11-29 14:28:10 -08:00
Michal Mocny
3d4ccbec23 Moving the console.log out of run() method
Since cordova-cli calls the check_req library run() method, we do not
want to always console.log on success in there (not usually a useful side
effect).
2013-11-29 14:39:09 -05:00
Mark Koudritsky
2f66ec60db CB-5422: Don't require JAVA_HOME to be defined
JAVA_HOME is not necessarily defined on Linux and Mac.
Print out the value of JAVA_HOME in the error message
in case "java -version" fails.
2013-11-29 14:31:48 -05:00
Joe Bowser
f1cfe2b07b Thanks for Benn Mapes for making this process easy. Updating the Android API level. 2013-11-27 12:09:17 -08:00
Marcel Kinard
6160ca6e30 CB-5490: add javadoc target to ant script
- add javadoc target to ant script. It must be invoked explicitly to run.
- ignore the generated javadoc html directories.
- clean up javadoc errors in source files.
- upon invoking 'clean' target, erase generated jar and javadoc
2013-11-26 13:06:28 -05:00
Marcel Kinard
b621c3e4c4 CB-5471: add deprecation javadoc/annotation 2013-11-26 12:05:23 -05:00
Marcel Kinard
64d2ae9ad4 Add javadoc comments to source classes 2013-11-22 17:42:58 -05:00
Joe Bowser
39fc45b8d8 CB-5255: Checking in the Google Check, TODO: Add Amazon FireOS check 2013-11-20 09:35:23 -08:00
Andrew Grieve
fd954adc81 CB-5232 Change create script to use Cordova as a library. 2013-11-15 13:17:56 -05:00
Andrew Grieve
8b379cbf56 Remove Application settings from framework/AndroidManifest.xml
They aren't needed since framework is a library.
2013-11-15 12:01:12 -05:00
Marcel Kinard
59c0b04602 CB-5346: remove dependency on device plugin
- remove dependency on the device plugin in the js and html
- clean out dollar signs chars that were accidently appended to the license
- fix punctuation in the viewport value
2013-11-13 15:09:19 -05:00
Marcel Kinard
11b3cf3bfd CB-5346: delete a stale file that isn't needed 2013-11-13 13:54:33 -05:00
Joe Bowser
9254f5a8a5 Updating instructions to indicate that the device plugin is required to be installed via plugman 2013-11-12 14:34:14 -08:00
Joe Bowser
e5b68f4a3c Fixing plugins configuration, Device shouldn't be checked in here 2013-11-12 14:27:09 -08:00
Joe Bowser
95babc01e3 Removing device plugin 2013-11-12 14:25:37 -08:00
Joe Bowser
4dd792a49f Removing the plugins directory after the plugins were incorrectly removed 2013-11-12 14:24:30 -08:00
Joe Bowser
207c50e500 This should use plugman to install plugins. Adding path depenencies for plugins is wrong, and shouldn't be done 2013-11-12 13:59:17 -08:00
Steven Gill
763e34e861 CB-5349: fixed regression in update script 2013-11-11 16:32:34 -08:00
Marcel Kinard
b895a0c335 CB-5346 Fix and cleanup broken Android unit test
- Found stale cordova.js in the test project. Changed ant script to copy in
  a fresh one in the pre-build stage. Removed stale copies from git, added
  to .gitignore. This is what was causing the test failure when sending
  javascript to the webview.
- Found almost-stale copy of device plugin, did the same as above.
- Fixed spacing in log messages in CordovaWebView.
- Updated README.md with current information.
- Removed dollar signs that were previously accidently appended to the license.
- Added cordova version to html pages, next to the other metadata.
- Fix incorrect separator in the viewport meta tag.
- Changed old-style <log> tag to <preference name="loglevel"> in config.xml.
- In BackButtonMultiPageTest, increased the TIMEOUT so the deviceready event
  can trigger the referenced javascript, improved the setup() method to
  explicitly load the starting point.
2013-11-11 16:19:01 -05:00
Josh Soref
c5767eb545 CB-5307 Remove references to Callback and Incubator 2013-11-07 09:02:17 -05:00
Joe Bowser
94fb79c17f CB-5302: Massive movement to get tests working again 2013-11-06 15:06:20 -08:00
Joe Bowser
6856b02aa7 Set VERSION to 3.3.0-dev (via coho) 2013-11-06 15:06:19 -08:00
Marcel Kinard
04f812c136 CB-5301 add missing license headers 2013-11-06 16:27:46 -05:00
Braden Shepherdson
8783cf03b2 [CB-4996] Fix paths with spaces while launching on emulator and device 2013-11-06 10:37:59 -05:00
Marcel Kinard
4e1156e083 CB-5284 Fixing the version from coho
Fixing the hardcoded versions, it got auto-incremented by accident.
2013-11-05 14:43:01 -05:00
Joe Bowser
1d6e1d416b Fixing the VERSION file, it got auto-incremented by coho by accident 2013-11-01 15:29:08 -07:00
Joe Bowser
fd02e5a07e Update JS snapshot to version 2.10.0-dev (via coho) 2013-11-01 11:11:13 -07:00
Joe Bowser
937056fcaf Set VERSION to 2.10.0-dev (via coho) 2013-11-01 11:11:09 -07:00
Carlos Santana
41ed18684d CB-5209 Win: Cannot build Android app if project path contains spaces 2013-10-29 16:29:19 -04:00
Joe Bowser
96d4a22215 CB-5209: Dirty, Dirty Fix for Building. This works, but needs to be prettier. 2013-10-29 14:27:46 -04:00
Andrew Grieve
6e4ef508e8 CB-5193 Fix Android WebSQL sometime throwing SECURITY_ERR.
Turns out our Quota logic has been wrong all along. If we were to
actually track the quota needed, we'd need to store a map of
dbName->quota for all dbNames. Instead, we just set a really high quota
since we don't ever want to decline storage.

I *think* this fixes all of the SECURITY_ERR exceptions we've been
seeing. Even those on Honeycomb / ICS.
2013-10-24 11:08:02 -04:00
Andrew Grieve
4437d7f3c4 CB-5191 Deprecate <url-filter> 2013-10-23 22:02:49 -04:00
Braden Shepherdson
001570e941 Updating shelljs to 0.2.6. Copy now preserves mode bits. 2013-10-23 15:22:36 -04:00
Tim Kim
28c41294bb CB-4872 - moved version script to promise model 2013-10-18 17:13:57 -07:00
Tim Kim
82898da507 CB-4872 - make sure to copy over version scripts to project 2013-10-18 17:13:57 -07:00
Tim Kim
eabcdbf129 [CB-4872] - added android version scripts 2013-10-18 17:13:57 -07:00
mbillau
5ab11edad2 CB-5117: Output confirmation message if check_reqs passes. 2013-10-18 14:22:27 -04:00
Braden Shepherdson
b57317bdc2 Refactoring Android project-level and platform scripts to use Q.js
This eliminates the use of shelljs.exec's sync mode, which is the source
of the filehandle leaks that can cause EMFILE on OSX, and are
CPU-intensive everywhere.

Tested locally, needs poking before it gets released.
2013-10-16 13:10:53 -04:00
Braden Shepherdson
1f49f29183 Updating to latest shelljs, old version doesn't preserve +x bits 2013-10-16 13:10:39 -04:00
Andrew Grieve
638fbfabdc Remove cordova.xml fallback from Config.java (it was removed from PluginManager for 3.0) 2013-10-15 12:17:31 -04:00
Andrew Grieve
16de12a3ba CB-5080 Find resources in a way that works with aapt's --rename-manifest-package 2013-10-15 12:17:14 -04:00
Andrew Grieve
1316578ba3 Update JS snapshot to version 3.2.0-dev (via coho) 2013-10-02 12:40:53 -04:00
Andrew Grieve
1926c50f09 Remove a couple incorrect lines from RELEASENOTES.md 2013-10-01 15:13:07 -04:00
Joe Bowser
b858a4a5d7 CB-4961: shell.js returns the full path on ls, rebuilding the full path isn't really needed 2013-09-30 16:01:42 -07:00
Joe Bowser
ec9741443b Updating README.md to have latest Android SDK 2013-09-26 14:35:00 -07:00
Joe Bowser
fe7b2a36ec CB-4527: This was an easy fix, since the script deletes batch files 2013-09-24 10:52:41 -07:00
Andrew Grieve
2d88a726b7 [CB-4892] Fix create script only escaping the first space instead of all spaces. 2013-09-23 10:16:58 +02:00
Andrew Grieve
a51edd3579 Fix update script to clobber cordova.js file (missing -f) 2013-09-19 15:47:49 -04:00
Andrew Grieve
b7ede8f9ba Add missing copyright header for Whitelist.java. 2013-09-17 14:20:57 -04:00
Andrew Grieve
15f36cc19d [CB-4832] Add 3.1.0 RELEASENOTES.md 2013-09-17 13:08:07 -04:00
Andrew Grieve
95edd970bc Update JS snapshot to version 3.2.0-dev (via coho) 2013-09-17 11:03:52 -04:00
Andrew Grieve
2c6285d4b3 Set VERSION to 3.2.0-dev (via coho) 2013-09-17 11:03:51 -04:00
Andrew Grieve
1d1cdb5ea4 Always have create script rebuild jar when on a dev version 2013-09-16 14:25:12 -04:00
Andrew Grieve
34bdef9c45 [CB-4817] Remove unused assets in project template. 2013-09-13 23:07:41 -04:00
Andrew Grieve
cad673f8cd [CB-4817] Avoid generating unused files in create script
by using "android update project" instead of "android create project"
2013-09-13 22:49:15 -04:00
Andrew Grieve
7c446b222d [CB-3542] Convert update script to be node-based. 2013-09-13 22:49:15 -04:00
Andrew Grieve
1bd0f8fcf4 [CB-3542] Delete old ant-based bin/create.xml file. 2013-09-13 22:49:14 -04:00
Andrew Grieve
dd3c261ba2 [CB-3542] Only update framework/ project when building the jar.
No need to do it during every check_reqs.
This also extracts the jar building into a helper function.
2013-09-13 22:49:14 -04:00
Andrew Grieve
70cc711ec1 [CB-3542] Delete custom replaceInFile with shelljs.sed(). 2013-09-13 22:07:38 -04:00
Andrew Grieve
485f2ee923 [CB-3542] Fail create script if a copy fails. 2013-09-13 22:07:35 -04:00
Andrew Grieve
129be6e476 [CB-3542] Delete extra message when check_reqs fails.
check_reqs already outputs a message.
2013-09-13 22:07:31 -04:00
Andrew Grieve
c08b64efb3 [CB-3542] Fix create script's check for whether cordova.jar exists. 2013-09-13 22:07:23 -04:00
Andrew Grieve
f4a0f55b13 Fail fast in create script if package name is not com.foo.bar. 2013-09-13 16:08:45 -04:00
Joe Bowser
39d32bcb5b CB-4620: Throwing this over the fence, since there is a problem actually in the wild here 2013-09-11 15:02:00 -07:00
Andrew Grieve
3351fdbc74 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
2013-09-11 11:13:57 -04:00
Andrew Grieve
7be1f018aa [CB-3542] Commit bin/node_modules so that it doesn't need to be npm installed. 2013-09-10 16:58:28 -04:00
Andrew Grieve
437daa368a [CB-4782] Convert ApplicationInfo.java -> appinfo.js 2013-09-10 16:32:42 -04:00
Andrew Grieve
3df09eacf2 Remove out-of-date create script tests.
They have clearly not been run in a long time. We verify create script
output manually during releases, and I think that's more meaningful.
2013-09-10 15:25:01 -04:00
Andrew Grieve
483dd3435a [CB-4769] Fix create script failure due to deleted version.js file 2013-09-10 09:21:57 -04:00
Andrew Grieve
2b0aa03380 [CB-4766] Delete JSONUtils.java 2013-09-09 16:47:55 -04:00
Andrew Grieve
fc7261b199 [CB-4765] Move ExifHelper.java out of core (and into camera plugin) 2013-09-09 16:17:53 -04:00
Andrew Grieve
3200c50b9f [CB-4764] Delete DirectoryManager.java 2013-09-09 16:11:41 -04:00
Andrew Grieve
862a8eab8d [CB-4763] Delete FileHelper.java, Move getMimeType() into CordovaResourceApi. 2013-09-09 15:43:04 -04:00
Andrew Grieve
1bfcc92677 Make version in version script easier to replace by coho 2013-09-09 15:37:00 -04:00
Andrew Grieve
80a09b8f36 [CB-4725] Add CordovaWebView.CORDOVA_VERSION constant
This used to be available as Device.cordovaVersion, but was broken in 3.0.
2013-09-09 11:22:18 -04:00
Joe Bowser
5f7ce4b868 Reverting CB-3949: Squeay wheel gets the grease 2013-08-28 14:42:23 -07:00
Joe Bowser
412d97fa0c Incremeting version check for Android 4.3 API Level 18 2013-08-28 14:41:42 -07:00
Benn Mapes
57bed98cf1 Added commit 150cdfd, override arg for project template
Conflicts:
	bin/create
2013-08-28 14:04:43 -07:00
Benn Mapes
b1d8788506 Fix for cli with new node scripts 2013-08-27 11:41:54 -07:00
Benn Mapes
1bd4900981 [CB-3542] rewrote cli tooling scripts in node 2013-08-26 14:45:28 -07:00
Ian Clelland
e6812f18a0 Allow CordovaChromeClient subclasses access to CordovaInterface and CordovaWebView members 2013-08-23 14:37:36 -04:00
Ian Clelland
f604988181 Refactor CordovaActivity.init so that subclasses can easily override factory methods for webview objects 2013-08-23 13:04:19 -04:00
Ian Clelland
150cdfd3ac [CB-4652] Allow default project template to be overridden on create 2013-08-23 13:04:19 -04:00
Joe Bowser
f42b34d6b4 CB-4318: We have docs, this doesn't need to be in the comments 2013-08-20 16:29:31 -07:00
Andrew Grieve
166b35bc6c Tweak the online bridge to not send excess online events.
It does so by having the JS tell it when online events have fired.
2013-08-15 15:55:08 -04:00
Tomaz Muraus
121b74fa0c [CB-4495] Modify start-emulator script to exit immediately on a fatal emulator error. 2013-08-15 11:46:50 -04:00
Andrew Grieve
5451320350 Log WebView IOExceptions only when they are not 404s 2013-08-15 11:33:38 -04:00
Andrew Grieve
fe45b29ef6 Use a higher threshold for slow exec() warnings when debugger is attached. 2013-08-13 15:08:54 -04:00
Andrew Grieve
4e1aa8aa59 Fix data URI decoding in CordovaResourceApi
It was not URI-decoding first, and so was broken for non-base64-encoded
URIs.
2013-08-13 14:11:40 -04:00
Ian Clelland
fa366eb7a8 [CB-4140] Fix master branch cordova version to 3.1.0-dev 2013-08-09 10:45:39 -04:00
Andrew Grieve
e086a706ba Remove plugin references in test project's config.xml 2013-08-02 13:19:14 -04:00
Benn Mapes
53b8da8198 [CB-4466] fixed jscript check_reqs to get target from project.properties 2013-08-01 17:57:58 -07:00
Fil Maj
c2c5f71018 [CB-4463] Updated bin/check_reqs to looks for android-18 target.Also fixed an issue in unix version of script that would invoke the android command if an error occurred. 2013-07-30 17:14:46 -07:00
Joe Bowser
2bdc849c2b CB-3819: Implemented Feature 2013-07-30 15:03:25 -07:00
Max Woghiren
7cbe8f5843 [CB-4013] Fixed loadUrlTimeoutValue preference. 2013-07-30 12:21:50 -04:00
Sharif Ahmed
810df61049 [CB-4410] Fixed @param mismatching 2013-07-30 11:21:02 -04:00
Joe Bowser
5c38101a9e Upgrading project to Android 4.3 2013-07-29 11:30:41 -07:00
Fil Maj
b4236b9783 [CB-4198] bin/create script should be better at handling non-word characters in activity name. Patched windows script as well. 2013-07-25 10:33:05 -07:00
Fil Maj
980c4699b0 [CB-4198] bin/create should handle spaces in activity better. 2013-07-24 21:21:41 -07:00
Ian Clelland
463c7b5027 [CB-4096] Implemente new unified whitelist for android 2013-07-23 11:23:14 -04:00
David Kemp
7c7230dd35 [CB-4280] handle invalid bridge mode request 2013-07-22 18:15:09 -04:00
Andrew Grieve
b915aafb5b [CB-3384] Fix thread assertion when plugins remap URIs 2013-07-18 01:38:47 -04:00
David Kemp
8202ab83fa [CB-4133] Add main thread warning for plugins that run too long 2013-07-16 21:19:11 -04:00
Joe Bowser
2fe6d14e56 We can remove the plugins tag now. Tested plugman, it's all good. 2013-07-16 15:00:28 -07:00
Ian Clelland
7ee285342f Update cordova.js to latest (3.0.0-rc1) version 2013-07-16 14:48:48 -04:00
Andrew Grieve
6fe18ae0ab [CB-3384] Use the ExposedJsApi to detect webCore thread instead of IceCreamCordovaWebViewClient.
Also removes a debug log statement.
2013-07-16 09:39:47 -04:00
Joe Bowser
5c4fa213d1 CB-4230: We test Cordova, not jQuery Mobile 2013-07-15 14:08:54 -07:00
Joe Bowser
1895d8ac9e CB-3944: Removing activity that doesn't exist 2013-07-15 13:54:00 -07:00
Joe Bowser
7f5f87ac72 CB-3957: The new activity wasn't added to the Android Manifest 2013-07-15 13:51:27 -07:00
ldeluca
0244341ac5 moved the backgroundcolor class to correct classpath 2013-07-15 13:46:18 -07:00
ldeluca
ae96d5678b changes the test name to make it auto run 2013-07-15 13:46:17 -07:00
denis
a9ebf50b86 Prevent NPE in case webview is lately initialized 2013-07-15 13:34:55 -07:00
Andrew Grieve
8d8cbf6e28 Set minSdkVersion to 8 for DroidGap project 2013-07-15 15:22:51 -04:00
Andrew Grieve
77e9092108 [CB-3384] Reworked UriResolver into CordovaResourceApi.
Changes were made after trying to use the API for Camera, FileTransfer, Media.
The main difference is separating the concept of URI remapping from the read/write helpers.
2013-07-15 15:18:39 -04:00
Fil Maj
210d7c76e6 [CB-3605] Updated README to reflect changes in command-line scripts for cordova-android. 2013-07-15 11:27:05 -07:00
Fil Maj
01ad3f447a [CB-3605] removing unused package.json 2013-07-12 10:27:27 -07:00
Ian Clelland
546948cb8c [CB-4154] Set default Android target to android-17
This is done in the default project.properties file, as well as the create
script for new projects.
2013-07-11 22:26:15 -04:00
Joe Bowser
37c20c3f67 Updating cordova.js for unit tests 2013-07-11 16:26:12 -07:00
Joe Bowser
22daea11e1 Accidentally committed Blacklist Test, removing this broken test case 2013-07-11 16:25:38 -07:00
Joe Bowser
792aa78aec Updating imports on all the tests 2013-07-11 15:04:24 -07:00
Joe Bowser
5cf95cfa01 CB-4156: Adding back the App plugin, since this is required 2013-07-11 14:00:50 -07:00
Ian Clelland
fff956304f [CB-4140] Fix master branch cordova version to DEV 2013-07-11 14:11:37 -04:00
Ian Clelland
3ae28b3085 [CB-4151] Extract whitelist from Config class for testability 2013-07-11 14:11:37 -04:00
Joe Bowser
b5df9dd88e CB-3724: Removing the file exceptions 2013-07-11 10:21:40 -07:00
Max Woghiren
b6a01a203a [CB-4103] Made config parameters case-insensitive.
For consistency with other platforms (and for readability), UpperCamelCasing is used by default in the code.
2013-07-10 17:27:13 -04:00
Andrew Grieve
990d91360d [CB-3384] Add a length getter for UriResolver. Change from interface -> abstract class.
Thinking here is that we can maintain compatibility going forward with a
base class as opposed to interface by having new methods on it have
default implementations.
2013-07-10 15:13:03 -04:00
Andrew Grieve
b5c3ac605a [CB-4038] - Remove o.a.c.api namespace 2013-07-10 09:44:54 -04:00
denis
55865a4f1d Let subclasses override focus behavior
Signed-off-by: Joe Bowser <bowserj@apache.org>
2013-07-09 15:45:41 -07:00
Joe Bowser
ff27ad332b CB-3172: Killing the deprecation notice in Android, waiting for plugman fixes before removing the empty tags 2013-07-09 15:13:15 -07:00
Joe Bowser
85bad87c1c CB-4139: Seriously, we didn't deprecate this for a year? WTF? 2013-07-09 15:10:42 -07:00
Ian Clelland
f7014f14df Update cordova.js -- includes new Binary bridge, supporting Android 4.0 2013-07-09 16:45:25 -04:00
Andrew Grieve
99341bce29 [CB-3384] Make UriResolver assert that IO is not on the UI nor WebCore threads. 2013-07-05 11:44:38 -04:00
bennmapes
bf6291020a Added 'log' back to windows cli tooling 2013-07-03 10:52:13 -07:00
Andrew Grieve
79829f6209 [CB-4038] Move non-deprecated classes from the api package into the main package. 2013-06-28 21:53:09 -04:00
Andrew Grieve
a97487bcec [CB-4048] Merge branch '3.0.0' into master 2013-06-28 11:59:54 -04:00
Andrew Grieve
892ffc8ce4 [CB-3384] Rewrite of DataResource into UriResolver + UriResolvers
Includes unit tests woot!

Note that this remove CordovaPlugin.shouldInterceptRequest(). Should be
fine since this method was introduced only a couple of releases ago, was
never documented, and afaict was only used by the Chrome Cordova plugins.
2013-06-27 21:55:28 -04:00
Joe Bowser
fbf7f1c3f9 Fixes to the update command so it doesn't delete anything other than build artifacts 2013-06-27 12:59:49 -07:00
Andrew Grieve
3b7e0504e8 Remove accidentally checked in log statement "running exec normally"
(cherry picked from commit 68bc57ae85)
2013-06-26 14:23:50 -04:00
Andrew Grieve
68bc57ae85 Remove accidentally checked in log statement "running exec normally" 2013-06-26 14:22:41 -04:00
Andrew Grieve
f42e5f66fd Explicitly print exceptions that occur within ExposedJsApi.
Before they trickled into JNI and the stack traces were lost.
(cherry picked from commit 10d31ea0a3)
2013-06-26 14:21:48 -04:00
Andrew Grieve
10d31ea0a3 Explicitly print exceptions that occur within ExposedJsApi.
Before they trickled into JNI and the stack traces were lost.
2013-06-26 14:20:45 -04:00
Don Coleman
e64ebdfaee [CB-3998] video duration is an int 2013-06-25 14:35:23 -04:00
Joe Bowser
7e15ff930d Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-06-24 11:31:47 -07:00
Joe Bowser
b83610a653 CB-3949: Adding code to mitigate broken intents with the application installer 2013-06-24 11:31:32 -07:00
Jeffrey Willms
16e08384c0 [CB-3927] Fix start-up race condition that could cause exec() responses to be dropped.
Requires a change to the JS as well.
(cherry picked from commit 9cb14838e8)
2013-06-21 18:31:57 -04:00
Jeffrey Willms
9cb14838e8 [CB-3927] Fix start-up race condition that could cause exec() responses to be dropped.
Requires a change to the JS as well.
2013-06-21 18:30:50 -04:00
Fil Maj
6fe66ad79c Accidentally commented "build" out when running ./run --emulator. Whoops D: 2013-06-21 14:23:40 -07:00
Andrew Grieve
f78b444ed1 Remove PluginManager.exec's return value (unused).
It's not only not used, but when it was used was messing up the
DISABLE_EXEC_CHAINING flag.
(cherry picked from commit 9946d15f23)
2013-06-20 22:22:59 -04:00
Andrew Grieve
9946d15f23 Remove PluginManager.exec's return value (unused).
It's not only not used, but when it was used was messing up the
DISABLE_EXEC_CHAINING flag.
2013-06-20 22:20:58 -04:00
Joe Bowser
b032dcca16 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-06-20 16:33:17 -07:00
Joe Bowser
01d6ae55a4 CB-3854: Added support for wildcard. This probably could be improved, but it does work 2013-06-20 16:33:14 -07:00
Joe Bowser
f1b377bf07 CB-3854: Added support for wildcard. This probably could be improved, but it does work 2013-06-20 16:32:18 -07:00
Andrew Grieve
03c5208d47 Update JS snapshot to version 2.9.0rc1 (via coho) 2013-06-20 15:21:58 -04:00
Joe Bowser
3ace9348f6 Merge branch 'CB-3932' of git://github.com/angelaf/cordova-android 2013-06-19 16:03:18 -07:00
Angela Fowler
3a14017729 CB-3932 Remove baseUrl comment in handleDestroy method made redundant by CB-3766 2013-06-19 15:22:42 +10:00
Steven Gill
e726c0d60b updated cordova.js 2013-06-18 17:01:56 -07:00
Joe Bowser
98b971b4de CB-3902: Explicitly add market URIs to CordovaWebViewClient so this always works, not just sometimes 2013-06-18 16:20:14 -07:00
Benn Mapes
4ec3d6d064 [CB-3625] [CB-3338] updated windows cli scripts and added version option 2013-06-18 14:56:11 -07:00
Tim Kim
c531d97ed2 Need to remove reference to device plugin in template 2013-06-18 14:26:11 -07:00
Joe Bowser
8c9e416175 CB-3784: Patches are always welcome 2013-06-18 13:14:30 -07:00
Andrew Grieve
431f3337d9 Update JS snapshot to version 2.9.0rc1 2013-06-18 13:49:19 -04:00
Fil Maj
63ab701685 updated js from latest cordova-js 3.0 2013-06-17 16:53:04 -07:00
Joe Bowser
c9b164b983 Removing bench from the README 2013-06-17 15:49:40 -07:00
Joe Bowser
54d32ad910 CB-3784: Nit-picking 2013-06-17 15:45:56 -07:00
Steven Gill
c8140bad19 removed device.java 2013-06-17 15:27:02 -07:00
Fil Maj
2e5b6bce55 updated cordova.js to remove dependency on network status plugin. 2013-06-17 12:08:10 -07:00
Fil Maj
5ee178789f Axed all permissions from template manifest except for INTERNET. Bumped minSDkVersion to 10. 2013-06-17 11:23:17 -07:00
Fil Maj
0efd9fcac0 [CB-3627] start-emulator now properly starts, waits for and unlocks an emulator, consumed by run as well. 2013-06-14 17:22:57 -07:00
Joe Bowser
c0a39570c9 CB-2391: False positive, this affects 4.2.2, not ICS. Bug breaks before we get to this point. :( 2013-06-14 17:03:40 -07:00
Joe Bowser
9ac4b570e6 CB-2391: Fix for colons crashing the WebView on ICS, tested on Samsung Galaxy S2 2013-06-14 16:55:47 -07:00
Joe Bowser
6689827278 Fixing the config.xml on tests to use the ActivityPlugin 2013-06-14 15:31:23 -07:00
Joe Bowser
86a24ebd0f Updating the JS used in the tests 2013-06-14 15:31:03 -07:00
Joe Bowser
d2a7d18067 Fixed bad comment, it's all dying at the same time 2013-06-14 15:30:24 -07:00
Joe Bowser
b679672c0e Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-06-14 15:29:51 -07:00
Joe Bowser
90f83db9c9 CB-3504: Fixing issue with the use of WebResourceResponse on pre-Honeycomb devices. 2013-06-14 15:29:30 -07:00
Fil Maj
32d74f8623 correct refs to various lib scripts in run. 2013-06-14 14:48:23 -07:00
Fil Maj
53cc381c76 removing unused script anymore from create. 2013-06-14 14:44:26 -07:00
hermwong
d845736948 removed file system access permission 2013-06-13 16:59:54 -07:00
Fil Maj
add107583f Proper modularization of bash scripts for [CB-3627], but not solved yet. wait_for_emulator does not work atm 2013-06-13 16:46:21 -07:00
hermwong
dd837f7130 removed vibration permission 2013-06-13 16:31:27 -07:00
Steven Gill
12ebadbb0f Merge branch '3.0.0' of https://git-wip-us.apache.org/repos/asf/cordova-android into 3.0.0 2013-06-13 15:56:00 -07:00
Steven Gill
e30bc6b6e4 updated cordovajs 2013-06-13 15:55:48 -07:00
Tim Kim
9288158226 Made some functions in DirectoryManager public 2013-06-13 15:24:01 -07:00
Steven Gill
3a55991480 updated js 2013-06-13 14:54:30 -07:00
Steven Gill
9e44596db7 updated directory manager 2013-06-13 14:39:08 -07:00
Fil Maj
e86d811fc0 [CB-3626] fix to start-emulator: if no id is provided, should start the first emulator 2013-06-13 12:44:43 -07:00
Ian Clelland
5cff144a22 [CB-2406] Add support for binary data in FileWriter.write() 2013-06-12 13:33:03 -04:00
Joe Bowser
a021adb7fd CB-3766: Javascript uses loadUrl, not loadUrlIntoView, which is only for documents 2013-06-12 09:33:52 -07:00
Joe Bowser
e2a090bbba Don't call loadUrlIntoView on the actvity 2013-06-12 09:18:10 -07:00
Joe Bowser
a70c8536f9 Re-adding the Plugin.java shim for now. This will remain a 2.x-only feature 2013-06-11 10:38:42 -07:00
Steven Gill
9aaa152b9a updated from master 2013-06-10 17:15:05 -07:00
hermwong
a2b8ebf57e Merge branch '3.0.0' of https://git-wip-us.apache.org/repos/asf/cordova-android into 3.0.0 2013-06-10 16:21:32 -07:00
hermwong
b3fe47985a removed android.permission.ACCESS_COARSE_LOCATION and android.permission.ACCESS_FINE_LOCATION from AndroidManifest.xml for PBR 2013-06-10 16:14:56 -07:00
Joe Bowser
e52d4fc003 CB-3736: Cleaning up code so that this makes more sense. Variables are OK 2013-06-07 16:43:53 -07:00
Joe Bowser
3753e3f353 Trying to get DataResource reverted so that we don't have to worry about this blowing up while we're breaking things out. DataResource should be on a branch until it's ready! 2013-06-06 14:35:12 -07:00
Andrew Grieve
979d8e66f2 Revert "Added "DataResource" - allows many plugins to intercept a single request"
This reverts commit 62c3e46529.
Reverting all DataResource changes for the 2.8.0 release.

Conflicts:

	framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
	framework/src/org/apache/cordova/api/DataResource.java
	framework/src/org/apache/cordova/api/DataResourceContext.java
2013-06-06 14:14:14 -07:00
Andrew Grieve
c5b37cc7e7 Revert "Changed all usages of FileHelper to use the new DataResource mechanism."
This reverts commit 867358ea81.
Reverting all DataResource changes for the 2.8.0 release.

Conflicts:

	framework/src/org/apache/cordova/FileUtils.java
2013-06-06 14:12:44 -07:00
Andrew Grieve
e3989bcc2b Revert "DataRequest code cleaned up."
This reverts commit a001d8cfb7.
Reverting all DataResource changes for the 2.8.0 release.

Conflicts:

	framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
2013-06-06 14:10:13 -07:00
Andrew Grieve
2f9c512b59 Revert "DataResource bugfix WebviewClient logs error for http urls."
This reverts commit 8f91ebf194.
Reverting all DataResource changes for the 2.8.0 release.

Conflicts:

	framework/src/org/apache/cordova/FileHelper.java
	framework/src/org/apache/cordova/IceCreamCordovaWebViewClient.java
2013-06-06 14:08:52 -07:00
Andrew Grieve
43172cf530 Revert "CB-3496: Fixed streaming audio, this is pretty important for mobile spec"
This reverts commit aa81966e0b.

Going to revert all DataResource changes for on the 2.8.x branch.
2013-06-06 14:06:54 -07:00
Braden Shepherdson
e518eacbde Replace naive relative path in version script with proper one 2013-06-06 12:00:33 -04:00
David Kemp
c3b8b279b0 CB-3420: add hidden option to InAppBrowser 2013-06-05 10:19:56 -04:00
Joe Bowser
0dd4951be7 Forgot to update this so that it doesn't destroy someone's project, FAIL 2013-06-04 14:28:16 -07:00
Joe Bowser
12d06bd727 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-06-03 14:45:49 -07:00
Joe Bowser
bc52345f05 CB-3548: Throwing this one over the fence, but this change appears sane. We should just return false. 2013-06-03 14:45:27 -07:00
Ian Clelland
c28a313374 [CB-3569] Allow FileTransfer.upload to reference android_assets 2013-06-03 16:14:22 -04:00
Ian Clelland
c509c8e7e5 [CB-3563] Update references to DroidGap in code comments 2013-05-31 11:20:33 -04:00
Ian Clelland
fb89cef256 [CB-3563] Replace instances of DroidGap in log messages with more appropriate symbols 2013-05-31 11:16:09 -04:00
Ian Clelland
9ac9fd4fe9 [CB-3563] Change default logging tag from DroidGap to CordovaActivity 2013-05-31 10:54:40 -04:00
Ian Clelland
dfb89df4f1 [CB-3561] Update documentation comments to match implementation
Affects CordovaInterface and CordovaActivity. There should probably be a
concerted effort to update this across the entire project.
2013-05-31 10:54:40 -04:00
Andrew Grieve
0e572aea36 [CB-3340] Add copying of the version script to bin/create 2013-05-29 10:23:00 -04:00
Andrew Grieve
420cee4ee6 [CB-3468] Add missing license headers found by RAT 2013-05-28 16:43:38 -04:00
Ian Clelland
403297d967 CB-3523: Fix NPE on app restart with outstanding callback 2013-05-28 15:11:25 -04:00
Ian Clelland
abba254a38 CB-3358: Remove one more reference to commons-codec 2013-05-28 15:09:21 -04:00
Shravan Narayan
048107e378 CB-3384 Bugfix - Non null Mimetype is not required for WebResourceResponse 2013-05-28 13:58:39 -04:00
David Kemp
78efe2a960 CB-3358: Change Commons-codec:base64 to Android:Base64 2013-05-27 22:25:23 -04:00
Andrew Grieve
8077091b34 Update JS snapshot to version 2.8.0rc1 2013-05-27 22:15:49 -04:00
Joe Bowser
683e32cffb Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-05-24 11:29:49 -07:00
Joe Bowser
1c9d76e637 CB-3496: Fixed streaming audio, this is pretty important for mobile spec 2013-05-24 11:29:28 -07:00
Steven Gill
98d9901693 removed contacts from js 2013-05-23 15:18:39 -07:00
David Kemp
ee58107caa CB-3480: update now uses cordova.js not cordova-<ver>.js 2013-05-23 12:20:15 -04:00
Steven Gill
75f358d01e removed contact code from js 2013-05-22 17:12:13 -07:00
Ian Clelland
01946dd4d6 [CB-3430] [CB-1413] Remove Old (2.3.3) HTTP Workaround 2013-05-22 13:57:16 -04:00
Joe Bowser
c9e16b2c39 CB-3364: Updating build instructions 2013-05-21 15:23:55 -07:00
Joe Bowser
77eada7dbd CB-3064: We need to re-create the config object on resume, always create an object on init. 2013-05-21 13:33:09 -07:00
Steven Gill
f7c97cb1d0 removed splashscreen code from cordova.js 2013-05-21 13:04:40 -07:00
Andrew Grieve
f38a2ae14a Add a .reviewboardrc file to make using post-review easier. 2013-05-21 12:35:47 -04:00
Steven Gill
7c22bc74bc removed batter code from js 2013-05-20 17:40:11 -07:00
Steven Gill
dfd668d145 removed inappbrowser from cordovajs 2013-05-20 15:01:50 -07:00
Steven Gill
dbc6dd73f3 removed CordovaLocationListner 2013-05-17 15:38:08 -07:00
Steven Gill
4765c6fcc5 updated cordovajs, removed geolocation code 2013-05-17 15:19:04 -07:00
Steven Gill
78dd084303 updated cordova.js to include proper plugin loading 2013-05-17 10:51:52 -07:00
Steven Gill
cd9fb9b709 updated cordovajs 2013-05-16 18:01:24 -07:00
Steven Gill
adcbd879c8 ripped out plugins 2013-05-16 17:53:11 -07:00
Fil Maj
227733d195 [CB-3416] adding empty <plugins> element during deprecation window. 2013-05-16 14:35:58 -07:00
Shravan Narayan
13148728b3 Bugfix: Config parser for plugins with onload param.
The functionality was broken in the move from plugins to feature tags.
2013-05-16 15:41:59 -04:00
Shravan Narayan
8f91ebf194 DataResource bugfix WebviewClient logs error for http urls. 2013-05-16 14:29:04 -04:00
macdonst
230c635a54 [CB-3392] Fix a problem with the Windows jscript runtime
The problem is with this line in "create.js":

var ACTIVITY_PATH=PROJECT_PATH+'\\src\\'+PACKAGE_AS_PATH+'\\'+ACTIVITY+'.java';
[...]
exec('%comspec% /c copy "'+ROOT+'"\\bin\\templates\\project\\Activity.java '+ ACTIVITY_PATH +' /Y');

The Windows "copy" command will not create directories that don't exist, so the command above fails because "src\PACKAGE_AS_PATH" doesn't exist.  This can be fixed with:

Also update cordova.js reference
2013-05-14 19:19:10 -04:00
Simon MacDonald
e1f930282c Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-05-13 22:23:25 -04:00
Simon MacDonald
cb07fe395c CB-3068: Android menu not appearing as actionoverflow 2013-05-13 22:22:59 -04:00
Tim Kim
3917284f71 [CB-3340] - version script 2013-05-13 15:30:16 -07:00
Michal Mocny
8bfd45c095 [CB-3307] Fixing bin/create script due to cordova-$VERSION.js -> cordova.js change. 2013-05-13 10:30:02 -04:00
Shravan Narayan
a001d8cfb7 DataRequest code cleaned up. 2013-05-08 17:38:58 -04:00
Shravan Narayan
867358ea81 Changed all usages of FileHelper to use the new DataResource mechanism. 2013-05-08 17:38:58 -04:00
Shravan Narayan
62c3e46529 Added "DataResource" - allows many plugins to intercept a single request 2013-05-08 17:38:58 -04:00
Andrew Grieve
8a95ed8ee6 [CB-3307] Rename cordova-VERSION.js -> cordova.js 2013-05-08 09:52:56 -04:00
Joe Bowser
20caac1b6e CB-3357: Fixing resource grabbing 2013-05-07 13:30:30 -07:00
Joe Bowser
48b8c69ba0 Part 2 of 2: CB-2657 Creating the dummy class so we have backwards compatibility 2013-05-07 09:46:26 -07:00
Joe Bowser
35d53a0684 Part 1 of 2: CB-2657 Moving DroidGap in git so we don't lose random commits. This is irritating 2013-05-07 09:45:50 -07:00
Joe Bowser
dbeb252fee CB-3337: Not sure why the splashscreen was changed, fixing 9-patch 2013-05-03 15:37:48 -07:00
mbillau
21614ea891 Fix spacing, convert all tabs to spaces 2013-05-03 13:21:01 -04:00
mbillau
4b38ccef80 CB-3022: Add default text to Android Prompt 2013-05-03 13:18:30 -04:00
Abel Muiño
2d4d18fd75 [CB-3040] length is 1-based, but index is 0-based, can't use == in comparison 2013-05-03 13:13:48 -04:00
Andrew Grieve
27cd9dde38 [CB-1108] Update config.xml template's list of available <preference>s 2013-05-03 12:18:36 -04:00
Andrew Grieve
373da39ac2 [CB-1108] Make onload=true settable as a <feature> <param>
Plus some simplification of code.
2013-05-03 12:18:21 -04:00
Andrew Grieve
b7990b7df8 Deprecate <log> in favour of <preference name="loglevel"> 2013-05-03 12:11:09 -04:00
Gorkem Ercan
4b9047b7d8 [CB-1108] Convert config.xml from <plugin> to <feature>
This unifies the config.xml used by iOS and Android. Now <feature> tags can be used
to add plugins. The changes are non-intrusive so the older versions of the config.xml
can still be used after this change. The value of a param named "android-package"
determines the class for the plugin.
2013-05-03 11:35:00 -04:00
ucavus
d226818be3 [CB-3304] Windows create script - Parameters should be quoted
Choking on spaces in filenames
2013-05-03 11:12:47 -04:00
Andrew Grieve
1ee9da79f8 Set VERSION to "dev" on master. 2013-04-30 14:33:54 -04:00
Joe Bowser
070eb6b947 Updating notice because okhttp is part of the AOSP 2013-04-29 10:57:00 -07:00
Ian Clelland
cbb0bd5ee7 [CB-2431] Update to okhttp to include jwilson's recovery fixes [f38fec5b] 2013-04-29 09:37:53 -04:00
Ian Clelland
553a25cea7 [CB-2431] Switch to OkHttp for FileTransfer connections 2013-04-29 09:31:23 -04:00
Shravan Narayan
53982272d6 [CB-3226] Fix: plugins can intercept urls with "?", "#", "%20" 2013-04-24 18:59:24 -04:00
Joe Bowser
a32cf2344f CB-2810: Add Source and Line Number to logging, I wish we could tell the Web Console to shut up if it doesn't match our console 2013-04-23 14:56:14 -07:00
Joe Bowser
934cf32163 CB-3064: One line fix for the error where the config wasn't being read. Will have to add doc step for CordovaWebView 2013-04-23 13:53:10 -07:00
Joe Bowser
a17c7b9bbf Fixing CB-2685: This class does nothing. Cordova is a Library not an Application 2013-04-22 16:57:54 -07:00
Joe Bowser
a03df3fad0 Merge branch 'cordova-lib' of git://github.com/bennmapes/cordova-android 2013-04-19 12:59:05 -07:00
Benn Mapes
86cd20dcc3 [CB-2788] added bash check-reqs script 2013-04-19 11:39:48 -07:00
Joe Bowser
71402b658e Merge branches 'scripts' and 'master' 2013-04-19 10:08:16 -07:00
Joe Bowser
5d8d8e77f8 Merge branch 'cordova-lib' of git://github.com/bennmapes/cordova-android into scripts 2013-04-18 16:35:35 -07:00
Benn Mapes
4dee30ed84 [CB-2914] Cli script migration for unix bash 2013-04-18 16:34:52 -07:00
Joe Bowser
025676d6e7 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-04-18 14:52:17 -07:00
Joe Bowser
aad396ae38 CB-3165: Deprecation Notice 2013-04-18 14:44:00 -07:00
Andrew Grieve
c798d131bb Update JS snapshot for 2.7.0 2013-04-18 15:28:00 -04:00
Ian Clelland
bf3e024648 [CB-3066] Fire onNativeReady from JS, as bridge is available immediately 2013-04-18 14:20:32 -04:00
Andrew Grieve
191f31baa7 [CB-2432] Don't try and write exif info for images from picasa 2013-04-17 16:40:00 -04:00
Joe Bowser
d3b7903af8 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-04-17 13:37:48 -07:00
Joe Bowser
99e7d1e161 Merge branches 'sunshine' and 'master' 2013-04-17 13:37:19 -07:00
Andrew Grieve
b13166f5d9 [CB-2432] Fix Camera.getPicture() for picasa images 2013-04-17 16:12:28 -04:00
Andrew Grieve
80fe4458c6 Use FileHelper in IceCreamCordovaWebViewClient.
Removes some duplicate logic and makes it a bit more robust.
2013-04-17 15:51:37 -04:00
Andrew Grieve
791574c26e Make URL parsing more robust in FileHelper.
Fixes some cases when query parameters mess things up.
2013-04-17 15:50:29 -04:00
Joe Bowser
ac61ebf2d5 Merge branch 'master' of github.com:SunshineTech/cordova-android into sunshine 2013-04-17 11:44:49 -07:00
Benn Mapes
4599e9897d [CB-2914] Cli script migration for windows jscript 2013-04-16 15:51:06 -07:00
avidmich
cb99ed0a01 Fixing URL transformation algorithm
It didn't work with URL like this:
http://host.com/path/to/file.txt#/foo?bar=baz
When hash sign is in front of question mark - it only strips the question mark, leaving the hash and breaking the whole app.
2013-04-16 15:45:32 -04:00
Andrew Grieve
4864d52966 [CB-2202] Remove Plugin.java (was deprecated). 2013-04-16 15:29:16 -04:00
Andrew Grieve
b2d61679fb [CB-2963] Re-enable sending messages in batches.
Disabled by CB-1745, which is now reverted.
2013-04-16 15:04:56 -04:00
lorinbeer
383b3dadd5 [CB-3024] expanded help string for cl create script 2013-04-12 08:32:22 -07:00
Joe Bowser
c65c259123 CB-2200: Remove deprecated Android device.name 2013-04-11 13:53:12 -07:00
Joe Bowser
e7e2730929 Fixing CB-2955, breaking CB-2085, use localStorage, NOT WebSQL 2013-04-08 15:53:14 -07:00
Joe Bowser
bb9615eed0 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-04-04 16:06:03 -07:00
Joe Bowser
18877bf80e Adding additional condition that the phone must be made by HTC for the setNavDump to be set to true to try and work around CB-2907, if it's still a problem on HTC devices running Android 2.2, that's just the luck of the draw. 2013-04-04 16:05:35 -07:00
HUANG Menghuai
778b784eb6 [CB-2908] Fix the DroidGap activity Lifecycle broken issue
Attempting to invoke the Activity's finish() onDestroy breaks an Activity's lifecycle
flag. OnDestroy can be called by the system, for instance, on restarting an Activity,
it's definitely different from a normal finish().
Finish() incorrectly in onDestroy results in another DroidGap derived activity
is started, while the original one is not yet onDestroy. This issue could be
found when the system is trying to restart the activity upon, for instance,
receiving immediately successive device Config changes.
2013-04-04 16:47:03 -04:00
Andrew Grieve
5ff900f7ec Fixup for CB-2654. 2013-04-04 16:45:39 -04:00
Steren
ba31424604 Keep the splashscreen image ratio instead of streatching it.
An ImageView is used to be able to use ScaleType.CENTER_CROP, which is similar to the background-size:cover CSS property
2013-04-04 16:19:12 -04:00
Ian Clelland
1782111d45 [CB-2654] Delay executeScript/insertCSS callback until resources have loaded; pass JS results to callback 2013-04-04 14:34:58 -04:00
Max Woghiren
1fa63300aa [CB-2666] Added check for null arguments.
If null arguments are received, send an error and an explanation.
2013-04-02 11:51:25 -04:00
Joe Bowser
b42c918973 Prep for 2.6.0 final 2013-04-01 14:54:51 -07:00
Joe Bowser
f12262ea96 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-03-28 10:02:46 -07:00
Joe Bowser
334cf45d6d Fixing CB-1700, we had the file names reversed, so exif was never being written right. Needed to upload a file to debug this thing 2013-03-28 10:02:18 -07:00
Joe Bowser
b7bb72294a CB-1796: Let's make sure we actually write the file instead of just writing EXIF to NOTHING 2013-03-28 10:02:02 -07:00
Joe Bowser
64ff204371 Updating JS 2013-03-28 10:01:15 -07:00
Ian Clelland
282367c6d5 [CB-1517] Properly report download progress for GZIP-encoded resources 2013-03-27 17:00:22 -04:00
James Jong
36c33a5889 CB-1944: Better error messages for Create script
- fixed to detect missing packages individually
- added a specific message for each missing package
- messages include how to correct and package download link
2013-03-27 15:46:45 -04:00
JasonM23
5ee7e81ff9 [CB-51] Added httpMethod for upload (defaults to POST) 2013-03-27 14:22:41 -04:00
Shravan Narayan
f4859444dd Fixed protocol regex bug. Unknown protocol support Added whitelist support for unknown protocols 2013-03-26 00:20:11 -04:00
Andrew Grieve
73c7994cd1 Fix NPE in InAppBrowser.
When cordova.getActivity().getIntent().getExtras() == null.
2013-03-23 14:07:57 -04:00
Andrew Grieve
0c74090953 Log a message when exec() is made to an unregistered plugin. 2013-03-23 14:07:22 -04:00
Ian Clelland
f60d54eae4 [CB-2305] Add InAppBrowser injectSriptCode command to support InAppBrowser.executeScript and InAppBrowser.insertCSS APIs 2013-03-23 13:13:21 -04:00
Joe Bowser
31bc015cdd Pre-2.6 prep 2013-03-21 10:35:09 -07:00
mbillau
b028ad3604 CB-2675: Add prompt dialog to Notification API 2013-03-20 23:14:42 -04:00
Max Woghiren
d2e4e35c37 [CB-2715] Simplified readAsBinaryHelper.
Also fixed some comments and other minor things.
2013-03-20 22:42:29 -04:00
Ian Clelland
1f37200bb6 [CB-1957] Stop any playing media when closing InAppBrowser 2013-03-20 15:56:27 -04:00
Ian Clelland
77178daad3 [CB-2308] [android] Report errors when InAppBrowser fails to load page 2013-03-20 15:42:08 -04:00
Richard Burton
1648f161d9 Implemented a conditional check to support providing the duration limit for the Android platform SDK 8 and above. The value is passed using the string literal value to ensure the logic is not dependent on SDK version specifics. 2013-03-18 11:23:21 -04:00
Richard Burton
9fa6cea69b Implemented a conditional check to allow for the duration to be provided on the Android platform for SDK 8 and above. 2013-03-18 11:23:21 -04:00
Andrew Grieve
66b827e502 [CB-2632] Implement FileReader.readAsBinaryString 2013-03-15 16:47:33 -04:00
Andrew Grieve
7755a902dd Add a new type to the Native->JS bridge for binary strings.
It's needed since the bridge truncates strings that have null
characters in them :(.
2013-03-15 16:47:04 -04:00
Max Woghiren
d25b73f47d [CB-2546] Moved read calls to a background thread. 2013-03-15 16:01:02 -04:00
Max Woghiren
ac2969c3f8 [CB-2435] Split common methods out of FileUtils into FileHelpers
Also included in this change:
- Fixed getMimeType for content:// URIs.
- Made getRealPath take a URI string.
- Added basic android_asset handling.
There is no such thing as a "real path" for a file:///android_asset URI.  However, it is possible to get an input stream to one.

And even more minor changes:
- removed unused FileReader/FileWriter instance variables
- added logging when getRealPath fails
- fixed indentation issues
- removed a try/catch in favor of throwing
- removed a null check in favor of throwing
- moved getEntry back to FilePlugin
2013-03-14 12:39:51 -04:00
Dave E
ee38b2ef03 Use pushd/popd instead of subshell
Improves the error message that happens when ant is not installed.
2013-03-14 12:31:56 -04:00
Max Woghiren
0f70e04e6e [CB-1933] Changed button labels to an array.
This allows commas to be included in button label text.
2013-03-14 11:34:29 -04:00
Joe Bowser
9fc1e7272e CB-2668: Thanks for supplying a patch, but please make sure it actually builds. 2013-03-13 16:02:06 -07:00
Yavor Georgiev
0d4d0b8a37 Adding workaround for ICS asset URLs with spaces 2013-03-13 19:52:49 +02:00
Andrew Grieve
fcd2c989a2 [CB-2418] Fix geolocation's velocity field broken on Android 2013-03-12 20:54:24 -04:00
Simon MacDonald
e0d0d6c455 CB-2459: Customize InAppBrowser location bar 2013-03-10 10:33:42 -04:00
Simon MacDonald
ce1a961b99 CB-2640: Allow InAppBrowser to open tel, sms, market urls 2013-03-08 14:14:41 -05:00
Joe Bowser
c71a08a9d9 Merge branches 'leon' and 'master' 2013-03-07 13:06:10 -08:00
Joe Bowser
17bfcea65a Merge branch 'master' of git://github.com/sweetleon/cordova-android into leon 2013-03-07 11:20:43 -08:00
Joe Bowser
5e8959bab1 Removing baseURL because it doesn't actually do anything. If we want to make sure remote websites work, we whitelist them 2013-03-07 08:52:02 -08:00
Joe Bowser
9924dc0f92 So much for squashing, I should have branched this. 2013-03-06 15:31:25 -08:00
Joe Bowser
7388c036d7 Making framework only apply for http resources for now, so we don't break non-http handling. I had to squash this to make it pretty 2013-03-06 15:29:40 -08:00
Joe Bowser
ad4512801f Making framework only apply for http resources for now, so we don't break non-http handling 2013-03-06 15:26:13 -08:00
Joe Bowser
409b9af398 CB-2099: Android Whitelisting now blocks images and JS with an empty response 2013-03-06 14:56:27 -08:00
Braden Shepherdson
7cc8fd7e87 Allow plugins to capture shouldInterceptRequest() 2013-03-06 11:53:10 -05:00
Joe Bowser
42c8105f13 CB-2623: Updated windows script, now it works here too for once 2013-03-05 16:13:43 -08:00
Joe Bowser
9a71cc5b4e CB-2623: Added partial work on update script 2013-03-05 14:36:52 -08:00
Joe Bowser
c543b7469d CB-2623 Adding update script to Android 2013-03-05 11:30:38 -08:00
Joe Bowser
7caac3265a Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-03-04 16:09:55 -08:00
Joe Bowser
5d68d5a246 CB-2198: Removing option to use our broken URL stack as a history as per deprecation policy. 2013-03-04 16:09:37 -08:00
Braden Shepherdson
7187f87eae Add readAsBinaryString and readAsArrayBuffer support 2013-03-04 17:36:40 -05:00
Joe Bowser
fb81f3e77e CB-2596: Fixing the menubutton for text fields 2013-03-04 14:26:28 -08:00
lenny
0ae49ed098 moveFile handles absolute paths by not pre-pending anything to them 2013-03-01 22:11:29 -08:00
lenny
b8e5aaf754 ignore IntelliJ files 2013-03-01 21:56:57 -08:00
Tommy-Carlos Williams
aa4820c3b7 [CB-861] Header support for FileTransfer download
Added support for an optional options object as the final arg. Currently only handles the options.headers object (as per the issue).

`FileTransfer.download(source, target, successCallback, errorCallback, trustAllHosts, options)`

This is needed for using FileTransfer.download with Basic Authentication, etc. Sadly since Android 2.x doesn't support XHR2, this is needed in FileTransfer.

I have only added support to Android and iOS (see other PR's).
2013-02-28 13:10:59 -05:00
Joe Bowser
5d79d6e134 Merge branch 'next' 2013-02-27 11:07:55 -08:00
Joe Bowser
fb1455a17b Preparing to tag 2.5.0 2013-02-26 13:49:47 -08:00
Shravan Narayan
c668eeba0f Added CallbackContext success message with an int parameter
Added a small utility function to convert JSONArray to List<String>
2013-02-25 15:17:40 -05:00
Michal Mocny
62421ee49d CB-2530: Update callbackFromNative syntax to args
New callbackFromNative syntax expects an array of arguments instead of a
single message.
2013-02-25 13:28:26 -05:00
Joe Bowser
e791f29ce1 CB-2333: Probably should be re-factored as a do..while, but need to handle when there is no EOL char in buffer 2013-02-22 11:58:37 -08:00
Joe Bowser
06947cc453 CB-2333: Adding body property to FileTransferError object on Android 2013-02-22 11:48:17 -08:00
Joe Bowser
8c97474524 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-02-21 16:49:19 -08:00
Joe Bowser
77a8568b28 CB-2522: We used buttons in older versions to send the post, not the submit event. Disabled form saving 2013-02-21 16:48:57 -08:00
Braden Shepherdson
e2dadbd7fe Fix return types of getJSONObject and optJSONObject in CordovaArgs 2013-02-21 15:53:15 -05:00
Joe Bowser
17b668a115 CB-2085: Fixing deleted database for ChildBrowser 2013-02-21 11:53:06 -08:00
Joe Bowser
a30c2b6a75 CB-2504: Merged overscroll disallowance, needed to deal with merge conflict with the InAppStorage toggle 2013-02-21 10:45:50 -08:00
Joe Bowser
2660eebec2 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-02-21 10:31:00 -08:00
Max Woghiren
f415664b6d [CB-2504] Allow the disabling of overscroll glow. 2013-02-21 12:47:59 -05:00
Takeshi Sone
5092b29312 [CB-2518] Enable Geolocation in InAppBrowser 2013-02-21 09:07:06 -05:00
Joe Bowser
d5be901bc2 Merge branch 'next' 2013-02-20 13:53:15 -08:00
Joe Bowser
5462eddfdb Updating the JS for 2.5.0rc1 2013-02-20 13:52:29 -08:00
Joe Bowser
fef51f12c6 Apparently the JS was wrong when tagging 2013-02-20 13:06:13 -08:00
Joe Bowser
fdb3679cf5 Merge branch 'next' 2013-02-20 11:25:32 -08:00
Joe Bowser
11beb37c50 Setting to turn off Online Storage 2013-02-20 11:21:17 -08:00
Joe Bowser
5cd17730b1 Tagging 2.5.0rc1. Updating files 2013-02-19 11:53:36 -08:00
mbillau
cb192056f8 CB-2458: gracefully exit with back button
If users do extra initialization, we can get NPEs when hitting the back
button before loadUrl() has been called.
-Null fenced code in startOfHistory() that gave us an NPE when hitting
Back button with useBrowserHistory=true
-Call finish() in Back button code when no history since with
useBrowserHistory=true it would just hang while the app inits
-Call loadUrlIntoView() first in handleDestory() since with
useBrowserHistory=false, the default behavior would try to use the baseUrl
which is null
2013-02-18 16:42:14 -05:00
Joe Bowser
892f96e305 CB-2282: Turning on AppCache 2013-02-18 11:37:28 -08:00
Joe Bowser
13ef58a5bb Updated XML for the test project 2013-02-18 11:26:40 -08:00
SunshineTech
2bf6509e1d Modify Issue CB-2273. 2013-02-17 21:50:33 +08:00
Joe Bowser
a45d5a98dd CB-1605: Going through Eclipse warnings, removing the unused imports 2013-02-15 15:46:36 -08:00
Joe Bowser
a31714f8a4 CB-2447: This is a non-trivial task. Migrated test plugin to modern plugin API. 2013-02-15 14:25:56 -08:00
Joe Bowser
23d2a806f0 Merge branch 'CB-2447' of git://github.com/jamesjong/cordova-android 2013-02-15 14:02:23 -08:00
Joe Bowser
c20b2330ab CB-2446: Ugly, but workable fix 2013-02-15 13:57:34 -08:00
Fil Maj
8613551aec minor readme stuff 2013-02-15 13:18:03 -08:00
Fil Maj
2ab01dadc0 Adding link to cordova.io in readme 2013-02-15 13:12:19 -08:00
James Jong
790636c8cd CB-2447: Remove use of deprecate org.apache.cordova.api.Plugin 2013-02-15 13:18:58 -05:00
Andrew Grieve
23938830f7 [CB-2213] Add NATIVE_URI to the quick-return logic. 2013-02-14 10:50:37 -05:00
Benn Mapes
674b87057a [CB-2297] Fix for geolocaion database error 2013-02-12 14:23:01 -08:00
Richard Kolkovich
83d9248ec8 Update framework/src/org/apache/cordova/ContactAccessorSdk5.java
`Im.PROTOCOL` is a String, not an int. Treat it as such to prevent an Exception being thrown when parsing `null`.
2013-02-12 16:18:50 -05:00
Joe Bowser
f9d27e4a67 CB-2408: There should be a check for the browser history, but the logic intentionally doesn't match 2013-02-12 11:16:01 -08:00
patrick kettner
2683803ef3 Add check for build targets in create script
I installed the android sdk via homebrew, which does not install any build targets by default.

That resulted in the create throwing the following somewhat cryptic error.

An unexpected error occurred: "$ANDROID_BIN" create project --target $TARGET --path "$PROJECT_PATH" --package $PACKAGE --activity $ACTIVITY >&/dev/null exited with 1

This just adds a check that the variables that are set to the values of the build targets are properly set, and exit if they are not.
2013-02-12 11:07:51 -05:00
Andrew Grieve
dd86d7a5ed [CB-2095] Delete file on FileTransfer.download fail 2013-02-12 10:55:33 -05:00
Max Woghiren
1246a81d39 [CB-2213] Added NATIVE_URI support.
This is mostly the same as FILE_URI on Android.

Also replaced calls to `stripFileProtocol` with the more general-purpose `getRealPathFromURI`.  This helps support some operations on content URIs.
2013-02-11 22:45:14 -05:00
Andrew Grieve
8ab7278db2 Code clean-up of FileTransfer
- Fix warnings about toLowerCase()
- Don't assume connections are HTTP (fails for file://)
- Use StringBuilder
- Remove no-ops of disconnect() & keep-alive
2013-02-11 22:35:17 -05:00
Joe Bowser
db099e7722 Preparing for 2.4.0 2013-02-04 11:12:52 -08:00
Joe Bowser
fcc01bc37e Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-01-31 10:45:02 -08:00
Joe Bowser
a18dacf5f2 CB-2296 - Adding the screenshot configuration 2013-01-31 10:44:46 -08:00
Anis Kadri
77f9cae50b CB-1961 update to create script for android/windows 2013-01-30 14:57:49 -08:00
Joe Bowser
3610bbf21b CB-2296: Adding deprecation notices for removing the setProperties methods 2013-01-30 11:31:59 -08:00
Joe Bowser
d5e3be9a55 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-01-30 11:13:28 -08:00
Joe Bowser
80b369d6d5 CB-2296: Added parsing for Integer and Boolean parameters in config.xml 2013-01-30 11:13:07 -08:00
Andrew Grieve
d29eb84010 Tagging 2.4.0rc2 2013-01-30 09:51:40 -05:00
Joe Bowser
381ce535bf Merge branch 'puritytool' 2013-01-29 15:20:21 -08:00
Andrew Grieve
2e20bb0639 [CB-2293] Fix typo bufferSize->bytesRead.
Also adds a log statement to print out amount uploaded when an
IOException is thrown.
2013-01-29 13:47:15 -05:00
Joe Bowser
56cd24797e Fix for CB-2284. 401s are appearing when we hit them 2013-01-25 16:39:02 -08:00
Joe Bowser
431ca99c23 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-01-25 14:41:26 -08:00
Joe Bowser
6ced2ff293 CB-2292: Added a check for width and height. You can't scale nothing because you can't divide by zero. 2013-01-25 14:41:14 -08:00
Joe Bowser
31055bb303 Update to purity, adding better touch support 2013-01-25 14:39:44 -08:00
Fil Maj
24a53e39dd hey new line 2013-01-23 18:31:30 -08:00
Fil Maj
2ab113b695 Removing notice about incubation in the readme. 2013-01-23 12:21:49 -08:00
Fil Maj
9a0481a750 tweaking readme 2013-01-23 12:17:42 -08:00
Fil Maj
09035eb4c4 Setting template AndroidManifest values for version to 1.0 and code to 1. 2013-01-23 12:13:07 -08:00
Joe Bowser
1adf268e71 Updates to tests, including the use of Purity 2013-01-22 15:18:21 -08:00
Joe Bowser
23f57ad5a7 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android into puritytool 2013-01-21 14:59:04 -08:00
Joe Bowser
d9b15cf69e Updating with fixed JS from CB-2279 2013-01-21 13:47:26 -08:00
Joe Bowser
dbfe12a993 Partial fix for CB-2269, we probably shoudln't call Config.init twice 2013-01-18 16:41:10 -08:00
Joe Bowser
2b32dfd99d Partial Fix for CB-2269
* Moved Config.init call into DroidGap for the most common use-case
  * The CordovaWebView docuemntation still has to be updated
  * The template has to be changed, since we don't want to have two different types of config
2013-01-18 16:37:55 -08:00
Joe Bowser
679de40780 2.4.0rc1 updating 2013-01-18 15:33:38 -08:00
Joe Bowser
66f15fdd37 Adding purity to the test suite. Purity is a test class that may be renamed later 2013-01-18 15:00:02 -08:00
Joe Bowser
038f0e45b1 Upgrading Test Project properties to 4.2 2013-01-18 11:44:09 -08:00
Joe Bowser
033bfcc804 This should be Android 4.2, not Google APIs 2013-01-18 11:36:12 -08:00
Braden Shepherdson
fa87c08a29 Merge branch 'master' into arraybuffers 2013-01-18 12:33:25 -05:00
Braden Shepherdson
dfb799739a Change binaryEcho to echoArrayBuffer. 2013-01-18 12:32:52 -05:00
Joe Bowser
1193f7ed22 Fixed Android 4.2 filepicker, time for master 2013-01-17 17:00:50 -08:00
Braden Shepherdson
7530c21a9f Full binary data support.
- Removed BinaryEcho; made Echo support a new binaryEcho action.
- Added CordovaArgs wrapper for JSONArray, and a new overload for
  execute that accepts a CordovaArgs. There is now a default
  implementation for the JSONArray version of execute that builds a
  CordovaArgs and calls that version of execute. The default
  implementation for the CordovaArgs execute is to return false.
- Added byte[] version of success() in CallbackContext.
2013-01-17 15:58:38 -05:00
Simon MacDonald
a120614617 Initial input type=file support 2013-01-17 10:10:02 -05:00
Andrew Grieve
0311f0db38 CB-2208 Fix crash on File mobile-spec tests
Crash seems to not happen on every platform, but was showin up on the
x86 4.0.3 emulator.
2013-01-17 09:55:37 -05:00
Braden Shepherdson
547b683e61 Remove debugging. 2013-01-15 13:24:59 -05:00
Braden Shepherdson
ff1d943a69 Add CordovaArguments helper to decode ArrayBuffers 2013-01-15 13:21:09 -05:00
Braden Shepherdson
15a5c89e86 Removed debugging output. 2013-01-15 11:52:06 -05:00
Braden Shepherdson
03b974ee3f Working Base64 encoding. 2013-01-15 11:48:09 -05:00
Braden Shepherdson
f145605c63 Mostly working arraybuffer changes, needs Base64. 2013-01-15 11:16:32 -05:00
Joe Bowser
29230d0316 CB-2171: Patches are welcome. 2013-01-11 11:26:36 -08:00
Joe Bowser
57fc49ddc2 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-01-11 10:24:50 -08:00
Simon MacDonald
5ac6853fed CB-2154: navigator.splashscreen.show() broken in Phonegap 2.2 and 2.3.0rc2
Fixed the splashscreen so it will show for a minimum of 3 seconds if the user has not called loadUrl with a timeout in their main activity.
2013-01-11 10:24:03 -08:00
Fil Maj
b870214cca Fixes CB-2204: if bin/create fails, exit with code 1 2013-01-11 10:24:03 -08:00
Braden Shepherdson
55074b925f Added a comment to explain where the start page is getting set. 2013-01-11 10:24:03 -08:00
Braden Shepherdson
958424ce59 Add configurable start location to config.xml and template
Still possible to hardcode, there's a comment in the template showing
how that can be done.
2013-01-11 10:24:02 -08:00
Braden Shepherdson
d04fc289ac Move config.xml parsing into its own Config class
Now the parsing happens very early in the bootstrap process, before
loadUrl() is called. This enables a future change to put the start page
in config.xml instead of hardcoding it.
2013-01-11 10:24:02 -08:00
Braden Shepherdson
e14edf134d Merge branch 'master' into start_location 2013-01-11 12:13:43 -05:00
Simon MacDonald
dbb127447f CB-2154: navigator.splashscreen.show() broken in Phonegap 2.2 and 2.3.0rc2
Fixed the splashscreen so it will show for a minimum of 3 seconds if the user has not called loadUrl with a timeout in their main activity.
2013-01-10 22:06:39 -05:00
Fil Maj
dc94fc39ec Fixes CB-2204: if bin/create fails, exit with code 1 2013-01-10 18:29:36 -08:00
Joe Bowser
6db9a7cb12 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android into CordovaActivity 2013-01-10 16:26:24 -08:00
Benn Mapes
1f39386616 Fixed broken functions that were deprecated 2013-01-10 15:07:26 -08:00
Benn Mapes
25aef945d1 Deleted depricated methods 2013-01-10 14:51:20 -08:00
Joe Bowser
c9aa43afe0 CB-2185: Fixing getMimeType to get the mimetype of the file if it is upper-case 2013-01-10 11:32:37 -08:00
Braden Shepherdson
913e177f6f Added a comment to explain where the start page is getting set. 2013-01-09 17:36:12 -05:00
Braden Shepherdson
ae431aec12 Add configurable start location to config.xml and template
Still possible to hardcode, there's a comment in the template showing
how that can be done.
2013-01-09 16:48:43 -05:00
Braden Shepherdson
8ac15048cd Move config.xml parsing into its own Config class
Now the parsing happens very early in the bootstrap process, before
loadUrl() is called. This enables a future change to put the start page
in config.xml instead of hardcoding it.
2013-01-09 14:22:23 -05:00
Simon MacDonald
a1cfe87f1e CB-2093: NullPointerException when attaching image from Gallery that contains spaces in the path
Guarding against a null string being passed into FileUtils.getMimeType()
2013-01-08 21:10:50 -05:00
Simon MacDonald
c130396d4e Merge branch 'master' of http://git-wip-us.apache.org/repos/asf/cordova-android 2013-01-08 18:48:44 -05:00
Joe Bowser
bc2e7cf317 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android 2013-01-08 13:54:44 -08:00
Joe Bowser
7ace1d652d Fixing CB-2171, 0 byte file in filesystem on 404 from server. Patches are welcome. 2013-01-08 13:54:38 -08:00
Simon MacDonald
26effd1def Test for correctOrientation not rotate=0
when determining if we are in the special case where the image should just be retureturned to the user without modification.
2013-01-08 15:21:55 -05:00
Braden Shepherdson
5f6824e5dd Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/cordova-android into file_slicing 2013-01-07 18:13:54 -05:00
Braden Shepherdson
4589bdd31f And support for slicing in readAsDataURL. 2013-01-04 15:00:55 -05:00
Joe Bowser
72e0b49e0b Fixed CB-2089 after I tagged for the release. This will have to sit in 2.4.0 2013-01-03 10:18:41 -08:00
Joe Bowser
3caa45d860 Typo. Missed index.html in incrementation 2013-01-02 17:10:00 -08:00
Joe Bowser
7c069f14f8 Incrementing version to 2.3.0 final 2013-01-02 17:07:21 -08:00
Braden Shepherdson
552885dbd3 Add support for reading slices of text files. 2013-01-02 15:34:39 -08:00
Joe Bowser
6efeb1471c Incremeting version to 2.3.0rc2 2012-12-10 14:26:38 -08:00
Simon MacDonald
01f062d2ba Saving a contact with an email type of work sets it to home 2012-12-08 22:02:34 -05:00
Joe Bowser
2a42c463d2 CB-1973: We don't need to log three damn times! If it wasn't for HTC, I'd remove this entirely. 2012-12-06 10:40:57 -08:00
Joe Bowser
182843edf6 CB-1850 change: Model is getModel, name is getProduct 2012-12-05 14:58:47 -08:00
Simon MacDonald
9a9d36e9d9 CB-1969: Searching for emails in Contacts throws an exception always errors out 2012-12-05 16:28:27 -05:00
Simon MacDonald
7d5249eea6 Clean up warnings in InAppBrowser 2012-12-05 12:09:17 -05:00
Joe Bowser
f7910c41c3 Changing FILL_PARENT to MATCH_PARENT, removing Eclipse deprecation warnings 2012-12-04 14:14:19 -08:00
Joe Bowser
3973f4f952 More back button woes! The Fix for CB-1960 did weird things on both my end and Simon's end, sadly they're both different things. This should simply the code and resolve it. Sadly, all the unit tests pass as usual. 2012-12-04 12:06:05 -08:00
Joe Bowser
8a19769a47 Fix for CB-1960, we now check to see if any view is on the WebView, since they won't always be custom 2012-12-04 09:40:57 -08:00
Brian M Dube
c0ee593c10 [CB-1959] Display usage and exit when no arguments given 2012-12-02 21:21:24 -05:00
Andrew Grieve
c806451b8a Update Android SDK verions and commons-codec version in README.md. 2012-12-02 21:19:58 -05:00
Shazron Abdullah
00e5ff1964 Updated cordova.android.js for CB-1950 - InAppBrowser events 2012-11-30 05:47:37 -08:00
Shazron Abdullah
432aec62a9 [CB-1950] InAppBrowser - support events 2012-11-30 05:40:59 -08:00
Joe Bowser
c8ec7e5191 Doing the merge and fixing DroidGap up a bit 2012-11-28 15:30:22 -08:00
Joe Bowser
a0d2b96de6 Merge commit and hacking on CordovaWebView 2012-11-28 15:10:36 -08:00
Joe Bowser
2c202b82d7 Partial Fix/Workaround for CB-1856. Also removed old deprecated code 2012-11-28 14:42:55 -08:00
Simon MacDonald
a42dc08756 Start adding events to InAppBrowser 2012-11-28 15:44:01 -05:00
Simon MacDonald
48f58110fe CB-1938: Regression, Android back button event is no longer fired 2012-11-27 12:18:49 -05:00
Simon MacDonald
7b3724972b Tagging to 2.3.0rc1 2012-11-26 16:09:52 -05:00
Simon MacDonald
9ca2a16218 Updating JS so that InAppBrowser will work out of the box 2012-11-23 09:38:49 -05:00
Simon MacDonald
f1e8400abf Merge branch 'master' of http://git-wip-us.apache.org/repos/asf/cordova-android 2012-11-22 22:28:34 -05:00
Andrew Grieve
11e0ffa90a Add @JavascriptInterface annotations to ExposedJsApi.
And re-enable the JS bridge on 4.2.
https://issues.apache.org/jira/browse/CB-1879
2012-11-22 22:23:51 -05:00
Anis Kadri
2ee4326a4d updating create command 2012-11-22 22:23:51 -05:00
Anis Kadri
226e72ac18 adding release command 2012-11-22 22:23:51 -05:00
Anis Kadri
65c78b8f3f removing ApplicationInfo.class 2012-11-22 22:23:51 -05:00
Anis Kadri
6137c7ca06 removing appinfo.jar 2012-11-22 22:23:51 -05:00
Simon MacDonald
5bebf11b37 CB-1888: Can't add a Photo from a HTTPS address to Contact 2012-11-22 22:23:51 -05:00
Anis Kadri
68161d2714 refactoring windows scripts 2012-11-22 22:23:51 -05:00
Anis Kadri
a6473cb826 adding install function 2012-11-22 22:23:51 -05:00
Anis Kadri
0084c6f96a refactoring android commands 2012-11-22 22:23:51 -05:00
Simon MacDonald
a87825dbee CB-1508: Implement InAppBrowser feature
Initial checkin. Need to clean up the UI and add eventing.
2012-11-22 22:21:24 -05:00
Andrew Grieve
3566154cd0 Add @JavascriptInterface annotations to ExposedJsApi.
And re-enable the JS bridge on 4.2.
https://issues.apache.org/jira/browse/CB-1879
2012-11-22 12:39:18 -05:00
Anis Kadri
92d69e320f updating create command 2012-11-21 16:35:27 -08:00
Anis Kadri
08a190ef5b adding release command 2012-11-21 16:35:16 -08:00
Anis Kadri
98339ee5d8 removing ApplicationInfo.class 2012-11-21 13:37:19 -08:00
Anis Kadri
fa387fd758 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-11-21 13:33:21 -08:00
Anis Kadri
54979f2fc4 removing appinfo.jar 2012-11-21 13:33:09 -08:00
Simon MacDonald
538e90f23a CB-1888: Can't add a Photo from a HTTPS address to Contact 2012-11-21 11:27:25 -05:00
Anis Kadri
d9107bcac6 refactoring windows scripts 2012-11-20 18:49:16 -08:00
Anis Kadri
3f3a0b9140 adding install function 2012-11-20 14:49:49 -08:00
Anis Kadri
e1347e434e refactoring android commands 2012-11-20 14:39:37 -08:00
Joe Bowser
7657faa9c3 CB-1852: Android version of model implemented, too bad it's all code names and not human readable 2012-11-19 13:26:22 -08:00
Joe Bowser
28ef765913 Upgrading App plugin to CordovaPlugin 2012-11-19 11:33:21 -08:00
Joe Bowser
d2f59391a2 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-11-19 10:36:45 -08:00
Joe Bowser
df90bdb350 Fixing up the tests so they crash less. 2012-11-19 10:36:26 -08:00
Joe Bowser
c416c77d7a Fix for CB-1879 by Tom Clarkson. Hacked in due to lack of pull request 2012-11-19 10:35:47 -08:00
Andrew Grieve
ce05a720d1 Update .gitignore 2012-11-16 15:41:38 -05:00
Joe Bowser
6c19a440f5 CB-1864: Figured out how to simulate back button, test both the CordovaWebView back button and the general DroidGap case using the default implementation 2012-11-15 16:04:09 -08:00
Joe Bowser
f4612fdb5d Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-11-15 13:48:15 -08:00
Joe Bowser
04b9a0b09e Death to tabs while working on CB-1864 2012-11-15 13:47:52 -08:00
Simon MacDonald
f93c438067 CB-1860: NPE in onReceivedError with non local errorUrl 2012-11-15 11:04:50 -05:00
Joe Bowser
e1d608443a Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-11-14 13:23:35 -08:00
Joe Bowser
9233c3a898 Fixing error with the tests, backbuttonmultipage wasn't added 2012-11-14 13:22:58 -08:00
Simon MacDonald
dfa514334b Bumping Android API version to 17 2012-11-14 16:05:50 -05:00
Joe Bowser
5810a96e62 Adding reflection so that this compiles, need to test against HTC Desire HD 2.3.6 device before resolving CB-1845 2012-11-14 11:15:22 -08:00
Joe Bowser
70473a80af Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-11-13 14:31:33 -08:00
Joe Bowser
525fd30cb2 Merge branch 'Android_2.3.4_camera_crash' of git://github.com/IuriiO/incubator-cordova-android into null_camera 2012-11-13 11:37:40 -08:00
Andrew Grieve
5212cd4dcd Disable JS Interface on Honeycomb
Fixes https://issues.apache.org/jira/browse/CB-1818
2012-11-13 12:50:15 -05:00
Simon MacDonald
e95bde62a2 Correctly report the mime type of 3ga files 2012-11-12 10:22:35 -05:00
Simon MacDonald
4fe73cf6ad CB-1835: Camera.getPicture gives error when get a picture from photo library with spaces in its name on Android 2012-11-12 10:00:32 -05:00
Simon MacDonald
78b2835da4 Merge branch 'master' of https://github.com/ilbambino/incubator-cordova-android 2012-11-12 09:57:19 -05:00
Iurii Okhmat
f9a49efae9 Removed unnecessary import. 2012-11-09 16:44:33 -08:00
Iurii Okhmat
b9ddc9e678 Camera plugin (HTC Incredible) is crashing on 2.3.4 devices without SD card 2012-11-09 16:40:56 -08:00
Simon MacDonald
dc459c84a3 CB-1829: Online/Offline events do not fire on subsequent pages of an app 2012-11-09 11:28:50 -05:00
Alvaro
1d26239809 not getting the path correctly if the URI contains a file://
Previous to 2.2 this function was crashing if the URI wasn't different
than a 'content://' but still if it is a 'file://' it fails getting the
correct path.
This happens for example picking a picture from dropbox instead of
local gallery.
2012-11-09 09:28:26 +02:00
Joe Bowser
5ca233779d This is as far as we can get fixing the Camera plugin by recovering state 2012-11-08 15:42:28 -08:00
Simon MacDonald
e51b4897a3 Guard against null mimeType in MediaFile.getFormatData 2012-11-08 14:01:46 -05:00
Anis Kadri
81f283e56f CB-1794 fixing cordova commands for paths with spaces in them 2012-11-07 13:22:14 -08:00
Anis Kadri
ccdd2fd2ca CB-1809 create script should print out meaningful error messages 2012-11-05 17:51:32 -08:00
Joe Bowser
69f11a29e1 Updating the project so that the activities are clearly separated from Test and Helper code 2012-11-02 16:15:51 -07:00
Joe Bowser
cf494f3238 Fixing the tests so that they run as an Activity again 2012-11-02 13:48:05 -07:00
Joe Bowser
d5895c635a Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-11-02 13:33:13 -07:00
Simon MacDonald
2ac9873613 CB-1808: FileEntry.moveTo across file systems incorrectly calls the success callback 2012-11-02 14:50:24 -04:00
Joe Bowser
eb59e76cde Fixing CB-1801 2012-11-01 12:23:18 -07:00
Simon MacDonald
d9db845b43 CB-1795: onCreateOptionsMenu in PhoneGap 2.2.0 Release Candidate 2 isn't working anymore 2012-11-01 10:30:34 -04:00
Joe Bowser
e55327b064 Tagging the 2.2.0 release after this commit 2012-10-31 10:57:57 -07:00
Simon MacDonald
bdd5a4e053 Merge branch 'master' of http://git-wip-us.apache.org/repos/asf/incubator-cordova-android
Somedays, I hate git.
2012-10-29 16:23:36 -04:00
Andrew Grieve
ac2e2c9a42 Update JS to new tag (again). Includes latest fix to CB-1745. 2012-10-29 16:21:12 -04:00
Andrew Grieve
76f9d49e24 Disable limiting of payload size when sending data to JS.
Fixes https://issues.apache.org/jira/browse/CB-1745
2012-10-29 16:21:12 -04:00
Andrew Grieve
6ec8ab95fc Update JS to new 2.2.0rc2 tag. 2012-10-29 16:21:12 -04:00
Joe Bowser
9c98625610 Partial fix for CB-1742, still don't know what this should do for notification.confirm's cancel, so we return zero for now 2012-10-29 16:21:12 -04:00
Joe Bowser
f270cde47d Changing DroidGap back and duplicating code so that we don't have a regression on CB-1568 2012-10-29 16:21:12 -04:00
Joe Bowser
9de7efd072 Added fix for webViewClient. CB-1568 2012-10-29 16:21:12 -04:00
Joe Bowser
7b81d317a0 Moved the initialization of the IceCreamWebViewClient to CordovaWebView, we weren't loading the fix in properly after the refactor - CB-1742 2012-10-29 16:21:12 -04:00
Simon MacDonald
876f975aa2 CB-1691: Android menu button event doesn't fire when textbox has focus 2012-10-29 16:20:39 -04:00
Andrew Grieve
3c5815ac0f Update JS to new tag (again). Includes latest fix to CB-1745. 2012-10-26 16:09:54 -04:00
Andrew Grieve
678ae2d684 Disable limiting of payload size when sending data to JS.
Fixes https://issues.apache.org/jira/browse/CB-1745
2012-10-26 16:08:35 -04:00
Andrew Grieve
e4f8f44fb0 Update JS to new 2.2.0rc2 tag. 2012-10-26 10:41:08 -04:00
Joe Bowser
49566d29f8 Partial fix for CB-1742, still don't know what this should do for notification.confirm's cancel, so we return zero for now 2012-10-25 14:13:17 -07:00
Joe Bowser
7f4ee7b20a Changing DroidGap back and duplicating code so that we don't have a regression on CB-1568 2012-10-25 13:18:28 -07:00
Joe Bowser
32526a8c16 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-10-25 12:17:58 -07:00
Joe Bowser
71a7f72ab9 Added fix for webViewClient. CB-1568 2012-10-25 12:17:38 -07:00
Joe Bowser
4d0824f4a4 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-10-25 12:12:47 -07:00
Joe Bowser
d56dd40d06 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-10-25 12:11:41 -07:00
Joe Bowser
6aafd6dc3a Moved the initialization of the IceCreamWebViewClient to CordovaWebView, we weren't loading the fix in properly after the refactor - CB-1742 2012-10-25 12:11:09 -07:00
Andrew Grieve
011b512f28 Update JS. 2012-10-25 15:02:26 -04:00
Andrew Grieve
aa2d17e489 Disable JS_OBJECT bridge on pre-gingerbread devices.
It's the easiest way to avoid bugs with Java strings not being converted
to JS Strings.
2012-10-25 15:00:21 -04:00
Andrew Grieve
0eee2293dc Add support for null PluginResult payloads.
https://issues.apache.org/jira/browse/CB-1744
2012-10-25 12:05:39 -04:00
Simon MacDonald
a2f35d2bda CB-1743: Globalization.getDateNames will crash Android 2.2 applications 2012-10-25 10:35:22 -04:00
Simon MacDonald
58f58d9ee8 Merge branch 'master' of http://git-wip-us.apache.org/repos/asf/incubator-cordova-android
Conflicts:
	framework/assets/js/cordova.android.js
2012-10-24 16:32:01 -04:00
Simon MacDonald
412bb349ac Pull in exec fix for Android 2.2 2012-10-24 16:29:26 -04:00
Simon MacDonald
652f15f893 Guard against NullPointerException in Compasslistenter 2012-10-24 16:29:02 -04:00
Joe Bowser
8512ebb923 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-10-24 12:07:20 -07:00
Joe Bowser
f0ac173ec8 Adding the updated blank index 2012-10-24 12:06:37 -07:00
Joe Bowser
bef0d47924 Starting incrementing the tag to RC2 2012-10-24 12:06:00 -07:00
Bryce Curtis
cba0d59021 Fix exception when plugin returns a null string. 2012-10-24 12:36:30 -06:00
Andrew Grieve
7d3afcab94 Tweak the useBrowserHistory deprecation message to make the date is clear 2012-10-23 14:12:48 -04:00
Joe Bowser
5f1cda07e7 Cleaning up code, because negating string comparisons is confusing if the string itself is called false. Also clarified the deprecation message to match the Cordova policy that we agreed on for deprecation changes 2012-10-23 10:46:53 -07:00
Joe Bowser
e11beade4b Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-10-23 10:25:33 -07:00
Andrew Grieve
6a1e089b73 Change useBrowserHistory to default to true (actually)
Also logs a deprecation mession on start-up when it is set to false.
Fixes issue: https://issues.apache.org/jira/browse/CB-1611
2012-10-23 13:15:44 -04:00
Simon MacDonald
0aa98ac2da CB-1697: openDatabase of Cordova for Android uses the wrong directory separator 2012-10-22 13:50:16 -04:00
Joe Bowser
f9ef38cc7a Updating the config.xml default to be true. See discussion on CB-1611 2012-10-19 07:23:55 -07:00
Simon MacDonald
a3a215a1ba Merge in video tag changes and fix back button issue 2012-10-17 10:14:30 -04:00
Joe Bowser
d3ee322d7c Updating Hello World 2012-10-15 14:19:46 -07:00
Joe Bowser
7ec20e7752 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-10-15 13:52:35 -07:00
Joe Bowser
08dfb13dbf Updating Android to 2.2.0rc1 2012-10-15 13:52:19 -07:00
Andrew Grieve
6a5cddd907 Remove use of PluginResult.Status.NO_RESULT in GeoBroker.
It resolves to a no-op when KEEP_CALLBACK is set, and is therefore
confusing to use it with the new CordovaPlugin setup.
2012-10-15 14:49:47 -04:00
Andrew Grieve
dc5078306d Remove manual catching of JSONException where possible.
Delegate the catching to caller instead. Related to refactoring of
Plugin->CordovaPlugin.
2012-10-15 14:24:03 -04:00
Andrew Grieve
1bc032853c Fix contact mobile-spec tests that were failing.
Also move contact operations back to background threads.
2012-10-15 14:21:15 -04:00
Joe Bowser
e562e4e7b9 Removed overrides, fixed CB-1620 2012-10-12 14:43:46 -07:00
Joe Bowser
0ffffa9029 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-10-12 14:26:57 -07:00
Joe Bowser
0f2303e8d5 This time, we fixed the back button for real! CB-1658 2012-10-12 14:26:36 -07:00
Braden Shepherdson
31f7f8149e Merge branch 'master' into cordovaplugin_update 2012-10-12 17:05:47 -04:00
Braden Shepherdson
fe1f57c23f Port Storage to use CordovaPlugin. 2012-10-12 17:05:35 -04:00
Braden Shepherdson
29a0b010da Port SplashScreen to CordovaPlugin. Untested, no tests for it. 2012-10-12 17:00:14 -04:00
Braden Shepherdson
621e1163f8 Port Notification to CordovaPlugin. 2012-10-12 16:58:15 -04:00
Braden Shepherdson
17d64cfcbe Port NetworkManager to CordovaPlugin. 2012-10-12 10:05:26 -04:00
Braden Shepherdson
7379d2135d Port Globalization to CordovaPlugin. 2012-10-11 18:32:35 -04:00
Braden Shepherdson
c55fd06b99 Fix mountain of trailing whitespace. 2012-10-11 18:28:36 -04:00
Braden Shepherdson
d81727a08c Port Location listeners and plugin to CordovaPlugin. 2012-10-11 18:26:19 -04:00
Braden Shepherdson
b582e1592a Port FileUtils to CordovaPlugin. 2012-10-11 16:29:02 -04:00
Braden Shepherdson
dd8533a320 Port Device to use CordovaPlugin. 2012-10-11 16:11:20 -04:00
Braden Shepherdson
d72a8cbf89 Port Contacts to CordovaPlugin. 2012-10-11 16:03:49 -04:00
Braden Shepherdson
fe0876ded6 Port CompassListener to CordovaPlugin. 2012-10-11 15:50:31 -04:00
Braden Shepherdson
fa15763c5d Port Capture to use CordovaPlugin. Untested beyond compiling! 2012-10-11 15:50:04 -04:00
Braden Shepherdson
205215d409 Port CameraLauncher to CordovaPlugin. 2012-10-11 11:34:46 -04:00
Braden Shepherdson
076bfcde87 Port BatteryListener to CordovaPlugin. 2012-10-11 11:21:02 -04:00
Braden Shepherdson
10510484b5 Port AudioHandler and AudioPlayer to CordovaPlugin.
Had to adapt AudioPlayer because CordovaPlugin doesn't define
sendJavascript.
2012-10-11 11:09:12 -04:00
Braden Shepherdson
e1dea5b4d3 Port AccelListener to CordovaPlugin.
Also using the MessageQueue to handle the sensor start timeout, instead
of a Thread.sleep() loop. This allows the listener to run synchronously.
2012-10-11 10:02:46 -04:00
Braden Shepherdson
891f8d00cf Cleanups to CordovaPlugin. 2012-10-10 14:11:13 -04:00
Joe Bowser
0d409f0fe3 Setting browser history as the default. This was supposed to be done earlier, sorry about that. CB-1611 2012-10-10 09:45:55 -07:00
alunny
4e0c8982c9 get commons-codec from apache archive, not osuosl
prevents the issue where, when a new release of commons-codec comes out,
`bin/create` stops working
2012-10-08 15:12:13 -07:00
Joe Bowser
a741c66c97 Updating Native Tests to correspond with changes - CB-1580 2012-10-03 15:56:49 -07:00
Simon MacDonald
3e6a7cbdf5 CB-1574: On Android 4.1 events are only sent on every second menu button press 2012-10-03 14:41:10 -04:00
Simon MacDonald
5d34aa0afe Guard against null pointer exception in ES File Explorer being used to get a picture using DATA_URL 2012-10-03 11:31:58 -04:00
Simon MacDonald
979ae94698 Merge branch 'master' of http://git-wip-us.apache.org/repos/asf/incubator-cordova-android
Just brain dead today.
2012-10-02 14:40:48 -04:00
Simon MacDonald
8d7b85b26a CB-1573: Can we remove framework/src/org/apache/cordova/TempListener.java 2012-10-02 14:40:24 -04:00
Simon MacDonald
686977a986 CB-1573: Can we remove framework/src/org/apache/cordova/TempListener.java 2012-10-02 14:38:02 -04:00
Andrew Grieve
9c6c782146 Apply trustEveryone to the current connection and not globally.
Fixes https://issues.apache.org/jira/browse/CB-1565
2012-10-02 11:45:20 -04:00
Andrew Grieve
ca9539b5b6 More tweaks to FileTransfer.
Some clean-up and moved IO out of critical sections.
2012-10-02 11:45:20 -04:00
Andrew Grieve
ff25be8839 Fix warnings in FileTransfer.java 2012-10-02 11:45:20 -04:00
Simon MacDonald
d1ab1b59be Remove @Override from interface methods
In Java 6 you will get an error in Eclipse if your put the @Override annotation on a method of an interface. You are not really over riding the methods you are implementing it. This is an undocumented change in Java 6. Just cleaning up our usage of this so some project problems got away.

Note: Things will build fine using 'ant jar' even with the @Override's.
2012-10-02 11:42:15 -04:00
Andrew Grieve
05bc1865a6 Change FileTransfer to use the new plugin signature.
Fixes slow abort(): https://issues.apache.org/jira/browse/CB-1516
Fixes abort() race condition: https://issues.apache.org/jira/browse/CB-1532
2012-10-02 10:14:52 -04:00
Andrew Grieve
6e6e0275ad Create CordovaPlugin.java and make Plugin.java a compatibility shim.
The intent of this is to encourage plugins to execute synchronously
when appropriate by not defaulting to using a background thread.

This will also encourage plugins that do run asynchronously to run some
of its logic synchronously before dispatching to a background thread.
This is required for tasks that can be abort()ed, such as
FileTransfer. (CB-1532)

This also makes it possible to lazily parse the JSON args, which is
important for large payloads. (CB-1530)
2012-10-02 10:14:30 -04:00
Andrew Grieve
ec3c5b2ca2 Delete IPlugin interface. 2012-10-02 10:03:06 -04:00
Andrew Grieve
5289d569b0 Fix NPE caused by NetworkManager sending update before JS is ready.
This was happening for me when the device has been sleeping long
enough to turn its networking off, and I start an app via adb.
2012-10-02 10:02:42 -04:00
Andrew Grieve
6f873ff6b5 Fix default bridge mode being PRIVATE_API (should be ONLINE_EVENTS).
This was broken when HANGING_GET mode was removed.
2012-10-02 10:02:42 -04:00
Simon MacDonald
467cbe972c Fixing merge conflict 2012-10-02 09:54:36 -04:00
Simon MacDonald
bfd1bfe9f0 CB-1564: DroidGap.loadUrl follows a path that never checks the white list
Whoops, I needed to do more testing. This looks like the trick but it could use a review.
2012-10-02 09:52:30 -04:00
Simon MacDonald
3404a6c699 CB-1564: DroidGap.loadUrl follows a path that never checks the white list 2012-10-01 16:03:28 -04:00
Anis Kadri
17a4b5155e CB-1359 set target SDK to the highest available 2012-09-28 18:18:11 -07:00
Anis Kadri
d406e2ed22 merging conflict with create script 2012-09-28 17:43:26 -07:00
Anis Kadri
0bfc9935b2 CB-1359 simplifying API_LEVEL command 2012-09-28 17:41:12 -07:00
Andrew Grieve
64c6cbe303 Update JS snapshot after deleting callback server. 2012-09-28 14:37:08 -04:00
Andrew Grieve
2245db3e80 Delete CallbackServer.java 2012-09-28 14:37:08 -04:00
Andrew Grieve
6f19a50c98 Update .classpath file to use commons-codec-1.7.jar 2012-09-28 14:27:38 -04:00
Andrew Grieve
c7ce9598a8 Remove unused async arg from PluginManager.exec(). 2012-09-28 14:10:19 -04:00
Andrew Grieve
afcdccf783 Add an app-wide thead pool to CordovaInterface. 2012-09-28 14:10:13 -04:00
Joshua Granick
1bf12842ca Allow for predefined ANDROID_BIN value, fix for paths with spaces 2012-09-27 14:05:01 -04:00
Simon MacDonald
da8fbee256 Merge branch 'master' of http://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-09-27 11:17:04 -04:00
Simon MacDonald
4021f26e76 Globalization plugin should return an error object and not a code 2012-09-27 11:16:43 -04:00
Anis Kadri
8eab8438cf CB-1468 fixing paths with spaces 2012-09-26 16:22:35 -07:00
Simon MacDonald
1b4096b01d Guard against null pointer exception in ES File Explorer being used to get a picture 2012-09-26 15:52:37 -04:00
Marcel Kinard
54caa6e438 Fail the build gracefully with helpful error messages if the local.properties
file is missing, or if the commons-codec jar is missing, or if ant is not at
the minimum required version. Also add a little more detail to
README.md.
2012-09-25 13:09:40 -04:00
Braden Shepherdson
486eb149f2 Merge branch 'master' into plugin_reset 2012-09-24 14:38:17 -04:00
Braden Shepherdson
faa034a205 Don't unregister the listener if it was never registered. 2012-09-24 14:37:04 -04:00
Braden Shepherdson
2cd3ebc7a8 Fix NPE on reset with undefined NetworkListener. 2012-09-24 14:36:29 -04:00
Braden Shepherdson
7e3af6c235 Add onReset() to TempListener. 2012-09-24 14:21:18 -04:00
Braden Shepherdson
dd4de16d1d Add onReset to Storage. 2012-09-24 14:21:05 -04:00
Braden Shepherdson
ba8577fa5f Add onReset() to NetworkManager. 2012-09-24 14:20:52 -04:00
Braden Shepherdson
6192319f8c Add onReset() to GeoBroker. 2012-09-24 14:20:36 -04:00
Andrew Grieve
fed368d553 Set the total field for FileTransfer upload progress events.
This also removes an incorrect assumption that content: InputStreams
will be FileInputStreams.
2012-09-24 11:50:55 -04:00
Braden Shepherdson
20c885418e Add onReset to CompassListener. 2012-09-24 11:40:06 -04:00
Braden Shepherdson
9318ee30bd Add onReset to BatteryListener. 2012-09-24 11:35:35 -04:00
Braden Shepherdson
8b6c9574df Make AudioHandler stop and clean up on onReset() 2012-09-21 15:33:56 -04:00
Braden Shepherdson
313148136a Make AccelListener stop listening onReset() 2012-09-21 14:51:45 -04:00
Joe Bowser
6e1fdc77ae Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-09-21 11:51:12 -07:00
Joe Bowser
2a9582ebb1 Fixing CB-1521 - NullPointerException on Default Jellybean Emulator 2012-09-21 11:48:33 -07:00
Braden Shepherdson
dd1cd46719 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-09-21 13:38:42 -04:00
Braden Shepherdson
9961d9e54d Add onReset to Plugin API, call on navigate. 2012-09-21 12:00:14 -04:00
Andrew Grieve
7eb12110d1 Add a work-around for a FileTransfer bug on 2.3 only.
Fixes https://issues.apache.org/jira/browse/CB-1413
2012-09-21 11:54:24 -04:00
Simon MacDonald
3d62744601 CB-1512: FileTransfer API and Mojolicious 2012-09-21 11:05:54 -04:00
Andrew Grieve
17af417235 Fix up some minor FileTransfer bugs / warnings.
- Catch abort error in download
- Fix up merge conflicts
- Fixed a couple of compiler warnings
2012-09-20 23:39:42 -04:00
Andrew Grieve
df9d314361 Update JS to include FileProgress abort & progress support. 2012-09-20 23:39:09 -04:00
Brion Vibber
610e0c984a Add progress callbacks, abort for FileTransfer.upload and FileTransfer.download 2012-09-20 21:53:30 -04:00
Joe Bowser
3688fca126 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-09-20 16:27:49 -07:00
Joe Bowser
9bc89c784f Switching to ONLINE_EVENT 2012-09-20 16:27:44 -07:00
Anis Kadri
79682f5d52 updating windows create script test 2012-09-20 16:17:59 -07:00
Joe Bowser
c206ac0335 Fixing CB-1504 2012-09-19 13:47:09 -07:00
Joe Bowser
34840175f3 Adding headers and converting tabs to spaces 2012-09-19 11:12:55 -07:00
Simon MacDonald
6312457425 CB-1469: Add Globalization Plug-in for Android 2012-09-19 14:08:52 -04:00
Anis Kadri
f71e664952 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-09-18 14:45:20 -07:00
Anis Kadri
80d559f17e removing verbosity 2012-09-18 14:45:04 -07:00
Joe Bowser
772aedc263 Fixing CB-1462, there's a difference betwene Global and Local listeners: 2012-09-18 14:24:48 -07:00
Anis Kadri
45d7c124c8 fixing windows appinfo.jar 2012-09-18 14:11:22 -07:00
Joe Bowser
73abb20b3d Resolving CB-1496, this is faster than a pull request 2012-09-18 12:57:18 -07:00
Andrew Grieve
0baf104a75 Fix a deadlock in CallbackServer.java.
-Manifested when running mobile spec. Was caused by CallbackServer
obtaining lock #1 then #2, while other thread obtained #2 then #1.
2012-09-18 13:51:31 -04:00
Andrew Grieve
302d51cdfd Updated JS snapshot. 2012-09-18 13:25:18 -04:00
Andrew Grieve
d3cbfd5467 Add a flag to disable exec() chaining for benchmarking.
- Also moved ENABLE_LOCATION_CHANGE_EXEC_MODE to NativeToJsMessageQueue
  so that all exec() related flags are in one place.
2012-09-18 13:24:38 -04:00
Andrew Grieve
9e3e7e1820 Remove TODO comment about calling webView from non-ui thread.
I tried it and it turned out to be a bit slower instead of faster.
2012-09-18 13:24:37 -04:00
Andrew Grieve
18893bf6cd Use a thread pool when executing async plugin operations. 2012-09-18 13:24:37 -04:00
Andrew Grieve
f53161d6f5 Always send as many messages native->JS in one payload as possible. 2012-09-18 13:24:37 -04:00
Andrew Grieve
4c9a571106 Add constant to disable non-exec() messages in Native->JS bridge. 2012-09-18 13:24:37 -04:00
Andrew Grieve
365edcad16 Optimize encoding of PluginResults within NativeToJsMessageQueue.
Also included in this refactoring:
 -Better use of StringBuilder when encoding messages
 -Defers actual encoding of messages until they are popped.
 -Add a pause/unpause of message queue so that all pending messages will
 be sent to JS in order at the end of a PROMPT or JS_OBJECT context.
 Before they may not have been sent in order.
 -Tweaked LOAD_URL so that it always happens on the UI thread (avoids
 log warning).
2012-09-18 13:24:37 -04:00
Andrew Grieve
ae9047a708 Refactor how PluginResults are sent to JS.
There is now a sendPluginResult() as well as a sendJavascript() on
CordovaWebview.
sendPluginResult() sends the result so that it can be parsed without
using eval(), when the active bridge allows it.
2012-09-18 13:24:37 -04:00
Andrew Grieve
9c0e58df8d Disable debug logging of loadUrl for javascript URLs.
When using LOAD_URL bridge mode, this is far too verbose.
2012-09-18 13:24:37 -04:00
Andrew Grieve
ee34f11c29 Set the initial network-available state on start-up.
I've been assuming that it always starts as true, but this will ensure
that it does.
2012-09-18 13:24:37 -04:00
Andrew Grieve
6ca6d88bff Fix NPE when using LOCATION_CHANGE exec bridge. 2012-09-18 13:24:36 -04:00
Andrew Grieve
65a397fb63 Abstract JS->Native API calls into a class.
-setNativeToJsBridgeMode() and poll() can now be used via the JS interface
exported via addJavascriptInterface.
-prompt() now forwards calls to this class so that the logic will be the
same whether prompt() or the JS object is used.
2012-09-18 13:24:36 -04:00
Andrew Grieve
0a669077fb Fix warning about .close() not being called in FileUtils. 2012-09-18 13:23:26 -04:00
Simon MacDonald
451688a12e CB-1126: Splashscreen 2012-09-18 11:49:11 -04:00
Simon MacDonald
d181d89dd2 CB-1411: Add trustAllHosts option to FileTransfer.download on Android 2012-09-17 22:09:52 -04:00
Simon MacDonald
ac14b0d73b CB-1481: ContactName - name.formatted returns with a trailing white space 2012-09-17 22:09:51 -04:00
Simon MacDonald
0f42c65792 CB-1321: IMS types returning as other 2012-09-17 22:09:51 -04:00
Simon MacDonald
37b3e980dc CB-1362: We should add android:hardwareAccelerated=true to the template manifest.xml 2012-09-17 22:09:51 -04:00
Simon MacDonald
eb49e011e2 CB-1405: navigator.language 2012-09-17 22:09:51 -04:00
Josh Soref
e0a73f72ee Spelling: throw 2012-09-17 22:09:51 -04:00
Josh Soref
e217ab28c5 Spelling: success 2012-09-17 22:09:51 -04:00
Josh Soref
ca583865ea Spelling: substituted 2012-09-17 22:09:51 -04:00
Josh Soref
5e7efde311 Spelling: retrieve 2012-09-17 22:09:51 -04:00
Josh Soref
2c7c13420b Spelling: polyfill 2012-09-17 22:09:51 -04:00
Josh Soref
ac4fc3e54e Spelling: occurred 2012-09-17 22:09:51 -04:00
Josh Soref
46db36a05e Spelling: necessary 2012-09-17 22:09:51 -04:00
Josh Soref
3d073be990 Spelling: milliseconds 2012-09-17 22:09:51 -04:00
Josh Soref
1bc49fe450 Spelling: explicitly 2012-09-17 22:09:51 -04:00
Josh Soref
1f7fe9abcc Spelling: definition 2012-09-17 22:09:51 -04:00
Josh Soref
5217abf57a Spelling: containing 2012-09-17 22:09:51 -04:00
Josh Soref
2ecbde891a Spelling: conjunction 2012-09-17 22:09:51 -04:00
Josh Soref
bf7fc66646 Spelling: comparisons 2012-09-17 22:09:51 -04:00
Josh Soref
5a94b38e2f Spelling (en-us): behavior [slightly more instances of this spelling than the British] 2012-09-17 22:09:51 -04:00
Josh Soref
1bc55f5937 Typo stray paren 2012-09-17 22:09:51 -04:00
Josh Soref
04c9542f94 Spelling: application 2012-09-17 22:09:50 -04:00
Josh Soref
17e739f68a Spelling: aperture 2012-09-17 22:09:50 -04:00
Josh Soref
4f5515fde3 Spelling: after 2012-09-17 22:09:50 -04:00
Josh Soref
ae3ba129ea Spelling: activities 2012-09-17 22:09:50 -04:00
Josh Soref
6b92a0fff7 Brand: cordova 2012-09-17 22:09:50 -04:00
Anis Kadri
d859bb8e67 adding windows createAppInfoJar 2012-09-17 17:14:25 -07:00
Fil Maj
f12bbf71ed Added license headers to test java files 2012-09-17 14:25:12 -07:00
Fil Maj
b723beb545 [CB-1484] License headers audit 2012-09-17 14:19:02 -07:00
Joe Bowser
47daaaf14f Fixing up the commons-codec issue - CB-1483 2012-09-17 13:26:23 -07:00
Joe Bowser
9ba5bae34d Updating commons-codec 2012-09-17 09:44:47 -07:00
Philipp Klose
dbfa2d7994 Change bin/create to use bash as shell
Fixes script on older Ubuntu versions.
2012-09-17 11:09:53 -04:00
Joe Bowser
8134f86d1f Fixing CB-1467 2012-09-14 11:42:16 -07:00
Joe Bowser
5c60b09bf4 Updating the manifest so that it is correct 2012-09-13 11:46:31 -07:00
Joe Bowser
20a19d67d0 Put this on the wrong branch 2012-09-13 11:44:09 -07:00
Joe Bowser
311a2f6023 Updating JS with feeling - See CB-1420 2012-09-12 12:58:30 -07:00
Simon MacDonald
59a3cf93e6 Tagging 2.1.0 2012-09-12 11:44:53 -04:00
Simon MacDonald
a42f095cef CB-1409: Clicking the menu button crashes Jellybean 2012-09-11 09:04:42 -04:00
Simon MacDonald
a29340523f CB-1293: Camera.getPicture crashes when selecting from a Picasa album on Android 2012-09-07 15:20:31 -04:00
Joe Bowser
5ad7a7c014 Forgot to put back echo 2012-09-06 17:12:36 -07:00
Joe Bowser
c6fa7e4aad Reverting to the previously known to work config.xml, we'll introduce the new format in 2.2 2012-09-06 15:47:53 -07:00
Joe Bowser
d4b248fbe3 Merge conflict on the plugins 2012-09-06 15:26:38 -07:00
Joe Bowser
48881d081a Adding support for data uri 2012-09-06 12:19:42 -07:00
Joe Bowser
331024414e Fixed the backbutton issues with the keyboard without causing issues with the menu button so far 2012-09-05 16:10:48 -07:00
Simon MacDonald
9d0c5349bb CB-1304: Update PhoneGap References to Apache Cordova 2012-09-03 14:31:35 -04:00
Simon MacDonald
dc40d8afac CB-1335: Update www/ Application 2012-09-03 13:42:15 -04:00
Simon MacDonald
005877b4b8 CB-1303: Remove References to the Callback Project 2012-09-03 13:22:07 -04:00
Simon MacDonald
774d21747a Tagging 2.1.0rc2 2012-08-31 16:44:53 -04:00
Simon MacDonald
12e5b39c05 Fixing failing 'should return MediaError for bad filename' Media test case 2012-08-31 12:50:23 -04:00
Simon MacDonald
4d5e452ece CB-1358: Getting Force Close in incoming Cal while recording the Audio? 2012-08-31 12:45:01 -04:00
Michael Brooks
1ba3ecbef3 [#1301] Remove releasenotes.md
The file has not been updated in 5 months. If we choose to have
platform-level CHANGELOG's then it should be started across all
projects and named consistently as CHANGELOG.
2012-08-30 16:08:16 -07:00
Michael Brooks
db6695cb02 [#1305] Remove guides/ directory
The guides are now documented in incubator-cordova-docs.
2012-08-30 15:34:57 -07:00
Simon MacDonald
b3f5e039f2 Fixing 'FileTransfer.download() - should handle unknown host' failing mobile-spec test case 2012-08-30 17:01:16 -04:00
Andrew Grieve
c3e17fb185 Fix broken file upload in mobile-spec tests (CB-1290).
The explicit transfer-encoding: chunk that was added breaks in
fixed-length streaming mode. It is, however, still required to
work-around an OOM bug in HTTPS mode. The new logic works for both the
mobile-spec and the HTTPS large-file test that I used before.

Commit adding the header: 999c548e6e
2012-08-30 13:37:19 -04:00
macdonst
f7ae7fe43a CB=1293: Camera.getPicture crashes when selecting from a Picasa album on Android 2012-08-29 12:46:12 -04:00
macdonst
e07822350e CB-1289: The menubutton event fires twice 2012-08-28 11:55:12 -04:00
Andrew Grieve
07439ff99c Refactor to avoid adb warnings of VFY: on start-up. 2012-08-27 15:05:20 -04:00
macdonst
f111c245c1 Tagging 2.1.0rc1 2012-08-24 16:44:18 -04:00
Anis Kadri
c3502da4a0 arg forgot dest file 2012-08-24 13:40:23 -07:00
Anis Kadri
4012108d48 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-08-24 12:15:02 -07:00
Anis Kadri
4a0605e09b CB-1235 Fixing Android create script on Windows 2012-08-24 12:14:58 -07:00
Andrew Grieve
250380d73e Implement LOAD_URL exec bridge.
Also refactors PluginManager.exec to return the PluginResult instead of
a string.
2012-08-24 14:19:41 -04:00
Andrew Grieve
b30f5d782d Fix JS timers being disabled on pause and never re-enabled.
Was broken in this change:
b234b0bded
2012-08-23 15:35:08 -04:00
macdonst
b00cd9b557 Updating the .gitignore file 2012-08-23 12:38:40 -04:00
Braden Shepherdson
e11f8f646b Greatly improve speed of fetching contacts.
We were selecting every column in a fairly wide table before. This code fetches
only those columns necessary to populate the data requested by the Javascript
code. In experiments with coworkers' and my own contact lists, the time to fetch
~1440 contacts has gone from over 40 seconds to less than 10 seconds. I have not
tested with fewer than 1400 contacts, but I expect at least a small improvement.
2012-08-22 10:46:32 -04:00
Andrew Grieve
92b1de8cf8 Update cordova.android.js to pull in exec changes. 2012-08-22 09:50:40 -04:00
Andrew Grieve
bbafe53a2b Added Native-JS bridge mode that uses private WebView APIs. 2012-08-22 09:46:30 -04:00
Andrew Grieve
e239fd970f Implement the online events based Native->JS bridge. 2012-08-22 09:46:30 -04:00
Andrew Grieve
7fa4515c28 Implements the LOAD_URL Native->JS bridge mode
(without keyboard work-around)
2012-08-22 09:46:30 -04:00
Andrew Grieve
b40eb0a454 Fix API lint warnings in CordovaChromeClient and CordovaWebViewClient. 2012-08-22 09:46:30 -04:00
Andrew Grieve
5e3e9ddb8e Refactor Native->JS messaging logic into its own class.
This will make it easy to add more modes.
This also adds logic to set the move via a prompt() from JS.
2012-08-22 09:46:30 -04:00
macdonst
a9a5284a67 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-08-20 16:24:09 -04:00
macdonst
afe504dbbf CB-1267: Reuse Media object for recording 2012-08-20 16:23:19 -04:00
Andrew Grieve
0c484ddcf7 Make Eclipse recognize framework as a library project
Instructions are here:
http://developer.android.com/tools/projects/projects-eclipse.html#SettingUpLibraryProject
2012-08-20 14:22:48 -04:00
macdonst
8d0e80620a CB-1264: Media.stop() puts media into an unplayable state 2012-08-20 12:06:39 -04:00
Joe Bowser
1d28506b09 Fix for CB-1257 2012-08-17 14:35:08 -07:00
Andrew Grieve
1b33dbe2ae Provide an addJavascriptInterface() exec object.
-Disabled for 2.3 emulator to avoid a crash bug.
2012-08-17 11:15:19 -04:00
Andrew Grieve
80654c059d Add an Echo plugin for benchmarking purposes. 2012-08-17 11:10:16 -04:00
Andrew Grieve
999c548e6e Fix FileTransfer running out of memory over HTTPS (CB-312).
Setting the Transfer-Encoding header fixes running out of memory when
using HTTPS.
This CL also adds a bit of logging so that upload progress is logged.
2012-08-16 10:30:04 -04:00
Andrew Grieve
e42913ae8a Fix API Level linter errors in CordovaWebView.java 2012-08-16 09:36:43 -04:00
Joe Bowser
ee07cbecba Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-08-14 10:57:21 -07:00
Joe Bowser
fffaa9bced Forgot to add the Apache headers on IceCreamCordovaWebViewClient.java 2012-08-14 10:56:54 -07:00
macdonst
6195b2c99d CB-930: DirectoryReader creates null error code for inaccessible directory 2012-08-14 13:50:59 -04:00
Steren Giannini
06aafc96c9 Play <video> tags from the Webview in a Fullscreen video player.
Code from the Froyo Android Browser was adapted to support <video> elements in Cordova. The WebView creates a "CustomView" (a video player) that is displayed fullscreen.
It uses API level 7, work has to be done to support lower version.

Tested on Androdi 2.2: works
Tested on Android 4.1: doesn't work. It seems videos are handled differently (without the use of "Custom views"). To make video playing work on Android 4, add the android:hardwareAccelerated="true" attribute to the main activity of the AndroidManifest.
2012-08-14 18:13:35 +02:00
macdonst
2dc0727e36 CB-1151: FileTransfer.download decodes the URL, resulting in a 404 error 2012-08-13 15:43:55 -04:00
macdonst
a219feaa60 Downgrade min sdk version of sample app 2012-08-13 13:30:27 -04:00
macdonst
f3a09da340 Modify min sdk version in AndroidManifest.xml 2012-08-13 13:27:34 -04:00
macdonst
946e345a3f Add service methods to legacy ctx varialbe 2012-08-10 13:14:42 -04:00
macdonst
6cb8d11b22 CB-1196: No onSuccess callback after a complete play of the local mp3 file 2012-08-10 10:53:52 -04:00
macdonst
fdcf9c5327 Reapply: CB-1211: Media record uses a .mp3 extension when it is a .3gp file 2012-08-10 09:27:37 -04:00
doggerelverse
45c714cbb5 reset of seekOnPrepared changed to properly reset only once playback has begun 2012-08-09 14:18:55 -07:00
macdonst
7352a309a0 CB-1217: Clicking back button does not dismiss navigator.notification.alert() dialog 2012-08-09 10:54:35 -04:00
Andrew Grieve
b297fe6f59 Fix a NPE in GeoBroker when there is no previous location. 2012-08-08 23:39:02 -04:00
Evgeni Petrov
e575212c49 GeoBroker checks if location service avialable for device first. 2012-08-08 23:23:01 -04:00
macdonst
c52dc10c9e CB-1212: When camera is started, and then cancelled with no photo, attempt to read exif data results in fatal error 2012-08-08 15:53:48 -04:00
macdonst
d35c913249 CB-1211: Media record uses a .mp3 extension when it is a .3gp file 2012-08-08 15:34:26 -04:00
macdonst
9bac59b952 CB-1206: file uri not handled correctly by Media Player 2012-08-08 15:33:01 -04:00
macdonst
5016253922 Update to use latest Android SDK 2012-08-07 15:40:05 -04:00
Joe Bowser
03893071fc Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-08-03 14:08:14 -07:00
Joe Bowser
d3dc94c04b CB-578 - Adding a test of pause and resume to make sure that they're being called. Need to elaborate on this 2012-08-03 14:07:01 -07:00
Andrew Grieve
af0feabb6a Prefer setFixedLengthStreamingMode over setChunkedStreamingMode in FileTransfer.
setFixedLengthStreamingMode causes the Content-Length header to be set,
which some servers require.

We now use setChunkedStreamingMode only on Eclair devices
since there is a bug with setFixedLengthStreamingMode in that version
of the OS.
2012-08-03 12:29:37 -04:00
Joe Bowser
81ab0a414f I forgot that Jellybean has some wacky changes on the onKeyUp and onKeyDown events, fixing CB-1181 2012-08-02 12:51:48 -07:00
Joe Bowser
ecd6ca0172 Moving the fix for # and ? to a new class to fix CB-995 2012-07-31 16:16:57 -07:00
Joe Bowser
db7ee192f7 This was a red herring. There was an XML error on the example when compared with master 2012-07-31 12:20:31 -07:00
Joe Bowser
2ec0b601fa Commenting out this past code, turns out this breaks more things than it fixes: CB-1101 2012-07-31 11:55:01 -07:00
Joe Bowser
79feb6d5d2 CB-1101: Specifying Jellybean means that we have to override the default CORS policy 2012-07-31 11:48:38 -07:00
Joe Bowser
8013b760e3 Adding functionality to read a config.xml file with plugin details implemented inside of it 2012-07-30 16:31:33 -07:00
Joe Bowser
a29b8e5b36 Caught error with the back button again. backHistory actually goes back in history, used canGoBack() instead 2012-07-30 13:55:22 -07:00
Anis Kadri
9ef487a7a5 fixing replace for mountain lion 2012-07-28 08:13:31 -07:00
Anis Kadri
563fa46ba4 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-07-27 18:30:59 -07:00
Anis Kadri
7865c06863 CB-1148 fix for directories with spaces 2012-07-27 18:30:39 -07:00
Andrew Grieve
3d53b9244d Adds FileTransfer support for upload headers.
-Support previously existed via options.params.headers. This CL
deprecates this (undocumented) way of adding headers and adds support
for options.headers.
-This also adds support for multiple headers via:
    options.headers = {"Name": ["Value1", "Value2"]}.
2012-07-27 20:54:31 -04:00
Joe Bowser
f2afa4dd50 Tweaking the Android Manfest to cope with new target changes: CB-1147 2012-07-27 13:31:25 -07:00
Joe Bowser
893ecec55e Minor fix to deal with weird keyboard focus issues and the back button. CB-1146 2012-07-27 10:33:38 -07:00
Joe Bowser
401584dbd8 Throwing code over the fence for CB-1128, We need a Samsung Galaxy S running 2.3.5 to confirm this fix 2012-07-25 12:54:03 -07:00
Joe Bowser
b234b0bded Utility Methods based on Feedback 2012-07-24 15:54:01 -07:00
Joe Bowser
b9b2c6a013 Updating sample project 2012-07-23 10:43:23 -07:00
Joe Bowser
1d2efa0d25 Fixing leaking sockets 2012-07-20 16:02:43 -07:00
Joe Bowser
93ec092eaf Forgot to add the example app. Works with the script 2012-07-20 09:57:26 -07:00
Joe Bowser
29ae492983 Upping the version to 2.0.0 2012-07-18 16:58:03 -07:00
Joe Bowser
b9f6a59a20 Fix for CB-1085 2012-07-18 14:37:45 -07:00
Joe Bowser
d74551216f Throwing code over the fence to fix CB-1087, I can't repro on my Galaxy Nexus 2012-07-18 14:30:45 -07:00
Andrew Grieve
d4302ae51b Remove cordova.xml and plugins.xml from framework/res/xml.
They have been superseded by config.xml, and having them stick around
was confusing.
2012-07-16 15:06:12 -04:00
Joe Bowser
9d5fb0b201 Tagging 2.0.0rc1 2012-07-13 15:46:09 -07:00
Fil Maj
e0a5fe4002 [CB-574] Added backbutton automated unit test for android. 2012-07-13 14:57:40 -07:00
macdonst
f9d9a0a4bd Adding deprecation notice to LegacyContext 2012-07-13 15:36:56 -04:00
Joe Bowser
78f0c7b119 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android into audio 2012-07-12 14:41:56 -07:00
Fil Maj
c6d8343de2 [CB-1035] Including newest JS built based on refactored common device module. 2012-07-12 13:37:08 -07:00
Anis Kadri
0ccd11e587 CB-1031 android create script fails 2012-07-11 14:00:42 -07:00
Joe Bowser
b486711d68 Combining plugins.xml and cordova.xml to make config.xml 2012-07-11 11:23:31 -07:00
Fil Maj
2eb4c5e960 [CB-1022] Reverted nanoTime back to currentTimeMillis. Updated mobile-spec tests as well. This passes all accel tests. 2012-07-11 10:26:14 -07:00
Fil Maj
85aa740c98 [CB-481] Removed todo comment introduced by bryce, clarified what is going on 2012-07-11 09:35:29 -07:00
Joe Bowser
6415848383 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android into audio 2012-07-11 09:14:04 -07:00
macdonst
beb9460538 CB-952: Android showSplashScreen crashes 2012-07-10 20:52:07 -04:00
Joe Bowser
c030770be7 Working with Lorin's change 2012-07-10 14:37:26 -07:00
macdonst
0180342dff CB-993: Android plugin problems upgrading to 1.9.0 2012-07-10 16:26:52 -04:00
macdonst
b97748d3dc CB-1005: Can not remove contact phonenumber values 2012-07-10 11:25:20 -04:00
Joe Bowser
9d4977db00 Fixing bug on ICS where the super.onKeyDown wasn't being called 2012-07-09 14:42:29 -07:00
macdonst
f095284faa CB-1016: Zero width or height in getPicture throws java.lang.ArithmeticException 2012-07-07 22:19:55 -04:00
macdonst
401c2f42f9 Modify PluginResult(status) so it generates a JSON string that works with JSON.parse() 2012-07-06 17:39:04 -04:00
macdonst
eb0348d47c CB-1014: Out of Memory error when getting image from photo library 2012-07-06 12:37:08 -04:00
macdonst
1f46240ba9 CB-999: When getting images from the PHOTOLIBRARY apply the correctOrientation fix 2012-07-05 16:04:47 -04:00
macdonst
14870726e0 CB-1008: Camera with targetHeight, targetWidth loses image aspect ratio 2012-07-05 15:32:55 -04:00
macdonst
c7d6a2eecb CB-992: Camera tries to add temp photo to gallery 2012-07-05 14:02:20 -04:00
macdonst
ce61eb2174 Implementing CordovaInterface.getContext in test folder classes 2012-07-03 11:36:04 -04:00
macdonst
f3df21ef0a Fix mis-spelling in upgrade guide 2012-07-03 10:33:48 -04:00
macdonst
5eb554e008 CB-993: Android plugin problems upgrading to 1.9.0
The DroidGap.getContext() method causes an infinite loop and eventually a stack overflow error.
2012-07-02 16:37:14 -04:00
macdonst
e5e7c3fad3 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-06-29 15:55:34 -04:00
macdonst
2a8b9ab75e Tagging to 1.9.0 2012-06-29 15:55:03 -04:00
Fil Maj
c8f0ffb42f Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-06-29 09:37:59 -07:00
Fil Maj
b3e68b96cf Removing CordovaWebView Guide; its going into the docs 2012-06-29 09:37:31 -07:00
macdonst
ae7a550a09 Only load Exif information if necessary 2012-06-29 11:31:33 -04:00
Anis Kadri
e069bbb800 CB-937 fixing debug for windows 2012-06-28 17:11:21 -07:00
Anis Kadri
17ff6be6a9 CB-937 fixing debug 2012-06-28 17:08:32 -07:00
Anis Kadri
d42489c67a Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-06-28 16:47:18 -07:00
Lorin Beer
3ea72e5d21 added deleted tempfile setup 2012-06-28 16:17:00 -07:00
Lorin Beer
762854ad7a changed handling of stopRecording to reflect handling of create message 2012-06-28 15:53:47 -07:00
Lorin Beer
10465066ee Merge branches 'master' and 'dev' 2012-06-28 15:37:11 -07:00
Lorin Beer
0cf9f51816 use enums to track internal states instead of int. Fixed 'unknown state' bug with the addition of loading state. Mega commit, lost some history. 2012-06-28 15:36:28 -07:00
Lorin Beer
3d5e2340ca update to use ordinal instead of enum value 2012-06-28 15:29:23 -07:00
macdonst
e2047afa42 Wire rotation fix to correctOrientation parameter 2012-06-28 12:00:19 -04:00
macdonst
231b39d2dc Reset orientation exif information when photo is rotated
When a photo is taken in portrait mode we rotate it so it shows up properly in the webview. The Exif orientation must be reset to normal orientation (0) or the image will not display properly on desktops.
2012-06-28 12:00:19 -04:00
macdonst
dddce30368 Rotate image if taken in portrait mode 2012-06-28 12:00:19 -04:00
macdonst
e0e4ba2bd7 Fix double image problem on Samsung phones
On Samsung phones even if you tell the camera not to save to the photo gallery it still does. This small fix deletes the original file as it is not needed.
2012-06-28 12:00:19 -04:00
macdonst
e0eadb6b76 Using a better scaling algorithm to resize the image
Instead of reading the entire image into a bitmap then scaling we use the
inSampleSize option to get a close to the target width and height as possible
then we scale that smaller image.
2012-06-28 12:00:19 -04:00
macdonst
483e5dfbea Switch getPicture from Gallery to use file instead of content resolver 2012-06-28 12:00:18 -04:00
macdonst
8aa9d8213d Cache bust returned Image URI if saveToPhotoAlbum is false 2012-06-28 12:00:18 -04:00
macdonst
a74f71c935 Decode image from File instead of content resolver 2012-06-28 12:00:18 -04:00
macdonst
87b81e53f0 CB-978: FileTransfer.upload from a directory with a space fails 2012-06-28 11:57:06 -04:00
Joe Bowser
a2816e31c3 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-06-28 08:00:59 -07:00
Joe Bowser
f78af9f27b Forgot to add it renderscript.opt.level to the project. This will fix ant issues 2012-06-28 08:00:35 -07:00
Anis Kadri
98138a0a60 log was actually doing nothing...fixing it 2012-06-27 17:55:35 -07:00
Anis Kadri
e639b6303e updating create script to work from distro and source 2012-06-27 17:54:57 -07:00
Anis Kadri
99fb3ebe00 creating project without source 2012-06-26 17:34:19 -07:00
Joe Bowser
5829840409 Re-adding getContext because yo dawg, I heard you like contexts in your contexts 2012-06-26 11:25:17 -07:00
Anis Kadri
4699ab5500 forgot to add +x on BOOM 2012-06-25 15:03:19 -07:00
Anis Kadri
69fc7f39b7 setting +x on script files 2012-06-25 14:59:35 -07:00
Anis Kadri
510a962a52 deleting old BOOM 2012-06-25 14:56:09 -07:00
Anis Kadri
570fc3cfb2 removing echoes 2012-06-25 14:46:10 -07:00
Joe Bowser
5d211f2fa6 Might as well keep isBackbuttonOverriden on the plugin 2012-06-22 10:38:42 -07:00
Joe Bowser
dcb127c14d Weird merge error didn't account for isBackButtonBound 2012-06-22 10:37:33 -07:00
Fil Maj
fba87de064 Removed some legacy button code that existed in droidgap + app plugins 2012-06-22 10:07:07 -07:00
Anis Kadri
576f8cba44 Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-06-21 21:15:59 -07:00
Anis Kadri
b9f9429542 windows build/debug/launch scripts 2012-06-21 21:15:53 -07:00
Joe Bowser
bf0df9f3c3 Since we moved binding of buttons into a view, let's remove it from the Interface 2012-06-21 15:21:56 -07:00
Joe Bowser
1d458f2782 After failed rebase, need to do merge in the branch to fix this 2012-06-21 14:49:19 -07:00
Fil Maj
5ca4b4a884 Refactored cleanup in camera code a bit. Removed overrides for Scanner functionality 2012-06-21 14:22:09 -07:00
Joe Bowser
5935052ead Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-cordova-android 2012-06-21 14:04:48 -07:00
Fil Maj
f3f2ad9144 Merging in use of uri variable between Simon and my changes. 2012-06-21 14:03:59 -07:00
Fil Maj
9d1edc4554 Fixed the 0-byte files in gallery. Also fixed exif rewriter for saveToPhotoAlbum:false JPG files. Thanks for your help Simon! 2012-06-21 14:03:59 -07:00
Fil Maj
5143b8a492 added . in front of the temp files passed into camera app. presumably this hsould stop the gallery app from picking it up 2012-06-21 14:03:59 -07:00
Fil Maj
7c67f40fc4 Tacked on file extension to camera file 2012-06-21 14:03:58 -07:00
Fil Maj
167b600135 Removing images and saving images to jail if SaveToPhotoAlbum is set to true 2012-06-21 14:03:58 -07:00
Fil Maj
6c465e25d3 merge!!!!11one 2012-06-21 14:03:58 -07:00
Fil Maj
c183d06ed1 Added MediaScanner abilities to camera launcher plugin. Now images saved to SD card should show up in the android gallery app right away 2012-06-21 14:03:58 -07:00
Joe Bowser
574731b853 Adding updated JS 2012-06-21 14:03:58 -07:00
Fil Maj
94568a4ec8 Merging in use of uri variable between Simon and my changes. 2012-06-21 12:37:44 -07:00
Fil Maj
b22c0e5b6d Fixed the 0-byte files in gallery. Also fixed exif rewriter for saveToPhotoAlbum:false JPG files. Thanks for your help Simon! 2012-06-21 12:09:51 -07:00
Fil Maj
ab3347d25d added . in front of the temp files passed into camera app. presumably this hsould stop the gallery app from picking it up 2012-06-21 12:09:51 -07:00
Fil Maj
66872de8e5 Tacked on file extension to camera file 2012-06-21 12:09:50 -07:00
Fil Maj
f6d4402fdc Removing images and saving images to jail if SaveToPhotoAlbum is set to true 2012-06-21 12:09:50 -07:00
Fil Maj
9f66ccb5f3 merge!!!!11one 2012-06-21 12:09:50 -07:00
Fil Maj
b339330592 Added MediaScanner abilities to camera launcher plugin. Now images saved to SD card should show up in the android gallery app right away 2012-06-21 12:09:50 -07:00
Anis Kadri
6f8e13297e fixing create 2012-06-20 19:08:18 -07:00
Anis Kadri
e9a9144098 adding windows scripts 2012-06-20 19:07:41 -07:00
Joe Bowser
d1905dbee8 Fixing work-around to work for both ? and # 2012-06-20 14:16:02 -07:00
Joe Bowser
adc88f01b7 Attempt to test icecream_workaround from viafirma 2012-06-20 12:45:51 -07:00
Joe Bowser
ccf0c5db67 Got up and down mixed 2012-06-20 12:07:04 -07:00
Joe Bowser
f394f7457b Tweaks to CordovaWebView to support other keys 2012-06-19 16:35:22 -07:00
Joe Bowser
40b9810a63 Starting the Buttons Branch 2012-06-18 11:31:53 -07:00
Lorin Beer
d9e7984279 fixed seek behaviour, but introduces a bunch of new problems 2012-06-18 10:29:56 -07:00
Lorin Beer
e5b9900d3b halfway through refactor 2012-06-17 23:59:13 -07:00
Lorin Beer
fc3f1431b2 made internal status static variables final as well, specifically so that they can be used in switch statements 2012-06-17 22:56:22 -07:00
Lorin Beer
c8bf2f4cb1 removed audio load code from startPlaying to a private function 2012-06-17 22:37:12 -07:00
Lorin Beer
d16555ec4b added file requirement to constructor, all references to AudioPlayer constructor had direct access to file, so this caused no other changes 2012-06-17 22:19:33 -07:00
Lorin Beer
3c9415b1c2 added create message handler, updated AudioPlayer constructor usage 2012-06-17 22:18:09 -07:00
Juan G. Hurtado
dffd2deb53 Merge branch 'icecream_workaround' of github.com:viafirma/incubator-cordova-android into icecream_workaround 2012-05-18 08:49:26 +02:00
Juan G. Hurtado
8ff48b371e Fix imports for changes in 45680a5
Commit 45680a5 had errors importing packages. This commit fix them.
2012-05-18 08:48:08 +02:00
Juan G. Hurtado
6de66b87cb Add Android 4.0 workaround for links with params
Android 4.0.x has a known bug [1] while accessing local files with
params:

file://file.html?param=2

This commit adds a workaround for this problem by removing the params
part of the local URI before accessing the file.

[1] http://code.google.com/p/android/issues/detail?id=17535
2012-05-18 08:48:07 +02:00
Juan G. Hurtado
45680a562e Add Android 4.0 workaround for links with params
Android 4.0.x has a known bug [1] while accessing local files with
params:

file://file.html?param=2

This commit adds a workaround for this problem by removing the params
part of the local URI before accessing the file.

[1] http://code.google.com/p/android/issues/detail?id=17535
2012-05-16 08:42:50 +02:00
339 changed files with 22231 additions and 22656 deletions

49
.gitignore vendored
View File

@@ -3,18 +3,41 @@ default.properties
gen
assets/www/cordova.js
local.properties
framework/proguard.cfg
framework/cordova.jar
framework/cordova-*.jar
framework/phonegap-*.jar
framework/bin
framework/test/org/apache/cordova/*.class
framework/assets/www/.DS_Store
framework/assets/www/cordova-*.js
framework/assets/www/phonegap-*.js
proguard.cfg
proguard.cfg
proguard-project.txt
/framework/lib
/framework/build
/framework/bin
/framework/assets/www/.DS_Store
/framework/assets/www/cordova-*.js
/framework/assets/www/phonegap-*.js
/framework/libs
/framework/javadoc-public
/framework/javadoc-private
/test/libs
example
./test
tmp
/test/bin
/test/assets/www/.tmp*
/test/assets/www/cordova.js
/test/gradle
/test/gradlew
/test/gradlew.bat
/test/build
.gradle
tmp/**
.metadata
tmp/**/*
Thumbs.db
Desktop.ini
*.tmp
test/libs/*.jar
bin/node_modules
*.bak
*.swp
*.class
*.jar
# IntelliJ IDEA files
*.iml
.idea
npm-debug.log
/node_modules
/framework/build

2
.jshintignore Normal file
View File

@@ -0,0 +1,2 @@
bin/node_modules/*
bin/templates/project/*

10
.jshintrc Normal file
View File

@@ -0,0 +1,10 @@
{
"node": true
, "bitwise": true
, "undef": true
, "trailing": true
, "quotmark": true
, "indent": 4
, "unused": "vars"
, "latedef": "nofunc"
}

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'

6
.travis.yml Normal file
View File

@@ -0,0 +1,6 @@
language: android
sudo: false
install: npm install
script:
- npm test
- npm run test-build

38
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,38 @@
<!--
#
# 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.
#
-->
# Contributing to Apache Cordova
Anyone can contribute to Cordova. And we need your contributions.
There are multiple ways to contribute: report bugs, improve the docs, and
contribute code.
For instructions on this, start with the
[contribution overview](http://cordova.apache.org/#contribute).
The details are explained there, but the important items are:
- Sign and submit an Apache ICLA (Contributor License Agreement).
- Have a Jira issue open that corresponds to your contribution.
- Run the tests so your patch doesn't break existing functionality.
We look forward to your contributions!

87
LICENSE
View File

@@ -199,4 +199,89 @@
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.
limitations under the License.
ADDITIONAL LICENSES:
================================================================================
bin/node_modules/q
================================================================================
Copyright 20092012 Kristopher Michael Kowal. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
================================================================================
bin/node_modules/shelljs
================================================================================
Copyright (c) 2012, Artur Adib <aadib@mozilla.com>
All rights reserved.
You may use this project under the terms of the New BSD license as follows:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Artur Adib nor the
names of the contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================================================
bin/node_modules/shelljs
================================================================================
Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
All rights reserved.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

14
NOTICE
View File

@@ -1,5 +1,15 @@
Apache Cordova
Copyright 2012 The Apache Software Foundation
Copyright 2014 The Apache Software Foundation
This product includes software developed by
This product includes software developed at
The Apache Software Foundation (http://www.apache.org)
=========================================================================
== NOTICE file corresponding to the section 4 d of ==
== the Apache License, Version 2.0, ==
== in this case for the Android-specific code. ==
=========================================================================
This product includes software developed as part of
The Android Open Source Project (http://source.android.com).

142
README.md Executable file → Normal file
View File

@@ -1,114 +1,58 @@
Cordova Android
===
<!--
#
# 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 is an Android application library that allows for Cordova based projects to be built for the Android Platform. Cordova based applications are, at the core, an application written with web technology: HTML, CSS and JavaScript.
Cordova Android is an Android application library that allows for Cordova-based
projects to be built for the Android Platform. Cordova based applications are,
at the core, applications written with web technology: HTML, CSS and JavaScript.
Apache Cordova is an effort undergoing incubation at The Apache
Software Foundation (ASF), sponsored by the Apache Incubator project.
Incubation is required of all newly accepted projects until a further
review indicates that the infrastructure, communications, and decision
making process have stabilized in a manner consistent with other
successful ASF projects. While incubation status is not necessarily
a reflection of the completeness or stability of the code, it does
indicate that the project has yet to be fully endorsed by the ASF.
[Apache Cordova](https://cordova.apache.org) is a project of The Apache Software Foundation (ASF).
Requires
---
- Java JDK 1.5
- Apache ANT
## Requires
- Java JDK 1.6 or greater
- 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, copy the commons codec:
mv commons-codec-1.6.jar framework/libs
then run in the framework directory:
android update project -p . -t android-15
ant jar
Cordova Android Developer Tools
---
## Cordova Android Developer Tools
The Cordova developer tooling is split between general tooling and project level tooling.
We recommend using the [Cordova command-line tool](https://www.npmjs.com/package/cordova) to create projects and be able to easily install plugins.
To enable the command-line tools available in the ./bin directory, make
sure you have all of the dependencies installed. You will need
[NodeJS](http://nodejs.org) (which should come with `npm`). To install
the dependencies:
However, the following scripts can be used instead:
$ cd bin
$ npm install
./bin/create [path package activity] ... creates the ./example app or a cordova android project
./bin/check_reqs ....................... checks that your environment is set up for cordova-android development
./bin/update [path] .................... updates an existing cordova-android project to the version of the framework
General Commands
These commands live in a generated Cordova Android project. Any interactions with the emulator require you to have an AVD defined.
./bin/create [path package activity] ... create the ./example app or a cordova android project
./bin/bench ............................ generate a bench proj
./bin/autotest ......................... test the cli tools
./bin/test ............................. run mobile-spec
./cordova/clean ........................ cleans the project
./cordova/build ........................ calls `clean` then compiles the project
./cordova/log ........................ streams device or emulator logs to STDOUT
./cordova/run ........................ calls `build` then deploys to a connected Android device. If no Android device is detected, will launch an emulator and deploy to it.
./cordova/version ...................... returns the cordova-android version of the current project
Project Commands
## Using Android Studio
These commands live in a generated Cordova Android project.
1. Create a project
2. Import it via "Non-Android Studio Project"
./cordovap/debug [path] ..................... install to first device
./cordova/emulate .......................... start avd (emulator) named default
./cordova/log .............................. starts logcat
Running the Example Project
---
Start avd (emulator) named `default`:
./bin/emulate
Create the example project and build it to the first device:
./bin/create
cd example
./cordova/debug
Start adb logcat (console.log calls output here):
./cordova/log
Running the [callback/callback-test](http://github.com/callback/callback-test) tests:
---
./bin/test
Creating a new Cordova Android Project
---
./bin/create ~/Desktop/myapp com.phonegap.special MyApp
Importing a Cordova Android Project into Eclipse
----
1. File > New > Project...
2. Android > Android Project
3. Create project from existing source (point to the generated app found in tmp/android)
4. Right click on libs/cordova.jar and add to build path
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)
Running Tests
----
Please see details under test/README.md.
Further Reading
---
- [http://developer.android.com](http://developer.android.com)
- [http://docs.phonegap.com](http://docs.phonegap.com)
- [http://wiki.phonegap.com](http://wiki.phonegap.com)

353
RELEASENOTES.md Normal file
View File

@@ -0,0 +1,353 @@
<!--
#
# 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.
#
-->
## Release Notes for Cordova (Android) ##
### Release 4.0.0 (March 2015) ###
This release adds significant functionality, and also introduces a number
of breaking changes. Some of the changes to the code base will be of
particular interest to plugin developers.
#### Major Changes ####
* Support for pluggable WebViews
* The system WebView can be replaced in your app, via a plugin
* Core WebView functionality is encapsulated, with extension points exposed
via interfaces
* Support for Crosswalk to bring the modern Chromium WebView to older devices
* Uses the pluggable WebView framework
* You will need to add the new [cordova-crosswalk-engine](https://github.com/MobileChromeApps/cordova-crosswalk-engine) plugin
* Splash screen functionality is now provided via plugin
* You will need to add the new [cordova-plugin-splashscreen](https://github.com/apache/cordova-plugin-splashscreen) plugin to continue using a splash screen
* Whitelist functionality is now provided via plugin (CB-7747)
* The whitelist has been enhanced to be more secure and configurable
* Setting of Content-Security-Policy is now supported by the framework (see details in plugin readme)
* You will need to add the new [cordova-plugin-whitelist](https://github.com/apache/cordova-plugin-whitelist) plugin
* Legacy whitelist behaviour is still available via plugin (although not recommended).
Changes For Plugin Developers:
* Develop in Android Studio
* Android Studio is now fully supported, and recommended over Eclipse
* Build using Gradle
* All builds [use Gradle by default](Android%20Shell%20Tool%20Guide_building_with_gradle), instead of Ant
* Plugins can add their own gradle build steps!
* Plugins can depend on Maven libraries using `<framework>` tags
* New APIs: `onStart`, `onStop`, `onConfigurationChanged`
* `"onScrollChanged"` message removed. Use `view.getViewTreeObserver().addOnScrollChangedListener(...)` instead
* CB-8702 New API for plugins to override `shouldInterceptRequest` with a stream
#### Other Changes ####
* CB-8378 Removed `hidekeyboard` and `showkeyboard` events (apps should use a plugin instead)
* CB-8735 `bin/create` regex relaxed / better support for numbers
* CB-8699 Fix CordovaResourceApi `copyResource` creating zero-length files when src=uncompressed asset
* CB-8693 CordovaLib should not contain icons / splashscreens
* CB-8592 Fix NPE if lifecycle events reach CordovaWebView before `init()` has been called
* CB-8588 Add CATEGORY_BROWSABLE to intents from showWebPage openExternal=true
* CB-8587 Don't allow WebView navigations within showWebPage that are not whitelisted
* CB-7827 Add `--activity-name` for `bin/create`
* CB-8548 Use debug-signing.properties and release-signing.properties when they exist
* CB-8545 Don't add a layout as a parent of the WebView
* CB-7159 BackgroundColor not used when `<html style="opacity:0">`, nor during screen rotation
* CB-6630 Removed OkHttp from core library. It's now available as a plugin: [cordova-plugin-okhttp](https://www.npmjs.com/package/cordova-plugin-okhttp)
### Release 3.7.1 (January 2015) ###
* CB-8411 Initialize plugins only after `createViews()` is called (regression in 3.7.0)
### Release 3.7.0 (January 2015) ###
* CB-8328 Allow plugins to handle certificate challenges (close #150)
* CB-8201 Add support for auth dialogs into Cordova Android
* CB-8017 Add support for `<input type=file>` for Lollipop
* CB-8143 Loads of gradle improvements (try it with cordova/build --gradle)
* CB-8329 Cancel outstanding ActivityResult requests when a new startActivityForResult occurs
* CB-8026 Bumping up Android Version and setting it up to allow third-party cookies. This might change later.
* CB-8210 Use PluginResult for various events from native so that content-security-policy <meta> can be used
* CB-8168 Add support for `cordova/run --list` (closes #139)
* CB-8176 Vastly better auto-detection of SDK & JDK locations
* CB-8079 Use activity class package name, but fallback to application package name when looking for splash screen drawable
* CB-8147 Have corodva/build warn about unrecognized flags rather than fail
* CB-7881 Android tooling shouldn't lock application directory
* CB-8112 Turn off mediaPlaybackRequiresUserGesture
* CB-6153 Add a preference for controlling hardware button audio stream (DefaultVolumeStream)
* CB-8031 Fix race condition that shows as ConcurrentModificationException
* CB-7974 Cancel timeout timer if view is destroyed
* CB-7940 Disable exec bridge if bridgeSecret is wrong
* CB-7758 Allow content-url-hosted pages to access the bridge
* CB-6511 Fixes build for android when app name contains unicode characters.
* CB-7707 Added multipart PluginResult
* CB-6837 Fix leaked window when hitting back button while alert being rendered
* CB-7674 Move preference activation back into onCreate()
* CB-7499 Support RTL text direction
* CB-7330 Don't run check_reqs for bin/create.
### 3.6.4 (Sept 30, 2014) ###
* Set VERSION to 3.6.4 (via coho)
* Update JS snapshot to version 3.6.4 (via coho)
* CB-7634 Detect JAVA_HOME properly on Ubuntu
* CB-7579 Fix run script's ability to use non-arch-specific APKs
* CB-6511 Fixes build for android when app name contains unicode characters.
* CB-7463: Adding licences. I don't know what the gradle syntax is for comments, that still needs to be done.
* CB-7463: Looked at the Apache BigTop git, gradle uses C-style comments
* CB-7460: Fixing bug with KitKat where the background colour would override the CSS colours on the application
### 3.6.0 (Sept 2014) ###
* Set VERSION to 3.6.0 (via coho)
* CB-7410 fix the menu test
* CB-7410 Fix the errorUrl test
* CB-7410 Fix Basic Authentication test
* CB-3445: Allow build and run scripts to select APK by architecture
* CB-3445: Add environment variable 'BUILD_MULTIPLE_APKS' for splitting APKs based on architecture
* CB-3445: Ensure that JAR files in libs directory are included
* CB-7267 update RELEASENOTES for 3.5.1
* CB-7410 clarify the title
* CB-7385 update cordova.js for testing prior to branch/tag
* CB-7410 add whitelist entries to get iframe/GoogleMaps working
* CB-7291 propogate change in method signature to the native tests
* CB-7291: Restrict meaning of "\*" in internal whitelist to just http and https
* CB-7291: Only add file, content and data URLs to internal whitelist
* CB-7291: Add defaults to external whitelist
* CB-7291: Add external-launch-whitelist and use it for filtering intent launches
* CB-3445: Read project.properties to configure gradle libraries
* CB-7325 Fix error message in android_sdk_version.js when missing SDK on windows
* CB-7335 Add a .gitignore to android project template
* CB-7330 Fix dangling function call in last commit (broke gradle builds)
* CB-7330 Don't run "android update" during creation
* CB-3445 Add gradle support clean command (plus some code cleanup)
* CB-7044 Fix typo in prev commit causing check_reqs to always fail.
* CB-3445 Copy gradle wrapper in build instead of create
* CB-3445 Add .gradle template files for "update" as well as "create"
* CB-7044 Add JAVA_HOME when not set. Be stricter about ANDROID_HOME
* CB-3445 Speed up gradle building (incremental builds go from 10s -> 1.5s for me)
* CB-3445: android: Copy Gradle wrapper from Android SDK rather than bundling a JAR
* CB-3445: Add which to checked-in node_modules
* CB-3445: Add option to build and install with gradle
* CB-3445: Add an initial set of Gradle build scripts
* CB-7321 Don't require ant for create script
* CB-7044, CB-7299 Fix up PATH problems when possible.
* Change in test's AndroidManifest.xml needed for the test to run properly. Forgot the manifest.
* Change in test's AndroidManifest.xml needed for the test to run properly
* Adding tests related to 3.5.1
* CB-7261 Fix setNativeToJsBridgeMode sometimes crashing when switching to ONLINE_EVENT
* CB-7265 Fix crash when navigating to custom protocol (introduced in 3.5.1)
* Filter out non-launchable intents
* Handle unsupported protocol errors in webview better
* CB-7238: I should have collapsed this, but Config.init() must go before the creation of CordovaWebView
* CB-7238: Minor band-aid to get tests running again, this has to go away before 3.6.0 is released, since this is an API change.
* Extend whitelist to handle URLs without // chars
* CB-7172 Force window to have focus after resume
* CB-7159 Set background color of webView as well as its parent
* CB-7018 Fix setButtonPlumbedToJs never un-listening
* Undeprecate some just-deprecated symbols in PluginManager.
* @Deprecate methods of PluginManager that were never meant to be public
* Move plugin instantiation and instance storing logic PluginEntry->PluginManager
* Fix broken unit test due to missing Config.init() call
* Update to check for Google Glass APIs
* Fix for `android` not being in PATH check on Windows
* Displaying error when regex does not match.
* Fix broken compile due to previous commit :(
* Tweak CordovaPlugin.initialize method to be less deprecated.
* Un-deprecate CordovaActivity.init() - it's needed to tweak prefs in onCreate
* Tweak log messages in CordovaBridge with bridgeSecret is wrong
* Backport CordovaBridge from 4.0.x -> master
* Update unit tests to not use most deprecated things (e.g. DroidGap)
* Add non-String overloades for CordovaPreferences.set()
* Make CordovaWebview resilient to init() not being called (for backwards-compatibility)
* Add node_module licenses to LICENSE
* Update cordova.js snapshot to work with bridge changes
* Provide CordovaPlugin with CordovaPreferences. Add new Plugin.initialize()
* Convert usages of Config.\* to use the non-static versions
* Change getProperty -> prefs.get\* within CordovaActivity
* Make CordovaUriHelper class package-private
* Fix PluginManager.setPluginEntries not removing old entries
* Move registration of App plugin from config.xml -> code
* Make setWebViewClient an override instead of an overload. Delete Location-change JS->Native bridge mode (missed some of it).
* CB-4404 Revert setting android:windowSoftInputMode to "adjustPan"
* Refactor: Use ConfigXmlParser in activity. Adds CordovaWebView.init()
* Deprecate some convenience methods on CordovaActivity
* Fix CordovaPreferences not correctly parsing hex values (valueOf->decode)
* Refactor: Move url-filter information into PluginEntry.
* Don't re-parse config.xml in onResume.
* Move handling of Fullscreen preference to CordovaActivity
* Delete dead code from CordovaActivity
* Update .classpath to make Eclipse happy (just re-orders one line)
* Delete "CB-3064: The errorUrl is..." Log message left over from debugging presumably
* Refactor Config into ConfigXmlParser, CordovaPreferences
* Delete Location-change JS->Native bridge mode
* CB-5988 Allow exec() only from file: or start-up URL's domain
* CB-6761 Fix native->JS bridge ceasing to fire when page changes and online is set to false and the JS loads quickly
* Update the errorurl to no longer use intents
* This breaks running the JUnit tests, we'll bring it back soon
* Refactoring the URI handling on Cordova, removing dead code
* CB-7018 Clean up and deprecation of some button-related functions
* CB-7017 Fix onload=true being set on all subsequent plugins
* CB-5971: Fix package / project validation
* CB-5971: Add unit tests to cordova-android
* CB-5971: Factor out package/project name validation logic
* Delete explicit activity.finish() in back button handling. No change in behaviour.
* CB-5971: This would have been a good first bug, too bad
* CB-4404: Changing where android:windowSoftInputMode is in the manifest so it works
* Add documentation referencing other implementation.
* CB-6851 Deprecate WebView.sendJavascript()
* CB-6876 Show the correct executable name
* CB-6876 Fix the "print usage"
* Trivial spelling fix in comments when reading CordovaResourceApi
* CB-6818: I want to remove this code, because Square didn't do their headers properly
* CB-6860 Add activity_name and launcher_name to AndroidManifest.xml & strings.xml
* Add a comment to custom_rules.xml saying why we move AndroidManifest.xml
* Remove +x from README.md
* CB-6784 Add missing licenses
* CB-6784 Add license to CONTRIBUTING.md
* Revert "defaults.xml: Add AndroidLaunchMode preference"
* updated RELEASENOTES
* CB-6315: Wrapping this so it runs on the UI thread
* CB-6723 Update package name for Robotium
* CB-6707 Update minSdkVersion to 10 consistently
* CB-5652 make visible cordova version
* Update JS snapshot to version 3.6.0-dev (via coho)
* Update JS snapshot to version 3.6.0-dev (via coho)
* Set VERSION to 3.6.0-dev (via coho)
### 3.5.1 (August 2014) ###
This was a security update to address CVE-2014-3500, CVE-2014-3501,
and CVE-2014-3502. For more information, see
http://cordova.apache.org/announcements/2014/08/04/android-351.html
* Filter out non-launchable intents
* Handle unsupported protocol errors in webview better
* Update the errorurl to no longer use intents
* Refactoring the URI handling on Cordova, removing dead code
### 3.5.0 (May 2014) ###
* OkHttp has broken headers. Updating for ASF compliance.
* Revert accidentally removed lines from NOTICE
* CB-6552: added top level package.json
* CB-6491 add CONTRIBUTING.md
* CB-6543 Fix cordova/run failure when no custom_rules.xml available
* defaults.xml: Add AndroidLaunchMode preference
* Add JavaDoc for CordovaResourceApi
* CB-6388: Handle binary data correctly in LOAD_URL bridge
* Fix CB-6048: Set launchMode=singleTop so tapping app icon does not always restart app
* Remove incorrect usage of AlertDialog.Builder.create
* Catch uncaught exceptions in from plugins and turn them into error responses.
* Add NOTICE file
* CB-6047 Fix online sometimes getting in a bad state on page transitions.
* Add another convenience overload for CordovaResourceApi.copyResource
* Update framework's .classpath to what Eclipse wants it to be.
* README.md: `android update` to `android-19`.
* Fix NPE when POLLING bridge mode is used.
* Updating NOTICE to include Square for OkHttp
* CB-5398 Apply KitKat content URI fix to all content URIs
* CB-5398 Work-around for KitKat content: URLs not rendering in <img> tags
* CB-5908: add splascreen images to template
* CB-5395: Make scheme and host (but not path) case-insensitive in whitelist
* Ignore multiple onPageFinished() callbacks & onReceivedError due to stopLoading()
* Removing addJavascriptInterface support from all Android versions lower than 4.2 due to security vu
* CB-4984 Don't create on CordovaActivity name
* CB-5917 Add a loadUrlIntoView overload that doesn't recreate plugins.
* Use thread pool for load timeout.
* CB-5715 For CLI, hide assets/www and res/xml/config.xml by default
* CB-5793 ant builds: Rename AndroidManifest during -post-build to avoid Eclipse detecting ant-build/
* CB-5889 Make update script find project name instead of using "null" for CordovaLib
* CB-5889 Add a message in the update script about needing to import CordovaLib when using an IDE.
### 3.4.0 (Feb 2014) ###
43 commits from 10 authors. Highlights include:
* Removing addJavascriptInterface support from all Android versions lower than 4.2 due to security vulnerability
* CB-5917 Add a loadUrlIntoView overload that doesn't recreate plugins.
* CB-5889 Make update script find project name instead of using "null" for CordovaLib
* CB-5889 Add a message in the update script about needing to import CordovaLib when using an IDE.
* CB-5793 Don't clean before build and change output directory to ant-build to avoid conflicts with Eclipse.
* CB-5803 Fix cordova/emulate on windows.
* CB-5801 exec->spawn in build to make sure compile errors are shown.
* CB-5799 Update version of OkHTTP to 1.3
* CB-4910 Update CLI project template to point to config.xml at the root now that it's not in www/ by default.
* CB-5504 Adding onDestroy to app plugin to deregister telephonyReceiver
* CB-5715 Add Eclipse .project file to create template. For CLI projects, it adds refs for root www/ & config.xml and hides platform versions
* CB-5447 Removed android:debuggable=“true” from project template.
* CB-5714 Fix of android build when too big output stops build with error due to buffer overflow.
* CB-5592 Set MIME type for openExternal when scheme is file:
### 3.3.0 (Dec 2013) ###
41 commits from 11 authors. Highlights include:
* CB-5481 Fix for Cordova trying to get config.xml from the wrong namespace
* CB-5487 Enable Remote Debugging when your Android app is debuggable.
* CB-5445 Adding onScrollChanged and the ScrollEvent object
* CB-5422 Don't require JAVA_HOME to be defined
* CB-5490 Add javadoc target to ant script
* CB-5471 Deprecated DroidGap class
* CB-5255 Prefer Google API targets over android-## targets when building.
* CB-5232 Change create script to use Cordova as a Library Project instead of a .jar
* CB-5302 Massive movement to get tests working again
* CB-4996 Fix paths with spaces while launching on emulator and device
* CB-5209 Cannot build Android app if project path contains spaces
### 3.2.0 (Nov 2013) ###
27 commits from 7 authors. Highlights include:
* CB-5193 Fix Android WebSQL sometime throwing SECURITY_ERR.
* CB-5191 Deprecate <url-filter>
* Updating shelljs to 0.2.6. Copy now preserves mode bits.
* CB-4872 Added android version scripts (android_sdk_version, etc)
* CB-5117 Output confirmation message if check_reqs passes.
* CB-5080 Find resources in a way that works with aapt's --rename-manifest-package
* CB-4527 Don't delete .bat files even when on non-windows platform
* CB-4892 Fix create script only escaping the first space instead of all spaces.
### 3.1.0 (Sept 2013) ###
55 commits from 9 authors. Highlights include:
* [CB-4817] Remove unused assets in project template.
* Fail fast in create script if package name is not com.foo.bar.
* [CB-4782] Convert ApplicationInfo.java -> appinfo.js
* [CB-4766] Deprecated JSONUtils.java (moved into plugins)
* [CB-4765] Deprecated ExifHelper.java (moved into plugins)
* [CB-4764] Deprecated DirectoryManager.java (moved into plugins)
* [CB-4763] Deprecated FileHelper.java (moved into plugins), Move getMimeType() into CordovaResourceApi.
* [CB-4725] Add CordovaWebView.CORDOVA_VERSION constant
* Incrementing version check for Android 4.3 API Level 18
* [CB-3542] rewrote cli tooling scripts in node
* Allow CordovaChromeClient subclasses access to CordovaInterface and CordovaWebView members
* Refactor CordovaActivity.init so that subclasses can easily override factory methods for webview objects
* [CB-4652] Allow default project template to be overridden on create
* Tweak the online bridge to not send excess online events.
* [CB-4495] Modify start-emulator script to exit immediately on a fatal emulator error.
* Log WebView IOExceptions only when they are not 404s
* Use a higher threshold for slow exec() warnings when debugger is attached.
* Fix data URI decoding in CordovaResourceApi
* [CB-3819] Made it easier to set SplashScreen delay.
* [CB-4013] Fixed loadUrlTimeoutValue preference.
* Upgrading project to Android 4.3
* [CB-4198] bin/create script should be better at handling non-word characters in activity name. Patched windows script as well.
* [CB-4198] bin/create should handle spaces in activity better.
* [CB-4096] Implemented new unified whitelist for android
* [CB-3384] Fix thread assertion when plugins remap URIs

View File

@@ -1 +1 @@
1.9.0rc1
4.0.1

View File

@@ -1,21 +0,0 @@
#! /bin/sh
# 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.
#
#
./bin/create
cd ./example && ./cordova/debug && ./cordova/log

View File

@@ -1,3 +1,5 @@
#!/usr/bin/env node
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -17,13 +19,11 @@
under the License.
*/
var android_sdk_version = require('./lib/android_sdk_version');
package org.apache.cordova.file;
android_sdk_version.run().done(null, function(err) {
console.log(err);
process.exit(2);
});
public class TypeMismatchException extends Exception {
public TypeMismatchException(String message) {
super(message);
}
}

View File

@@ -0,0 +1,26 @@
:: 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
SET script_path="%~dp0android_sdk_version"
IF EXIST %script_path% (
node "%script_path%" %*
) ELSE (
ECHO.
ECHO ERROR: Could not find 'android_sdk_version' script in 'bin' folder, aborting...>&2
EXIT /B 1
)

View File

@@ -1,3 +1,5 @@
#!/usr/bin/env node
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -17,12 +19,13 @@
under the License.
*/
package org.apache.cordova.file;
var check_reqs = require('./lib/check_reqs');
public class EncodingException extends Exception {
public EncodingException(String message) {
super(message);
check_reqs.run().done(
function success() {
console.log('Looks like your environment fully supports cordova-android development!');
}, function fail(err) {
console.log(err);
process.exit(2);
}
}
);

26
bin/check_reqs.bat Normal file
View File

@@ -0,0 +1,26 @@
:: 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
SET script_path="%~dp0check_reqs"
IF EXIST %script_path% (
node "%script_path%" %*
) ELSE (
ECHO.
ECHO ERROR: Could not find 'check_reqs' script in 'bin' folder, aborting...>&2
EXIT /B 1
)

View File

@@ -1,125 +1,49 @@
#! /bin/sh
# 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.
#
# create a cordova/android project
#
# USAGE
# ./create [path package activity]
#
set -e
#!/usr/bin/env node
if [ -n "$1" ] && [ "$1" == "-h" ]
then
echo 'usage: create path package activity'
echo "Make sure the Android SDK tools folder is in your PATH!"
exit 0
fi
/*
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
BUILD_PATH=$( cd "$( dirname "$0" )/.." && pwd )
VERSION=$(cat $BUILD_PATH/VERSION)
http://www.apache.org/licenses/LICENSE-2.0
PROJECT_PATH=${1:-"./example"}
PACKAGE=${2:-"org.apache.cordova.example"}
ACTIVITY=${3:-"cordovaExample"}
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.
*/
var path = require('path');
var create = require('./lib/create');
var argv = require('nopt')({
'help' : Boolean,
'cli' : Boolean,
'shared' : Boolean,
'link' : Boolean,
'activity-name' : [String, undefined]
});
# clobber any existing example
if [ -d $PROJECT_PATH ]
then
echo "Project already exists! Delete and recreate"
exit 1
fi
# cleanup after exit and/or on error
function on_exit {
echo "Cleaning up ..."
# [ -f $BUILD_PATH/framework/libs/commons-codec-1.6.jar ] && rm $BUILD_PATH/framework/libs/commons-codec-1.6.jar
# [ -d $BUILD_PATH/framework/libs ] && rmdir $BUILD_PATH/framework/libs
[ -f $BUILD_PATH/framework/assets/www/cordova-$VERSION.js ] && rm $BUILD_PATH/framework/assets/www/cordova-$VERSION.js
[ -f $BUILD_PATH/framework/cordova-$VERSION.jar ] && rm $BUILD_PATH/framework/cordova-$VERSION.jar
if (argv.help || argv.argv.remain.length === 0) {
console.log('Usage: ' + path.relative(process.cwd(), path.join(__dirname, 'create')) + ' <path_to_new_project> <package_name> <project_name> [<template_path>] [--activity-name <activity_name>] [--link]');
console.log(' <path_to_new_project>: Path to your new Cordova Android project');
console.log(' <package_name>: Package name, following reverse-domain style convention');
console.log(' <project_name>: Project name');
console.log(' <template_path>: Path to a custom application template to use');
console.log(' --activity-name <activity_name>: Activity name');
console.log(' --link will use the CordovaLib project directly instead of making a copy.');
process.exit(1);
}
function on_error {
echo "An error occured. Deleting project..."
[ -d $PROJECT_PATH ] && rm -rf $PROJECT_PATH
}
var project_path = argv.argv.remain[0];
var package_name = argv.argv.remain[1];
var project_name = argv.argv.remain[2];
var template_path = argv.argv.remain[3];
var activity_name = argv['activity-name'];
# we do not want the script to silently fail
trap on_error ERR
trap on_exit EXIT
create.createProject(project_path, package_name, project_name, activity_name, template_path, argv.link || argv.shared, argv.cli).done();
ANDROID_BIN=$( which android )
PACKAGE_AS_PATH=$(echo $PACKAGE | sed 's/\./\//g')
ACTIVITY_PATH=$PROJECT_PATH/src/$PACKAGE_AS_PATH/$ACTIVITY.java
MANIFEST_PATH=$PROJECT_PATH/AndroidManifest.xml
TARGET=$($ANDROID_BIN list targets | grep id: | tail -1 | cut -f 2 -d ' ' )
# update the cordova-android framework for the desired target
$ANDROID_BIN update project --target $TARGET --path $BUILD_PATH/framework &> /dev/null
if [ ! -e $BUILD_PATH/framework/libs/commons-codec-1.6.jar ]; then
# Use curl to get the jar (TODO: Support Apache Mirrors)
echo "Downloading common-codecs-1.6 ..."
curl -OL http://mirror.symnds.com/software/Apache//commons/codec/binaries/commons-codec-1.6-bin.zip &> /dev/null
unzip commons-codec-1.6-bin.zip &> /dev/null
mkdir -p $BUILD_PATH/framework/libs
cp commons-codec-1.6/commons-codec-1.6.jar $BUILD_PATH/framework/libs
# cleanup yo
rm commons-codec-1.6-bin.zip && rm -rf commons-codec-1.6
fi
# compile cordova.js and cordova.jar
echo "Building cordova-$VERSION.jar and cordova-$VERSION.js ..."
(cd $BUILD_PATH/framework && ant jar &> /dev/null )
# create new android project
echo "Creating a new cordova android project ..."
$ANDROID_BIN create project --target $TARGET --path $PROJECT_PATH --package $PACKAGE --activity $ACTIVITY &> /dev/null
# copy project template
echo "Copying assets and resources ..."
cp -r $BUILD_PATH/bin/templates/project/assets $PROJECT_PATH
cp -r $BUILD_PATH/bin/templates/project/res $PROJECT_PATH
# copy cordova.js, cordova.jar and res/xml
echo "Setting up config and plugins list ..."
cp -r $BUILD_PATH/framework/res/xml $PROJECT_PATH/res
echo "Adding cordova-$VERSION.js and cordova-$VERSION.jar ..."
cp $BUILD_PATH/framework/assets/www/cordova-$VERSION.js $PROJECT_PATH/assets/www/cordova-$VERSION.js
cp $BUILD_PATH/framework/cordova-$VERSION.jar $PROJECT_PATH/libs/cordova-$VERSION.jar
# interpolate the activity name and package
echo "Updating Activity and AndroidManifest ..."
cp $BUILD_PATH/bin/templates/project/Activity.java $ACTIVITY_PATH
sed -i '' -e "s/__ACTIVITY__/${ACTIVITY}/g" $ACTIVITY_PATH
sed -i '' -e "s/__ID__/${PACKAGE}/g" $ACTIVITY_PATH
cp $BUILD_PATH/bin/templates/project/AndroidManifest.xml $MANIFEST_PATH
sed -i '' -e "s/__ACTIVITY__/${ACTIVITY}/g" $MANIFEST_PATH
sed -i '' -e "s/__PACKAGE__/${PACKAGE}/g" $MANIFEST_PATH
# creating cordova folder and copying emulate/debug/log/launch scripts
mkdir $PROJECT_PATH/cordova
cp $BUILD_PATH/bin/templates/cordova/appinfo.jar $PROJECT_PATH/cordova/appinfo.jar
cp $BUILD_PATH/bin/templates/cordova/cordova $PROJECT_PATH/cordova/cordova
cp $BUILD_PATH/bin/templates/cordova/debug $PROJECT_PATH/cordova/debug
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/emulate $PROJECT_PATH/cordova/emulate
cp $BUILD_PATH/bin/templates/cordova/BOOM $PROJECT_PATH/cordova/BOOM

View File

@@ -1,15 +1,26 @@
:: 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
IF NOT DEFINED JAVA_HOME GOTO MISSING
FOR %%X in (java.exe ant.bat android.bat) do (
SET FOUND=%%~$PATH:X
IF NOT DEFINED FOUND GOTO MISSING
)
cscript %~dp0\create.js %*
GOTO END
:MISSING
ECHO Missing one of the following:
ECHO JDK: http://java.oracle.com
ECHO Android SDK: http://developer.android.com
ECHO Apache ant: http://ant.apache.org
EXIT /B 1
:END
SET script_path="%~dp0create"
IF EXIST %script_path% (
node %script_path% %*
) ELSE (
ECHO.
ECHO ERROR: Could not find 'create' script in 'bin' folder, aborting...>&2
EXIT /B 1
)

View File

@@ -1,163 +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.
*/
/*
* create a cordova/android project
*
* USAGE
* ./create [path package activity]
*/
var fso = WScript.CreateObject('Scripting.FileSystemObject');
function read(filename) {
var fso=WScript.CreateObject("Scripting.FileSystemObject");
var f=fso.OpenTextFile(filename, 1);
var s=f.ReadAll();
f.Close();
return s;
}
function write(filename, contents) {
var fso=WScript.CreateObject("Scripting.FileSystemObject");
var f=fso.OpenTextFile(filename, 2, true);
f.Write(contents);
f.Close();
}
function replaceInFile(filename, regexp, replacement) {
write(filename, read(filename).replace(regexp, replacement));
}
function exec(s, output) {
var o=shell.Exec(s);
while (o.Status == 0) {
WScript.Sleep(100);
}
//WScript.Echo("Command exited with code " + o.Status);
}
function cleanup() {
// Cleanup
// if(fso.FileExists(ROOT + '\\framework\\libs\\commons-codec-1.6.jar')) {
// fso.DeleteFile(ROOT + '\\framework\\libs\\commons-codec-1.6.jar');
// fso.DeleteFolder(ROOT + '\\framework\\libs', true);
// }
if(fso.FileExists(ROOT + '\\framework\\cordova-'+VERSION+'.jar')) {
fso.DeleteFile(ROOT + '\\framework\\cordova-'+VERSION+'.jar');
}
if(fso.FileExists(ROOT + '\\framework\\assets\\www\\cordova-'+VERSION+'.js')) {
fso.DeleteFile(ROOT + '\\framework\\assets\\www\\cordova-'+VERSION+'.js');
}
}
function downloadCommonsCodec() {
if (!fso.FileExists(ROOT + '\\framework\\libs\\commons-codec-1.6.jar')) {
// We need the .jar
var url = 'http://mirror.symnds.com/software/Apache//commons/codec/binaries/commons-codec-1.6-bin.zip';
var libsPath = ROOT + '\\framework\\libs';
var savePath = libsPath + '\\commons-codec-1.6-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.6\\commons-codec-1.6.jar', ROOT + '\\framework\\libs\\commons-codec-1.6.jar');
// Clean up
fso.DeleteFile(ROOT + '\\framework\\libs\\commons-codec-1.6-bin.zip');
fso.DeleteFolder(ROOT + '\\framework\\libs\\commons-codec-1.6', true);
}
}
var args = WScript.Arguments, PROJECT_PATH="example",
PACKAGE="org.apache.cordova.example", ACTIVITY="cordovaExample",
shell=WScript.CreateObject("WScript.Shell");
// working dir
var ROOT = WScript.ScriptFullName.split('\\bin\\create.js').join('');
if (args.Count() == 3) {
PROJECT_PATH=args(0);
PACKAGE=args(1);
ACTIVITY=args(2);
}
if(fso.FolderExists(PROJECT_PATH)) {
WScript.Echo("Project already exists!");
WScript.Quit(1);
}
var PACKAGE_AS_PATH=PACKAGE.replace(/\./g, '\\');
var ACTIVITY_PATH=PROJECT_PATH+'\\src\\'+PACKAGE_AS_PATH+'\\'+ACTIVITY+'.java';
var MANIFEST_PATH=PROJECT_PATH+'\\AndroidManifest.xml';
var TARGET=shell.Exec('android.bat list targets').StdOut.ReadAll().match(/id:\s([0-9]).*/)[1];
var VERSION=read(ROOT+'\\VERSION').replace(/\r\n/,'').replace(/\n/,'');
// create the project
exec('android.bat create project --target '+TARGET+' --path '+PROJECT_PATH+' --package '+PACKAGE+' --activity '+ACTIVITY);
// update the cordova framework project to a target that exists on this machine
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');
// copy in the project template
exec('cmd /c xcopy '+ ROOT + '\\bin\\templates\\project\\* '+PROJECT_PATH+' /S /Y');
// copy in cordova.js
exec('cmd /c copy '+ROOT+'\\framework\\assets\\www\\cordova-'+VERSION+'.js '+PROJECT_PATH+'\\assets\\www\\cordova-'+VERSION+'.js /Y');
// copy in cordova.jar
exec('cmd /c copy '+ROOT+'\\framework\\cordova-'+VERSION+'.jar '+PROJECT_PATH+'\\libs\\cordova-'+VERSION+'.jar /Y');
// copy in xml
fso.CreateFolder(PROJECT_PATH + '\\res\\xml');
exec('cmd /c copy '+ROOT+'\\framework\\res\\xml\\cordova.xml ' + PROJECT_PATH + '\\res\\xml\\cordova.xml /Y');
exec('cmd /c copy '+ROOT+'\\framework\\res\\xml\\plugins.xml ' + PROJECT_PATH + '\\res\\xml\\plugins.xml /Y');
// interpolate the activity name and package
replaceInFile(ACTIVITY_PATH, /__ACTIVITY__/, ACTIVITY);
replaceInFile(ACTIVITY_PATH, /__ID__/, PACKAGE);
replaceInFile(MANIFEST_PATH, /__ACTIVITY__/, ACTIVITY);
replaceInFile(MANIFEST_PATH, /__PACKAGE__/, PACKAGE);
cleanup();

View File

@@ -1,98 +0,0 @@
<?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.
-->
<project name="cordova" default="create" basedir="../">
<property name="project.path" value="${basedir}/example"/>
<property name="package" value="org.apache.cordova.example"/>
<property name="activity" value="cordovaExample"/>
<target name="create">
<!-- this stuff is seriously stupid -->
<echo file="tmp/package.tmp">package-as-path=${package}</echo>
<replace file="tmp/package.tmp" token="." value="\\" />
<property file="tmp/package.tmp" />
<property name="activity.path" value="${project.path}/src/${package-as-path}/${activity}.java" />
<property name="manifest.path" value="${project.path}/AndroidManifest.xml" />
<!-- get the highest target on this machine -->
<!-- this stuff is also seriously stupid -->
<exec executable="cmd" osfamily="windows" output="tmp/target.list.tmp">
<arg line="/c android.bat list targets"/>
</exec>
<exec executable="android" osfamily="mac" output="tmp/target.list.tmp">
<arg line="list targets"/>
</exec>
<replaceregexp file="tmp/target.list.tmp" match=".*id:\s([0-9]).*" replace="target=\1" flags="s" />
<property file="tmp/target.list.tmp" />
<!-- var VERSION=read('VERSION').replace(/\r\n/,'').replace(/\n/,''); -->
<copy file="VERSION" tofile="tmp/VERSION.tmp" overwrite="true" />
<replaceregexp file="tmp/VERSION.tmp" match="^" replace="version=" />
<replaceregexp file="tmp/VERSION.tmp" match="\r\n" replace="" />
<property file="tmp/VERSION.tmp" />
<!-- clobber any existing example -->
<!-- create the project -->
<exec executable="cmd" osfamily="windows">
<arg line="/c android.bat create project --target ${target} --path ${project.path} --package ${package} --activity ${activity}"/>
</exec>
<exec executable="android" osfamily="mac">
<arg line="create project --target ${target} --path ${project.path} --package ${package} --activity ${activity}"/>
</exec>
<!-- update the framework dir -->
<exec executable="cmd" osfamily="windows">
<arg line="/c android.bat update project --target ${target} --path ${basedir}/framework"/>
</exec>
<exec executable="android" osfamily="mac">
<arg line="update project --target ${target} --path ${basedir}/framework"/>
</exec>
<!-- compile cordova.js and cordova.jar -->
<!-- // if you see an error about "Unable to resolve target" then you may need to
// update your android tools or install an additional Android platform version -->
<ant antfile="${basedir}/framework/build.xml" useNativeBasedir="true" inheritAll="false" />
<!-- copy in the project template -->
<copy todir="${project.path}" overwrite="true">
<fileset dir="${basedir}/bin/templates/project"/>
</copy>
<!-- copy in cordova.js -->
<copy file="${basedir}/framework/assets/www/cordova-${version}.js" todir="${project.path}/assets/www/" />
<!-- copy in cordova.jar -->
<copy file="${basedir}/framework/cordova-${version}.jar" todir="${project.path}/libs/" />
<!-- copy in default activity -->
<copy file="${basedir}/bin/templates/Activity.java" tofile="${activity.path}" overwrite="true" />
<!-- interpolate the activity name and package -->
<replaceregexp file="${activity.path}" match="__ACTIVITY__" replace="${activity}" />
<replaceregexp file="${activity.path}" match="__ID__" replace="${package}" />
<replaceregexp file="${manifest.path}" match="__ACTIVITY__" replace="${activity}" />
<replaceregexp file="${manifest.path}" match="__PACKAGE__" replace="${package}" />
</target>
</project>

64
bin/lib/android_sdk_version.js Executable file
View File

@@ -0,0 +1,64 @@
#!/usr/bin/env node
/*
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.
*/
var child_process = require('child_process'),
Q = require('q');
var get_highest_sdk = function(results){
var reg = /\d+/;
var apiLevels = [];
for(var i=0;i<results.length;i++){
apiLevels[i] = parseInt(results[i].match(reg)[0]);
}
apiLevels.sort(function(a,b){return b-a;});
console.log(apiLevels[0]);
};
var get_sdks = function() {
var d = Q.defer();
child_process.exec('android list targets', function(err, stdout, stderr) {
if (err) d.reject(stderr);
else d.resolve(stdout);
});
return d.promise.then(function(output) {
var reg = /android-\d+/gi;
var results = output.match(reg);
if(results.length===0){
return Q.reject(new Error('No android sdks installed.'));
}else{
get_highest_sdk(results);
}
return Q();
}, function(stderr) {
if (stderr.match(/command\snot\sfound/) || stderr.match(/'android' is not recognized/)) {
return Q.reject(new Error('The command \"android\" failed. Make sure you have the latest Android SDK installed, and the \"android\" command (inside the tools/ folder) is added to your path.'));
} else {
return Q.reject(new Error('An error occurred while listing Android targets'));
}
});
};
module.exports.run = function() {
return Q.all([get_sdks()]);
};

249
bin/lib/check_reqs.js Normal file
View File

@@ -0,0 +1,249 @@
#!/usr/bin/env node
/*
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.
*/
/* jshint sub:true */
var shelljs = require('shelljs'),
child_process = require('child_process'),
Q = require('q'),
path = require('path'),
fs = require('fs'),
which = require('which'),
ROOT = path.join(__dirname, '..', '..');
var isWindows = process.platform == 'win32';
function forgivingWhichSync(cmd) {
try {
// TODO: Should use shelljs.which() here to have one less dependency.
return fs.realpathSync(which.sync(cmd));
} catch (e) {
return '';
}
}
function tryCommand(cmd, errMsg) {
var d = Q.defer();
child_process.exec(cmd, function(err, stdout, stderr) {
if (err) d.reject(new Error(errMsg));
else d.resolve(stdout);
});
return d.promise;
}
// Get valid target from framework/project.properties
module.exports.get_target = function() {
function extractFromFile(filePath) {
var target = shelljs.grep(/\btarget=/, filePath);
if (!target) {
throw new Error('Could not find android target within: ' + filePath);
}
return target.split('=')[1].trim();
}
if (fs.existsSync(path.join(ROOT, 'framework', 'project.properties'))) {
return extractFromFile(path.join(ROOT, 'framework', 'project.properties'));
}
if (fs.existsSync(path.join(ROOT, 'project.properties'))) {
// if no target found, we're probably in a project and project.properties is in ROOT.
return extractFromFile(path.join(ROOT, 'project.properties'));
}
throw new Error('Could not find android target. File missing: ' + path.join(ROOT, 'project.properties'));
};
// Returns a promise. Called only by build and clean commands.
module.exports.check_ant = function() {
return tryCommand('ant -version', 'Failed to run "ant -version", make sure you have ant installed and added to your PATH.');
};
// Returns a promise. Called only by build and clean commands.
module.exports.check_gradle = function() {
var sdkDir = process.env['ANDROID_HOME'];
var wrapperDir = path.join(sdkDir, 'tools', 'templates', 'gradle', 'wrapper');
if (!fs.existsSync(wrapperDir)) {
return Q.reject(new Error('Could not find gradle wrapper within android sdk. Might need to update your Android SDK.\n' +
'Looked here: ' + wrapperDir));
}
return Q.when();
};
// Returns a promise.
module.exports.check_java = function() {
var javacPath = forgivingWhichSync('javac');
var hasJavaHome = !!process.env['JAVA_HOME'];
return Q().then(function() {
if (hasJavaHome) {
// Windows java installer doesn't add javac to PATH, nor set JAVA_HOME (ugh).
if (!javacPath) {
process.env['PATH'] += path.delimiter + path.join(process.env['JAVA_HOME'], 'bin');
}
} else {
if (javacPath) {
// OS X has a command for finding JAVA_HOME.
if (fs.existsSync('/usr/libexec/java_home')) {
return tryCommand('/usr/libexec/java_home', 'Failed to run: /usr/libexec/java_home')
.then(function(stdout) {
process.env['JAVA_HOME'] = stdout.trim();
});
} else {
// See if we can derive it from javac's location.
// fs.realpathSync is require on Ubuntu, which symplinks from /usr/bin -> JDK
var maybeJavaHome = path.dirname(path.dirname(javacPath));
if (fs.existsSync(path.join(maybeJavaHome, 'lib', 'tools.jar'))) {
process.env['JAVA_HOME'] = maybeJavaHome;
} else {
throw new Error('Could not find JAVA_HOME. Try setting the environment variable manually');
}
}
} else if (isWindows) {
// Try to auto-detect java in the default install paths.
var oldSilent = shelljs.config.silent;
shelljs.config.silent = true;
var firstJdkDir =
shelljs.ls(process.env['ProgramFiles'] + '\\java\\jdk*')[0] ||
shelljs.ls('C:\\Program Files\\java\\jdk*')[0] ||
shelljs.ls('C:\\Program Files (x86)\\java\\jdk*')[0];
shelljs.config.silent = oldSilent;
if (firstJdkDir) {
// shelljs always uses / in paths.
firstJdkDir = firstJdkDir.replace(/\//g, path.sep);
if (!javacPath) {
process.env['PATH'] += path.delimiter + path.join(firstJdkDir, 'bin');
}
process.env['JAVA_HOME'] = firstJdkDir;
}
}
}
}).then(function() {
var msg =
'Failed to run "java -version", make sure that you have a JDK installed.\n' +
'You can get it from: http://www.oracle.com/technetwork/java/javase/downloads.\n';
if (process.env['JAVA_HOME']) {
msg += 'Your JAVA_HOME is invalid: ' + process.env['JAVA_HOME'] + '\n';
}
return tryCommand('java -version', msg)
.then(function() {
return tryCommand('javac -version', msg);
});
});
};
// Returns a promise.
module.exports.check_android = function() {
return Q().then(function() {
var androidCmdPath = forgivingWhichSync('android');
var adbInPath = !!forgivingWhichSync('adb');
var hasAndroidHome = !!process.env['ANDROID_HOME'] && fs.existsSync(process.env['ANDROID_HOME']);
function maybeSetAndroidHome(value) {
if (!hasAndroidHome && fs.existsSync(value)) {
hasAndroidHome = true;
process.env['ANDROID_HOME'] = value;
}
}
if (!hasAndroidHome && !androidCmdPath) {
if (isWindows) {
// Android Studio 1.0 installer
maybeSetAndroidHome(path.join(process.env['LOCALAPPDATA'], 'Android', 'sdk'));
maybeSetAndroidHome(path.join(process.env['ProgramFiles'], 'Android', 'sdk'));
// Android Studio pre-1.0 installer
maybeSetAndroidHome(path.join(process.env['LOCALAPPDATA'], 'Android', 'android-studio', 'sdk'));
maybeSetAndroidHome(path.join(process.env['ProgramFiles'], 'Android', 'android-studio', 'sdk'));
// Stand-alone installer
maybeSetAndroidHome(path.join(process.env['LOCALAPPDATA'], 'Android', 'android-sdk'));
maybeSetAndroidHome(path.join(process.env['ProgramFiles'], 'Android', 'android-sdk'));
} else if (process.platform == 'darwin') {
// Android Studio 1.0 installer
maybeSetAndroidHome(path.join(process.env['HOME'], 'Library', 'Android', 'sdk'));
// Android Studio pre-1.0 installer
maybeSetAndroidHome('/Applications/Android Studio.app/sdk');
// Stand-alone zip file that user might think to put under /Applications
maybeSetAndroidHome('/Applications/android-sdk-macosx');
maybeSetAndroidHome('/Applications/android-sdk');
}
if (process.env['HOME']) {
// Stand-alone zip file that user might think to put under their home directory
maybeSetAndroidHome(path.join(process.env['HOME'], 'android-sdk-macosx'));
maybeSetAndroidHome(path.join(process.env['HOME'], 'android-sdk'));
}
}
if (hasAndroidHome && !androidCmdPath) {
process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'tools');
}
if (androidCmdPath && !hasAndroidHome) {
var parentDir = path.dirname(androidCmdPath);
var grandParentDir = path.dirname(parentDir);
if (path.basename(parentDir) == 'tools') {
process.env['ANDROID_HOME'] = path.dirname(parentDir);
hasAndroidHome = true;
} else if (fs.existsSync(path.join(grandParentDir, 'tools', 'android'))) {
process.env['ANDROID_HOME'] = grandParentDir;
hasAndroidHome = true;
} else {
throw new Error('ANDROID_HOME is not set and no "tools" directory found at ' + parentDir);
}
}
if (hasAndroidHome && !adbInPath) {
process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'platform-tools');
}
if (!process.env['ANDROID_HOME']) {
throw new Error('ANDROID_HOME is not set and "android" command not in your PATH. You must fulfill at least one of these conditions.');
}
if (!fs.existsSync(process.env['ANDROID_HOME'])) {
throw new Error('ANDROID_HOME is set to a non-existant path: ' + process.env['ANDROID_HOME']);
}
// Check that the target sdk level is installed.
return module.exports.check_android_target(module.exports.get_target());
});
};
module.exports.getAbsoluteAndroidCmd = function() {
return forgivingWhichSync('android').replace(/(\s)/g, '\\$1');
};
module.exports.check_android_target = function(valid_target) {
// valid_target can look like:
// android-19
// android-L
// Google Inc.:Google APIs:20
// Google Inc.:Glass Development Kit Preview:20
var msg = 'Android SDK not found. Make sure that it is installed. If it is not at the default location, set the ANDROID_HOME environment variable.';
return tryCommand('android list targets --compact', msg)
.then(function(output) {
if (output.split('\n').indexOf(valid_target) == -1) {
var androidCmd = module.exports.getAbsoluteAndroidCmd();
throw new Error('Please install Android target: "' + valid_target + '".\n\n' +
'Hint: Open the SDK manager by running: ' + androidCmd + '\n' +
'You will require:\n' +
'1. "SDK Platform" for ' + valid_target + '\n' +
'2. "Android SDK Platform-tools (latest)\n' +
'3. "Android SDK Build-tools" (latest)');
}
});
};
// Returns a promise.
module.exports.run = function() {
return Q.all([this.check_java(), this.check_android()])
.then(function() {
console.log('ANDROID_HOME=' + process.env['ANDROID_HOME']);
console.log('JAVA_HOME=' + process.env['JAVA_HOME']);
});
};

331
bin/lib/create.js Executable file
View File

@@ -0,0 +1,331 @@
#!/usr/bin/env node
/*
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.
*/
var shell = require('shelljs'),
Q = require('q'),
path = require('path'),
fs = require('fs'),
check_reqs = require('./check_reqs'),
ROOT = path.join(__dirname, '..', '..');
function setShellFatal(value, func) {
var oldVal = shell.config.fatal;
shell.config.fatal = value;
func();
shell.config.fatal = oldVal;
}
function getFrameworkDir(projectPath, shared) {
return shared ? path.join(ROOT, 'framework') : path.join(projectPath, 'CordovaLib');
}
function copyJsAndLibrary(projectPath, shared, projectName) {
var nestedCordovaLibPath = getFrameworkDir(projectPath, false);
var srcCordovaJsPath = path.join(ROOT, 'bin', 'templates', 'project', 'assets', 'www', 'cordova.js');
shell.cp('-f', srcCordovaJsPath, path.join(projectPath, 'assets', 'www', 'cordova.js'));
// Don't fail if there are no old jars.
setShellFatal(false, function() {
shell.ls(path.join(projectPath, 'libs', 'cordova-*.jar')).forEach(function(oldJar) {
console.log('Deleting ' + oldJar);
shell.rm('-f', oldJar);
});
var wasSymlink = true;
try {
// Delete the symlink if it was one.
fs.unlinkSync(nestedCordovaLibPath);
} catch (e) {
wasSymlink = false;
}
// Delete old library project if it existed.
if (shared) {
shell.rm('-rf', nestedCordovaLibPath);
} else if (!wasSymlink) {
// Delete only the src, since eclipse can't handle its .project file being deleted.
shell.rm('-rf', path.join(nestedCordovaLibPath, 'src'));
}
});
if (shared) {
var relativeFrameworkPath = path.relative(projectPath, getFrameworkDir(projectPath, true));
fs.symlinkSync(relativeFrameworkPath, nestedCordovaLibPath, 'dir');
} else {
shell.mkdir('-p', nestedCordovaLibPath);
shell.cp('-f', path.join(ROOT, 'framework', 'AndroidManifest.xml'), nestedCordovaLibPath);
shell.cp('-f', path.join(ROOT, 'framework', 'project.properties'), nestedCordovaLibPath);
shell.cp('-f', path.join(ROOT, 'framework', 'build.gradle'), nestedCordovaLibPath);
shell.cp('-f', path.join(ROOT, 'framework', 'cordova.gradle'), nestedCordovaLibPath);
shell.cp('-r', path.join(ROOT, 'framework', 'src'), nestedCordovaLibPath);
// Create an eclipse project file and set the name of it to something unique.
// Without this, you can't import multiple CordovaLib projects into the same workspace.
var eclipseProjectFilePath = path.join(nestedCordovaLibPath, '.project');
if (!fs.existsSync(eclipseProjectFilePath)) {
var data = '<?xml version="1.0" encoding="UTF-8"?><projectDescription><name>' + projectName + '-' + 'CordovaLib</name></projectDescription>';
fs.writeFileSync(eclipseProjectFilePath, data, 'utf8');
}
}
}
function extractSubProjectPaths(data) {
var ret = {};
var r = /^\s*android\.library\.reference\.\d+=(.*)(?:\s|$)/mg;
var m;
while ((m = r.exec(data))) {
ret[m[1]] = 1;
}
return Object.keys(ret);
}
function writeProjectProperties(projectPath, target_api) {
var dstPath = path.join(projectPath, 'project.properties');
var templatePath = path.join(ROOT, 'bin', 'templates', 'project', 'project.properties');
var srcPath = fs.existsSync(dstPath) ? dstPath : templatePath;
var data = fs.readFileSync(srcPath, 'utf8');
data = data.replace(/^target=.*/m, 'target=' + target_api);
var subProjects = extractSubProjectPaths(data);
subProjects = subProjects.filter(function(p) {
return !(/^CordovaLib$/m.exec(p) ||
/[\\\/]cordova-android[\\\/]framework$/m.exec(p) ||
/^(\.\.[\\\/])+framework$/m.exec(p)
);
});
subProjects.unshift('CordovaLib');
data = data.replace(/^\s*android\.library\.reference\.\d+=.*\n/mg, '');
if (!/\n$/.exec(data)) {
data += '\n';
}
for (var i = 0; i < subProjects.length; ++i) {
data += 'android.library.reference.' + (i+1) + '=' + subProjects[i] + '\n';
}
fs.writeFileSync(dstPath, data);
}
function prepBuildFiles(projectPath) {
var buildModule = require(path.join(path.resolve(projectPath), 'cordova', 'lib', 'build'));
buildModule.prepBuildFiles();
}
function copyBuildRules(projectPath) {
var srcDir = path.join(ROOT, 'bin', 'templates', 'project');
shell.cp('-f', path.join(srcDir, 'build.gradle'), projectPath);
}
function copyScripts(projectPath) {
var srcScriptsDir = path.join(ROOT, 'bin', 'templates', 'cordova');
var destScriptsDir = path.join(projectPath, 'cordova');
// Delete old scripts directory if this is an update.
shell.rm('-rf', destScriptsDir);
// Copy in the new ones.
shell.cp('-r', srcScriptsDir, projectPath);
shell.cp('-r', path.join(ROOT, 'bin', 'node_modules'), destScriptsDir);
shell.cp(path.join(ROOT, 'bin', 'check_reqs'), path.join(destScriptsDir, 'check_reqs'));
shell.cp(path.join(ROOT, 'bin', 'lib', 'check_reqs.js'), path.join(projectPath, 'cordova', 'lib', 'check_reqs.js'));
shell.cp(path.join(ROOT, 'bin', 'android_sdk_version'), path.join(destScriptsDir, 'android_sdk_version'));
shell.cp(path.join(ROOT, 'bin', 'lib', 'android_sdk_version.js'), path.join(projectPath, 'cordova', 'lib', 'android_sdk_version.js'));
}
/**
* Test whether a package name is acceptable for use as an android project.
* Returns a promise, fulfilled if the package name is acceptable; rejected
* otherwise.
*/
function validatePackageName(package_name) {
//Make the package conform to Java package types
//http://developer.android.com/guide/topics/manifest/manifest-element.html#package
//Enforce underscore limitation
if (!/^[a-zA-Z][a-zA-Z0-9_]+(\.[a-zA-Z][a-zA-Z0-9_]*)+$/.test(package_name)) {
return Q.reject('Package name must look like: com.company.Name');
}
//Class is a reserved word
if(/\b[Cc]lass\b/.test(package_name)) {
return Q.reject('class is a reserved word');
}
return Q.resolve();
}
/**
* Test whether a project name is acceptable for use as an android class.
* Returns a promise, fulfilled if the project name is acceptable; rejected
* otherwise.
*/
function validateProjectName(project_name) {
//Make sure there's something there
if (project_name === '') {
return Q.reject('Project name cannot be empty');
}
//Enforce stupid name error
if (project_name === 'CordovaActivity') {
return Q.reject('Project name cannot be CordovaActivity');
}
//Classes in Java don't begin with numbers
if (/^[0-9]/.test(project_name)) {
return Q.reject('Project name must not begin with a number');
}
return Q.resolve();
}
/**
* $ create [options]
*
* Creates an android application with the given options.
*
* Options:
*
* - `project_path` {String} Path to the new Cordova android project.
* - `package_name`{String} Package name, following reverse-domain style convention.
* - `project_name` {String} Project name.
* - `activity_name` {String} Name for the activity
* - 'project_template_dir' {String} Path to project template (override).
*
* Returns a promise.
*/
exports.createProject = function(project_path, package_name, project_name, activity_name, project_template_dir, use_shared_project, use_cli_template) {
// Set default values for path, package and name
project_path = typeof project_path !== 'undefined' ? project_path : 'CordovaExample';
project_path = path.relative(process.cwd(), project_path);
package_name = typeof package_name !== 'undefined' ? package_name : 'my.cordova.project';
project_name = typeof project_name !== 'undefined' ? project_name : 'CordovaExample';
project_template_dir = typeof project_template_dir !== 'undefined' ?
project_template_dir :
path.join(ROOT, 'bin', 'templates', 'project');
var package_as_path = package_name.replace(/\./g, path.sep);
var activity_dir = path.join(project_path, 'src', package_as_path);
var safe_activity_name = typeof activity_name !== 'undefined' ? activity_name : 'MainActivity';
var activity_path = path.join(activity_dir, safe_activity_name + '.java');
var target_api = check_reqs.get_target();
var manifest_path = path.join(project_path, 'AndroidManifest.xml');
// Check if project already exists
if(fs.existsSync(project_path)) {
return Q.reject('Project already exists! Delete and recreate');
}
//Make the package conform to Java package types
return validatePackageName(package_name)
.then(function() {
validateProjectName(project_name);
}).then(function() {
// Log the given values for the project
console.log('Creating Cordova project for the Android platform:');
console.log('\tPath: ' + project_path);
console.log('\tPackage: ' + package_name);
console.log('\tName: ' + project_name);
console.log('\tActivity: ' + safe_activity_name);
console.log('\tAndroid target: ' + target_api);
console.log('Copying template files...');
setShellFatal(true, function() {
// copy project template
shell.cp('-r', path.join(project_template_dir, 'assets'), project_path);
shell.cp('-r', path.join(project_template_dir, 'res'), project_path);
shell.cp(path.join(project_template_dir, 'gitignore'), path.join(project_path, '.gitignore'));
// Manually create directories that would be empty within the template (since git doesn't track directories).
shell.mkdir(path.join(project_path, 'libs'));
// Add in the proper eclipse project file.
if (use_cli_template) {
var note = 'To show `assets/www` or `res/xml/config.xml`, go to:\n' +
' Project -> Properties -> Resource -> Resource Filters\n' +
'And delete the exclusion filter.\n';
shell.cp(path.join(project_template_dir, 'eclipse-project-CLI'), path.join(project_path, '.project'));
fs.writeFileSync(path.join(project_path, 'assets', '_where-is-www.txt'), note);
} else {
shell.cp(path.join(project_template_dir, 'eclipse-project'), path.join(project_path, '.project'));
}
// copy cordova.js, cordova.jar
copyJsAndLibrary(project_path, use_shared_project, safe_activity_name);
// interpolate the activity name and package
shell.mkdir('-p', activity_dir);
shell.cp('-f', path.join(project_template_dir, 'Activity.java'), activity_path);
shell.sed('-i', /__ACTIVITY__/, safe_activity_name, activity_path);
shell.sed('-i', /__NAME__/, project_name, path.join(project_path, 'res', 'values', 'strings.xml'));
shell.sed('-i', /__NAME__/, project_name, path.join(project_path, '.project'));
shell.sed('-i', /__ID__/, package_name, activity_path);
shell.cp('-f', path.join(project_template_dir, 'AndroidManifest.xml'), manifest_path);
shell.sed('-i', /__ACTIVITY__/, safe_activity_name, manifest_path);
shell.sed('-i', /__PACKAGE__/, package_name, manifest_path);
shell.sed('-i', /__APILEVEL__/, target_api.split('-')[1], manifest_path);
copyScripts(project_path);
copyBuildRules(project_path);
});
// Link it to local android install.
writeProjectProperties(project_path, target_api);
prepBuildFiles(project_path);
console.log(generateDoneMessage('create', use_shared_project));
});
};
function generateDoneMessage(type, link) {
var pkg = require('../../package');
var msg = 'Android project ' + (type == 'update' ? 'updated ' : 'created ') + 'with ' + pkg.name + '@' + pkg.version;
if (link) {
msg += ' and has a linked CordovaLib';
}
return msg;
}
// Attribute removed in Cordova 4.4 (CB-5447).
function removeDebuggableFromManifest(projectPath) {
var manifestPath = path.join(projectPath, 'AndroidManifest.xml');
shell.sed('-i', /\s*android:debuggable="true"/, '', manifestPath);
}
function extractProjectNameFromManifest(projectPath) {
var manifestPath = path.join(projectPath, 'AndroidManifest.xml');
var manifestData = fs.readFileSync(manifestPath, 'utf8');
var m = /<activity[\s\S]*?android:name\s*=\s*"(.*?)"/i.exec(manifestData);
if (!m) {
throw new Error('Could not find activity name in ' + manifestPath);
}
return m[1];
}
// Returns a promise.
exports.updateProject = function(projectPath, shared) {
return Q()
.then(function() {
var projectName = extractProjectNameFromManifest(projectPath);
var target_api = check_reqs.get_target();
copyJsAndLibrary(projectPath, shared, projectName);
copyScripts(projectPath);
copyBuildRules(projectPath);
removeDebuggableFromManifest(projectPath);
writeProjectProperties(projectPath, target_api);
prepBuildFiles(projectPath);
console.log(generateDoneMessage('update', shared));
});
};
// For testing
exports.validatePackageName = validatePackageName;
exports.validateProjectName = validateProjectName;

View File

@@ -17,12 +17,16 @@
under the License.
*/
package org.apache.cordova.file;
public class FileExistsException extends Exception {
public FileExistsException(String msg) {
super(msg);
exports.getArgs = function(argv) {
var ret = {};
var posArgs = [];
for (var i = 2, arg; (arg = argv[i] || i < argv.length); ++i) {
if (/^--/.exec(arg)) {
ret[arg] = true;
} else {
posArgs.push(arg);
}
}
}
ret._ = posArgs;
return ret;
};

1
bin/node_modules/.bin/shjs generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../shelljs/bin/shjs

23
bin/node_modules/nopt/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,23 @@
Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
All rights reserved.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

414
bin/node_modules/nopt/lib/nopt.js generated vendored Normal file
View File

@@ -0,0 +1,414 @@
// info about each config option.
var debug = process.env.DEBUG_NOPT || process.env.NOPT_DEBUG
? function () { console.error.apply(console, arguments) }
: function () {}
var url = require("url")
, path = require("path")
, Stream = require("stream").Stream
, abbrev = require("abbrev")
module.exports = exports = nopt
exports.clean = clean
exports.typeDefs =
{ String : { type: String, validate: validateString }
, Boolean : { type: Boolean, validate: validateBoolean }
, url : { type: url, validate: validateUrl }
, Number : { type: Number, validate: validateNumber }
, path : { type: path, validate: validatePath }
, Stream : { type: Stream, validate: validateStream }
, Date : { type: Date, validate: validateDate }
}
function nopt (types, shorthands, args, slice) {
args = args || process.argv
types = types || {}
shorthands = shorthands || {}
if (typeof slice !== "number") slice = 2
debug(types, shorthands, args, slice)
args = args.slice(slice)
var data = {}
, key
, remain = []
, cooked = args
, original = args.slice(0)
parse(args, data, remain, types, shorthands)
// now data is full
clean(data, types, exports.typeDefs)
data.argv = {remain:remain,cooked:cooked,original:original}
Object.defineProperty(data.argv, 'toString', { value: function () {
return this.original.map(JSON.stringify).join(" ")
}, enumerable: false })
return data
}
function clean (data, types, typeDefs) {
typeDefs = typeDefs || exports.typeDefs
var remove = {}
, typeDefault = [false, true, null, String, Array]
Object.keys(data).forEach(function (k) {
if (k === "argv") return
var val = data[k]
, isArray = Array.isArray(val)
, type = types[k]
if (!isArray) val = [val]
if (!type) type = typeDefault
if (type === Array) type = typeDefault.concat(Array)
if (!Array.isArray(type)) type = [type]
debug("val=%j", val)
debug("types=", type)
val = val.map(function (val) {
// if it's an unknown value, then parse false/true/null/numbers/dates
if (typeof val === "string") {
debug("string %j", val)
val = val.trim()
if ((val === "null" && ~type.indexOf(null))
|| (val === "true" &&
(~type.indexOf(true) || ~type.indexOf(Boolean)))
|| (val === "false" &&
(~type.indexOf(false) || ~type.indexOf(Boolean)))) {
val = JSON.parse(val)
debug("jsonable %j", val)
} else if (~type.indexOf(Number) && !isNaN(val)) {
debug("convert to number", val)
val = +val
} else if (~type.indexOf(Date) && !isNaN(Date.parse(val))) {
debug("convert to date", val)
val = new Date(val)
}
}
if (!types.hasOwnProperty(k)) {
return val
}
// allow `--no-blah` to set 'blah' to null if null is allowed
if (val === false && ~type.indexOf(null) &&
!(~type.indexOf(false) || ~type.indexOf(Boolean))) {
val = null
}
var d = {}
d[k] = val
debug("prevalidated val", d, val, types[k])
if (!validate(d, k, val, types[k], typeDefs)) {
if (exports.invalidHandler) {
exports.invalidHandler(k, val, types[k], data)
} else if (exports.invalidHandler !== false) {
debug("invalid: "+k+"="+val, types[k])
}
return remove
}
debug("validated val", d, val, types[k])
return d[k]
}).filter(function (val) { return val !== remove })
if (!val.length) delete data[k]
else if (isArray) {
debug(isArray, data[k], val)
data[k] = val
} else data[k] = val[0]
debug("k=%s val=%j", k, val, data[k])
})
}
function validateString (data, k, val) {
data[k] = String(val)
}
function validatePath (data, k, val) {
if (val === true) return false
if (val === null) return true
val = String(val)
var homePattern = process.platform === 'win32' ? /^~(\/|\\)/ : /^~\//
if (val.match(homePattern) && process.env.HOME) {
val = path.resolve(process.env.HOME, val.substr(2))
}
data[k] = path.resolve(String(val))
return true
}
function validateNumber (data, k, val) {
debug("validate Number %j %j %j", k, val, isNaN(val))
if (isNaN(val)) return false
data[k] = +val
}
function validateDate (data, k, val) {
debug("validate Date %j %j %j", k, val, Date.parse(val))
var s = Date.parse(val)
if (isNaN(s)) return false
data[k] = new Date(val)
}
function validateBoolean (data, k, val) {
if (val instanceof Boolean) val = val.valueOf()
else if (typeof val === "string") {
if (!isNaN(val)) val = !!(+val)
else if (val === "null" || val === "false") val = false
else val = true
} else val = !!val
data[k] = val
}
function validateUrl (data, k, val) {
val = url.parse(String(val))
if (!val.host) return false
data[k] = val.href
}
function validateStream (data, k, val) {
if (!(val instanceof Stream)) return false
data[k] = val
}
function validate (data, k, val, type, typeDefs) {
// arrays are lists of types.
if (Array.isArray(type)) {
for (var i = 0, l = type.length; i < l; i ++) {
if (type[i] === Array) continue
if (validate(data, k, val, type[i], typeDefs)) return true
}
delete data[k]
return false
}
// an array of anything?
if (type === Array) return true
// NaN is poisonous. Means that something is not allowed.
if (type !== type) {
debug("Poison NaN", k, val, type)
delete data[k]
return false
}
// explicit list of values
if (val === type) {
debug("Explicitly allowed %j", val)
// if (isArray) (data[k] = data[k] || []).push(val)
// else data[k] = val
data[k] = val
return true
}
// now go through the list of typeDefs, validate against each one.
var ok = false
, types = Object.keys(typeDefs)
for (var i = 0, l = types.length; i < l; i ++) {
debug("test type %j %j %j", k, val, types[i])
var t = typeDefs[types[i]]
if (t && type === t.type) {
var d = {}
ok = false !== t.validate(d, k, val)
val = d[k]
if (ok) {
// if (isArray) (data[k] = data[k] || []).push(val)
// else data[k] = val
data[k] = val
break
}
}
}
debug("OK? %j (%j %j %j)", ok, k, val, types[i])
if (!ok) delete data[k]
return ok
}
function parse (args, data, remain, types, shorthands) {
debug("parse", args, data, remain)
var key = null
, abbrevs = abbrev(Object.keys(types))
, shortAbbr = abbrev(Object.keys(shorthands))
for (var i = 0; i < args.length; i ++) {
var arg = args[i]
debug("arg", arg)
if (arg.match(/^-{2,}$/)) {
// done with keys.
// the rest are args.
remain.push.apply(remain, args.slice(i + 1))
args[i] = "--"
break
}
var hadEq = false
if (arg.charAt(0) === "-" && arg.length > 1) {
if (arg.indexOf("=") !== -1) {
hadEq = true
var v = arg.split("=")
arg = v.shift()
v = v.join("=")
args.splice.apply(args, [i, 1].concat([arg, v]))
}
// see if it's a shorthand
// if so, splice and back up to re-parse it.
var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs)
debug("arg=%j shRes=%j", arg, shRes)
if (shRes) {
debug(arg, shRes)
args.splice.apply(args, [i, 1].concat(shRes))
if (arg !== shRes[0]) {
i --
continue
}
}
arg = arg.replace(/^-+/, "")
var no = null
while (arg.toLowerCase().indexOf("no-") === 0) {
no = !no
arg = arg.substr(3)
}
if (abbrevs[arg]) arg = abbrevs[arg]
var isArray = types[arg] === Array ||
Array.isArray(types[arg]) && types[arg].indexOf(Array) !== -1
// allow unknown things to be arrays if specified multiple times.
if (!types.hasOwnProperty(arg) && data.hasOwnProperty(arg)) {
if (!Array.isArray(data[arg]))
data[arg] = [data[arg]]
isArray = true
}
var val
, la = args[i + 1]
var isBool = typeof no === 'boolean' ||
types[arg] === Boolean ||
Array.isArray(types[arg]) && types[arg].indexOf(Boolean) !== -1 ||
(typeof types[arg] === 'undefined' && !hadEq) ||
(la === "false" &&
(types[arg] === null ||
Array.isArray(types[arg]) && ~types[arg].indexOf(null)))
if (isBool) {
// just set and move along
val = !no
// however, also support --bool true or --bool false
if (la === "true" || la === "false") {
val = JSON.parse(la)
la = null
if (no) val = !val
i ++
}
// also support "foo":[Boolean, "bar"] and "--foo bar"
if (Array.isArray(types[arg]) && la) {
if (~types[arg].indexOf(la)) {
// an explicit type
val = la
i ++
} else if ( la === "null" && ~types[arg].indexOf(null) ) {
// null allowed
val = null
i ++
} else if ( !la.match(/^-{2,}[^-]/) &&
!isNaN(la) &&
~types[arg].indexOf(Number) ) {
// number
val = +la
i ++
} else if ( !la.match(/^-[^-]/) && ~types[arg].indexOf(String) ) {
// string
val = la
i ++
}
}
if (isArray) (data[arg] = data[arg] || []).push(val)
else data[arg] = val
continue
}
if (types[arg] === String && la === undefined)
la = ""
if (la && la.match(/^-{2,}$/)) {
la = undefined
i --
}
val = la === undefined ? true : la
if (isArray) (data[arg] = data[arg] || []).push(val)
else data[arg] = val
i ++
continue
}
remain.push(arg)
}
}
function resolveShort (arg, shorthands, shortAbbr, abbrevs) {
// handle single-char shorthands glommed together, like
// npm ls -glp, but only if there is one dash, and only if
// all of the chars are single-char shorthands, and it's
// not a match to some other abbrev.
arg = arg.replace(/^-+/, '')
// if it's an exact known option, then don't go any further
if (abbrevs[arg] === arg)
return null
// if it's an exact known shortopt, same deal
if (shorthands[arg]) {
// make it an array, if it's a list of words
if (shorthands[arg] && !Array.isArray(shorthands[arg]))
shorthands[arg] = shorthands[arg].split(/\s+/)
return shorthands[arg]
}
// first check to see if this arg is a set of single-char shorthands
var singles = shorthands.___singles
if (!singles) {
singles = Object.keys(shorthands).filter(function (s) {
return s.length === 1
}).reduce(function (l,r) {
l[r] = true
return l
}, {})
shorthands.___singles = singles
debug('shorthand singles', singles)
}
var chrs = arg.split("").filter(function (c) {
return singles[c]
})
if (chrs.join("") === arg) return chrs.map(function (c) {
return shorthands[c]
}).reduce(function (l, r) {
return l.concat(r)
}, [])
// if it's an arg abbrev, and not a literal shorthand, then prefer the arg
if (abbrevs[arg] && !shorthands[arg])
return null
// if it's an abbr for a shorthand, then use that
if (shortAbbr[arg])
arg = shortAbbr[arg]
// make it an array, if it's a list of words
if (shorthands[arg] && !Array.isArray(shorthands[arg]))
shorthands[arg] = shorthands[arg].split(/\s+/)
return shorthands[arg]
}

23
bin/node_modules/nopt/node_modules/abbrev/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,23 @@
Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
All rights reserved.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

62
bin/node_modules/nopt/node_modules/abbrev/abbrev.js generated vendored Normal file
View File

@@ -0,0 +1,62 @@
module.exports = exports = abbrev.abbrev = abbrev
abbrev.monkeyPatch = monkeyPatch
function monkeyPatch () {
Object.defineProperty(Array.prototype, 'abbrev', {
value: function () { return abbrev(this) },
enumerable: false, configurable: true, writable: true
})
Object.defineProperty(Object.prototype, 'abbrev', {
value: function () { return abbrev(Object.keys(this)) },
enumerable: false, configurable: true, writable: true
})
}
function abbrev (list) {
if (arguments.length !== 1 || !Array.isArray(list)) {
list = Array.prototype.slice.call(arguments, 0)
}
for (var i = 0, l = list.length, args = [] ; i < l ; i ++) {
args[i] = typeof list[i] === "string" ? list[i] : String(list[i])
}
// sort them lexicographically, so that they're next to their nearest kin
args = args.sort(lexSort)
// walk through each, seeing how much it has in common with the next and previous
var abbrevs = {}
, prev = ""
for (var i = 0, l = args.length ; i < l ; i ++) {
var current = args[i]
, next = args[i + 1] || ""
, nextMatches = true
, prevMatches = true
if (current === next) continue
for (var j = 0, cl = current.length ; j < cl ; j ++) {
var curChar = current.charAt(j)
nextMatches = nextMatches && curChar === next.charAt(j)
prevMatches = prevMatches && curChar === prev.charAt(j)
if (!nextMatches && !prevMatches) {
j ++
break
}
}
prev = current
if (j === cl) {
abbrevs[current] = current
continue
}
for (var a = current.substr(0, j) ; j <= cl ; j ++) {
abbrevs[a] = current
a += current.charAt(j)
}
}
return abbrevs
}
function lexSort (a, b) {
return a === b ? 0 : a > b ? 1 : -1
}

31
bin/node_modules/nopt/node_modules/abbrev/package.json generated vendored Normal file
View File

@@ -0,0 +1,31 @@
{
"name": "abbrev",
"version": "1.0.5",
"description": "Like ruby's abbrev module, but in js",
"author": {
"name": "Isaac Z. Schlueter",
"email": "i@izs.me"
},
"main": "abbrev.js",
"scripts": {
"test": "node test.js"
},
"repository": {
"type": "git",
"url": "http://github.com/isaacs/abbrev-js"
},
"license": {
"type": "MIT",
"url": "https://github.com/isaacs/abbrev-js/raw/master/LICENSE"
},
"readme": "# abbrev-js\n\nJust like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).\n\nUsage:\n\n var abbrev = require(\"abbrev\");\n abbrev(\"foo\", \"fool\", \"folding\", \"flop\");\n \n // returns:\n { fl: 'flop'\n , flo: 'flop'\n , flop: 'flop'\n , fol: 'folding'\n , fold: 'folding'\n , foldi: 'folding'\n , foldin: 'folding'\n , folding: 'folding'\n , foo: 'foo'\n , fool: 'fool'\n }\n\nThis is handy for command-line scripts, or other cases where you want to be able to accept shorthands.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/abbrev-js/issues"
},
"homepage": "https://github.com/isaacs/abbrev-js",
"_id": "abbrev@1.0.5",
"_shasum": "5d8257bd9ebe435e698b2fa431afde4fe7b10b03",
"_from": "abbrev@1",
"_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
}

41
bin/node_modules/nopt/package.json generated vendored Normal file

File diff suppressed because one or more lines are too long

40
bin/node_modules/q/CONTRIBUTING.md generated vendored Normal file
View File

@@ -0,0 +1,40 @@
For pull requests:
- Be consistent with prevalent style and design decisions.
- Add a Jasmine spec to `specs/q-spec.js`.
- Use `npm test` to avoid regressions.
- Run tests in `q-spec/run.html` in as many supported browsers as you
can find the will to deal with.
- Do not build minified versions; we do this each release.
- If you would be so kind, add a note to `CHANGES.md` in an
appropriate section:
- `Next Major Version` if it introduces backward incompatibilities
to code in the wild using documented features.
- `Next Minor Version` if it adds a new feature.
- `Next Patch Version` if it fixes a bug.
For releases:
- Run `npm test`.
- Run tests in `q-spec/run.html` in a representative sample of every
browser under the sun.
- Run `npm run cover` and make sure you're happy with the results.
- Run `npm run minify` and be sure to commit the resulting `q.min.js`.
- Note the Gzipped size output by the previous command, and update
`README.md` if it has changed to 1 significant digit.
- Stash any local changes.
- Update `CHANGES.md` to reflect all changes in the differences
between `HEAD` and the previous tagged version. Give credit where
credit is due.
- Update `README.md` to address all new, non-experimental features.
- Update the API reference on the Wiki to reflect all non-experimental
features.
- Use `npm version major|minor|patch` to update `package.json`,
commit, and tag the new version.
- Use `npm publish` to send up a new release.
- Send an email to the q-continuum mailing list announcing the new
release and the notes from the change log. This helps folks
maintaining other package ecosystems.

19
bin/node_modules/q/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,19 @@
Copyright 20092012 Kristopher Michael Kowal. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.

813
bin/node_modules/q/README.md generated vendored Normal file
View File

@@ -0,0 +1,813 @@
[![Build Status](https://secure.travis-ci.org/kriskowal/q.png?branch=master)](http://travis-ci.org/kriskowal/q)
<a href="http://promises-aplus.github.com/promises-spec">
<img src="http://promises-aplus.github.com/promises-spec/assets/logo-small.png"
align="right" alt="Promises/A+ logo" />
</a>
If a function cannot return a value or throw an exception without
blocking, it can return a promise instead. A promise is an object
that represents the return value or the thrown exception that the
function may eventually provide. A promise can also be used as a
proxy for a [remote object][Q-Connection] to overcome latency.
[Q-Connection]: https://github.com/kriskowal/q-connection
On the first pass, promises can mitigate the “[Pyramid of
Doom][POD]”: the situation where code marches to the right faster
than it marches forward.
[POD]: http://calculist.org/blog/2011/12/14/why-coroutines-wont-work-on-the-web/
```javascript
step1(function (value1) {
step2(value1, function(value2) {
step3(value2, function(value3) {
step4(value3, function(value4) {
// Do something with value4
});
});
});
});
```
With a promise library, you can flatten the pyramid.
```javascript
Q.fcall(promisedStep1)
.then(promisedStep2)
.then(promisedStep3)
.then(promisedStep4)
.then(function (value4) {
// Do something with value4
})
.catch(function (error) {
// Handle any error from all above steps
})
.done();
```
With this approach, you also get implicit error propagation, just like `try`,
`catch`, and `finally`. An error in `promisedStep1` will flow all the way to
the `catch` function, where its caught and handled. (Here `promisedStepN` is
a version of `stepN` that returns a promise.)
The callback approach is called an “inversion of control”.
A function that accepts a callback instead of a return value
is saying, “Dont call me, Ill call you.”. Promises
[un-invert][IOC] the inversion, cleanly separating the input
arguments from control flow arguments. This simplifies the
use and creation of APIs, particularly variadic,
rest and spread arguments.
[IOC]: http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript
## Getting Started
The Q module can be loaded as:
- A ``<script>`` tag (creating a ``Q`` global variable): ~2.5 KB minified and
gzipped.
- A Node.js and CommonJS module, available in [npm](https://npmjs.org/) as
the [q](https://npmjs.org/package/q) package
- An AMD module
- A [component](https://github.com/component/component) as ``microjs/q``
- Using [bower](http://bower.io/) as ``q``
- Using [NuGet](http://nuget.org/) as [Q](https://nuget.org/packages/q)
Q can exchange promises with jQuery, Dojo, When.js, WinJS, and more.
## Resources
Our [wiki][] contains a number of useful resources, including:
- A method-by-method [Q API reference][reference].
- A growing [examples gallery][examples], showing how Q can be used to make
everything better. From XHR to database access to accessing the Flickr API,
Q is there for you.
- There are many libraries that produce and consume Q promises for everything
from file system/database access or RPC to templating. For a list of some of
the more popular ones, see [Libraries][].
- If you want materials that introduce the promise concept generally, and the
below tutorial isn't doing it for you, check out our collection of
[presentations, blog posts, and podcasts][resources].
- A guide for those [coming from jQuery's `$.Deferred`][jquery].
We'd also love to have you join the Q-Continuum [mailing list][].
[wiki]: https://github.com/kriskowal/q/wiki
[reference]: https://github.com/kriskowal/q/wiki/API-Reference
[examples]: https://github.com/kriskowal/q/wiki/Examples-Gallery
[Libraries]: https://github.com/kriskowal/q/wiki/Libraries
[resources]: https://github.com/kriskowal/q/wiki/General-Promise-Resources
[jquery]: https://github.com/kriskowal/q/wiki/Coming-from-jQuery
[mailing list]: https://groups.google.com/forum/#!forum/q-continuum
## Tutorial
Promises have a ``then`` method, which you can use to get the eventual
return value (fulfillment) or thrown exception (rejection).
```javascript
promiseMeSomething()
.then(function (value) {
}, function (reason) {
});
```
If ``promiseMeSomething`` returns a promise that gets fulfilled later
with a return value, the first function (the fulfillment handler) will be
called with the value. However, if the ``promiseMeSomething`` function
gets rejected later by a thrown exception, the second function (the
rejection handler) will be called with the exception.
Note that resolution of a promise is always asynchronous: that is, the
fulfillment or rejection handler will always be called in the next turn of the
event loop (i.e. `process.nextTick` in Node). This gives you a nice
guarantee when mentally tracing the flow of your code, namely that
``then`` will always return before either handler is executed.
In this tutorial, we begin with how to consume and work with promises. We'll
talk about how to create them, and thus create functions like
`promiseMeSomething` that return promises, [below](#the-beginning).
### Propagation
The ``then`` method returns a promise, which in this example, Im
assigning to ``outputPromise``.
```javascript
var outputPromise = getInputPromise()
.then(function (input) {
}, function (reason) {
});
```
The ``outputPromise`` variable becomes a new promise for the return
value of either handler. Since a function can only either return a
value or throw an exception, only one handler will ever be called and it
will be responsible for resolving ``outputPromise``.
- If you return a value in a handler, ``outputPromise`` will get
fulfilled.
- If you throw an exception in a handler, ``outputPromise`` will get
rejected.
- If you return a **promise** in a handler, ``outputPromise`` will
“become” that promise. Being able to become a new promise is useful
for managing delays, combining results, or recovering from errors.
If the ``getInputPromise()`` promise gets rejected and you omit the
rejection handler, the **error** will go to ``outputPromise``:
```javascript
var outputPromise = getInputPromise()
.then(function (value) {
});
```
If the input promise gets fulfilled and you omit the fulfillment handler, the
**value** will go to ``outputPromise``:
```javascript
var outputPromise = getInputPromise()
.then(null, function (error) {
});
```
Q promises provide a ``fail`` shorthand for ``then`` when you are only
interested in handling the error:
```javascript
var outputPromise = getInputPromise()
.fail(function (error) {
});
```
If you are writing JavaScript for modern engines only or using
CoffeeScript, you may use `catch` instead of `fail`.
Promises also have a ``fin`` function that is like a ``finally`` clause.
The final handler gets called, with no arguments, when the promise
returned by ``getInputPromise()`` either returns a value or throws an
error. The value returned or error thrown by ``getInputPromise()``
passes directly to ``outputPromise`` unless the final handler fails, and
may be delayed if the final handler returns a promise.
```javascript
var outputPromise = getInputPromise()
.fin(function () {
// close files, database connections, stop servers, conclude tests
});
```
- If the handler returns a value, the value is ignored
- If the handler throws an error, the error passes to ``outputPromise``
- If the handler returns a promise, ``outputPromise`` gets postponed. The
eventual value or error has the same effect as an immediate return
value or thrown error: a value would be ignored, an error would be
forwarded.
If you are writing JavaScript for modern engines only or using
CoffeeScript, you may use `finally` instead of `fin`.
### Chaining
There are two ways to chain promises. You can chain promises either
inside or outside handlers. The next two examples are equivalent.
```javascript
return getUsername()
.then(function (username) {
return getUser(username)
.then(function (user) {
// if we get here without an error,
// the value returned here
// or the exception thrown here
// resolves the promise returned
// by the first line
})
});
```
```javascript
return getUsername()
.then(function (username) {
return getUser(username);
})
.then(function (user) {
// if we get here without an error,
// the value returned here
// or the exception thrown here
// resolves the promise returned
// by the first line
});
```
The only difference is nesting. Its useful to nest handlers if you
need to capture multiple input values in your closure.
```javascript
function authenticate() {
return getUsername()
.then(function (username) {
return getUser(username);
})
// chained because we will not need the user name in the next event
.then(function (user) {
return getPassword()
// nested because we need both user and password next
.then(function (password) {
if (user.passwordHash !== hash(password)) {
throw new Error("Can't authenticate");
}
});
});
}
```
### Combination
You can turn an array of promises into a promise for the whole,
fulfilled array using ``all``.
```javascript
return Q.all([
eventualAdd(2, 2),
eventualAdd(10, 20)
]);
```
If you have a promise for an array, you can use ``spread`` as a
replacement for ``then``. The ``spread`` function “spreads” the
values over the arguments of the fulfillment handler. The rejection handler
will get called at the first sign of failure. That is, whichever of
the recived promises fails first gets handled by the rejection handler.
```javascript
function eventualAdd(a, b) {
return Q.spread([a, b], function (a, b) {
return a + b;
})
}
```
But ``spread`` calls ``all`` initially, so you can skip it in chains.
```javascript
return getUsername()
.then(function (username) {
return [username, getUser(username)];
})
.spread(function (username, user) {
});
```
The ``all`` function returns a promise for an array of values. When this
promise is fulfilled, the array contains the fulfillment values of the original
promises, in the same order as those promises. If one of the given promises
is rejected, the returned promise is immediately rejected, not waiting for the
rest of the batch. If you want to wait for all of the promises to either be
fulfilled or rejected, you can use ``allSettled``.
```javascript
Q.allSettled(promises)
.then(function (results) {
results.forEach(function (result) {
if (result.state === "fulfilled") {
var value = result.value;
} else {
var reason = result.reason;
}
});
});
```
### Sequences
If you have a number of promise-producing functions that need
to be run sequentially, you can of course do so manually:
```javascript
return foo(initialVal).then(bar).then(baz).then(qux);
```
However, if you want to run a dynamically constructed sequence of
functions, you'll want something like this:
```javascript
var funcs = [foo, bar, baz, qux];
var result = Q(initialVal);
funcs.forEach(function (f) {
result = result.then(f);
});
return result;
```
You can make this slightly more compact using `reduce`:
```javascript
return funcs.reduce(function (soFar, f) {
return soFar.then(f);
}, Q(initialVal));
```
Or, you could use th ultra-compact version:
```javascript
return funcs.reduce(Q.when, Q());
```
### Handling Errors
One sometimes-unintuive aspect of promises is that if you throw an
exception in the fulfillment handler, it will not be be caught by the error
handler.
```javascript
return foo()
.then(function (value) {
throw new Error("Can't bar.");
}, function (error) {
// We only get here if "foo" fails
});
```
To see why this is, consider the parallel between promises and
``try``/``catch``. We are ``try``-ing to execute ``foo()``: the error
handler represents a ``catch`` for ``foo()``, while the fulfillment handler
represents code that happens *after* the ``try``/``catch`` block.
That code then needs its own ``try``/``catch`` block.
In terms of promises, this means chaining your rejection handler:
```javascript
return foo()
.then(function (value) {
throw new Error("Can't bar.");
})
.fail(function (error) {
// We get here with either foo's error or bar's error
});
```
### Progress Notification
It's possible for promises to report their progress, e.g. for tasks that take a
long time like a file upload. Not all promises will implement progress
notifications, but for those that do, you can consume the progress values using
a third parameter to ``then``:
```javascript
return uploadFile()
.then(function () {
// Success uploading the file
}, function (err) {
// There was an error, and we get the reason for error
}, function (progress) {
// We get notified of the upload's progress as it is executed
});
```
Like `fail`, Q also provides a shorthand for progress callbacks
called `progress`:
```javascript
return uploadFile().progress(function (progress) {
// We get notified of the upload's progress
});
```
### The End
When you get to the end of a chain of promises, you should either
return the last promise or end the chain. Since handlers catch
errors, its an unfortunate pattern that the exceptions can go
unobserved.
So, either return it,
```javascript
return foo()
.then(function () {
return "bar";
});
```
Or, end it.
```javascript
foo()
.then(function () {
return "bar";
})
.done();
```
Ending a promise chain makes sure that, if an error doesnt get
handled before the end, it will get rethrown and reported.
This is a stopgap. We are exploring ways to make unhandled errors
visible without any explicit handling.
### The Beginning
Everything above assumes you get a promise from somewhere else. This
is the common case. Every once in a while, you will need to create a
promise from scratch.
#### Using ``Q.fcall``
You can create a promise from a value using ``Q.fcall``. This returns a
promise for 10.
```javascript
return Q.fcall(function () {
return 10;
});
```
You can also use ``fcall`` to get a promise for an exception.
```javascript
return Q.fcall(function () {
throw new Error("Can't do it");
});
```
As the name implies, ``fcall`` can call functions, or even promised
functions. This uses the ``eventualAdd`` function above to add two
numbers.
```javascript
return Q.fcall(eventualAdd, 2, 2);
```
#### Using Deferreds
If you have to interface with asynchronous functions that are callback-based
instead of promise-based, Q provides a few shortcuts (like ``Q.nfcall`` and
friends). But much of the time, the solution will be to use *deferreds*.
```javascript
var deferred = Q.defer();
FS.readFile("foo.txt", "utf-8", function (error, text) {
if (error) {
deferred.reject(new Error(error));
} else {
deferred.resolve(text);
}
});
return deferred.promise;
```
Note that a deferred can be resolved with a value or a promise. The
``reject`` function is a shorthand for resolving with a rejected
promise.
```javascript
// this:
deferred.reject(new Error("Can't do it"));
// is shorthand for:
var rejection = Q.fcall(function () {
throw new Error("Can't do it");
});
deferred.resolve(rejection);
```
This is a simplified implementation of ``Q.delay``.
```javascript
function delay(ms) {
var deferred = Q.defer();
setTimeout(deferred.resolve, ms);
return deferred.promise;
}
```
This is a simplified implementation of ``Q.timeout``
```javascript
function timeout(promise, ms) {
var deferred = Q.defer();
Q.when(promise, deferred.resolve);
delay(ms).then(function () {
deferred.reject(new Error("Timed out"));
});
return deferred.promise;
}
```
Finally, you can send a progress notification to the promise with
``deferred.notify``.
For illustration, this is a wrapper for XML HTTP requests in the browser. Note
that a more [thorough][XHR] implementation would be in order in practice.
[XHR]: https://github.com/montagejs/mr/blob/71e8df99bb4f0584985accd6f2801ef3015b9763/browser.js#L29-L73
```javascript
function requestOkText(url) {
var request = new XMLHttpRequest();
var deferred = Q.defer();
request.open("GET", url, true);
request.onload = onload;
request.onerror = onerror;
request.onprogress = onprogress;
request.send();
function onload() {
if (request.status === 200) {
deferred.resolve(request.responseText);
} else {
deferred.reject(new Error("Status code was " + request.status));
}
}
function onerror() {
deferred.reject(new Error("Can't XHR " + JSON.stringify(url)));
}
function onprogress(event) {
deferred.notify(event.loaded / event.total);
}
return deferred.promise;
}
```
Below is an example of how to use this ``requestOkText`` function:
```javascript
requestOkText("http://localhost:3000")
.then(function (responseText) {
// If the HTTP response returns 200 OK, log the response text.
console.log(responseText);
}, function (error) {
// If there's an error or a non-200 status code, log the error.
console.error(error);
}, function (progress) {
// Log the progress as it comes in.
console.log("Request progress: " + Math.round(progress * 100) + "%");
});
```
### The Middle
If you are using a function that may return a promise, but just might
return a value if it doesnt need to defer, you can use the “static”
methods of the Q library.
The ``when`` function is the static equivalent for ``then``.
```javascript
return Q.when(valueOrPromise, function (value) {
}, function (error) {
});
```
All of the other methods on a promise have static analogs with the
same name.
The following are equivalent:
```javascript
return Q.all([a, b]);
```
```javascript
return Q.fcall(function () {
return [a, b];
})
.all();
```
When working with promises provided by other libraries, you should
convert it to a Q promise. Not all promise libraries make the same
guarantees as Q and certainly dont provide all of the same methods.
Most libraries only provide a partially functional ``then`` method.
This thankfully is all we need to turn them into vibrant Q promises.
```javascript
return Q($.ajax(...))
.then(function () {
});
```
If there is any chance that the promise you receive is not a Q promise
as provided by your library, you should wrap it using a Q function.
You can even use ``Q.invoke`` as a shorthand.
```javascript
return Q.invoke($, 'ajax', ...)
.then(function () {
});
```
### Over the Wire
A promise can serve as a proxy for another object, even a remote
object. There are methods that allow you to optimistically manipulate
properties or call functions. All of these interactions return
promises, so they can be chained.
```
direct manipulation using a promise as a proxy
-------------------------- -------------------------------
value.foo promise.get("foo")
value.foo = value promise.put("foo", value)
delete value.foo promise.del("foo")
value.foo(...args) promise.post("foo", [args])
value.foo(...args) promise.invoke("foo", ...args)
value(...args) promise.fapply([args])
value(...args) promise.fcall(...args)
```
If the promise is a proxy for a remote object, you can shave
round-trips by using these functions instead of ``then``. To take
advantage of promises for remote objects, check out [Q-Connection][].
[Q-Connection]: https://github.com/kriskowal/q-connection
Even in the case of non-remote objects, these methods can be used as
shorthand for particularly-simple fulfillment handlers. For example, you
can replace
```javascript
return Q.fcall(function () {
return [{ foo: "bar" }, { foo: "baz" }];
})
.then(function (value) {
return value[0].foo;
});
```
with
```javascript
return Q.fcall(function () {
return [{ foo: "bar" }, { foo: "baz" }];
})
.get(0)
.get("foo");
```
### Adapting Node
If you're working with functions that make use of the Node.js callback pattern,
where callbacks are in the form of `function(err, result)`, Q provides a few
useful utility functions for converting between them. The most straightforward
are probably `Q.nfcall` and `Q.nfapply` ("Node function call/apply") for calling
Node.js-style functions and getting back a promise:
```javascript
return Q.nfcall(FS.readFile, "foo.txt", "utf-8");
return Q.nfapply(FS.readFile, ["foo.txt", "utf-8"]);
```
If you are working with methods, instead of simple functions, you can easily
run in to the usual problems where passing a method to another function—like
`Q.nfcall`—"un-binds" the method from its owner. To avoid this, you can either
use `Function.prototype.bind` or some nice shortcut methods we provide:
```javascript
return Q.ninvoke(redisClient, "get", "user:1:id");
return Q.npost(redisClient, "get", ["user:1:id"]);
```
You can also create reusable wrappers with `Q.denodeify` or `Q.nbind`:
```javascript
var readFile = Q.denodeify(FS.readFile);
return readFile("foo.txt", "utf-8");
var redisClientGet = Q.nbind(redisClient.get, redisClient);
return redisClientGet("user:1:id");
```
Finally, if you're working with raw deferred objects, there is a
`makeNodeResolver` method on deferreds that can be handy:
```javascript
var deferred = Q.defer();
FS.readFile("foo.txt", "utf-8", deferred.makeNodeResolver());
return deferred.promise;
```
### Long Stack Traces
Q comes with optional support for “long stack traces,” wherein the `stack`
property of `Error` rejection reasons is rewritten to be traced along
asynchronous jumps instead of stopping at the most recent one. As an example:
```js
function theDepthsOfMyProgram() {
Q.delay(100).done(function explode() {
throw new Error("boo!");
});
}
theDepthsOfMyProgram();
```
usually would give a rather unhelpful stack trace looking something like
```
Error: boo!
at explode (/path/to/test.js:3:11)
at _fulfilled (/path/to/test.js:q:54)
at resolvedValue.promiseDispatch.done (/path/to/q.js:823:30)
at makePromise.promise.promiseDispatch (/path/to/q.js:496:13)
at pending (/path/to/q.js:397:39)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)
```
But, if you turn this feature on by setting
```js
Q.longStackSupport = true;
```
then the above code gives a nice stack trace to the tune of
```
Error: boo!
at explode (/path/to/test.js:3:11)
From previous event:
at theDepthsOfMyProgram (/path/to/test.js:2:16)
at Object.<anonymous> (/path/to/test.js:7:1)
```
Note how you can see the the function that triggered the async operation in the
stack trace! This is very helpful for debugging, as otherwise you end up getting
only the first line, plus a bunch of Q internals, with no sign of where the
operation started.
This feature does come with somewhat-serious performance and memory overhead,
however. If you're working with lots of promises, or trying to scale a server
to many users, you should probably keep it off. But in development, go for it!
## Tests
You can view the results of the Q test suite [in your browser][tests]!
[tests]: https://rawgithub.com/kriskowal/q/master/spec/q-spec.html
## License
Copyright 20092013 Kristopher Michael Kowal
MIT License (enclosed)

71
bin/node_modules/q/benchmark/compare-with-callbacks.js generated vendored Normal file
View File

@@ -0,0 +1,71 @@
"use strict";
var Q = require("../q");
var fs = require("fs");
suite("A single simple async operation", function () {
bench("with an immediately-fulfilled promise", function (done) {
Q().then(done);
});
bench("with direct setImmediate usage", function (done) {
setImmediate(done);
});
bench("with direct setTimeout(…, 0)", function (done) {
setTimeout(done, 0);
});
});
suite("A fs.readFile", function () {
var denodeified = Q.denodeify(fs.readFile);
set("iterations", 1000);
set("delay", 1000);
bench("directly, with callbacks", function (done) {
fs.readFile(__filename, done);
});
bench("with Q.nfcall", function (done) {
Q.nfcall(fs.readFile, __filename).then(done);
});
bench("with a Q.denodeify'ed version", function (done) {
denodeified(__filename).then(done);
});
bench("with manual usage of deferred.makeNodeResolver", function (done) {
var deferred = Q.defer();
fs.readFile(__filename, deferred.makeNodeResolver());
deferred.promise.then(done);
});
});
suite("1000 operations in parallel", function () {
function makeCounter(desiredCount, ultimateCallback) {
var soFar = 0;
return function () {
if (++soFar === desiredCount) {
ultimateCallback();
}
};
}
var numberOfOps = 1000;
bench("with immediately-fulfilled promises", function (done) {
var counter = makeCounter(numberOfOps, done);
for (var i = 0; i < numberOfOps; ++i) {
Q().then(counter);
}
});
bench("with direct setImmediate usage", function (done) {
var counter = makeCounter(numberOfOps, done);
for (var i = 0; i < numberOfOps; ++i) {
setImmediate(counter);
}
});
});

36
bin/node_modules/q/benchmark/scenarios.js generated vendored Normal file
View File

@@ -0,0 +1,36 @@
"use strict";
var Q = require("../q");
suite("Chaining", function () {
var numberToChain = 1000;
bench("Chaining many already-fulfilled promises together", function (done) {
var currentPromise = Q();
for (var i = 0; i < numberToChain; ++i) {
currentPromise = currentPromise.then(function () {
return Q();
});
}
currentPromise.then(done);
});
bench("Chaining and then fulfilling the end of the chain", function (done) {
var deferred = Q.defer();
var currentPromise = deferred.promise;
for (var i = 0; i < numberToChain; ++i) {
(function () {
var promiseToReturn = currentPromise;
currentPromise = Q().then(function () {
return promiseToReturn;
});
}());
}
currentPromise.then(done);
deferred.resolve();
});
});

93
bin/node_modules/q/package.json generated vendored Normal file

File diff suppressed because one or more lines are too long

1937
bin/node_modules/q/q.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

35
bin/node_modules/q/queue.js generated vendored Normal file
View File

@@ -0,0 +1,35 @@
var Q = require("./q");
module.exports = Queue;
function Queue() {
var ends = Q.defer();
var closed = Q.defer();
return {
put: function (value) {
var next = Q.defer();
ends.resolve({
head: value,
tail: next.promise
});
ends.resolve = next.resolve;
},
get: function () {
var result = ends.promise.get("head");
ends.promise = ends.promise.get("tail");
return result.fail(function (error) {
closed.resolve(error);
throw error;
});
},
closed: closed.promise,
close: function (error) {
error = error || new Error("Can't get value from closed queue");
var end = {head: Q.reject(error)};
end.tail = end;
ends.resolve(end);
return closed.promise;
}
};
}

6
bin/node_modules/shelljs/.documentup.json generated vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"name": "ShellJS",
"twitter": [
"r2r"
]
}

7
bin/node_modules/shelljs/.jshintrc generated vendored Normal file
View File

@@ -0,0 +1,7 @@
{
"loopfunc": true,
"sub": true,
"undef": true,
"unused": true,
"node": true
}

2
bin/node_modules/shelljs/.npmignore generated vendored Normal file
View File

@@ -0,0 +1,2 @@
test/
tmp/

5
bin/node_modules/shelljs/.travis.yml generated vendored Normal file
View File

@@ -0,0 +1,5 @@
language: node_js
node_js:
- "0.8"
- "0.10"
- "0.11"

26
bin/node_modules/shelljs/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,26 @@
Copyright (c) 2012, Artur Adib <aadib@mozilla.com>
All rights reserved.
You may use this project under the terms of the New BSD license as follows:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Artur Adib nor the
names of the contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

552
bin/node_modules/shelljs/README.md generated vendored Normal file
View File

@@ -0,0 +1,552 @@
# ShellJS - Unix shell commands for Node.js [![Build Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/shelljs)
ShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts!
The project is [unit-tested](http://travis-ci.org/arturadib/shelljs) and battled-tested in projects like:
+ [PDF.js](http://github.com/mozilla/pdf.js) - Firefox's next-gen PDF reader
+ [Firebug](http://getfirebug.com/) - Firefox's infamous debugger
+ [JSHint](http://jshint.com) - Most popular JavaScript linter
+ [Zepto](http://zeptojs.com) - jQuery-compatible JavaScript library for modern browsers
+ [Yeoman](http://yeoman.io/) - Web application stack and development tool
+ [Deployd.com](http://deployd.com) - Open source PaaS for quick API backend generation
and [many more](https://npmjs.org/browse/depended/shelljs).
## Installing
Via npm:
```bash
$ npm install [-g] shelljs
```
If the global option `-g` is specified, the binary `shjs` will be installed. This makes it possible to
run ShellJS scripts much like any shell script from the command line, i.e. without requiring a `node_modules` folder:
```bash
$ shjs my_script
```
You can also just copy `shell.js` into your project's directory, and `require()` accordingly.
## Examples
### JavaScript
```javascript
require('shelljs/global');
if (!which('git')) {
echo('Sorry, this script requires git');
exit(1);
}
// Copy files to release dir
mkdir('-p', 'out/Release');
cp('-R', 'stuff/*', 'out/Release');
// Replace macros in each .js file
cd('lib');
ls('*.js').forEach(function(file) {
sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file);
sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file);
});
cd('..');
// Run external tool synchronously
if (exec('git commit -am "Auto-commit"').code !== 0) {
echo('Error: Git commit failed');
exit(1);
}
```
### CoffeeScript
```coffeescript
require 'shelljs/global'
if not which 'git'
echo 'Sorry, this script requires git'
exit 1
# Copy files to release dir
mkdir '-p', 'out/Release'
cp '-R', 'stuff/*', 'out/Release'
# Replace macros in each .js file
cd 'lib'
for file in ls '*.js'
sed '-i', 'BUILD_VERSION', 'v0.1.2', file
sed '-i', /.*REMOVE_THIS_LINE.*\n/, '', file
sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat 'macro.js', file
cd '..'
# Run external tool synchronously
if (exec 'git commit -am "Auto-commit"').code != 0
echo 'Error: Git commit failed'
exit 1
```
## Global vs. Local
The example above uses the convenience script `shelljs/global` to reduce verbosity. If polluting your global namespace is not desirable, simply require `shelljs`.
Example:
```javascript
var shell = require('shelljs');
shell.echo('hello world');
```
## Make tool
A convenience script `shelljs/make` is also provided to mimic the behavior of a Unix Makefile. In this case all shell objects are global, and command line arguments will cause the script to execute only the corresponding function in the global `target` object. To avoid redundant calls, target functions are executed only once per script.
Example (CoffeeScript):
```coffeescript
require 'shelljs/make'
target.all = ->
target.bundle()
target.docs()
target.bundle = ->
cd __dirname
mkdir 'build'
cd 'lib'
(cat '*.js').to '../build/output.js'
target.docs = ->
cd __dirname
mkdir 'docs'
cd 'lib'
for file in ls '*.js'
text = grep '//@', file # extract special comments
text.replace '//@', '' # remove comment tags
text.to 'docs/my_docs.md'
```
To run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`, and so on.
<!--
DO NOT MODIFY BEYOND THIS POINT - IT'S AUTOMATICALLY GENERATED
-->
## Command reference
All commands run synchronously, unless otherwise stated.
### cd('dir')
Changes to directory `dir` for the duration of the script
### pwd()
Returns the current directory.
### ls([options ,] path [,path ...])
### ls([options ,] path_array)
Available options:
+ `-R`: recursive
+ `-A`: all files (include files beginning with `.`, except for `.` and `..`)
Examples:
```javascript
ls('projs/*.js');
ls('-R', '/users/me', '/tmp');
ls('-R', ['/users/me', '/tmp']); // same as above
```
Returns array of files in the given path, or in current directory if no path provided.
### find(path [,path ...])
### find(path_array)
Examples:
```javascript
find('src', 'lib');
find(['src', 'lib']); // same as above
find('.').filter(function(file) { return file.match(/\.js$/); });
```
Returns array of all files (however deep) in the given paths.
The main difference from `ls('-R', path)` is that the resulting file names
include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
### cp([options ,] source [,source ...], dest)
### cp([options ,] source_array, dest)
Available options:
+ `-f`: force
+ `-r, -R`: recursive
Examples:
```javascript
cp('file1', 'dir1');
cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
```
Copies files. The wildcard `*` is accepted.
### rm([options ,] file [, file ...])
### rm([options ,] file_array)
Available options:
+ `-f`: force
+ `-r, -R`: recursive
Examples:
```javascript
rm('-rf', '/tmp/*');
rm('some_file.txt', 'another_file.txt');
rm(['some_file.txt', 'another_file.txt']); // same as above
```
Removes files. The wildcard `*` is accepted.
### mv(source [, source ...], dest')
### mv(source_array, dest')
Available options:
+ `f`: force
Examples:
```javascript
mv('-f', 'file', 'dir/');
mv('file1', 'file2', 'dir/');
mv(['file1', 'file2'], 'dir/'); // same as above
```
Moves files. The wildcard `*` is accepted.
### mkdir([options ,] dir [, dir ...])
### mkdir([options ,] dir_array)
Available options:
+ `p`: full path (will create intermediate dirs if necessary)
Examples:
```javascript
mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
```
Creates directories.
### test(expression)
Available expression primaries:
+ `'-b', 'path'`: true if path is a block device
+ `'-c', 'path'`: true if path is a character device
+ `'-d', 'path'`: true if path is a directory
+ `'-e', 'path'`: true if path exists
+ `'-f', 'path'`: true if path is a regular file
+ `'-L', 'path'`: true if path is a symboilc link
+ `'-p', 'path'`: true if path is a pipe (FIFO)
+ `'-S', 'path'`: true if path is a socket
Examples:
```javascript
if (test('-d', path)) { /* do something with dir */ };
if (!test('-f', path)) continue; // skip if it's a regular file
```
Evaluates expression using the available primaries and returns corresponding value.
### cat(file [, file ...])
### cat(file_array)
Examples:
```javascript
var str = cat('file*.txt');
var str = cat('file1', 'file2');
var str = cat(['file1', 'file2']); // same as above
```
Returns a string containing the given file, or a concatenated string
containing the files if more than one file is given (a new line character is
introduced between each file). Wildcard `*` accepted.
### 'string'.to(file)
Examples:
```javascript
cat('input.txt').to('output.txt');
```
Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
### 'string'.toEnd(file)
Examples:
```javascript
cat('input.txt').toEnd('output.txt');
```
Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as
those returned by `cat`, `grep`, etc).
### sed([options ,] search_regex, replace_str, file)
Available options:
+ `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
Examples:
```javascript
sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
```
Reads an input string from `file` and performs a JavaScript `replace()` on the input
using the given search regex and replacement string. Returns the new string after replacement.
### grep([options ,] regex_filter, file [, file ...])
### grep([options ,] regex_filter, file_array)
Available options:
+ `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
Examples:
```javascript
grep('-v', 'GLOBAL_VARIABLE', '*.js');
grep('GLOBAL_VARIABLE', '*.js');
```
Reads input string from given files and returns a string containing all lines of the
file that match the given `regex_filter`. Wildcard `*` accepted.
### which(command)
Examples:
```javascript
var nodeExec = which('node');
```
Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.
Returns string containing the absolute path to the command.
### echo(string [,string ...])
Examples:
```javascript
echo('hello world');
var str = echo('hello world');
```
Prints string to stdout, and returns string with additional utility methods
like `.to()`.
### pushd([options,] [dir | '-N' | '+N'])
Available options:
+ `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.
Arguments:
+ `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.
+ `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
+ `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
Examples:
```javascript
// process.cwd() === '/usr'
pushd('/etc'); // Returns /etc /usr
pushd('+1'); // Returns /usr /etc
```
Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.
### popd([options,] ['-N' | '+N'])
Available options:
+ `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
Arguments:
+ `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.
+ `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.
Examples:
```javascript
echo(process.cwd()); // '/usr'
pushd('/etc'); // '/etc /usr'
echo(process.cwd()); // '/etc'
popd(); // '/usr'
echo(process.cwd()); // '/usr'
```
When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
### dirs([options | '+N' | '-N'])
Available options:
+ `-c`: Clears the directory stack by deleting all of the elements.
Arguments:
+ `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
+ `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
See also: pushd, popd
### exit(code)
Exits the current process with the given exit code.
### env['VAR_NAME']
Object containing environment variables (both getter and setter). Shortcut to process.env.
### exec(command [, options] [, callback])
Available options (all `false` by default):
+ `async`: Asynchronous execution. Defaults to true if a callback is provided.
+ `silent`: Do not echo program output to console.
Examples:
```javascript
var version = exec('node --version', {silent:true}).output;
var child = exec('some_long_running_process', {async:true});
child.stdout.on('data', function(data) {
/* ... do something with data ... */
});
exec('some_long_running_process', function(code, output) {
console.log('Exit code:', code);
console.log('Program output:', output);
});
```
Executes the given `command` _synchronously_, unless otherwise specified.
When in synchronous mode returns the object `{ code:..., output:... }`, containing the program's
`output` (stdout + stderr) and its exit `code`. Otherwise returns the child process object, and
the `callback` gets the arguments `(code, output)`.
**Note:** For long-lived processes, it's best to run `exec()` asynchronously as
the current synchronous implementation uses a lot of CPU. This should be getting
fixed soon.
### chmod(octal_mode || octal_string, file)
### chmod(symbolic_mode, file)
Available options:
+ `-v`: output a diagnostic for every file processed
+ `-c`: like verbose but report only when a change is made
+ `-R`: change files and directories recursively
Examples:
```javascript
chmod(755, '/Users/brandon');
chmod('755', '/Users/brandon'); // same as above
chmod('u+x', '/Users/brandon');
```
Alters the permissions of a file or directory by either specifying the
absolute permissions in octal form or expressing the changes in symbols.
This command tries to mimic the POSIX behavior as much as possible.
Notable exceptions:
+ In symbolic modes, 'a-r' and '-r' are identical. No consideration is
given to the umask.
+ There is no "quiet" option since default behavior is to run silent.
## Non-Unix commands
### tempdir()
Examples:
```javascript
var tmp = tempdir(); // "/tmp" for most *nix platforms
```
Searches and returns string containing a writeable, platform-dependent temporary directory.
Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
### error()
Tests if error occurred in the last command. Returns `null` if no error occurred,
otherwise returns string explaining the error
## Configuration
### config.silent
Example:
```javascript
var silentState = config.silent; // save old silent state
config.silent = true;
/* ... */
config.silent = silentState; // restore old silent state
```
Suppresses all command output if `true`, except for `echo()` calls.
Default is `false`.
### config.fatal
Example:
```javascript
config.fatal = true;
cp('this_file_does_not_exist', '/dev/null'); // dies here
/* more commands... */
```
If `true` the script will die on errors. Default is `false`.

51
bin/node_modules/shelljs/bin/shjs generated vendored Executable file
View File

@@ -0,0 +1,51 @@
#!/usr/bin/env node
require('../global');
if (process.argv.length < 3) {
console.log('ShellJS: missing argument (script name)');
console.log();
process.exit(1);
}
var args,
scriptName = process.argv[2];
env['NODE_PATH'] = __dirname + '/../..';
if (!scriptName.match(/\.js/) && !scriptName.match(/\.coffee/)) {
if (test('-f', scriptName + '.js'))
scriptName += '.js';
if (test('-f', scriptName + '.coffee'))
scriptName += '.coffee';
}
if (!test('-f', scriptName)) {
console.log('ShellJS: script not found ('+scriptName+')');
console.log();
process.exit(1);
}
args = process.argv.slice(3);
for (var i = 0, l = args.length; i < l; i++) {
if (args[i][0] !== "-"){
args[i] = '"' + args[i] + '"'; // fixes arguments with multiple words
}
}
if (scriptName.match(/\.coffee$/)) {
//
// CoffeeScript
//
if (which('coffee')) {
exec('coffee ' + scriptName + ' ' + args.join(' '), { async: true });
} else {
console.log('ShellJS: CoffeeScript interpreter not found');
console.log();
process.exit(1);
}
} else {
//
// JavaScript
//
exec('node ' + scriptName + ' ' + args.join(' '), { async: true });
}

3
bin/node_modules/shelljs/global.js generated vendored Normal file
View File

@@ -0,0 +1,3 @@
var shell = require('./shell.js');
for (var cmd in shell)
global[cmd] = shell[cmd];

47
bin/node_modules/shelljs/make.js generated vendored Normal file
View File

@@ -0,0 +1,47 @@
require('./global');
global.config.fatal = true;
global.target = {};
// This ensures we only execute the script targets after the entire script has
// been evaluated
var args = process.argv.slice(2);
setTimeout(function() {
var t;
if (args.length === 1 && args[0] === '--help') {
console.log('Available targets:');
for (t in global.target)
console.log(' ' + t);
return;
}
// Wrap targets to prevent duplicate execution
for (t in global.target) {
(function(t, oldTarget){
// Wrap it
global.target[t] = function(force) {
if (oldTarget.done && !force)
return;
oldTarget.done = true;
return oldTarget.apply(oldTarget, arguments);
};
})(t, global.target[t]);
}
// Execute desired targets
if (args.length > 0) {
args.forEach(function(arg) {
if (arg in global.target)
global.target[arg]();
else {
console.log('no such target: ' + arg);
}
});
} else if ('all' in global.target) {
global.target.all();
}
}, 0);

48
bin/node_modules/shelljs/package.json generated vendored Normal file

File diff suppressed because one or more lines are too long

21
bin/node_modules/shelljs/scripts/generate-docs.js generated vendored Executable file
View File

@@ -0,0 +1,21 @@
#!/usr/bin/env node
require('../global');
echo('Appending docs to README.md');
cd(__dirname + '/..');
// Extract docs from shell.js
var docs = grep('//@', 'shell.js');
docs = docs.replace(/\/\/\@include (.+)/g, function(match, path) {
var file = path.match('.js$') ? path : path+'.js';
return grep('//@', file);
});
// Remove '//@'
docs = docs.replace(/\/\/\@ ?/g, '');
// Append docs to README
sed('-i', /## Command reference(.|\n)*/, '## Command reference\n\n' + docs, 'README.md');
echo('All done.');

50
bin/node_modules/shelljs/scripts/run-tests.js generated vendored Executable file
View File

@@ -0,0 +1,50 @@
#!/usr/bin/env node
require('../global');
var path = require('path');
var failed = false;
//
// Lint
//
JSHINT_BIN = './node_modules/jshint/bin/jshint';
cd(__dirname + '/..');
if (!test('-f', JSHINT_BIN)) {
echo('JSHint not found. Run `npm install` in the root dir first.');
exit(1);
}
if (exec(JSHINT_BIN + ' *.js test/*.js').code !== 0) {
failed = true;
echo('*** JSHINT FAILED! (return code != 0)');
echo();
} else {
echo('All JSHint tests passed');
echo();
}
//
// Unit tests
//
cd(__dirname + '/../test');
ls('*.js').forEach(function(file) {
echo('Running test:', file);
if (exec('node ' + file).code !== 123) { // 123 avoids false positives (e.g. premature exit)
failed = true;
echo('*** TEST FAILED! (missing exit code "123")');
echo();
}
});
if (failed) {
echo();
echo('*******************************************************');
echo('WARNING: Some tests did not pass!');
echo('*******************************************************');
exit(1);
} else {
echo();
echo('All tests passed.');
}

153
bin/node_modules/shelljs/shell.js generated vendored Normal file
View File

@@ -0,0 +1,153 @@
//
// ShellJS
// Unix shell commands on top of Node's API
//
// Copyright (c) 2012 Artur Adib
// http://github.com/arturadib/shelljs
//
var common = require('./src/common');
//@
//@ All commands run synchronously, unless otherwise stated.
//@
//@include ./src/cd
var _cd = require('./src/cd');
exports.cd = common.wrap('cd', _cd);
//@include ./src/pwd
var _pwd = require('./src/pwd');
exports.pwd = common.wrap('pwd', _pwd);
//@include ./src/ls
var _ls = require('./src/ls');
exports.ls = common.wrap('ls', _ls);
//@include ./src/find
var _find = require('./src/find');
exports.find = common.wrap('find', _find);
//@include ./src/cp
var _cp = require('./src/cp');
exports.cp = common.wrap('cp', _cp);
//@include ./src/rm
var _rm = require('./src/rm');
exports.rm = common.wrap('rm', _rm);
//@include ./src/mv
var _mv = require('./src/mv');
exports.mv = common.wrap('mv', _mv);
//@include ./src/mkdir
var _mkdir = require('./src/mkdir');
exports.mkdir = common.wrap('mkdir', _mkdir);
//@include ./src/test
var _test = require('./src/test');
exports.test = common.wrap('test', _test);
//@include ./src/cat
var _cat = require('./src/cat');
exports.cat = common.wrap('cat', _cat);
//@include ./src/to
var _to = require('./src/to');
String.prototype.to = common.wrap('to', _to);
//@include ./src/toEnd
var _toEnd = require('./src/toEnd');
String.prototype.toEnd = common.wrap('toEnd', _toEnd);
//@include ./src/sed
var _sed = require('./src/sed');
exports.sed = common.wrap('sed', _sed);
//@include ./src/grep
var _grep = require('./src/grep');
exports.grep = common.wrap('grep', _grep);
//@include ./src/which
var _which = require('./src/which');
exports.which = common.wrap('which', _which);
//@include ./src/echo
var _echo = require('./src/echo');
exports.echo = _echo; // don't common.wrap() as it could parse '-options'
//@include ./src/dirs
var _dirs = require('./src/dirs').dirs;
exports.dirs = common.wrap("dirs", _dirs);
var _pushd = require('./src/dirs').pushd;
exports.pushd = common.wrap('pushd', _pushd);
var _popd = require('./src/dirs').popd;
exports.popd = common.wrap("popd", _popd);
//@
//@ ### exit(code)
//@ Exits the current process with the given exit code.
exports.exit = process.exit;
//@
//@ ### env['VAR_NAME']
//@ Object containing environment variables (both getter and setter). Shortcut to process.env.
exports.env = process.env;
//@include ./src/exec
var _exec = require('./src/exec');
exports.exec = common.wrap('exec', _exec, {notUnix:true});
//@include ./src/chmod
var _chmod = require('./src/chmod');
exports.chmod = common.wrap('chmod', _chmod);
//@
//@ ## Non-Unix commands
//@
//@include ./src/tempdir
var _tempDir = require('./src/tempdir');
exports.tempdir = common.wrap('tempdir', _tempDir);
//@include ./src/error
var _error = require('./src/error');
exports.error = _error;
//@
//@ ## Configuration
//@
exports.config = common.config;
//@
//@ ### config.silent
//@ Example:
//@
//@ ```javascript
//@ var silentState = config.silent; // save old silent state
//@ config.silent = true;
//@ /* ... */
//@ config.silent = silentState; // restore old silent state
//@ ```
//@
//@ Suppresses all command output if `true`, except for `echo()` calls.
//@ Default is `false`.
//@
//@ ### config.fatal
//@ Example:
//@
//@ ```javascript
//@ config.fatal = true;
//@ cp('this_file_does_not_exist', '/dev/null'); // dies here
//@ /* more commands... */
//@ ```
//@
//@ If `true` the script will die on errors. Default is `false`.

43
bin/node_modules/shelljs/src/cat.js generated vendored Normal file
View File

@@ -0,0 +1,43 @@
var common = require('./common');
var fs = require('fs');
//@
//@ ### cat(file [, file ...])
//@ ### cat(file_array)
//@
//@ Examples:
//@
//@ ```javascript
//@ var str = cat('file*.txt');
//@ var str = cat('file1', 'file2');
//@ var str = cat(['file1', 'file2']); // same as above
//@ ```
//@
//@ Returns a string containing the given file, or a concatenated string
//@ containing the files if more than one file is given (a new line character is
//@ introduced between each file). Wildcard `*` accepted.
function _cat(options, files) {
var cat = '';
if (!files)
common.error('no paths given');
if (typeof files === 'string')
files = [].slice.call(arguments, 1);
// if it's array leave it as it is
files = common.expand(files);
files.forEach(function(file) {
if (!fs.existsSync(file))
common.error('no such file or directory: ' + file);
cat += fs.readFileSync(file, 'utf8') + '\n';
});
if (cat[cat.length-1] === '\n')
cat = cat.substring(0, cat.length-1);
return common.ShellString(cat);
}
module.exports = _cat;

19
bin/node_modules/shelljs/src/cd.js generated vendored Normal file
View File

@@ -0,0 +1,19 @@
var fs = require('fs');
var common = require('./common');
//@
//@ ### cd('dir')
//@ Changes to directory `dir` for the duration of the script
function _cd(options, dir) {
if (!dir)
common.error('directory not specified');
if (!fs.existsSync(dir))
common.error('no such file or directory: ' + dir);
if (!fs.statSync(dir).isDirectory())
common.error('not a directory: ' + dir);
process.chdir(dir);
}
module.exports = _cd;

208
bin/node_modules/shelljs/src/chmod.js generated vendored Normal file
View File

@@ -0,0 +1,208 @@
var common = require('./common');
var fs = require('fs');
var path = require('path');
var PERMS = (function (base) {
return {
OTHER_EXEC : base.EXEC,
OTHER_WRITE : base.WRITE,
OTHER_READ : base.READ,
GROUP_EXEC : base.EXEC << 3,
GROUP_WRITE : base.WRITE << 3,
GROUP_READ : base.READ << 3,
OWNER_EXEC : base.EXEC << 6,
OWNER_WRITE : base.WRITE << 6,
OWNER_READ : base.READ << 6,
// Literal octal numbers are apparently not allowed in "strict" javascript. Using parseInt is
// the preferred way, else a jshint warning is thrown.
STICKY : parseInt('01000', 8),
SETGID : parseInt('02000', 8),
SETUID : parseInt('04000', 8),
TYPE_MASK : parseInt('0770000', 8)
};
})({
EXEC : 1,
WRITE : 2,
READ : 4
});
//@
//@ ### chmod(octal_mode || octal_string, file)
//@ ### chmod(symbolic_mode, file)
//@
//@ Available options:
//@
//@ + `-v`: output a diagnostic for every file processed//@
//@ + `-c`: like verbose but report only when a change is made//@
//@ + `-R`: change files and directories recursively//@
//@
//@ Examples:
//@
//@ ```javascript
//@ chmod(755, '/Users/brandon');
//@ chmod('755', '/Users/brandon'); // same as above
//@ chmod('u+x', '/Users/brandon');
//@ ```
//@
//@ Alters the permissions of a file or directory by either specifying the
//@ absolute permissions in octal form or expressing the changes in symbols.
//@ This command tries to mimic the POSIX behavior as much as possible.
//@ Notable exceptions:
//@
//@ + In symbolic modes, 'a-r' and '-r' are identical. No consideration is
//@ given to the umask.
//@ + There is no "quiet" option since default behavior is to run silent.
function _chmod(options, mode, filePattern) {
if (!filePattern) {
if (options.length > 0 && options.charAt(0) === '-') {
// Special case where the specified file permissions started with - to subtract perms, which
// get picked up by the option parser as command flags.
// If we are down by one argument and options starts with -, shift everything over.
filePattern = mode;
mode = options;
options = '';
}
else {
common.error('You must specify a file.');
}
}
options = common.parseOptions(options, {
'R': 'recursive',
'c': 'changes',
'v': 'verbose'
});
if (typeof filePattern === 'string') {
filePattern = [ filePattern ];
}
var files;
if (options.recursive) {
files = [];
common.expand(filePattern).forEach(function addFile(expandedFile) {
var stat = fs.lstatSync(expandedFile);
if (!stat.isSymbolicLink()) {
files.push(expandedFile);
if (stat.isDirectory()) { // intentionally does not follow symlinks.
fs.readdirSync(expandedFile).forEach(function (child) {
addFile(expandedFile + '/' + child);
});
}
}
});
}
else {
files = common.expand(filePattern);
}
files.forEach(function innerChmod(file) {
file = path.resolve(file);
if (!fs.existsSync(file)) {
common.error('File not found: ' + file);
}
// When recursing, don't follow symlinks.
if (options.recursive && fs.lstatSync(file).isSymbolicLink()) {
return;
}
var perms = fs.statSync(file).mode;
var type = perms & PERMS.TYPE_MASK;
var newPerms = perms;
if (isNaN(parseInt(mode, 8))) {
// parse options
mode.split(',').forEach(function (symbolicMode) {
/*jshint regexdash:true */
var pattern = /([ugoa]*)([=\+-])([rwxXst]*)/i;
var matches = pattern.exec(symbolicMode);
if (matches) {
var applyTo = matches[1];
var operator = matches[2];
var change = matches[3];
var changeOwner = applyTo.indexOf('u') != -1 || applyTo === 'a' || applyTo === '';
var changeGroup = applyTo.indexOf('g') != -1 || applyTo === 'a' || applyTo === '';
var changeOther = applyTo.indexOf('o') != -1 || applyTo === 'a' || applyTo === '';
var changeRead = change.indexOf('r') != -1;
var changeWrite = change.indexOf('w') != -1;
var changeExec = change.indexOf('x') != -1;
var changeSticky = change.indexOf('t') != -1;
var changeSetuid = change.indexOf('s') != -1;
var mask = 0;
if (changeOwner) {
mask |= (changeRead ? PERMS.OWNER_READ : 0) + (changeWrite ? PERMS.OWNER_WRITE : 0) + (changeExec ? PERMS.OWNER_EXEC : 0) + (changeSetuid ? PERMS.SETUID : 0);
}
if (changeGroup) {
mask |= (changeRead ? PERMS.GROUP_READ : 0) + (changeWrite ? PERMS.GROUP_WRITE : 0) + (changeExec ? PERMS.GROUP_EXEC : 0) + (changeSetuid ? PERMS.SETGID : 0);
}
if (changeOther) {
mask |= (changeRead ? PERMS.OTHER_READ : 0) + (changeWrite ? PERMS.OTHER_WRITE : 0) + (changeExec ? PERMS.OTHER_EXEC : 0);
}
// Sticky bit is special - it's not tied to user, group or other.
if (changeSticky) {
mask |= PERMS.STICKY;
}
switch (operator) {
case '+':
newPerms |= mask;
break;
case '-':
newPerms &= ~mask;
break;
case '=':
newPerms = type + mask;
// According to POSIX, when using = to explicitly set the permissions, setuid and setgid can never be cleared.
if (fs.statSync(file).isDirectory()) {
newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
}
break;
}
if (options.verbose) {
log(file + ' -> ' + newPerms.toString(8));
}
if (perms != newPerms) {
if (!options.verbose && options.changes) {
log(file + ' -> ' + newPerms.toString(8));
}
fs.chmodSync(file, newPerms);
}
}
else {
common.error('Invalid symbolic mode change: ' + symbolicMode);
}
});
}
else {
// they gave us a full number
newPerms = type + parseInt(mode, 8);
// POSIX rules are that setuid and setgid can only be added using numeric form, but not cleared.
if (fs.statSync(file).isDirectory()) {
newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
}
fs.chmodSync(file, newPerms);
}
});
}
module.exports = _chmod;

189
bin/node_modules/shelljs/src/common.js generated vendored Normal file
View File

@@ -0,0 +1,189 @@
var os = require('os');
var fs = require('fs');
var _ls = require('./ls');
// Module globals
var config = {
silent: false,
fatal: false
};
exports.config = config;
var state = {
error: null,
currentCmd: 'shell.js',
tempDir: null
};
exports.state = state;
var platform = os.type().match(/^Win/) ? 'win' : 'unix';
exports.platform = platform;
function log() {
if (!config.silent)
console.log.apply(this, arguments);
}
exports.log = log;
// Shows error message. Throws unless _continue or config.fatal are true
function error(msg, _continue) {
if (state.error === null)
state.error = '';
state.error += state.currentCmd + ': ' + msg + '\n';
if (msg.length > 0)
log(state.error);
if (config.fatal)
process.exit(1);
if (!_continue)
throw '';
}
exports.error = error;
// In the future, when Proxies are default, we can add methods like `.to()` to primitive strings.
// For now, this is a dummy function to bookmark places we need such strings
function ShellString(str) {
return str;
}
exports.ShellString = ShellString;
// Returns {'alice': true, 'bob': false} when passed a dictionary, e.g.:
// parseOptions('-a', {'a':'alice', 'b':'bob'});
function parseOptions(str, map) {
if (!map)
error('parseOptions() internal error: no map given');
// All options are false by default
var options = {};
for (var letter in map)
options[map[letter]] = false;
if (!str)
return options; // defaults
if (typeof str !== 'string')
error('parseOptions() internal error: wrong str');
// e.g. match[1] = 'Rf' for str = '-Rf'
var match = str.match(/^\-(.+)/);
if (!match)
return options;
// e.g. chars = ['R', 'f']
var chars = match[1].split('');
chars.forEach(function(c) {
if (c in map)
options[map[c]] = true;
else
error('option not recognized: '+c);
});
return options;
}
exports.parseOptions = parseOptions;
// Expands wildcards with matching (ie. existing) file names.
// For example:
// expand(['file*.js']) = ['file1.js', 'file2.js', ...]
// (if the files 'file1.js', 'file2.js', etc, exist in the current dir)
function expand(list) {
var expanded = [];
list.forEach(function(listEl) {
// Wildcard present?
if (listEl.search(/\*/) > -1) {
_ls('', listEl).forEach(function(file) {
expanded.push(file);
});
} else {
expanded.push(listEl);
}
});
return expanded;
}
exports.expand = expand;
// Normalizes _unlinkSync() across platforms to match Unix behavior, i.e.
// file can be unlinked even if it's read-only, see https://github.com/joyent/node/issues/3006
function unlinkSync(file) {
try {
fs.unlinkSync(file);
} catch(e) {
// Try to override file permission
if (e.code === 'EPERM') {
fs.chmodSync(file, '0666');
fs.unlinkSync(file);
} else {
throw e;
}
}
}
exports.unlinkSync = unlinkSync;
// e.g. 'shelljs_a5f185d0443ca...'
function randomFileName() {
function randomHash(count) {
if (count === 1)
return parseInt(16*Math.random(), 10).toString(16);
else {
var hash = '';
for (var i=0; i<count; i++)
hash += randomHash(1);
return hash;
}
}
return 'shelljs_'+randomHash(20);
}
exports.randomFileName = randomFileName;
// extend(target_obj, source_obj1 [, source_obj2 ...])
// Shallow extend, e.g.:
// extend({A:1}, {b:2}, {c:3}) returns {A:1, b:2, c:3}
function extend(target) {
var sources = [].slice.call(arguments, 1);
sources.forEach(function(source) {
for (var key in source)
target[key] = source[key];
});
return target;
}
exports.extend = extend;
// Common wrapper for all Unix-like commands
function wrap(cmd, fn, options) {
return function() {
var retValue = null;
state.currentCmd = cmd;
state.error = null;
try {
var args = [].slice.call(arguments, 0);
if (options && options.notUnix) {
retValue = fn.apply(this, args);
} else {
if (args.length === 0 || typeof args[0] !== 'string' || args[0][0] !== '-')
args.unshift(''); // only add dummy option if '-option' not already present
retValue = fn.apply(this, args);
}
} catch (e) {
if (!state.error) {
// If state.error hasn't been set it's an error thrown by Node, not us - probably a bug...
console.log('shell.js: internal error');
console.log(e.stack || e);
process.exit(1);
}
if (config.fatal)
throw e;
}
state.currentCmd = 'shell.js';
return retValue;
};
} // wrap
exports.wrap = wrap;

200
bin/node_modules/shelljs/src/cp.js generated vendored Normal file
View File

@@ -0,0 +1,200 @@
var fs = require('fs');
var path = require('path');
var common = require('./common');
// Buffered file copy, synchronous
// (Using readFileSync() + writeFileSync() could easily cause a memory overflow
// with large files)
function copyFileSync(srcFile, destFile) {
if (!fs.existsSync(srcFile))
common.error('copyFileSync: no such file or directory: ' + srcFile);
var BUF_LENGTH = 64*1024,
buf = new Buffer(BUF_LENGTH),
bytesRead = BUF_LENGTH,
pos = 0,
fdr = null,
fdw = null;
try {
fdr = fs.openSync(srcFile, 'r');
} catch(e) {
common.error('copyFileSync: could not read src file ('+srcFile+')');
}
try {
fdw = fs.openSync(destFile, 'w');
} catch(e) {
common.error('copyFileSync: could not write to dest file (code='+e.code+'):'+destFile);
}
while (bytesRead === BUF_LENGTH) {
bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos);
fs.writeSync(fdw, buf, 0, bytesRead);
pos += bytesRead;
}
fs.closeSync(fdr);
fs.closeSync(fdw);
fs.chmodSync(destFile, fs.statSync(srcFile).mode);
}
// Recursively copies 'sourceDir' into 'destDir'
// Adapted from https://github.com/ryanmcgrath/wrench-js
//
// Copyright (c) 2010 Ryan McGrath
// Copyright (c) 2012 Artur Adib
//
// Licensed under the MIT License
// http://www.opensource.org/licenses/mit-license.php
function cpdirSyncRecursive(sourceDir, destDir, opts) {
if (!opts) opts = {};
/* Create the directory where all our junk is moving to; read the mode of the source directory and mirror it */
var checkDir = fs.statSync(sourceDir);
try {
fs.mkdirSync(destDir, checkDir.mode);
} catch (e) {
//if the directory already exists, that's okay
if (e.code !== 'EEXIST') throw e;
}
var files = fs.readdirSync(sourceDir);
for (var i = 0; i < files.length; i++) {
var srcFile = sourceDir + "/" + files[i];
var destFile = destDir + "/" + files[i];
var srcFileStat = fs.lstatSync(srcFile);
if (srcFileStat.isDirectory()) {
/* recursion this thing right on back. */
cpdirSyncRecursive(srcFile, destFile, opts);
} else if (srcFileStat.isSymbolicLink()) {
var symlinkFull = fs.readlinkSync(srcFile);
fs.symlinkSync(symlinkFull, destFile);
} else {
/* At this point, we've hit a file actually worth copying... so copy it on over. */
if (fs.existsSync(destFile) && !opts.force) {
common.log('skipping existing file: ' + files[i]);
} else {
copyFileSync(srcFile, destFile);
}
}
} // for files
} // cpdirSyncRecursive
//@
//@ ### cp([options ,] source [,source ...], dest)
//@ ### cp([options ,] source_array, dest)
//@ Available options:
//@
//@ + `-f`: force
//@ + `-r, -R`: recursive
//@
//@ Examples:
//@
//@ ```javascript
//@ cp('file1', 'dir1');
//@ cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
//@ cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
//@ ```
//@
//@ Copies files. The wildcard `*` is accepted.
function _cp(options, sources, dest) {
options = common.parseOptions(options, {
'f': 'force',
'R': 'recursive',
'r': 'recursive'
});
// Get sources, dest
if (arguments.length < 3) {
common.error('missing <source> and/or <dest>');
} else if (arguments.length > 3) {
sources = [].slice.call(arguments, 1, arguments.length - 1);
dest = arguments[arguments.length - 1];
} else if (typeof sources === 'string') {
sources = [sources];
} else if ('length' in sources) {
sources = sources; // no-op for array
} else {
common.error('invalid arguments');
}
var exists = fs.existsSync(dest),
stats = exists && fs.statSync(dest);
// Dest is not existing dir, but multiple sources given
if ((!exists || !stats.isDirectory()) && sources.length > 1)
common.error('dest is not a directory (too many sources)');
// Dest is an existing file, but no -f given
if (exists && stats.isFile() && !options.force)
common.error('dest file already exists: ' + dest);
if (options.recursive) {
// Recursive allows the shortcut syntax "sourcedir/" for "sourcedir/*"
// (see Github issue #15)
sources.forEach(function(src, i) {
if (src[src.length - 1] === '/')
sources[i] += '*';
});
// Create dest
try {
fs.mkdirSync(dest, parseInt('0777', 8));
} catch (e) {
// like Unix's cp, keep going even if we can't create dest dir
}
}
sources = common.expand(sources);
sources.forEach(function(src) {
if (!fs.existsSync(src)) {
common.error('no such file or directory: '+src, true);
return; // skip file
}
// If here, src exists
if (fs.statSync(src).isDirectory()) {
if (!options.recursive) {
// Non-Recursive
common.log(src + ' is a directory (not copied)');
} else {
// Recursive
// 'cp /a/source dest' should create 'source' in 'dest'
var newDest = path.join(dest, path.basename(src)),
checkDir = fs.statSync(src);
try {
fs.mkdirSync(newDest, checkDir.mode);
} catch (e) {
//if the directory already exists, that's okay
if (e.code !== 'EEXIST') throw e;
}
cpdirSyncRecursive(src, newDest, {force: options.force});
}
return; // done with dir
}
// If here, src is a file
// When copying to '/path/dir':
// thisDest = '/path/dir/file1'
var thisDest = dest;
if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
thisDest = path.normalize(dest + '/' + path.basename(src));
if (fs.existsSync(thisDest) && !options.force) {
common.error('dest file already exists: ' + thisDest, true);
return; // skip file
}
copyFileSync(src, thisDest);
}); // forEach(src)
}
module.exports = _cp;

191
bin/node_modules/shelljs/src/dirs.js generated vendored Normal file
View File

@@ -0,0 +1,191 @@
var common = require('./common');
var _cd = require('./cd');
var path = require('path');
// Pushd/popd/dirs internals
var _dirStack = [];
function _isStackIndex(index) {
return (/^[\-+]\d+$/).test(index);
}
function _parseStackIndex(index) {
if (_isStackIndex(index)) {
if (Math.abs(index) < _dirStack.length + 1) { // +1 for pwd
return (/^-/).test(index) ? Number(index) - 1 : Number(index);
} else {
common.error(index + ': directory stack index out of range');
}
} else {
common.error(index + ': invalid number');
}
}
function _actualDirStack() {
return [process.cwd()].concat(_dirStack);
}
//@
//@ ### pushd([options,] [dir | '-N' | '+N'])
//@
//@ Available options:
//@
//@ + `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.
//@
//@ Arguments:
//@
//@ + `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.
//@ + `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
//@ + `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
//@
//@ Examples:
//@
//@ ```javascript
//@ // process.cwd() === '/usr'
//@ pushd('/etc'); // Returns /etc /usr
//@ pushd('+1'); // Returns /usr /etc
//@ ```
//@
//@ Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.
function _pushd(options, dir) {
if (_isStackIndex(options)) {
dir = options;
options = '';
}
options = common.parseOptions(options, {
'n' : 'no-cd'
});
var dirs = _actualDirStack();
if (dir === '+0') {
return dirs; // +0 is a noop
} else if (!dir) {
if (dirs.length > 1) {
dirs = dirs.splice(1, 1).concat(dirs);
} else {
return common.error('no other directory');
}
} else if (_isStackIndex(dir)) {
var n = _parseStackIndex(dir);
dirs = dirs.slice(n).concat(dirs.slice(0, n));
} else {
if (options['no-cd']) {
dirs.splice(1, 0, dir);
} else {
dirs.unshift(dir);
}
}
if (options['no-cd']) {
dirs = dirs.slice(1);
} else {
dir = path.resolve(dirs.shift());
_cd('', dir);
}
_dirStack = dirs;
return _dirs('');
}
exports.pushd = _pushd;
//@
//@ ### popd([options,] ['-N' | '+N'])
//@
//@ Available options:
//@
//@ + `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
//@
//@ Arguments:
//@
//@ + `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.
//@ + `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.
//@
//@ Examples:
//@
//@ ```javascript
//@ echo(process.cwd()); // '/usr'
//@ pushd('/etc'); // '/etc /usr'
//@ echo(process.cwd()); // '/etc'
//@ popd(); // '/usr'
//@ echo(process.cwd()); // '/usr'
//@ ```
//@
//@ When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
function _popd(options, index) {
if (_isStackIndex(options)) {
index = options;
options = '';
}
options = common.parseOptions(options, {
'n' : 'no-cd'
});
if (!_dirStack.length) {
return common.error('directory stack empty');
}
index = _parseStackIndex(index || '+0');
if (options['no-cd'] || index > 0 || _dirStack.length + index === 0) {
index = index > 0 ? index - 1 : index;
_dirStack.splice(index, 1);
} else {
var dir = path.resolve(_dirStack.shift());
_cd('', dir);
}
return _dirs('');
}
exports.popd = _popd;
//@
//@ ### dirs([options | '+N' | '-N'])
//@
//@ Available options:
//@
//@ + `-c`: Clears the directory stack by deleting all of the elements.
//@
//@ Arguments:
//@
//@ + `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
//@ + `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
//@
//@ Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
//@
//@ See also: pushd, popd
function _dirs(options, index) {
if (_isStackIndex(options)) {
index = options;
options = '';
}
options = common.parseOptions(options, {
'c' : 'clear'
});
if (options['clear']) {
_dirStack = [];
return _dirStack;
}
var stack = _actualDirStack();
if (index) {
index = _parseStackIndex(index);
if (index < 0) {
index = stack.length + index;
}
common.log(stack[index]);
return stack[index];
}
common.log(stack.join(' '));
return stack;
}
exports.dirs = _dirs;

20
bin/node_modules/shelljs/src/echo.js generated vendored Normal file
View File

@@ -0,0 +1,20 @@
var common = require('./common');
//@
//@ ### echo(string [,string ...])
//@
//@ Examples:
//@
//@ ```javascript
//@ echo('hello world');
//@ var str = echo('hello world');
//@ ```
//@
//@ Prints string to stdout, and returns string with additional utility methods
//@ like `.to()`.
function _echo() {
var messages = [].slice.call(arguments, 0);
console.log.apply(this, messages);
return common.ShellString(messages.join(' '));
}
module.exports = _echo;

10
bin/node_modules/shelljs/src/error.js generated vendored Normal file
View File

@@ -0,0 +1,10 @@
var common = require('./common');
//@
//@ ### error()
//@ Tests if error occurred in the last command. Returns `null` if no error occurred,
//@ otherwise returns string explaining the error
function error() {
return common.state.error;
};
module.exports = error;

181
bin/node_modules/shelljs/src/exec.js generated vendored Normal file
View File

@@ -0,0 +1,181 @@
var common = require('./common');
var _tempDir = require('./tempdir');
var _pwd = require('./pwd');
var path = require('path');
var fs = require('fs');
var child = require('child_process');
// Hack to run child_process.exec() synchronously (sync avoids callback hell)
// Uses a custom wait loop that checks for a flag file, created when the child process is done.
// (Can't do a wait loop that checks for internal Node variables/messages as
// Node is single-threaded; callbacks and other internal state changes are done in the
// event loop).
function execSync(cmd, opts) {
var tempDir = _tempDir();
var stdoutFile = path.resolve(tempDir+'/'+common.randomFileName()),
codeFile = path.resolve(tempDir+'/'+common.randomFileName()),
scriptFile = path.resolve(tempDir+'/'+common.randomFileName()),
sleepFile = path.resolve(tempDir+'/'+common.randomFileName());
var options = common.extend({
silent: common.config.silent
}, opts);
var previousStdoutContent = '';
// Echoes stdout changes from running process, if not silent
function updateStdout() {
if (options.silent || !fs.existsSync(stdoutFile))
return;
var stdoutContent = fs.readFileSync(stdoutFile, 'utf8');
// No changes since last time?
if (stdoutContent.length <= previousStdoutContent.length)
return;
process.stdout.write(stdoutContent.substr(previousStdoutContent.length));
previousStdoutContent = stdoutContent;
}
function escape(str) {
return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
}
cmd += ' > '+stdoutFile+' 2>&1'; // works on both win/unix
var script =
"var child = require('child_process')," +
" fs = require('fs');" +
"child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {" +
" fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');" +
"});";
if (fs.existsSync(scriptFile)) common.unlinkSync(scriptFile);
if (fs.existsSync(stdoutFile)) common.unlinkSync(stdoutFile);
if (fs.existsSync(codeFile)) common.unlinkSync(codeFile);
fs.writeFileSync(scriptFile, script);
child.exec('"'+process.execPath+'" '+scriptFile, {
env: process.env,
cwd: _pwd(),
maxBuffer: 20*1024*1024
});
// The wait loop
// sleepFile is used as a dummy I/O op to mitigate unnecessary CPU usage
// (tried many I/O sync ops, writeFileSync() seems to be only one that is effective in reducing
// CPU usage, though apparently not so much on Windows)
while (!fs.existsSync(codeFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); }
while (!fs.existsSync(stdoutFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); }
// At this point codeFile exists, but it's not necessarily flushed yet.
// Keep reading it until it is.
var code = parseInt('', 10);
while (isNaN(code)) {
code = parseInt(fs.readFileSync(codeFile, 'utf8'), 10);
}
var stdout = fs.readFileSync(stdoutFile, 'utf8');
// No biggie if we can't erase the files now -- they're in a temp dir anyway
try { common.unlinkSync(scriptFile); } catch(e) {}
try { common.unlinkSync(stdoutFile); } catch(e) {}
try { common.unlinkSync(codeFile); } catch(e) {}
try { common.unlinkSync(sleepFile); } catch(e) {}
// some shell return codes are defined as errors, per http://tldp.org/LDP/abs/html/exitcodes.html
if (code === 1 || code === 2 || code >= 126) {
common.error('', true); // unix/shell doesn't really give an error message after non-zero exit codes
}
// True if successful, false if not
var obj = {
code: code,
output: stdout
};
return obj;
} // execSync()
// Wrapper around exec() to enable echoing output to console in real time
function execAsync(cmd, opts, callback) {
var output = '';
var options = common.extend({
silent: common.config.silent
}, opts);
var c = child.exec(cmd, {env: process.env, maxBuffer: 20*1024*1024}, function(err) {
if (callback)
callback(err ? err.code : 0, output);
});
c.stdout.on('data', function(data) {
output += data;
if (!options.silent)
process.stdout.write(data);
});
c.stderr.on('data', function(data) {
output += data;
if (!options.silent)
process.stdout.write(data);
});
return c;
}
//@
//@ ### exec(command [, options] [, callback])
//@ Available options (all `false` by default):
//@
//@ + `async`: Asynchronous execution. Defaults to true if a callback is provided.
//@ + `silent`: Do not echo program output to console.
//@
//@ Examples:
//@
//@ ```javascript
//@ var version = exec('node --version', {silent:true}).output;
//@
//@ var child = exec('some_long_running_process', {async:true});
//@ child.stdout.on('data', function(data) {
//@ /* ... do something with data ... */
//@ });
//@
//@ exec('some_long_running_process', function(code, output) {
//@ console.log('Exit code:', code);
//@ console.log('Program output:', output);
//@ });
//@ ```
//@
//@ Executes the given `command` _synchronously_, unless otherwise specified.
//@ When in synchronous mode returns the object `{ code:..., output:... }`, containing the program's
//@ `output` (stdout + stderr) and its exit `code`. Otherwise returns the child process object, and
//@ the `callback` gets the arguments `(code, output)`.
//@
//@ **Note:** For long-lived processes, it's best to run `exec()` asynchronously as
//@ the current synchronous implementation uses a lot of CPU. This should be getting
//@ fixed soon.
function _exec(command, options, callback) {
if (!command)
common.error('must specify command');
// Callback is defined instead of options.
if (typeof options === 'function') {
callback = options;
options = { async: true };
}
// Callback is defined with options.
if (typeof options === 'object' && typeof callback === 'function') {
options.async = true;
}
options = common.extend({
silent: common.config.silent,
async: false
}, options);
if (options.async)
return execAsync(command, options, callback);
else
return execSync(command, options);
}
module.exports = _exec;

51
bin/node_modules/shelljs/src/find.js generated vendored Normal file
View File

@@ -0,0 +1,51 @@
var fs = require('fs');
var common = require('./common');
var _ls = require('./ls');
//@
//@ ### find(path [,path ...])
//@ ### find(path_array)
//@ Examples:
//@
//@ ```javascript
//@ find('src', 'lib');
//@ find(['src', 'lib']); // same as above
//@ find('.').filter(function(file) { return file.match(/\.js$/); });
//@ ```
//@
//@ Returns array of all files (however deep) in the given paths.
//@
//@ The main difference from `ls('-R', path)` is that the resulting file names
//@ include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
function _find(options, paths) {
if (!paths)
common.error('no path specified');
else if (typeof paths === 'object')
paths = paths; // assume array
else if (typeof paths === 'string')
paths = [].slice.call(arguments, 1);
var list = [];
function pushFile(file) {
if (common.platform === 'win')
file = file.replace(/\\/g, '/');
list.push(file);
}
// why not simply do ls('-R', paths)? because the output wouldn't give the base dirs
// to get the base dir in the output, we need instead ls('-R', 'dir/*') for every directory
paths.forEach(function(file) {
pushFile(file);
if (fs.statSync(file).isDirectory()) {
_ls('-RA', file+'/*').forEach(function(subfile) {
pushFile(subfile);
});
}
});
return list;
}
module.exports = _find;

52
bin/node_modules/shelljs/src/grep.js generated vendored Normal file
View File

@@ -0,0 +1,52 @@
var common = require('./common');
var fs = require('fs');
//@
//@ ### grep([options ,] regex_filter, file [, file ...])
//@ ### grep([options ,] regex_filter, file_array)
//@ Available options:
//@
//@ + `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
//@
//@ Examples:
//@
//@ ```javascript
//@ grep('-v', 'GLOBAL_VARIABLE', '*.js');
//@ grep('GLOBAL_VARIABLE', '*.js');
//@ ```
//@
//@ Reads input string from given files and returns a string containing all lines of the
//@ file that match the given `regex_filter`. Wildcard `*` accepted.
function _grep(options, regex, files) {
options = common.parseOptions(options, {
'v': 'inverse'
});
if (!files)
common.error('no paths given');
if (typeof files === 'string')
files = [].slice.call(arguments, 2);
// if it's array leave it as it is
files = common.expand(files);
var grep = '';
files.forEach(function(file) {
if (!fs.existsSync(file)) {
common.error('no such file or directory: ' + file, true);
return;
}
var contents = fs.readFileSync(file, 'utf8'),
lines = contents.split(/\r*\n/);
lines.forEach(function(line) {
var matched = line.match(regex);
if ((options.inverse && !matched) || (!options.inverse && matched))
grep += line + '\n';
});
});
return common.ShellString(grep);
}
module.exports = _grep;

126
bin/node_modules/shelljs/src/ls.js generated vendored Normal file
View File

@@ -0,0 +1,126 @@
var path = require('path');
var fs = require('fs');
var common = require('./common');
var _cd = require('./cd');
var _pwd = require('./pwd');
//@
//@ ### ls([options ,] path [,path ...])
//@ ### ls([options ,] path_array)
//@ Available options:
//@
//@ + `-R`: recursive
//@ + `-A`: all files (include files beginning with `.`, except for `.` and `..`)
//@
//@ Examples:
//@
//@ ```javascript
//@ ls('projs/*.js');
//@ ls('-R', '/users/me', '/tmp');
//@ ls('-R', ['/users/me', '/tmp']); // same as above
//@ ```
//@
//@ Returns array of files in the given path, or in current directory if no path provided.
function _ls(options, paths) {
options = common.parseOptions(options, {
'R': 'recursive',
'A': 'all',
'a': 'all_deprecated'
});
if (options.all_deprecated) {
// We won't support the -a option as it's hard to image why it's useful
// (it includes '.' and '..' in addition to '.*' files)
// For backwards compatibility we'll dump a deprecated message and proceed as before
common.log('ls: Option -a is deprecated. Use -A instead');
options.all = true;
}
if (!paths)
paths = ['.'];
else if (typeof paths === 'object')
paths = paths; // assume array
else if (typeof paths === 'string')
paths = [].slice.call(arguments, 1);
var list = [];
// Conditionally pushes file to list - returns true if pushed, false otherwise
// (e.g. prevents hidden files to be included unless explicitly told so)
function pushFile(file, query) {
// hidden file?
if (path.basename(file)[0] === '.') {
// not explicitly asking for hidden files?
if (!options.all && !(path.basename(query)[0] === '.' && path.basename(query).length > 1))
return false;
}
if (common.platform === 'win')
file = file.replace(/\\/g, '/');
list.push(file);
return true;
}
paths.forEach(function(p) {
if (fs.existsSync(p)) {
var stats = fs.statSync(p);
// Simple file?
if (stats.isFile()) {
pushFile(p, p);
return; // continue
}
// Simple dir?
if (stats.isDirectory()) {
// Iterate over p contents
fs.readdirSync(p).forEach(function(file) {
if (!pushFile(file, p))
return;
// Recursive?
if (options.recursive) {
var oldDir = _pwd();
_cd('', p);
if (fs.statSync(file).isDirectory())
list = list.concat(_ls('-R'+(options.all?'A':''), file+'/*'));
_cd('', oldDir);
}
});
return; // continue
}
}
// p does not exist - possible wildcard present
var basename = path.basename(p);
var dirname = path.dirname(p);
// Wildcard present on an existing dir? (e.g. '/tmp/*.js')
if (basename.search(/\*/) > -1 && fs.existsSync(dirname) && fs.statSync(dirname).isDirectory) {
// Escape special regular expression chars
var regexp = basename.replace(/(\^|\$|\(|\)|<|>|\[|\]|\{|\}|\.|\+|\?)/g, '\\$1');
// Translates wildcard into regex
regexp = '^' + regexp.replace(/\*/g, '.*') + '$';
// Iterate over directory contents
fs.readdirSync(dirname).forEach(function(file) {
if (file.match(new RegExp(regexp))) {
if (!pushFile(path.normalize(dirname+'/'+file), basename))
return;
// Recursive?
if (options.recursive) {
var pp = dirname + '/' + file;
if (fs.lstatSync(pp).isDirectory())
list = list.concat(_ls('-R'+(options.all?'A':''), pp+'/*'));
} // recursive
} // if file matches
}); // forEach
return;
}
common.error('no such file or directory: ' + p, true);
});
return list;
}
module.exports = _ls;

68
bin/node_modules/shelljs/src/mkdir.js generated vendored Normal file
View File

@@ -0,0 +1,68 @@
var common = require('./common');
var fs = require('fs');
var path = require('path');
// Recursively creates 'dir'
function mkdirSyncRecursive(dir) {
var baseDir = path.dirname(dir);
// Base dir exists, no recursion necessary
if (fs.existsSync(baseDir)) {
fs.mkdirSync(dir, parseInt('0777', 8));
return;
}
// Base dir does not exist, go recursive
mkdirSyncRecursive(baseDir);
// Base dir created, can create dir
fs.mkdirSync(dir, parseInt('0777', 8));
}
//@
//@ ### mkdir([options ,] dir [, dir ...])
//@ ### mkdir([options ,] dir_array)
//@ Available options:
//@
//@ + `p`: full path (will create intermediate dirs if necessary)
//@
//@ Examples:
//@
//@ ```javascript
//@ mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
//@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
//@ ```
//@
//@ Creates directories.
function _mkdir(options, dirs) {
options = common.parseOptions(options, {
'p': 'fullpath'
});
if (!dirs)
common.error('no paths given');
if (typeof dirs === 'string')
dirs = [].slice.call(arguments, 1);
// if it's array leave it as it is
dirs.forEach(function(dir) {
if (fs.existsSync(dir)) {
if (!options.fullpath)
common.error('path already exists: ' + dir, true);
return; // skip dir
}
// Base dir does not exist, and no -p option given
var baseDir = path.dirname(dir);
if (!fs.existsSync(baseDir) && !options.fullpath) {
common.error('no such file or directory: ' + baseDir, true);
return; // skip dir
}
if (options.fullpath)
mkdirSyncRecursive(dir);
else
fs.mkdirSync(dir, parseInt('0777', 8));
});
} // mkdir
module.exports = _mkdir;

80
bin/node_modules/shelljs/src/mv.js generated vendored Normal file
View File

@@ -0,0 +1,80 @@
var fs = require('fs');
var path = require('path');
var common = require('./common');
//@
//@ ### mv(source [, source ...], dest')
//@ ### mv(source_array, dest')
//@ Available options:
//@
//@ + `f`: force
//@
//@ Examples:
//@
//@ ```javascript
//@ mv('-f', 'file', 'dir/');
//@ mv('file1', 'file2', 'dir/');
//@ mv(['file1', 'file2'], 'dir/'); // same as above
//@ ```
//@
//@ Moves files. The wildcard `*` is accepted.
function _mv(options, sources, dest) {
options = common.parseOptions(options, {
'f': 'force'
});
// Get sources, dest
if (arguments.length < 3) {
common.error('missing <source> and/or <dest>');
} else if (arguments.length > 3) {
sources = [].slice.call(arguments, 1, arguments.length - 1);
dest = arguments[arguments.length - 1];
} else if (typeof sources === 'string') {
sources = [sources];
} else if ('length' in sources) {
sources = sources; // no-op for array
} else {
common.error('invalid arguments');
}
sources = common.expand(sources);
var exists = fs.existsSync(dest),
stats = exists && fs.statSync(dest);
// Dest is not existing dir, but multiple sources given
if ((!exists || !stats.isDirectory()) && sources.length > 1)
common.error('dest is not a directory (too many sources)');
// Dest is an existing file, but no -f given
if (exists && stats.isFile() && !options.force)
common.error('dest file already exists: ' + dest);
sources.forEach(function(src) {
if (!fs.existsSync(src)) {
common.error('no such file or directory: '+src, true);
return; // skip file
}
// If here, src exists
// When copying to '/path/dir':
// thisDest = '/path/dir/file1'
var thisDest = dest;
if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
thisDest = path.normalize(dest + '/' + path.basename(src));
if (fs.existsSync(thisDest) && !options.force) {
common.error('dest file already exists: ' + thisDest, true);
return; // skip file
}
if (path.resolve(src) === path.dirname(path.resolve(thisDest))) {
common.error('cannot move to self: '+src, true);
return; // skip file
}
fs.renameSync(src, thisDest);
}); // forEach(src)
} // mv
module.exports = _mv;

1
bin/node_modules/shelljs/src/popd.js generated vendored Normal file
View File

@@ -0,0 +1 @@
// see dirs.js

1
bin/node_modules/shelljs/src/pushd.js generated vendored Normal file
View File

@@ -0,0 +1 @@
// see dirs.js

11
bin/node_modules/shelljs/src/pwd.js generated vendored Normal file
View File

@@ -0,0 +1,11 @@
var path = require('path');
var common = require('./common');
//@
//@ ### pwd()
//@ Returns the current directory.
function _pwd(options) {
var pwd = path.resolve(process.cwd());
return common.ShellString(pwd);
}
module.exports = _pwd;

145
bin/node_modules/shelljs/src/rm.js generated vendored Normal file
View File

@@ -0,0 +1,145 @@
var common = require('./common');
var fs = require('fs');
// Recursively removes 'dir'
// Adapted from https://github.com/ryanmcgrath/wrench-js
//
// Copyright (c) 2010 Ryan McGrath
// Copyright (c) 2012 Artur Adib
//
// Licensed under the MIT License
// http://www.opensource.org/licenses/mit-license.php
function rmdirSyncRecursive(dir, force) {
var files;
files = fs.readdirSync(dir);
// Loop through and delete everything in the sub-tree after checking it
for(var i = 0; i < files.length; i++) {
var file = dir + "/" + files[i],
currFile = fs.lstatSync(file);
if(currFile.isDirectory()) { // Recursive function back to the beginning
rmdirSyncRecursive(file, force);
}
else if(currFile.isSymbolicLink()) { // Unlink symlinks
if (force || isWriteable(file)) {
try {
common.unlinkSync(file);
} catch (e) {
common.error('could not remove file (code '+e.code+'): ' + file, true);
}
}
}
else // Assume it's a file - perhaps a try/catch belongs here?
if (force || isWriteable(file)) {
try {
common.unlinkSync(file);
} catch (e) {
common.error('could not remove file (code '+e.code+'): ' + file, true);
}
}
}
// Now that we know everything in the sub-tree has been deleted, we can delete the main directory.
// Huzzah for the shopkeep.
var result;
try {
result = fs.rmdirSync(dir);
} catch(e) {
common.error('could not remove directory (code '+e.code+'): ' + dir, true);
}
return result;
} // rmdirSyncRecursive
// Hack to determine if file has write permissions for current user
// Avoids having to check user, group, etc, but it's probably slow
function isWriteable(file) {
var writePermission = true;
try {
var __fd = fs.openSync(file, 'a');
fs.closeSync(__fd);
} catch(e) {
writePermission = false;
}
return writePermission;
}
//@
//@ ### rm([options ,] file [, file ...])
//@ ### rm([options ,] file_array)
//@ Available options:
//@
//@ + `-f`: force
//@ + `-r, -R`: recursive
//@
//@ Examples:
//@
//@ ```javascript
//@ rm('-rf', '/tmp/*');
//@ rm('some_file.txt', 'another_file.txt');
//@ rm(['some_file.txt', 'another_file.txt']); // same as above
//@ ```
//@
//@ Removes files. The wildcard `*` is accepted.
function _rm(options, files) {
options = common.parseOptions(options, {
'f': 'force',
'r': 'recursive',
'R': 'recursive'
});
if (!files)
common.error('no paths given');
if (typeof files === 'string')
files = [].slice.call(arguments, 1);
// if it's array leave it as it is
files = common.expand(files);
files.forEach(function(file) {
if (!fs.existsSync(file)) {
// Path does not exist, no force flag given
if (!options.force)
common.error('no such file or directory: '+file, true);
return; // skip file
}
// If here, path exists
var stats = fs.lstatSync(file);
if (stats.isFile() || stats.isSymbolicLink()) {
// Do not check for file writing permissions
if (options.force) {
common.unlinkSync(file);
return;
}
if (isWriteable(file))
common.unlinkSync(file);
else
common.error('permission denied: '+file, true);
return;
} // simple file
// Path is an existing directory, but no -r flag given
if (stats.isDirectory() && !options.recursive) {
common.error('path is a directory', true);
return; // skip path
}
// Recursively remove existing directory
if (stats.isDirectory() && options.recursive) {
rmdirSyncRecursive(file, options.force);
}
}); // forEach(file)
} // rm
module.exports = _rm;

43
bin/node_modules/shelljs/src/sed.js generated vendored Normal file
View File

@@ -0,0 +1,43 @@
var common = require('./common');
var fs = require('fs');
//@
//@ ### sed([options ,] search_regex, replace_str, file)
//@ Available options:
//@
//@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
//@
//@ Examples:
//@
//@ ```javascript
//@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
//@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
//@ ```
//@
//@ Reads an input string from `file` and performs a JavaScript `replace()` on the input
//@ using the given search regex and replacement string. Returns the new string after replacement.
function _sed(options, regex, replacement, file) {
options = common.parseOptions(options, {
'i': 'inplace'
});
if (typeof replacement === 'string')
replacement = replacement; // no-op
else if (typeof replacement === 'number')
replacement = replacement.toString(); // fallback
else
common.error('invalid replacement string');
if (!file)
common.error('no file given');
if (!fs.existsSync(file))
common.error('no such file or directory: ' + file);
var result = fs.readFileSync(file, 'utf8').replace(regex, replacement);
if (options.inplace)
fs.writeFileSync(file, result, 'utf8');
return common.ShellString(result);
}
module.exports = _sed;

56
bin/node_modules/shelljs/src/tempdir.js generated vendored Normal file
View File

@@ -0,0 +1,56 @@
var common = require('./common');
var os = require('os');
var fs = require('fs');
// Returns false if 'dir' is not a writeable directory, 'dir' otherwise
function writeableDir(dir) {
if (!dir || !fs.existsSync(dir))
return false;
if (!fs.statSync(dir).isDirectory())
return false;
var testFile = dir+'/'+common.randomFileName();
try {
fs.writeFileSync(testFile, ' ');
common.unlinkSync(testFile);
return dir;
} catch (e) {
return false;
}
}
//@
//@ ### tempdir()
//@
//@ Examples:
//@
//@ ```javascript
//@ var tmp = tempdir(); // "/tmp" for most *nix platforms
//@ ```
//@
//@ Searches and returns string containing a writeable, platform-dependent temporary directory.
//@ Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
function _tempDir() {
var state = common.state;
if (state.tempDir)
return state.tempDir; // from cache
state.tempDir = writeableDir(os.tempDir && os.tempDir()) || // node 0.8+
writeableDir(process.env['TMPDIR']) ||
writeableDir(process.env['TEMP']) ||
writeableDir(process.env['TMP']) ||
writeableDir(process.env['Wimp$ScrapDir']) || // RiscOS
writeableDir('C:\\TEMP') || // Windows
writeableDir('C:\\TMP') || // Windows
writeableDir('\\TEMP') || // Windows
writeableDir('\\TMP') || // Windows
writeableDir('/tmp') ||
writeableDir('/var/tmp') ||
writeableDir('/usr/tmp') ||
writeableDir('.'); // last resort
return state.tempDir;
}
module.exports = _tempDir;

85
bin/node_modules/shelljs/src/test.js generated vendored Normal file
View File

@@ -0,0 +1,85 @@
var common = require('./common');
var fs = require('fs');
//@
//@ ### test(expression)
//@ Available expression primaries:
//@
//@ + `'-b', 'path'`: true if path is a block device
//@ + `'-c', 'path'`: true if path is a character device
//@ + `'-d', 'path'`: true if path is a directory
//@ + `'-e', 'path'`: true if path exists
//@ + `'-f', 'path'`: true if path is a regular file
//@ + `'-L', 'path'`: true if path is a symboilc link
//@ + `'-p', 'path'`: true if path is a pipe (FIFO)
//@ + `'-S', 'path'`: true if path is a socket
//@
//@ Examples:
//@
//@ ```javascript
//@ if (test('-d', path)) { /* do something with dir */ };
//@ if (!test('-f', path)) continue; // skip if it's a regular file
//@ ```
//@
//@ Evaluates expression using the available primaries and returns corresponding value.
function _test(options, path) {
if (!path)
common.error('no path given');
// hack - only works with unary primaries
options = common.parseOptions(options, {
'b': 'block',
'c': 'character',
'd': 'directory',
'e': 'exists',
'f': 'file',
'L': 'link',
'p': 'pipe',
'S': 'socket'
});
var canInterpret = false;
for (var key in options)
if (options[key] === true) {
canInterpret = true;
break;
}
if (!canInterpret)
common.error('could not interpret expression');
if (options.link) {
try {
return fs.lstatSync(path).isSymbolicLink();
} catch(e) {
return false;
}
}
if (!fs.existsSync(path))
return false;
if (options.exists)
return true;
var stats = fs.statSync(path);
if (options.block)
return stats.isBlockDevice();
if (options.character)
return stats.isCharacterDevice();
if (options.directory)
return stats.isDirectory();
if (options.file)
return stats.isFile();
if (options.pipe)
return stats.isFIFO();
if (options.socket)
return stats.isSocket();
} // test
module.exports = _test;

29
bin/node_modules/shelljs/src/to.js generated vendored Normal file
View File

@@ -0,0 +1,29 @@
var common = require('./common');
var fs = require('fs');
var path = require('path');
//@
//@ ### 'string'.to(file)
//@
//@ Examples:
//@
//@ ```javascript
//@ cat('input.txt').to('output.txt');
//@ ```
//@
//@ Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
//@ those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
function _to(options, file) {
if (!file)
common.error('wrong arguments');
if (!fs.existsSync( path.dirname(file) ))
common.error('no such file or directory: ' + path.dirname(file));
try {
fs.writeFileSync(file, this.toString(), 'utf8');
} catch(e) {
common.error('could not write to file (code '+e.code+'): '+file, true);
}
}
module.exports = _to;

29
bin/node_modules/shelljs/src/toEnd.js generated vendored Normal file
View File

@@ -0,0 +1,29 @@
var common = require('./common');
var fs = require('fs');
var path = require('path');
//@
//@ ### 'string'.toEnd(file)
//@
//@ Examples:
//@
//@ ```javascript
//@ cat('input.txt').toEnd('output.txt');
//@ ```
//@
//@ Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as
//@ those returned by `cat`, `grep`, etc).
function _toEnd(options, file) {
if (!file)
common.error('wrong arguments');
if (!fs.existsSync( path.dirname(file) ))
common.error('no such file or directory: ' + path.dirname(file));
try {
fs.appendFileSync(file, this.toString(), 'utf8');
} catch(e) {
common.error('could not append to file (code '+e.code+'): '+file, true);
}
}
module.exports = _toEnd;

79
bin/node_modules/shelljs/src/which.js generated vendored Normal file
View File

@@ -0,0 +1,79 @@
var common = require('./common');
var fs = require('fs');
var path = require('path');
// Cross-platform method for splitting environment PATH variables
function splitPath(p) {
for (i=1;i<2;i++) {}
if (!p)
return [];
if (common.platform === 'win')
return p.split(';');
else
return p.split(':');
}
//@
//@ ### which(command)
//@
//@ Examples:
//@
//@ ```javascript
//@ var nodeExec = which('node');
//@ ```
//@
//@ Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.
//@ Returns string containing the absolute path to the command.
function _which(options, cmd) {
if (!cmd)
common.error('must specify command');
var pathEnv = process.env.path || process.env.Path || process.env.PATH,
pathArray = splitPath(pathEnv),
where = null;
// No relative/absolute paths provided?
if (cmd.search(/\//) === -1) {
// Search for command in PATH
pathArray.forEach(function(dir) {
if (where)
return; // already found it
var attempt = path.resolve(dir + '/' + cmd);
if (fs.existsSync(attempt)) {
where = attempt;
return;
}
if (common.platform === 'win') {
var baseAttempt = attempt;
attempt = baseAttempt + '.exe';
if (fs.existsSync(attempt)) {
where = attempt;
return;
}
attempt = baseAttempt + '.cmd';
if (fs.existsSync(attempt)) {
where = attempt;
return;
}
attempt = baseAttempt + '.bat';
if (fs.existsSync(attempt)) {
where = attempt;
return;
}
} // if 'win'
});
}
// Command not found anywhere?
if (!fs.existsSync(cmd) && !where)
return null;
where = where || path.resolve(cmd);
return common.ShellString(where);
}
module.exports = _which;

23
bin/node_modules/which/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,23 @@
Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
All rights reserved.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

5
bin/node_modules/which/README.md generated vendored Normal file
View File

@@ -0,0 +1,5 @@
The "which" util from npm's guts.
Finds the first instance of a specified executable in the PATH
environment variable. Does not cache the results, so `hash -r` is not
needed when the PATH changes.

14
bin/node_modules/which/bin/which generated vendored Executable file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/env node
var which = require("../")
if (process.argv.length < 3) {
console.error("Usage: which <thing>")
process.exit(1)
}
which(process.argv[2], function (er, thing) {
if (er) {
console.error(er.message)
process.exit(er.errno || 127)
}
console.log(thing)
})

31
bin/node_modules/which/package.json generated vendored Normal file
View File

@@ -0,0 +1,31 @@
{
"author": {
"name": "Isaac Z. Schlueter",
"email": "i@izs.me",
"url": "http://blog.izs.me"
},
"name": "which",
"description": "Like which(1) unix command. Find the first instance of an executable in the PATH.",
"version": "1.0.5",
"repository": {
"type": "git",
"url": "git://github.com/isaacs/node-which.git"
},
"main": "which.js",
"bin": {
"which": "./bin/which"
},
"engines": {
"node": "*"
},
"dependencies": {},
"devDependencies": {},
"readme": "The \"which\" util from npm's guts.\n\nFinds the first instance of a specified executable in the PATH\nenvironment variable. Does not cache the results, so `hash -r` is not\nneeded when the PATH changes.\n",
"readmeFilename": "README.md",
"bugs": {
"url": "https://github.com/isaacs/node-which/issues"
},
"homepage": "https://github.com/isaacs/node-which",
"_id": "which@1.0.5",
"_from": "which@"
}

104
bin/node_modules/which/which.js generated vendored Normal file
View File

@@ -0,0 +1,104 @@
module.exports = which
which.sync = whichSync
var path = require("path")
, fs
, COLON = process.platform === "win32" ? ";" : ":"
, isExe
try {
fs = require("graceful-fs")
} catch (ex) {
fs = require("fs")
}
if (process.platform == "win32") {
// On windows, there is no good way to check that a file is executable
isExe = function isExe () { return true }
} else {
isExe = function isExe (mod, uid, gid) {
//console.error(mod, uid, gid);
//console.error("isExe?", (mod & 0111).toString(8))
var ret = (mod & 0001)
|| (mod & 0010) && process.getgid && gid === process.getgid()
|| (mod & 0100) && process.getuid && uid === process.getuid()
//console.error("isExe?", ret)
return ret
}
}
function which (cmd, cb) {
if (isAbsolute(cmd)) return cb(null, cmd)
var pathEnv = (process.env.PATH || "").split(COLON)
, pathExt = [""]
if (process.platform === "win32") {
pathEnv.push(process.cwd())
pathExt = (process.env.PATHEXT || ".EXE").split(COLON)
if (cmd.indexOf(".") !== -1) pathExt.unshift("")
}
//console.error("pathEnv", pathEnv)
;(function F (i, l) {
if (i === l) return cb(new Error("not found: "+cmd))
var p = path.resolve(pathEnv[i], cmd)
;(function E (ii, ll) {
if (ii === ll) return F(i + 1, l)
var ext = pathExt[ii]
//console.error(p + ext)
fs.stat(p + ext, function (er, stat) {
if (!er &&
stat &&
stat.isFile() &&
isExe(stat.mode, stat.uid, stat.gid)) {
//console.error("yes, exe!", p + ext)
return cb(null, p + ext)
}
return E(ii + 1, ll)
})
})(0, pathExt.length)
})(0, pathEnv.length)
}
function whichSync (cmd) {
if (isAbsolute(cmd)) return cmd
var pathEnv = (process.env.PATH || "").split(COLON)
, pathExt = [""]
if (process.platform === "win32") {
pathEnv.push(process.cwd())
pathExt = (process.env.PATHEXT || ".EXE").split(COLON)
if (cmd.indexOf(".") !== -1) pathExt.unshift("")
}
for (var i = 0, l = pathEnv.length; i < l; i ++) {
var p = path.join(pathEnv[i], cmd)
for (var j = 0, ll = pathExt.length; j < ll; j ++) {
var cur = p + pathExt[j]
var stat
try { stat = fs.statSync(cur) } catch (ex) {}
if (stat &&
stat.isFile() &&
isExe(stat.mode, stat.uid, stat.gid)) return cur
}
}
throw new Error("not found: "+cmd)
}
var isAbsolute = process.platform === "win32" ? absWin : absUnix
function absWin (p) {
if (absUnix(p)) return true
// pull off the device/UNC bit from a windows path.
// from node's lib/path.js
var splitDeviceRe =
/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?([\\\/])?/
, result = splitDeviceRe.exec(p)
, device = result[1] || ''
, isUnc = device && device.charAt(1) !== ':'
, isAbsolute = !!result[2] || isUnc // UNC paths are always absolute
return isAbsolute
}
function absUnix (p) {
return p.charAt(0) === "/" || p === ""
}

View File

@@ -1,22 +0,0 @@
{
"name": "cordova-android-cli",
"description": "CLI tooling for the cordova-android project",
"version": "0.0.1",
"licenses": [{
"type": "APL 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0"
}],
"main" : "./create",
"bin": {
"create": "./create",
"bench": "./bench",
"autotest": "./autotest",
"BOOM": "./BOOM",
"test": "./test"
},
"homepage": "http://incubator.apache.org/cordova",
"repository": {
"type": "git",
"url": "http://git-wip-us.apache.org/repos/asf/incubator-cordova-android.git"
}
}

View File

@@ -1,44 +0,0 @@
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import java.io.IOException;
public class ApplicationInfo {
private static void parseAndroidManifest(String path) {
// System.out.println(path);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document dom;
try {
DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse(path);
// getting package information
Element manifest = dom.getDocumentElement();
String pakkage = manifest.getAttribute("package");
// getting activity name
String activity = ((Element)dom.getElementsByTagName("activity").item(0)).getAttribute("android:name");
System.out.println(String.format("%s/%s.%s", pakkage, pakkage, activity));
} catch(ParserConfigurationException pce) {
pce.printStackTrace();
} catch(SAXException se) {
se.printStackTrace();
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
public static void main(String[] args) {
String path;
if(args.length > 0) {
path = args[0];
} else {
path = System.getProperty("user.dir") + "/../AndroidManifest.xml";
}
parseAndroidManifest(path);
}
}

View File

@@ -1 +0,0 @@
Main-Class: ApplicationInfo

View File

@@ -1,7 +0,0 @@
#!/bin/bash
set -e
CORDOVA_PATH=$( cd "$( dirname "$0" )" && pwd )
bash $CORDOVA_PATH/cordova BOOM

Binary file not shown.

41
bin/templates/cordova/build Executable file
View File

@@ -0,0 +1,41 @@
#!/usr/bin/env node
/*
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.
*/
var build = require('./lib/build'),
reqs = require('./lib/check_reqs'),
args = process.argv;
// Support basic help commands
if(args[2] == '--help' ||
args[2] == '/?' ||
args[2] == '-h' ||
args[2] == 'help' ||
args[2] == '-help' ||
args[2] == '/help') {
build.help();
} else {
reqs.run().done(function() {
return build.run(args.slice(2));
}, function(err) {
console.error(err);
process.exit(2);
});
}

View File

@@ -0,0 +1,26 @@
:: 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
SET script_path="%~dp0build"
IF EXIST %script_path% (
node %script_path% %*
) ELSE (
ECHO.
ECHO ERROR: Could not find 'build' script in 'cordova' folder, aborting...>&2
EXIT /B 1
)

45
bin/templates/cordova/clean Normal file → Executable file
View File

@@ -1,7 +1,44 @@
#!/bin/bash
#!/usr/bin/env node
set -e
/*
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
CORDOVA_PATH=$( cd "$( dirname "$0" )" && pwd )
http://www.apache.org/licenses/LICENSE-2.0
bash $CORDOVA_PATH/cordova clean
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.
*/
var build = require('./lib/build'),
reqs = require('./lib/check_reqs'),
args = process.argv;
var path = require('path');
// Support basic help commands
if(args[2] == '--help' ||
args[2] == '/?' ||
args[2] == '-h' ||
args[2] == 'help' ||
args[2] == '-help' ||
args[2] == '/help') {
console.log('Usage: ' + path.relative(process.cwd(), process.argv[1]));
console.log('Cleans the project directory.');
process.exit(0);
} else {
reqs.run().done(function() {
return build.runClean(args.slice(2));
}, function(err) {
console.error(err);
process.exit(2);
});
}

View File

@@ -0,0 +1,26 @@
:: 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
SET script_path="%~dp0clean"
IF EXIST %script_path% (
node %script_path% %*
) ELSE (
ECHO.
ECHO ERROR: Could not find 'clean' script in 'cordova' folder, aborting...>&2
EXIT /B 1
)

View File

@@ -1,91 +0,0 @@
#!/bin/bash
set -e
PROJECT_PATH=$( cd "$( dirname "$0" )/.." && pwd )
function check_devices {
local devices=`adb devices | awk '/List of devices attached/ { while(getline > 0) { print }}'`
if [ -z "$devices" ] ; then
echo "1"
else
echo "0"
fi
}
function emulate {
declare -a avd_list=($(android list avd | grep "Name:" | cut -f 2 -d ":" | xargs))
# we need to start adb-server
adb start-server 1>/dev/null
# Do not launch an emulator if there is already one running or if a device is attached
if [ $(check_devices) == 0 ] ; then
echo "Device attached or emulator already running"
return
fi
local avd_id="1000" #FIXME: hopefully user does not have 1000 AVDs
# User has no AVDs
if [ ${#avd_list[@]} == 0 ]
then
echo "You don't have any Android Virtual Devices. Please create at least one AVD."
echo "android"
fi
# User has only one AVD
if [ ${#avd_list[@]} == 1 ]
then
emulator -cpu-delay 0 -no-boot-anim -cache /tmp/cache -avd ${avd_list[0]} 1> /dev/null 2>&1 &
# User has more than 1 AVD
elif [ ${#avd_list[@]} -gt 1 ]
then
while [ -z ${avd_list[$avd_id]} ]
do
echo "Choose from one of the following Android Virtual Devices [0 to $((${#avd_list[@]}-1))]:"
for(( i = 0 ; i < ${#avd_list[@]} ; i++ ))
do
echo "$i) ${avd_list[$i]}"
done
echo -n "> "
read avd_id
done
emulator -cpu-delay 0 -no-boot-anim -cache /tmp/cache -avd ${avd_list[$avd_id]} 1> /dev/null 2>&1 &
fi
}
function clean {
ant clean
}
# has to be used independently and not in conjuction with other commands
function log {
adb logcat
}
function debug_install {
ant debug install
}
function debug {
ant debug
}
function launch {
local launch_str=$(java -jar $PROJECT_PATH/cordova/appinfo.jar $PROJECT_PATH/AndroidManifest.xml)
adb shell am start -n $launch_str
}
function BOOM {
clean
if [ $(check_devices) == 0 ] ; then
debug_install && launch
return
else
debug
echo "##################################################################"
echo "# Plug in your device or launch an emulator with cordova/emulate #"
echo "##################################################################"
fi
}
# TODO parse arguments
(cd $PROJECT_PATH && $1)

View File

@@ -1,7 +0,0 @@
#!/bin/bash
set -e
CORDOVA_PATH=$( cd "$( dirname "$0" )" && pwd )
bash $CORDOVA_PATH/cordova debug

View File

@@ -0,0 +1,26 @@
<?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"
id = "io.cordova.helloCordova"
version = "2.0.0">
<!-- Preferences for Android -->
<preference name="loglevel" value="DEBUG" />
</widget>

View File

@@ -1,7 +0,0 @@
#!/bin/bash
set -e
CORDOVA_PATH=$( cd "$( dirname "$0" )" && pwd )
bash $CORDOVA_PATH/cordova emulate

41
bin/templates/cordova/lib/appinfo.js vendored Normal file
View File

@@ -0,0 +1,41 @@
#!/usr/bin/env node
/*
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.
*/
var path = require('path');
var fs = require('fs');
var cachedAppInfo = null;
function readAppInfoFromManifest() {
var manifestPath = path.join(__dirname, '..', '..', 'AndroidManifest.xml');
var manifestData = fs.readFileSync(manifestPath, {encoding:'utf8'});
var packageName = /\bpackage\s*=\s*"(.+?)"/.exec(manifestData);
if (!packageName) throw new Error('Could not find package name within ' + manifestPath);
var activityTag = /<activity\b[\s\S]*<\/activity>/.exec(manifestData);
if (!activityTag) throw new Error('Could not find <activity> within ' + manifestPath);
var activityName = /\bandroid:name\s*=\s*"(.+?)"/.exec(activityTag);
if (!activityName) throw new Error('Could not find android:name within ' + manifestPath);
return packageName[1] + '/.' + activityName[1];
}
exports.getActivityName = function() {
return (cachedAppInfo = cachedAppInfo || readAppInfoFromManifest());
};

687
bin/templates/cordova/lib/build.js vendored Normal file
View File

@@ -0,0 +1,687 @@
#!/usr/bin/env node
/*
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.
*/
/* jshint sub:true */
var shell = require('shelljs'),
spawn = require('./spawn'),
Q = require('q'),
path = require('path'),
fs = require('fs'),
os = require('os'),
ROOT = path.join(__dirname, '..', '..');
var check_reqs = require('./check_reqs');
var exec = require('./exec');
var SIGNING_PROPERTIES = '-signing.properties';
var MARKER = 'YOUR CHANGES WILL BE ERASED!';
var TEMPLATE =
'# This file is automatically generated.\n' +
'# Do not modify this file -- ' + MARKER + '\n';
function findApks(directory) {
var ret = [];
if (fs.existsSync(directory)) {
fs.readdirSync(directory).forEach(function(p) {
if (path.extname(p) == '.apk') {
ret.push(path.join(directory, p));
}
});
}
return ret;
}
function sortFilesByDate(files) {
return files.map(function(p) {
return { p: p, t: fs.statSync(p).mtime };
}).sort(function(a, b) {
var timeDiff = b.t - a.t;
return timeDiff === 0 ? a.p.length - b.p.length : timeDiff;
}).map(function(p) { return p.p; });
}
function isAutoGenerated(file) {
if(fs.existsSync(file)) {
var fileContents = fs.readFileSync(file, 'utf8');
return fileContents.indexOf(MARKER) > 0;
}
return false;
}
function findOutputApksHelper(dir, build_type, arch) {
var ret = findApks(dir).filter(function(candidate) {
// Need to choose between release and debug .apk.
if (build_type === 'debug') {
return /-debug/.exec(candidate) && !/-unaligned|-unsigned/.exec(candidate);
}
if (build_type === 'release') {
return /-release/.exec(candidate) && !/-unaligned/.exec(candidate);
}
return true;
});
ret = sortFilesByDate(ret);
if (ret.length === 0) {
return ret;
}
// Assume arch-specific build if newest api has -x86 or -arm.
var archSpecific = !!/-x86|-arm/.exec(ret[0]);
// And show only arch-specific ones (or non-arch-specific)
ret = ret.filter(function(p) {
/*jshint -W018 */
return !!/-x86|-arm/.exec(p) == archSpecific;
/*jshint +W018 */
});
if (arch && ret.length > 1) {
ret = ret.filter(function(p) {
return p.indexOf('-' + arch) != -1;
});
}
return ret;
}
function hasCustomRules() {
return fs.existsSync(path.join(ROOT, 'custom_rules.xml'));
}
function extractProjectNameFromManifest(projectPath) {
var manifestPath = path.join(projectPath, 'AndroidManifest.xml');
var manifestData = fs.readFileSync(manifestPath, 'utf8');
var m = /<activity[\s\S]*?android:name\s*=\s*"(.*?)"/i.exec(manifestData);
if (!m) {
throw new Error('Could not find activity name in ' + manifestPath);
}
return m[1];
}
function findAllUniq(data, r) {
var s = {};
var m;
while ((m = r.exec(data))) {
s[m[1]] = 1;
}
return Object.keys(s);
}
function readProjectProperties() {
var data = fs.readFileSync(path.join(ROOT, 'project.properties'), 'utf8');
return {
libs: findAllUniq(data, /^\s*android\.library\.reference\.\d+=(.*)(?:\s|$)/mg),
gradleIncludes: findAllUniq(data, /^\s*cordova\.gradle\.include\.\d+=(.*)(?:\s|$)/mg),
systemLibs: findAllUniq(data, /^\s*cordova\.system\.library\.\d+=(.*)(?:\s|$)/mg)
};
}
var builders = {
ant: {
getArgs: function(cmd, opts) {
var args = [cmd, '-f', path.join(ROOT, 'build.xml')];
// custom_rules.xml is required for incremental builds.
if (hasCustomRules()) {
args.push('-Dout.dir=ant-build', '-Dgen.absolute.dir=ant-gen');
}
if(opts.packageInfo) {
args.push('-propertyfile=' + path.join(ROOT, opts.buildType + SIGNING_PROPERTIES));
}
return args;
},
prepEnv: function(opts) {
return check_reqs.check_ant()
.then(function() {
// Copy in build.xml on each build so that:
// A) we don't require the Android SDK at project creation time, and
// B) we always use the SDK's latest version of it.
var sdkDir = process.env['ANDROID_HOME'];
var buildTemplate = fs.readFileSync(path.join(sdkDir, 'tools', 'lib', 'build.template'), 'utf8');
function writeBuildXml(projectPath) {
var newData = buildTemplate.replace('PROJECT_NAME', extractProjectNameFromManifest(ROOT));
fs.writeFileSync(path.join(projectPath, 'build.xml'), newData);
if (!fs.existsSync(path.join(projectPath, 'local.properties'))) {
fs.writeFileSync(path.join(projectPath, 'local.properties'), TEMPLATE);
}
}
writeBuildXml(ROOT);
var propertiesObj = readProjectProperties();
var subProjects = propertiesObj.libs;
for (var i = 0; i < subProjects.length; ++i) {
writeBuildXml(path.join(ROOT, subProjects[i]));
}
if (propertiesObj.systemLibs.length > 0) {
throw new Error('Project contains at least one plugin that requires a system library. This is not supported with ANT. Please build using gradle.');
}
var propertiesFile = opts.buildType + SIGNING_PROPERTIES;
var propertiesFilePath = path.join(ROOT, propertiesFile);
if (opts.packageInfo) {
fs.writeFileSync(propertiesFilePath, TEMPLATE + opts.packageInfo.toProperties());
} else if(isAutoGenerated(propertiesFilePath)) {
shell.rm('-f', propertiesFilePath);
}
});
},
/*
* Builds the project with ant.
* Returns a promise.
*/
build: function(opts) {
// Without our custom_rules.xml, we need to clean before building.
var ret = Q();
if (!hasCustomRules()) {
// clean will call check_ant() for us.
ret = this.clean(opts);
}
var args = this.getArgs(opts.buildType == 'debug' ? 'debug' : 'release', opts);
return check_reqs.check_ant()
.then(function() {
console.log('Executing: ant ' + args.join(' '));
return spawn('ant', args);
});
},
clean: function(opts) {
var args = this.getArgs('clean', opts);
return check_reqs.check_ant()
.then(function() {
return spawn('ant', args);
});
},
findOutputApks: function(build_type) {
var binDir = path.join(ROOT, hasCustomRules() ? 'ant-build' : 'bin');
return findOutputApksHelper(binDir, build_type, null);
}
},
gradle: {
getArgs: function(cmd, opts) {
if (cmd == 'release') {
cmd = 'cdvBuildRelease';
} else if (cmd == 'debug') {
cmd = 'cdvBuildDebug';
}
var args = [cmd, '-b', path.join(ROOT, 'build.gradle')];
if (opts.arch) {
args.push('-PcdvBuildArch=' + opts.arch);
}
// 10 seconds -> 6 seconds
args.push('-Dorg.gradle.daemon=true');
args.push.apply(args, opts.extraArgs);
// Shaves another 100ms, but produces a "try at own risk" warning. Not worth it (yet):
// args.push('-Dorg.gradle.parallel=true');
return args;
},
// Makes the project buildable, minus the gradle wrapper.
prepBuildFiles: function() {
var projectPath = ROOT;
// Update the version of build.gradle in each dependent library.
var pluginBuildGradle = path.join(projectPath, 'cordova', 'lib', 'plugin-build.gradle');
var propertiesObj = readProjectProperties();
var subProjects = propertiesObj.libs;
for (var i = 0; i < subProjects.length; ++i) {
if (subProjects[i] !== 'CordovaLib') {
shell.cp('-f', pluginBuildGradle, path.join(ROOT, subProjects[i], 'build.gradle'));
}
}
var subProjectsAsGradlePaths = subProjects.map(function(p) { return ':' + p.replace(/[/\\]/g, ':'); });
// Write the settings.gradle file.
fs.writeFileSync(path.join(projectPath, 'settings.gradle'),
'// GENERATED FILE - DO NOT EDIT\n' +
'include ":"\n' +
'include "' + subProjectsAsGradlePaths.join('"\ninclude "') + '"\n');
// Update dependencies within build.gradle.
var buildGradle = fs.readFileSync(path.join(projectPath, 'build.gradle'), 'utf8');
var depsList = '';
subProjectsAsGradlePaths.forEach(function(p) {
depsList += ' debugCompile project(path: "' + p + '", configuration: "debug")\n';
depsList += ' releaseCompile project(path: "' + p + '", configuration: "release")\n';
});
// For why we do this mapping: https://issues.apache.org/jira/browse/CB-8390
var SYSTEM_LIBRARY_MAPPINGS = [
[/^\/?extras\/android\/support\/(.*)$/, 'com.android.support:support-$1:+'],
[/^\/?google\/google_play_services\/libproject\/google-play-services_lib\/?$/, 'com.google.android.gms:play-services:+']
];
propertiesObj.systemLibs.forEach(function(p) {
var mavenRef;
// It's already in gradle form if it has two ':'s
if (/:.*:/.exec(p)) {
mavenRef = p;
} else {
for (var i = 0; i < SYSTEM_LIBRARY_MAPPINGS.length; ++i) {
var pair = SYSTEM_LIBRARY_MAPPINGS[i];
if (pair[0].exec(p)) {
mavenRef = p.replace(pair[0], pair[1]);
break;
}
}
if (!mavenRef) {
throw new Error('Unsupported system library (does not work with gradle): ' + p);
}
}
depsList += ' compile "' + mavenRef + '"\n';
});
buildGradle = buildGradle.replace(/(SUB-PROJECT DEPENDENCIES START)[\s\S]*(\/\/ SUB-PROJECT DEPENDENCIES END)/, '$1\n' + depsList + ' $2');
var includeList = '';
propertiesObj.gradleIncludes.forEach(function(includePath) {
includeList += 'apply from: "' + includePath + '"\n';
});
buildGradle = buildGradle.replace(/(PLUGIN GRADLE EXTENSIONS START)[\s\S]*(\/\/ PLUGIN GRADLE EXTENSIONS END)/, '$1\n' + includeList + '$2');
fs.writeFileSync(path.join(projectPath, 'build.gradle'), buildGradle);
},
prepEnv: function(opts) {
var self = this;
return check_reqs.check_gradle()
.then(function() {
return self.prepBuildFiles();
}).then(function() {
// Copy the gradle wrapper on each build so that:
// A) we don't require the Android SDK at project creation time, and
// B) we always use the SDK's latest version of it.
var projectPath = ROOT;
// check_reqs ensures that this is set.
var sdkDir = process.env['ANDROID_HOME'];
var wrapperDir = path.join(sdkDir, 'tools', 'templates', 'gradle', 'wrapper');
if (process.platform == 'win32') {
shell.cp('-f', path.join(wrapperDir, 'gradlew.bat'), projectPath);
} else {
shell.cp('-f', path.join(wrapperDir, 'gradlew'), projectPath);
}
shell.rm('-rf', path.join(projectPath, 'gradle', 'wrapper'));
shell.mkdir('-p', path.join(projectPath, 'gradle'));
shell.cp('-r', path.join(wrapperDir, 'gradle', 'wrapper'), path.join(projectPath, 'gradle'));
// If the gradle distribution URL is set, make sure it points to version we want.
// If it's not set, do nothing, assuming that we're using a future version of gradle that we don't want to mess with.
// For some reason, using ^ and $ don't work. This does the job, though.
var distributionUrlRegex = /distributionUrl.*zip/;
var distributionUrl = 'distributionUrl=http\\://services.gradle.org/distributions/gradle-2.2.1-all.zip';
var gradleWrapperPropertiesPath = path.join(projectPath, 'gradle', 'wrapper', 'gradle-wrapper.properties');
shell.sed('-i', distributionUrlRegex, distributionUrl, gradleWrapperPropertiesPath);
var propertiesFile = opts.buildType + SIGNING_PROPERTIES;
var propertiesFilePath = path.join(ROOT, propertiesFile);
if (opts.packageInfo) {
fs.writeFileSync(propertiesFilePath, TEMPLATE + opts.packageInfo.toProperties());
} else if (isAutoGenerated(propertiesFilePath)) {
shell.rm('-f', propertiesFilePath);
}
});
},
/*
* Builds the project with gradle.
* Returns a promise.
*/
build: function(opts) {
var wrapper = path.join(ROOT, 'gradlew');
var args = this.getArgs(opts.buildType == 'debug' ? 'debug' : 'release', opts);
return Q().then(function() {
console.log('Running: ' + wrapper + ' ' + args.join(' '));
return spawn(wrapper, args);
});
},
clean: function(opts) {
var builder = this;
var wrapper = path.join(ROOT, 'gradlew');
var args = builder.getArgs('clean', opts);
return Q().then(function() {
console.log('Running: ' + wrapper + ' ' + args.join(' '));
return spawn(wrapper, args);
});
},
findOutputApks: function(build_type, arch) {
var binDir = path.join(ROOT, 'build', 'outputs', 'apk');
return findOutputApksHelper(binDir, build_type, arch);
}
},
none: {
prepEnv: function() {
return Q();
},
build: function() {
console.log('Skipping build...');
return Q(null);
},
clean: function() {
return Q();
},
findOutputApks: function(build_type, arch) {
return sortFilesByDate(builders.ant.findOutputApks(build_type, arch).concat(builders.gradle.findOutputApks(build_type, arch)));
}
}
};
module.exports.isBuildFlag = function(flag) {
return /^--(debug|release|ant|gradle|nobuild|versionCode=|minSdkVersion=|gradleArg=|keystore=|alias=|password=|storePassword=|keystoreType=|buildConfig=)/.exec(flag);
};
function parseOpts(options, resolvedTarget) {
// Backwards-compatibility: Allow a single string argument
if (typeof options == 'string') options = [options];
var ret = {
buildType: 'debug',
buildMethod: process.env['ANDROID_BUILD'] || 'gradle',
arch: null,
extraArgs: []
};
var multiValueArgs = {
'versionCode': true,
'minSdkVersion': true,
'gradleArg': true,
'keystore' : true,
'alias' : true,
'password' : true,
'storePassword' : true,
'keystoreType' : true,
'buildConfig' : true
};
var packageArgs = {};
var buildConfig;
// Iterate through command line options
for (var i=0; options && (i < options.length); ++i) {
if (/^--/.exec(options[i])) {
var keyValue = options[i].substring(2).split('=');
var flagName = keyValue.shift();
var flagValue = keyValue.join('=');
if (multiValueArgs[flagName] && !flagValue) {
flagValue = options[i + 1];
++i;
}
switch(flagName) {
case 'debug':
case 'release':
ret.buildType = flagName;
break;
case 'ant':
case 'gradle':
ret.buildMethod = flagName;
break;
case 'device':
case 'emulator':
// Don't need to do anything special to when building for device vs emulator.
// iOS uses this flag to switch on architecture.
break;
case 'prepenv' :
ret.prepEnv = true;
break;
case 'nobuild' :
ret.buildMethod = 'none';
break;
case 'versionCode':
ret.extraArgs.push('-PcdvVersionCode=' + flagValue);
break;
case 'minSdkVersion':
ret.extraArgs.push('-PcdvMinSdkVersion=' + flagValue);
break;
case 'gradleArg':
ret.extraArgs.push(flagValue);
break;
case 'keystore':
packageArgs.keystore = path.relative(ROOT, path.resolve(flagValue));
break;
case 'alias':
case 'storePassword':
case 'password':
case 'keystoreType':
packageArgs[flagName] = flagValue;
break;
case 'buildConfig':
buildConfig = flagValue;
break;
default :
console.warn('Build option --\'' + flagName + '\' not recognized (ignoring).');
}
} else {
console.warn('Build option \'' + options[i] + '\' not recognized (ignoring).');
}
}
// If some values are not specified as command line arguments - use build config to supplement them.
// Command line arguemnts have precedence over build config.
if (buildConfig) {
console.log(path.resolve(buildConfig));
if (!fs.existsSync(buildConfig)) {
throw new Error('Specified build config file does not exist: ' + buildConfig);
}
console.log('Reading build config file: '+ buildConfig);
var config = JSON.parse(fs.readFileSync(buildConfig, 'utf8'));
if (config.android && config.android[ret.buildType]) {
var androidInfo = config.android[ret.buildType];
if(androidInfo.keystore) {
packageArgs.keystore = packageArgs.keystore || path.relative(ROOT, path.join(path.dirname(buildConfig), androidInfo.keystore));
}
['alias', 'storePassword', 'password','keystoreType'].forEach(function (key){
packageArgs[key] = packageArgs[key] || androidInfo[key];
});
}
}
if (packageArgs.keystore && packageArgs.alias) {
ret.packageInfo = new PackageInfo(packageArgs.keystore, packageArgs.alias, packageArgs.storePassword,
packageArgs.password, packageArgs.keystoreType);
}
if(!ret.packageInfo) {
if(Object.keys(packageArgs).length > 0) {
console.warn('\'keystore\' and \'alias\' need to be specified to generate a signed archive.');
}
}
ret.arch = resolvedTarget && resolvedTarget.arch;
return ret;
}
/*
* Builds the project with the specifed options
* Returns a promise.
*/
module.exports.runClean = function(options) {
var opts = parseOpts(options);
var builder = builders[opts.buildMethod];
return builder.prepEnv(opts)
.then(function() {
return builder.clean(opts);
}).then(function() {
shell.rm('-rf', path.join(ROOT, 'out'));
['debug', 'release'].forEach(function(config) {
var propertiesFilePath = path.join(ROOT, config + SIGNING_PROPERTIES);
if(isAutoGenerated(propertiesFilePath)){
shell.rm('-f', propertiesFilePath);
}
});
});
};
/*
* Builds the project with the specifed options
* Returns a promise.
*/
module.exports.run = function(options, optResolvedTarget) {
var opts = parseOpts(options, optResolvedTarget);
var builder = builders[opts.buildMethod];
return builder.prepEnv(opts)
.then(function() {
if (opts.prepEnv) {
console.log('Build file successfully prepared.');
return;
}
return builder.build(opts)
.then(function() {
var apkPaths = builder.findOutputApks(opts.buildType, opts.arch);
console.log('Built the following apk(s):');
console.log(' ' + apkPaths.join('\n '));
return {
apkPaths: apkPaths,
buildType: opts.buildType,
buildMethod: opts.buildMethod
};
});
});
};
// Called by plugman after installing plugins, and by create script after creating project.
module.exports.prepBuildFiles = function() {
var builder = builders['gradle'];
return builder.prepBuildFiles();
};
/*
* Detects the architecture of a device/emulator
* Returns "arm" or "x86".
*/
module.exports.detectArchitecture = function(target) {
function helper() {
return exec('adb -s ' + target + ' shell cat /proc/cpuinfo', os.tmpdir())
.then(function(output) {
if (/intel/i.exec(output)) {
return 'x86';
}
return 'arm';
});
}
// It sometimes happens (at least on OS X), that this command will hang forever.
// To fix it, either unplug & replug device, or restart adb server.
return helper().timeout(1000, 'Device communication timed out. Try unplugging & replugging the device.')
.then(null, function(err) {
if (/timed out/.exec('' + err)) {
// adb kill-server doesn't seem to do the trick.
// Could probably find a x-platform version of killall, but I'm not actually
// sure that this scenario even happens on non-OSX machines.
return exec('killall adb')
.then(function() {
console.log('adb seems hung. retrying.');
return helper()
.then(null, function() {
// The double kill is sadly often necessary, at least on mac.
console.log('Now device not found... restarting adb again.');
return exec('killall adb')
.then(function() {
return helper()
.then(null, function() {
return Q.reject('USB is flakey. Try unplugging & replugging the device.');
});
});
});
}, function() {
// For non-killall OS's.
return Q.reject(err);
});
}
throw err;
});
};
module.exports.findBestApkForArchitecture = function(buildResults, arch) {
var paths = buildResults.apkPaths.filter(function(p) {
if (buildResults.buildType == 'debug') {
return /-debug/.exec(p);
}
return !/-debug/.exec(p);
});
var archPattern = new RegExp('-' + arch);
var hasArchPattern = /-x86|-arm/;
for (var i = 0; i < paths.length; ++i) {
if (hasArchPattern.exec(paths[i])) {
if (archPattern.exec(paths[i])) {
return paths[i];
}
} else {
return paths[i];
}
}
throw new Error('Could not find apk architecture: ' + arch + ' build-type: ' + buildResults.buildType);
};
function PackageInfo(keystore, alias, storePassword, password, keystoreType) {
this.keystore = {
'name': 'key.store',
'value': keystore
};
this.alias = {
'name': 'key.alias',
'value': alias
};
if (storePassword) {
this.storePassword = {
'name': 'key.store.password',
'value': storePassword
};
}
if (password) {
this.password = {
'name': 'key.alias.password',
'value': password
};
}
if (keystoreType) {
this.keystoreType = {
'name': 'key.store.type',
'value': keystoreType
};
}
}
PackageInfo.prototype = {
toProperties: function() {
var self = this;
var result = '';
Object.keys(self).forEach(function(key) {
result += self[key].name;
result += '=';
result += self[key].value.replace(/\\/g, '\\\\');
result += '\n';
});
return result;
}
};
module.exports.help = function() {
console.log('Usage: ' + path.relative(process.cwd(), path.join(ROOT, 'cordova', 'build')) + ' [flags] [Signed APK flags]');
console.log('Flags:');
console.log(' \'--debug\': will build project in debug mode (default)');
console.log(' \'--release\': will build project for release');
console.log(' \'--ant\': will build project with ant');
console.log(' \'--gradle\': will build project with gradle (default)');
console.log(' \'--nobuild\': will skip build process (useful when using run command)');
console.log(' \'--prepenv\': don\'t build, but copy in build scripts where necessary');
console.log(' \'--versionCode=#\': Override versionCode for this build. Useful for uploading multiple APKs. Requires --gradle.');
console.log(' \'--minSdkVersion=#\': Override minSdkVersion for this build. Useful for uploading multiple APKs. Requires --gradle.');
console.log(' \'--gradleArg=<gradle command line arg>\': Extra args to pass to the gradle command. Use one flag per arg. Ex. --gradleArg=-PcdvBuildMultipleApks=true');
console.log('');
console.log('Signed APK flags (overwrites debug/release-signing.proprties) :');
console.log(' \'--keystore=<path to keystore>\': Key store used to build a signed archive. (Required)');
console.log(' \'--alias=\': Alias for the key store. (Required)');
console.log(' \'--storePassword=\': Password for the key store. (Optional - prompted)');
console.log(' \'--password=\': Password for the key. (Optional - prompted)');
console.log(' \'--keystoreType\': Type of the keystore. (Optional)');
process.exit(0);
};

121
bin/templates/cordova/lib/device.js vendored Normal file
View File

@@ -0,0 +1,121 @@
#!/usr/bin/env node
/*
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.
*/
var exec = require('./exec'),
Q = require('q'),
os = require('os'),
build = require('./build'),
appinfo = require('./appinfo');
/**
* Returns a promise for the list of the device ID's found
* @param lookHarder When true, try restarting adb if no devices are found.
*/
module.exports.list = function(lookHarder) {
function helper() {
return exec('adb devices', os.tmpdir())
.then(function(output) {
var response = output.split('\n');
var device_list = [];
for (var i = 1; i < response.length; i++) {
if (response[i].match(/\w+\tdevice/) && !response[i].match(/emulator/)) {
device_list.push(response[i].replace(/\tdevice/, '').replace('\r', ''));
}
}
return device_list;
});
}
return helper()
.then(function(list) {
if (list.length === 0 && lookHarder) {
// adb kill-server doesn't seem to do the trick.
// Could probably find a x-platform version of killall, but I'm not actually
// sure that this scenario even happens on non-OSX machines.
return exec('killall adb')
.then(function() {
console.log('Restarting adb to see if more devices are detected.');
return helper();
}, function() {
// For non-killall OS's.
return list;
});
}
return list;
});
};
module.exports.resolveTarget = function(target) {
return this.list(true)
.then(function(device_list) {
if (!device_list || !device_list.length) {
return Q.reject('ERROR: Failed to deploy to device, no devices found.');
}
// default device
target = target || device_list[0];
if (device_list.indexOf(target) < 0) {
return Q.reject('ERROR: Unable to find target \'' + target + '\'.');
}
return build.detectArchitecture(target)
.then(function(arch) {
return { target: target, arch: arch, isEmulator: false };
});
});
};
/*
* Installs a previously built application on the device
* and launches it.
* Returns a promise.
*/
module.exports.install = function(target, buildResults) {
return Q().then(function() {
if (target && typeof target == 'object') {
return target;
}
return module.exports.resolveTarget(target);
}).then(function(resolvedTarget) {
var apk_path = build.findBestApkForArchitecture(buildResults, resolvedTarget.arch);
var launchName = appinfo.getActivityName();
console.log('Using apk: ' + apk_path);
console.log('Installing app on device...');
var cmd = 'adb -s ' + resolvedTarget.target + ' install -r -d "' + apk_path + '"';
return exec(cmd, os.tmpdir())
.then(function(output) {
if (output.match(/Failure/)) return Q.reject('ERROR: Failed to install apk to device: ' + output);
//unlock screen
var cmd = 'adb -s ' + resolvedTarget.target + ' shell input keyevent 82';
return exec(cmd, os.tmpdir());
}, function(err) { return Q.reject('ERROR: Failed to install apk to device: ' + err); })
.then(function() {
// launch the application
console.log('Launching application...');
var cmd = 'adb -s ' + resolvedTarget.target + ' shell am start -W -a android.intent.action.MAIN -n ' + launchName;
return exec(cmd, os.tmpdir());
}).then(function() {
console.log('LAUNCH SUCCESS');
}, function(err) {
return Q.reject('ERROR: Failed to launch application on device: ' + err);
});
});
};

334
bin/templates/cordova/lib/emulator.js vendored Normal file
View File

@@ -0,0 +1,334 @@
#!/usr/bin/env node
/*
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.
*/
/* jshint sub:true */
var exec = require('./exec'),
Q = require('q'),
os = require('os'),
appinfo = require('./appinfo'),
build = require('./build'),
child_process = require('child_process');
var check_reqs = require('./check_reqs');
/**
* Returns a Promise for a list of emulator images in the form of objects
* {
name : <emulator_name>,
path : <path_to_emulator_image>,
target : <api_target>,
abi : <cpu>,
skin : <skin>
}
*/
module.exports.list_images = function() {
return exec('android list avds')
.then(function(output) {
var response = output.split('\n');
var emulator_list = [];
for (var i = 1; i < response.length; i++) {
// To return more detailed information use img_obj
var img_obj = {};
if (response[i].match(/Name:\s/)) {
img_obj['name'] = response[i].split('Name: ')[1].replace('\r', '');
if (response[i + 1].match(/Path:\s/)) {
i++;
img_obj['path'] = response[i].split('Path: ')[1].replace('\r', '');
}
if (response[i + 1].match(/\(API\slevel\s/)) {
i++;
img_obj['target'] = response[i].replace('\r', '');
}
if (response[i + 1].match(/ABI:\s/)) {
i++;
img_obj['abi'] = response[i].split('ABI: ')[1].replace('\r', '');
}
if (response[i + 1].match(/Skin:\s/)) {
i++;
img_obj['skin'] = response[i].split('Skin: ')[1].replace('\r', '');
}
emulator_list.push(img_obj);
}
/* To just return a list of names use this
if (response[i].match(/Name:\s/)) {
emulator_list.push(response[i].split('Name: ')[1].replace('\r', '');
}*/
}
return emulator_list;
});
};
/**
* Will return the closest avd to the projects target
* or undefined if no avds exist.
* Returns a promise.
*/
module.exports.best_image = function() {
var project_target = check_reqs.get_target().replace('android-', '');
return this.list_images()
.then(function(images) {
var closest = 9999;
var best = images[0];
for (var i in images) {
var target = images[i].target;
if(target) {
var num = target.split('(API level ')[1].replace(')', '');
if (num == project_target) {
return images[i];
} else if (project_target - num < closest && project_target > num) {
closest = project_target - num;
best = images[i];
}
}
}
return best;
});
};
// Returns a promise.
module.exports.list_started = function() {
return exec('adb devices', os.tmpdir())
.then(function(output) {
var response = output.split('\n');
var started_emulator_list = [];
for (var i = 1; i < response.length; i++) {
if (response[i].match(/device/) && response[i].match(/emulator/)) {
started_emulator_list.push(response[i].replace(/\tdevice/, '').replace('\r', ''));
}
}
return started_emulator_list;
});
};
// Returns a promise.
module.exports.list_targets = function() {
return exec('android list targets', os.tmpdir())
.then(function(output) {
var target_out = output.split('\n');
var targets = [];
for (var i = target_out.length; i >= 0; i--) {
if(target_out[i].match(/id:/)) {
targets.push(targets[i].split(' ')[1]);
}
}
return targets;
});
};
/*
* Starts an emulator with the given ID,
* and returns the started ID of that emulator.
* If no ID is given it will used the first image available,
* if no image is available it will error out (maybe create one?).
*
* Returns a promise.
*/
module.exports.start = function(emulator_ID) {
var self = this;
var emulator_id, num_started, started_emulators;
return self.list_started()
.then(function(list) {
started_emulators = list;
num_started = started_emulators.length;
if (!emulator_ID) {
return self.list_images()
.then(function(emulator_list) {
if (emulator_list.length > 0) {
return self.best_image()
.then(function(best) {
emulator_ID = best.name;
console.log('WARNING : no emulator specified, defaulting to ' + emulator_ID);
return emulator_ID;
});
} else {
var androidCmd = check_reqs.getAbsoluteAndroidCmd();
return Q.reject('ERROR : No emulator images (avds) found.\n' +
'1. Download desired System Image by running: ' + androidCmd + ' sdk\n' +
'2. Create an AVD by running: ' + androidCmd + ' avd\n' +
'HINT: For a faster emulator, use an Intel System Image and install the HAXM device driver\n');
}
});
} else {
return Q(emulator_ID);
}
}).then(function() {
var cmd = 'emulator';
var args = ['-avd', emulator_ID];
var proc = child_process.spawn(cmd, args, { stdio: 'inherit', detached: true });
proc.unref(); // Don't wait for it to finish, since the emulator will probably keep running for a long time.
}).then(function() {
// wait for emulator to start
console.log('Waiting for emulator...');
return self.wait_for_emulator(num_started);
}).then(function(new_started) {
if (new_started.length > 1) {
for (var i in new_started) {
if (started_emulators.indexOf(new_started[i]) < 0) {
emulator_id = new_started[i];
}
}
} else {
emulator_id = new_started[0];
}
if (!emulator_id) return Q.reject('ERROR : Failed to start emulator, could not find new emulator');
//wait for emulator to boot up
process.stdout.write('Booting up emulator (this may take a while)...');
return self.wait_for_boot(emulator_id);
}).then(function() {
console.log('BOOT COMPLETE');
//unlock screen
return exec('adb -s ' + emulator_id + ' shell input keyevent 82', os.tmpdir());
}).then(function() {
//return the new emulator id for the started emulators
return emulator_id;
});
};
/*
* Waits for the new emulator to apear on the started-emulator list.
* Returns a promise with a list of newly started emulators' IDs.
*/
module.exports.wait_for_emulator = function(num_running) {
var self = this;
return self.list_started()
.then(function(new_started) {
if (new_started.length > num_running) {
return new_started;
} else {
return Q.delay(1000).then(function() {
return self.wait_for_emulator(num_running);
});
}
});
};
/*
* Waits for the boot animation property of the emulator to switch to 'stopped'
*/
module.exports.wait_for_boot = function(emulator_id) {
var self = this;
return exec('adb -s ' + emulator_id + ' shell getprop init.svc.bootanim', os.tmpdir())
.then(function(output) {
if (output.match(/stopped/)) {
return;
} else {
process.stdout.write('.');
return Q.delay(3000).then(function() {
return self.wait_for_boot(emulator_id);
});
}
});
};
/*
* Create avd
* TODO : Enter the stdin input required to complete the creation of an avd.
* Returns a promise.
*/
module.exports.create_image = function(name, target) {
console.log('Creating avd named ' + name);
if (target) {
return exec('android create avd --name ' + name + ' --target ' + target)
.then(null, function(error) {
console.error('ERROR : Failed to create emulator image : ');
console.error(' Do you have the latest android targets including ' + target + '?');
console.error(error);
});
} else {
console.log('WARNING : Project target not found, creating avd with a different target but the project may fail to install.');
return exec('android create avd --name ' + name + ' --target ' + this.list_targets()[0])
.then(function() {
// TODO: This seems like another error case, even though it always happens.
console.error('ERROR : Unable to create an avd emulator, no targets found.');
console.error('Please insure you have targets available by running the "android" command');
return Q.reject();
}, function(error) {
console.error('ERROR : Failed to create emulator image : ');
console.error(error);
});
}
};
module.exports.resolveTarget = function(target) {
return this.list_started()
.then(function(emulator_list) {
if (emulator_list.length < 1) {
return Q.reject('No started emulators found, please start an emultor before deploying your project.');
}
// default emulator
target = target || emulator_list[0];
if (emulator_list.indexOf(target) < 0) {
return Q.reject('Unable to find target \'' + target + '\'. Failed to deploy to emulator.');
}
return build.detectArchitecture(target)
.then(function(arch) {
return {target:target, arch:arch, isEmulator:true};
});
});
};
/*
* Installs a previously built application on the emulator and launches it.
* If no target is specified, then it picks one.
* If no started emulators are found, error out.
* Returns a promise.
*/
module.exports.install = function(target, buildResults) {
return Q().then(function() {
if (target && typeof target == 'object') {
return target;
}
return module.exports.resolveTarget(target);
}).then(function(resolvedTarget) {
var apk_path = build.findBestApkForArchitecture(buildResults, resolvedTarget.arch);
console.log('Installing app on emulator...');
console.log('Using apk: ' + apk_path);
return exec('adb -s ' + resolvedTarget.target + ' install -r -d "' + apk_path + '"', os.tmpdir())
.then(function(output) {
if (output.match(/Failure/)) {
return Q.reject('Failed to install apk to emulator: ' + output);
}
return Q();
}, function(err) {
return Q.reject('Failed to install apk to emulator: ' + err);
}).then(function() {
//unlock screen
return exec('adb -s ' + resolvedTarget.target + ' shell input keyevent 82', os.tmpdir());
}).then(function() {
// launch the application
console.log('Launching application...');
var launchName = appinfo.getActivityName();
var cmd = 'adb -s ' + resolvedTarget.target + ' shell am start -W -a android.intent.action.MAIN -n ' + launchName;
return exec(cmd, os.tmpdir());
}).then(function(output) {
console.log('LAUNCH SUCCESS');
}, function(err) {
return Q.reject('Failed to launch app on emulator: ' + err);
});
});
};

View File

@@ -1,3 +1,5 @@
#!/usr/bin/env node
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -16,22 +18,24 @@
specific language governing permissions and limitations
under the License.
*/
package com.phonegap.api;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.api.CordovaInterface;
var child_process = require('child_process'),
Q = require('q');
import android.webkit.WebView;
/**
* PluginManager is exposed to JavaScript in the Cordova WebView.
*
* Calling native plugin code can be done by calling PluginManager.exec(...)
* from JavaScript.
*/
public class PluginManager extends org.apache.cordova.api.PluginManager {
public PluginManager(WebView app, CordovaInterface ctx) throws Exception {
super((CordovaWebView) app, ctx);
// Takes a command and optional current working directory.
// Returns a promise that either resolves with the stdout, or
// rejects with an error message and the stderr.
module.exports = function(cmd, opt_cwd) {
var d = Q.defer();
try {
child_process.exec(cmd, {cwd: opt_cwd, maxBuffer: 1024000}, function(err, stdout, stderr) {
if (err) d.reject('Error executing "' + cmd + '": ' + stderr);
else d.resolve(stdout);
});
} catch(e) {
console.error('error caught: ' + e);
d.reject(e);
}
}
return d.promise;
};

Some files were not shown because too many files have changed in this diff Show More