UNPKG

generator-android-hipster

Version:

Android generator based on MVP, Dagger2, RxJava, Java & Kotlin Stack and usefull libraries for Android

157 lines (123 loc) 5.69 kB
'use strict'; var yeoman = require('yeoman-generator'); var chalk = require('chalk'); var yosay = require('yosay'); var mkdirp = require('mkdirp'); var generators = require('yeoman-generator'); var scriptBase = require('../script-base'); var util = require('util'); var AndroidManifest = require('androidmanifest'); var ActivityGenerator = generators.Base.extend({}); util.inherits(ActivityGenerator, scriptBase); module.exports = ActivityGenerator.extend({ initializing: { getConfig: function (args) { this.appName = this.config.get('appName'); this.language = this.config.get('language'); this.appPackage = this.config.get('appPackage'); this.nucleus = this.config.get('nucleus'); } }, prompting: function () { var done = this.async(); this.log(yosay( 'Welcome to the ' + chalk.red('Android Hipster') + ' generator!' )); var prompts = [ { type: 'confirm', name: 'ok', message: 'This will create a Push structure in your app. Continue?', default: true } ]; this.prompt(prompts, function (props) { this.ok = props.ok; done(); }.bind(this)); }, configuring: { saveSettings: function () { } }, writing: { projectfiles: function () { }, app: function () { if (!this.ok) { return; } var packageDir = this.appPackage.replace(/\./g, '/'); var manifestFilePath = 'app/src/main/AndroidManifest.xml'; var resourceFilePath = 'app/src/main/res/values/strings.xml'; var manifest = new AndroidManifest().readFile(manifestFilePath); manifest.receiver('com.google.android.gms.gcm.GcmReceiver') .attr('android:exported', true) .attr('android:permission', 'com.google.android.c2dm.permission.SEND') .append('<intent-filter>') .find('intent-filter') .append('<action>') .find('action') .attr('android:name', 'com.google.android.c2dm.intent.RECEIVE'); manifest.receiver(this.appPackage + '.services.push.DefaultPushReceiver') .attr('android:enabled', true) .attr('android:exported', true) .append('<intent-filter>') .find('intent-filter') .attr('android:priority', 0) .append('<action>') .find('action') .attr('android:name', 'Events.PUSH'); manifest.service(this.appPackage + '.services.push.PushIDListenerService') .attr('android:exported', false) .append('<intent-filter>') .find('intent-filter') .append('<action>') .find('action') .attr('android:name', 'com.google.android.gms.iid.InstanceID'); manifest.service(this.appPackage + '.services.push.PushServiceListener') .attr('android:exported', false) .append('<intent-filter>') .find('intent-filter') .append('<action>') .find('action') .attr('android:name', 'com.google.android.c2dm.intent.RECEIVE'); manifest.writeFile(manifestFilePath); var appFolder; if (this.language == 'java') { appFolder = 'app-java'; } else { appFolder = 'app-kotlin'; } var ext = this.language == 'java' ? ".java" : ".kt"; this.template(appFolder + '/src/main/java/_DefaultPushReceiver' + ext, 'app/src/main/java/' + packageDir + '/services/push/DefaultPushReceiver' + ext, this, {}); this.template(appFolder + '/src/main/java/_PushIDListenerService' + ext, 'app/src/main/java/' + packageDir + '/services/push/PushIDListenerService' + ext, this, {}); this.template(appFolder + '/src/main/java/_PushIntentService' + ext, 'app/src/main/java/' + packageDir + '/services/push/PushIntentService' + ext, this, {}); this.template(appFolder + '/src/main/java/_PushServiceListener' + ext, 'app/src/main/java/' + packageDir + '/services/push/PushServiceListener' + ext, this, {}); if (this.language == 'java') { this.addComponentInjection('PushServiceListener', packageDir, this.appPackage + '.services.push'); this.addComponentInjection('PushIntentService', packageDir, this.appPackage + '.services.push') } else { this.addComponentInjectionKotlin('PushServiceListener', packageDir, this.appPackage + '.services.push'); this.addComponentInjectionKotlin('PushIntentService', packageDir, this.appPackage + '.services.push') } this.template('../../dependencies.json', 'dependencies.json', this, {}).on('end', function () { this.playServices = this.config.get('playServices'); if (this.playServices == undefined) { this.playServices = ['base']; } if (this.playServices.indexOf('gcm') == -1) { this.playServices.push('gcm'); } this.config.set('playServices', this.playServices); this.installGradleDependencies(this, true); }); }, install: function () { } } });