You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by fi...@apache.org on 2013/01/18 22:12:20 UTC
git commit: Refix CB-2237: Preferecne support in config.xml. Now
doesnt clobber default prefs for android and ios.
Updated Branches:
refs/heads/master 92ff11f50 -> e4a9ee954
Updated Tags: refs/tags/2.3.6 [created] e4a9ee954
Refix CB-2237: Preferecne support in config.xml. Now doesnt clobber default prefs for android and ios.
Project: http://git-wip-us.apache.org/repos/asf/cordova-cli/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-cli/commit/e4a9ee95
Tree: http://git-wip-us.apache.org/repos/asf/cordova-cli/tree/e4a9ee95
Diff: http://git-wip-us.apache.org/repos/asf/cordova-cli/diff/e4a9ee95
Branch: refs/heads/master
Commit: e4a9ee954056f14ff49b93b51d5fba27d0961eef
Parents: 92ff11f
Author: Fil Maj <ma...@gmail.com>
Authored: Fri Jan 18 13:15:02 2013 -0800
Committer: Fil Maj <ma...@gmail.com>
Committed: Fri Jan 18 13:15:02 2013 -0800
----------------------------------------------------------------------
package.json | 2 +-
spec/metadata/android_parser.spec.js | 26 ++++++++++++++++++-
spec/metadata/ios_parser.spec.js | 40 +++++++++++++++++++++++++++++
src/metadata/android_parser.js | 25 ++++++++++++++++-
src/metadata/ios_parser.js | 34 +++++++++++++++++++++++-
5 files changed, 122 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/e4a9ee95/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 7ff636b..4cf1075 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "cordova",
- "version": "2.3.5",
+ "version": "2.3.6",
"preferGlobal": "true",
"description": "Cordova command line interface tool",
"main": "cordova",
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/e4a9ee95/spec/metadata/android_parser.spec.js
----------------------------------------------------------------------
diff --git a/spec/metadata/android_parser.spec.js b/spec/metadata/android_parser.spec.js
index d0cf31f..92ae159 100644
--- a/spec/metadata/android_parser.spec.js
+++ b/spec/metadata/android_parser.spec.js
@@ -64,7 +64,7 @@ describe('android project parser', function() {
});
it('should update the application package name properly', function() {
var javs = path.join(android_path, 'src', 'ca', 'filmaj', 'dewd', 'cordovaExample.java');
- var orig_javs = path.join(android_path, 'src', 'io', 'cordova', 'hellocordova', 'cordovaExample.java');
+ var orig_javs = path.join(android_path, 'src', 'org', 'apache', 'cordova', 'cordovaExample', 'cordovaExample.java');
var orig_contents = fs.readFileSync(orig_javs, 'utf-8');
this.after(function() {
fs.writeFileSync(orig_javs, orig_contents, 'utf-8');
@@ -91,6 +91,30 @@ describe('android project parser', function() {
expect(as[0].attrib.origin).toEqual('http://apache.org');
expect(as[1].attrib.origin).toEqual('http://github.com');
});
+ describe('preferences', function() {
+ it('should not change default project preferences and copy over additional project preferences to platform-level config.xml', function() {
+ config.preference.add({name:'henrik',value:'sedin'});
+ project.update_from_config(config);
+
+ var native_config = new et.ElementTree(et.XML(fs.readFileSync(android_config, 'utf-8')));
+ var ps = native_config.findall('preference');
+ expect(ps.length).toEqual(3);
+ expect(ps[0].attrib.name).toEqual('useBrowserHistory');
+ expect(ps[0].attrib.value).toEqual('true');
+ expect(ps[2].attrib.name).toEqual('henrik');
+ expect(ps[2].attrib.value).toEqual('sedin');
+ });
+ it('should override a default project preference if applicable', function() {
+ config.preference.add({name:'useBrowserHistory',value:'false'});
+ project.update_from_config(config);
+
+ var native_config = new et.ElementTree(et.XML(fs.readFileSync(android_config, 'utf-8')));
+ var ps = native_config.findall('preference');
+ expect(ps.length).toEqual(2);
+ expect(ps[0].attrib.name).toEqual('useBrowserHistory');
+ expect(ps[0].attrib.value).toEqual('false');
+ });
+ });
});
describe('update_www method', function() {
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/e4a9ee95/spec/metadata/ios_parser.spec.js
----------------------------------------------------------------------
diff --git a/spec/metadata/ios_parser.spec.js b/spec/metadata/ios_parser.spec.js
index 2005d01..8e6a2ca 100644
--- a/spec/metadata/ios_parser.spec.js
+++ b/spec/metadata/ios_parser.spec.js
@@ -5,6 +5,7 @@ var ios_parser = require('../../src/metadata/ios_parser'),
path = require('path'),
shell = require('shelljs'),
fs = require('fs'),
+ et = require('elementtree'),
cfg_path = path.join(__dirname, '..', 'fixtures', 'projects', 'test', 'www', 'config.xml'),
ios_path = path.join(__dirname, '..', 'fixtures', 'projects', 'native', 'ios_fixture'),
tempDir = path.join(__dirname, '..', '..', 'temp'),
@@ -95,6 +96,45 @@ describe('ios project parser', function() {
expect(config_contents).toMatch(/<access origin="\*" \/>/);
});
});
+ describe('preferences', function() {
+ it('should not change default project preferences and copy over additional project preferences to platform-level config.xml', function() {
+ var cb = jasmine.createSpy();
+
+ runs(function() {
+ config.preference.add({name:'henrik',value:'sedin'});
+ project.update_from_config(config, cb);
+ });
+
+ waitsFor(function() { return cb.wasCalled; }, "update_from_config callback");
+
+ runs(function() {
+ var native_config = new et.ElementTree(et.XML(fs.readFileSync(ios_config_xml, 'utf-8')));
+ var ps = native_config.findall('preference');
+ expect(ps.length).toEqual(13);
+ expect(ps[0].attrib.name).toEqual('KeyboardDisplayRequiresUserAction');
+ expect(ps[0].attrib.value).toEqual('true');
+ expect(ps[12].attrib.name).toEqual('henrik');
+ expect(ps[12].attrib.value).toEqual('sedin');
+ });
+ });
+ it('should override a default project preference if applicable', function() {
+ var cb = jasmine.createSpy();
+ runs(function() {
+ config.preference.add({name:'UIWebViewBounce',value:'false'});
+ project.update_from_config(config, cb);
+ });
+
+ waitsFor(function() { return cb.wasCalled; }, "update_from_config callback");
+
+ runs(function() {
+ var native_config = new et.ElementTree(et.XML(fs.readFileSync(ios_config_xml, 'utf-8')));
+ var ps = native_config.findall('preference');
+ expect(ps.length).toEqual(12);
+ expect(ps[2].attrib.name).toEqual('UIWebViewBounce');
+ expect(ps[2].attrib.value).toEqual('false');
+ });
+ });
+ });
});
describe('update_www method', function() {
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/e4a9ee95/src/metadata/android_parser.js
----------------------------------------------------------------------
diff --git a/src/metadata/android_parser.js b/src/metadata/android_parser.js
index 333fc1b..57242df 100644
--- a/src/metadata/android_parser.js
+++ b/src/metadata/android_parser.js
@@ -5,6 +5,11 @@ var fs = require('fs'),
shell = require('shelljs'),
config_parser = require('../config_parser');
+var default_prefs = {
+ "useBrowserHistory":"true",
+ "exit-on-suspend":"false"
+};
+
module.exports = function android_parser(project) {
if (!fs.existsSync(path.join(project, 'AndroidManifest.xml'))) {
throw 'The provided path is not an Android project.';
@@ -51,9 +56,25 @@ module.exports.prototype = {
android_cfg_xml.access.add(uri);
});
- // update any preferences
+ // Update preferences
android_cfg_xml.preference.remove();
- config.preference.get().forEach(function(pref) {
+ var prefs = config.preference.get();
+ // write out defaults, unless user has specifically overrode it
+ for (var p in default_prefs) if (default_prefs.hasOwnProperty(p)) {
+ var override = prefs.filter(function(pref) { return pref.name == p; });
+ var value = default_prefs[p];
+ if (override.length) {
+ // override exists
+ value = override[0].value;
+ // remove from prefs list so we dont write it out again below
+ prefs = prefs.filter(function(pref) { return pref.name != p });
+ }
+ android_cfg_xml.preference.add({
+ name:p,
+ value:value
+ });
+ }
+ prefs.forEach(function(pref) {
android_cfg_xml.preference.add({
name:pref.name,
value:pref.value
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/e4a9ee95/src/metadata/ios_parser.js
----------------------------------------------------------------------
diff --git a/src/metadata/ios_parser.js b/src/metadata/ios_parser.js
index cdfeb3f..84107c7 100644
--- a/src/metadata/ios_parser.js
+++ b/src/metadata/ios_parser.js
@@ -7,6 +7,21 @@ var fs = require('fs'),
et = require('elementtree'),
config_parser = require('../config_parser');
+var default_prefs = {
+ "KeyboardDisplayRequiresUserAction":"true",
+ "SuppressesIncrementalRendering":"false",
+ "UIWebViewBounce":"true",
+ "TopActivityIndicator":"gray",
+ "EnableLocation":"false",
+ "EnableViewportScale":"false",
+ "AutoHideSplashScreen":"true",
+ "ShowSplashScreenSpinner":"true",
+ "MediaPlaybackRequiresUserAction":"false",
+ "AllowInlineMediaPlayback":"false",
+ "OpenAllWhitelistURLsInWebView":"false",
+ "BackupWebStorage":"cloud"
+};
+
module.exports = function ios_parser(project) {
try {
var xcodeproj_dir = fs.readdirSync(project).filter(function(e) { return e.match(/\.xcodeproj$/i); })[0];
@@ -42,9 +57,26 @@ module.exports.prototype = {
config.access.get().forEach(function(uri) {
self.config.access.add(uri);
});
+
// Update preferences
this.config.preference.remove();
- config.preference.get().forEach(function(pref) {
+ var prefs = config.preference.get();
+ // write out defaults, unless user has specifically overrode it
+ for (var p in default_prefs) if (default_prefs.hasOwnProperty(p)) {
+ var override = prefs.filter(function(pref) { return pref.name == p; });
+ var value = default_prefs[p];
+ if (override.length) {
+ // override exists
+ value = override[0].value;
+ // remove from prefs list so we dont write it out again below
+ prefs = prefs.filter(function(pref) { return pref.name != p });
+ }
+ this.config.preference.add({
+ name:p,
+ value:value
+ });
+ }
+ prefs.forEach(function(pref) {
self.config.preference.add({
name:pref.name,
value:pref.value