From 5ca3588c4fb8fa35915bdb644a2ba71454bd20f3 Mon Sep 17 00:00:00 2001 From: Olivier Goguel Date: Mon, 5 Oct 2015 21:45:49 +0200 Subject: [PATCH 1/2] CB-9747 --- cordova-lib/src/cordova/metadata/android_parser.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cordova-lib/src/cordova/metadata/android_parser.js b/cordova-lib/src/cordova/metadata/android_parser.js index c618c0c34..6db0b1a4f 100644 --- a/cordova-lib/src/cordova/metadata/android_parser.js +++ b/cordova-lib/src/cordova/metadata/android_parser.js @@ -227,6 +227,13 @@ android_parser.prototype.update_from_config = function(config) { manifest.getroot().attrib.package = pkg; var act = manifest.getroot().find('./application/activity'); + + // CB-9747 + var actname = act.attrib['android:name'] ; + var l = actname.lastIndexOf('.'); + // To use the android name as a package, it must not begin with . + if (l !== 0 && l !== -1) + orig_pkg = actname.substring(0,l); // Set the android:screenOrientation in the AndroidManifest var orientation = this.helper.getOrientation(config); From 7c6d2f41a9f9f9c21866623073c146e84c6f520a Mon Sep 17 00:00:00 2001 From: Olivier Goguel Date: Mon, 5 Oct 2015 23:25:53 +0200 Subject: [PATCH 2/2] CB-9747 added tests --- .../metadata/android_parser.spec.js | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/cordova-lib/spec-cordova/metadata/android_parser.spec.js b/cordova-lib/spec-cordova/metadata/android_parser.spec.js index 1f56628a5..a8af6283a 100644 --- a/cordova-lib/spec-cordova/metadata/android_parser.spec.js +++ b/cordova-lib/spec-cordova/metadata/android_parser.spec.js @@ -91,9 +91,11 @@ describe('android project parser', function() { var p, cp, rm, mkdir, is_cordova, write, read, getOrientation; var stringsRoot; var manifestRoot; + var manifestXMLString = MANIFEST_XML; beforeEach(function() { stringsRoot = null; manifestRoot = null; + p = new androidParser(android_proj); cp = spyOn(shell, 'cp'); rm = spyOn(shell, 'rm'); @@ -105,7 +107,7 @@ describe('android project parser', function() { if (/strings/.exec(path)) { return stringsRoot = new et.ElementTree(et.XML(STRINGS_XML)); } else if (/AndroidManifest/.exec(path)) { - return manifestRoot = new et.ElementTree(et.XML(MANIFEST_XML)); + return manifestRoot = new et.ElementTree(et.XML(manifestXMLString)); } else { throw new CordovaError('Unexpected parseElementtreeSync: ' + path); } @@ -113,6 +115,37 @@ describe('android project parser', function() { getOrientation = spyOn(p.helper, 'getOrientation'); }); + + describe('activity path', function() { + + var activityName = 'MyActivity' ; + var activityFile = activityName+'.java' ; + var activityPath; + + beforeEach(function() { + spyOn(fs,'readdirSync').andReturn( [ activityFile] ); + read.andCallFake(function(_path) { + activityPath = _path; + return 'package org.cordova.somepackage; public class MyApp extends CordovaActivity { }'; + }); + }); + + it('should find the proper path for the activity', function() { + var p = new androidParser(android_proj); + p.update_from_config(cfg); + expect(activityPath).toEqual(path.join(android_proj,'src','org','apache','mobilespec',activityFile)); + }); + + it('should find the proper activty path when activiy name contains a full package', function() { + // CB-9747 + manifestXMLString = MANIFEST_XML.replace('android:name="mobilespec"','android:name="com.del7a.washere.'+activityName+'"'); + var p = new androidParser(android_proj); + p.update_from_config(cfg); + expect(activityPath).toEqual(path.join(android_proj,'src','com','del7a','washere',activityFile)); + }); + + }); + describe('update_from_config method', function() { beforeEach(function() { spyOn(fs, 'readdirSync').andReturn([ path.join(android_proj, 'src', 'android_pkg', 'MyApp.java') ]);