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