Upleveled amazon-fireos changes.

Project: http://git-wip-us.apache.org/repos/asf/cordova-lib/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-lib/commit/d3cffc85
Tree: http://git-wip-us.apache.org/repos/asf/cordova-lib/tree/d3cffc85
Diff: http://git-wip-us.apache.org/repos/asf/cordova-lib/diff/d3cffc85

Branch: refs/heads/master
Commit: d3cffc856dec609b6fe28b06968522604a17016c
Parents: 35202bc
Author: Archana Naik <na...@lab126.com>
Authored: Thu Aug 14 11:42:52 2014 -0700
Committer: Anis Kadri <a...@apache.org>
Committed: Fri Sep 5 11:12:18 2014 -0700

----------------------------------------------------------------------
 .../cordova/metadata/amazon_fireos_parser.js    | 267 +++++++++++--------
 1 file changed, 160 insertions(+), 107 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/d3cffc85/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js 
b/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js
index 3b39605..4878f4e 100644
--- a/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js
+++ b/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js
@@ -54,16 +54,158 @@ module.exports.prototype = {
     },
 
     findAndroidLaunchModePreference: function(config) {
-        var ret = config.getPreference('AndroidLaunchMode');
-        var valid = ['standard', 'singleTop', 'singleTask', 
'singleInstance'].indexOf(ret) !== -1;
-        if (ret && !valid) {
-            events.emit('warn', 'Unknown value for launchMode preference: ' + 
ret);
-            ret = null;
+        var launchMode = config.getPreference('AndroidLaunchMode');
+        if (!launchMode) {
+            // Return a default value
+            return 'singleTop';
         }
-
-        return ret;
+    
+        var expectedValues = ['standard', 'singleTop', 'singleTask', 
'singleInstance'];
+        var valid = expectedValues.indexOf(launchMode) !== -1;
+        if (!valid) {
+            events.emit('warn', 'Unrecognized value for AndroidLaunchMode 
preference: ' + launchMode);
+            events.emit('warn', '  Expected values are: ' + 
expectedValues.join(', '));
+            // Note: warn, but leave the launch mode as developer wanted, in 
case the list of options changes in the future
+        }
+    
+        return launchMode;
     },
-
+    
+    // remove the default resource name from all drawable folders
+    // return the array of the densities in this project
+deleteDefaultResource:function(name) {
+    var densities = [];
+    var res = path.join(this.path, 'res');
+    var dirs = fs.readdirSync(res);
+    
+    for (var i=0; i<dirs.length; i++) {
+        var filename = dirs[i];
+        if (filename.indexOf('drawable-') === 0) {
+            var density = filename.substr(9);
+            densities.push(density);
+            var template = path.join(res, filename, name);
+            try {
+                fs.unlinkSync(template);
+                events.emit('verbose', 'deleted: ' + template);
+            } catch(e) {
+                // ignored. template screen does probably not exist
+            }
+        }
+    }
+    return densities;
+},
+    
+handleSplashes:function(config) {
+    var resources = config.getSplashScreens('android');
+    var destfilepath;
+    // if there are "splash" elements in config.xml
+    if (resources.length > 0) {
+        var densities = this.deleteDefaultResource('screen.png');
+        events.emit('verbose', 'splash screens: ' + JSON.stringify(resources));
+        var res = path.join(this.path, 'res');
+        
+        if (resources.defaultResource) {
+            destfilepath = path.join(res, 'drawable', 'screen.png');
+            events.emit('verbose', 'copying splash icon from ' + 
resources.defaultResource.src + ' to ' + destfilepath);
+            shell.cp('-f', resources.defaultResource.src, destfilepath);
+        }
+        for (var i=0; i<densities.length; i++) {
+            var density = densities[i];
+            var resource = resources.getByDensity(density);
+            if (resource) {
+                // copy splash screens.
+                destfilepath = path.join(res, 'drawable-' + density, 
'screen.png');
+                events.emit('verbose', 'copying splash icon from ' + 
resource.src + ' to ' + destfilepath);
+                shell.cp('-f', resource.src, destfilepath);
+            }
+        }
+    }
+},
+    
+handleIcons: function(config) {
+    var icons = config.getIcons('android');
+    // if there are icon elements in config.xml
+    if (icons.length === 0) {
+        events.emit('verbose', 'This app does not have launcher icons 
defined');
+        return;
+    }
+    
+    var densities = this.deleteDefaultResource('icon.png');
+    
+    var android_icons = {};
+    var default_icon;
+    // http://developer.android.com/design/style/iconography.html
+    var densityToSizeMap = {
+        'ldpi' : 36,
+        'mdpi' : 48,
+        'hdpi' : 72,
+        'xhdpi' : 96
+    };
+    // find the best matching icon for a given density or size
+    // @output android_icons
+    var parseIcon = function(icon, icon_size, size, density) {
+        // do I have a platform icon for that density already
+        var previous = android_icons[density];
+        if (previous && previous.platform) {
+            return;
+        }
+        // already have one but this one is a platform icon
+        if (previous && icon.platform && icon.density == density) {
+            android_icons[density] = icon;
+            return;
+        }
+        // if density is explicitly defined take this one
+        if (density === icon.density) {
+            android_icons[density] = icon;
+            return;
+        }
+        if (size === parseInt(icon_size)) {
+            android_icons[density] = icon;
+        }
+    };
+    // iterate over all icon elements to find the default icon and call 
parseIcon
+    for (var i=0; i<icons.length; i++) {
+        var icon = icons[i];
+        var size = icon.width;
+        if (!size) {
+            size = icon.height;
+        }
+        if (!size && !icon.density) {
+            if (default_icon) {
+                events.emit('verbose', 'more than one default icon: ' + 
JSON.stringify(icon));
+            } else {
+                default_icon = icon;
+            }
+        } else {
+            for (var k=0; k<densities.length; k++) {
+                    parseIcon(icon, size, densityToSizeMap[densities[k]], 
densities[k]);
+                }
+            }
+        }
+        var projectRoot = util.isCordova(this.path);
+        var srcfilepath;
+        var destfilepath;
+        // copy the default icon to the drawable folder
+        if (default_icon) {
+            srcfilepath = path.join(projectRoot, default_icon.src);
+            destfilepath = path.join(this.path, 'res', 'drawable', 'icon.png');
+            events.emit('verbose', 'Copying default icon from ' + srcfilepath 
+ ' to ' + destfilepath);
+            shell.cp('-f', srcfilepath, destfilepath);
+        }
+        // copyIcon does the actual copying into the drawable folders
+        var copyIcon = function(density) {
+            if (android_icons[density]) {
+                srcfilepath = path.join(projectRoot, 
android_icons[density].src);
+                destfilepath = path.join(this.path, 'res', 
'drawable-'+density, 'icon.png');
+                events.emit('verbose', 'Copying icon from ' + srcfilepath + ' 
to ' + destfilepath);
+                shell.cp('-f', srcfilepath, destfilepath);
+            }
+        }.bind(this);
+        for (var j=0; j<densities.length; j++) {
+            copyIcon(densities[j]);
+        }
+    },
+    
     update_from_config:function(config) {
         // TODO: share code for this func with Android. Or fix it and remove
         // the below JSHint hacks line.
@@ -78,104 +220,15 @@ module.exports.prototype = {
         fs.writeFileSync(this.strings, strings.write({indent: 4}), 'utf-8');
         events.emit('verbose', 'Wrote out Android application name to "' + 
name + '"');
 
-        var icons = config.getIcons('amazon-fireos');
-        // if there are icon elements in config.xml
-        if (icons) {
-          var android_icons = {};
-          var projectRoot = util.isCordova(this.path);
-          var default_icon;
-          var max_size;
-          var max_density;
-          // http://developer.android.com/design/style/iconography.html
-          var densities = {
-            'ldpi' : 36,
-            'mdpi' : 48,
-            'hdpi' : 72,
-            'xhdpi' : 96
-          };
-          for (var i=0; i<icons.length; i++) {
-            var icon = icons[i];
-            var destfilepath;
-            var size = icon.width;
-            if (!size) {
-              size = icon.height;
-            }
-            if (!size && !icon.density) {
-              if (default_icon) {
-                  events.emit('verbose', 'more than one default icon: ' + 
JSON.stringify(icon));
-              } else {
-                  default_icon = icon;
-              }
-            } else {
-              var parseIcon = function(icon, icon_size, size, density) {
-                // if density is explicitly defined, no need to calculate it 
from width/height
-                if (icon.density) {
-                    android_icons[icon.density] = icon;
-                    return;
-                }
-
-                var i = parseInt(icon_size);
-                if (size == parseInt(icon_size)) {
-                  var previous = android_icons[density];
-                  if (previous) {
-                    // already have that density. platform rules
-                    if (!previous.platform) {
-                      android_icons[density] = icon;
-                    } // else already have a platform icon of that density
-                  } else {
-                    android_icons[density] = icon;
-                  }
-                  android_icons[density] = icon;
-                  if (!max_size) {
-                    max_size = size;
-                    max_density = density;
-                  } else {
-                    if (max_size < size) {
-                      max_size = size;
-                      max_density = density;
-                    }
-                  }
-                }
-              };
-              for (var density in densities) {
-                parseIcon(icon, size, densities[density], density);
-              }
-            }
-          }
-
-          var copyIcon = function(density) {
-            var srcfilepath;
-            var destfilepath = path.join(this.path, 'res', 
'drawable-'+density, 'icon.png');
-            if (android_icons[density]) {
-              srcfilepath = path.join(projectRoot, android_icons[density].src);
-            } else {
-              if (default_icon) {
-                srcfilepath = path.join(projectRoot, default_icon.src);
-              } else {
-                if (max_density) {
-                  srcfilepath = path.join(projectRoot, 
android_icons[max_density].src);
-                } else {
-                  events.emit('verbose', 'no icon found matching Android 
typical densities');
-                }
-              }
-            }
-            if (srcfilepath) {
-                events.emit('verbose', 'Copying icon from ' + srcfilepath + ' 
to ' + destfilepath);
-                shell.cp('-f', srcfilepath, destfilepath);
-            }
-          }.bind(this);
-          for (var density in densities) {
-            copyIcon(density);
-          }
-
-        }
-
+        this.handleSplashes(config);
+        this.handleIcons(config);
+        
         var manifest = xml.parseElementtreeSync(this.manifest);
         // Update the version by changing the AndroidManifest 
android:versionName
         var version = config.version();
         var versionCode = config.android_versionCode() || 
default_versionCode(version);
-        manifest.getroot().attrib['android:versionName'] = version;
-        manifest.getroot().attrib['android:versionCode'] = versionCode;
+        manifest.getroot().attrib["android:versionName"] = version;
+        manifest.getroot().attrib["android:versionCode"] = versionCode;
 
         // Update package name by changing the AndroidManifest id and moving 
the entry class around to the proper package directory
         var pkg = config.packageName();
@@ -190,22 +243,22 @@ module.exports.prototype = {
         if (orientationPref) {
             switch (orientationPref) {
                 case 'default':
-                    delete act.attrib['android:screenOrientation'];
+                    delete act.attrib["android:screenOrientation"];
                     break;
                 case 'portrait':
-                    act.attrib['android:screenOrientation'] = 'portrait';
+                    act.attrib["android:screenOrientation"] = 'portrait';
                     break;
                 case 'landscape':
-                    act.attrib['android:screenOrientation'] = 'landscape';
+                    act.attrib["android:screenOrientation"] = 'landscape';
             }
         }
 
         // Set android:launchMode in AndroidManifest
         var androidLaunchModePref = 
this.findAndroidLaunchModePreference(config);
         if (androidLaunchModePref) {
-            act.attrib['android:launchMode'] = androidLaunchModePref;
+            act.attrib["android:launchMode"] = androidLaunchModePref;
         } else { // User has (explicitly) set an invalid value for 
AndroidLaunchMode preference
-            delete act.attrib['android:launchMode']; // use Android default 
value (standard)
+            delete act.attrib["android:launchMode"]; // use Android default 
value (standard)
         }
 
         // Write out AndroidManifest.xml

Reply via email to