Repository URL to install this package:
|
Version:
0.0.2 ▾
|
'use strict';
module.exports = function(context) {
//we need to change
//<service android:exported="false" android:name="com.adobe.phonegap.push.GCMIntentService">
//to
//<service android:exported="false" android:name="com.com.vipera.pushproxy.DEGCMIntentService">
var cordovaProjectPath = context.opts.projectRoot;
var pluginId = context.opts.plugin.id;
var et = context.requireCordovaModule('elementtree');
const fs = require('fs');
const path = require('path');
const xml2js = context.requireCordovaModule('vipera-de-cli').xml2js;
const _ = context.requireCordovaModule('vipera-de-cli').lodash;
var installedPlatforms = context.opts.platforms;
for (var i=0;i<installedPlatforms.length;i++){
if (installedPlatforms[i]==='android'){
prepareManifest(context);
}
}
function prepareManifest(context){
console.log("Android platform installed...modifying AndroidManifest.xml...");
console.log("Updating Android Manifest...");
var manifestPath = getManifestPath(cordovaProjectPath);
console.log("manifestPath="+manifestPath);
if (fs.existsSync(manifestPath)){
var manifestContents = fs.readFileSync(manifestPath, 'utf8');
var fromStr = getServiceManifestString(cordovaProjectPath);
var toStr = '<service android:exported="false" android:name="com.vipera.pushproxy.DEGCMIntentService">';
var manifestContents = manifestContents.replace(fromStr, toStr);
fs.writeFileSync(manifestPath, manifestContents);
var parser = new xml2js.Parser();
parser.parseString(manifestContents, function (err, result){
if(err){
console.log(err);
return;
}
result.manifest = cleanIntentServiceFromManifest(result.manifest);
var builder = new xml2js.Builder();
var newXml = builder.buildObject(result);
fs.writeFileSync(manifestPath, newXml);
});
console.log("Manifest update complete.");
} else {
console.log("Manifest not found.");
}
}
function cleanIntentServiceFromManifest(manifest){
var services = manifest.application[0].service;
console.log("Founds before: " + services);
var foundCount = 0;
var foundIdx = new Array();
services = _.uniqBy(services, function(service){
return service['$']['android:name'];
});
manifest.application[0].service = services;
return manifest;
}
function parseElementtreeSync (filename) {
var contents = fs.readFileSync(filename, 'utf-8');
if(contents) {
//Windows is the BOM. Skip the Byte Order Mark.
contents = contents.substring(contents.indexOf('<'));
}
return new et.ElementTree(et.XML(contents));
}
function getManifestPath(projectRoot) {
var jsonFile = loadPackageJSON(projectRoot);
if(jsonFile.dependencies){
var androidVersionStr=jsonFile.dependencies["cordova-android"] || '';
if(androidVersionStr){
var version = androidVersionStr.replace(/^[^0-9]+/, '');
let versionParts = version.split("\.");
if(versionParts && versionParts[0]) {
console.log("Detected Cordova version: " + versionParts[0]);
if(parseInt(versionParts[0]) >= 7) {
return path.join(projectRoot, "platforms", "android", "app", "src", "main", "AndroidManifest.xml");
}
} else {
console.log("Cannot retrieve Cordova version");
}
}
}
return path.join(projectRoot, "platforms", "android", "AndroidManifest.xml");
}
function getServiceManifestString(projectRoot) {
var jsonFile = loadPackageJSON(projectRoot);
if(jsonFile.dependencies){
var phonegapVersion=jsonFile.dependencies["phonegap-plugin-push"] || '';
if(phonegapVersion){
var version = phonegapVersion.replace(/^[^0-9]+/, '');
let versionParts = version.split("\.");
if(versionParts && versionParts[0]) {
console.log("Detected Phonegap version: " + versionParts[0]);
if(parseInt(versionParts[0]) >= 2) {
return '<service android:name="com.adobe.phonegap.push.FCMService">';
}
} else {
console.log("Cannot retrieve Phonegap version");
}
}
}
return '<service android:exported="false" android:name="com.adobe.phonegap.push.GCMIntentService">';
}
function loadPackageJSON(projectRoot){
return JSON.parse(fs.readFileSync(path.resolve(projectRoot,"package.json")));
}
}