| var syrup = require('stf-syrup') |
| |
| var logger = require('../../../util/logger') |
| var wire = require('../../../wire') |
| var wireutil = require('../../../wire/util') |
| |
| module.exports = syrup.serial() |
| .dependency(require('./service')) |
| .dependency(require('./util/identity')) |
| .dependency(require('./touch')) |
| .dependency(require('../support/router')) |
| .dependency(require('../support/push')) |
| .dependency(require('../support/adb')) |
| .define(function(options, service, identity, touch, router, push, adb) { |
| var log = logger.createLogger('device:plugins:account') |
| |
| function checkAccount(type, account) { |
| return service.getAccounts({type: type}) |
| .timeout(30000) |
| .then(function(accounts) { |
| if (accounts.indexOf(account) >= 0) { |
| return true |
| } |
| throw new Error('The account is not added') |
| }) |
| } |
| |
| router.on(wire.AccountCheckMessage, function(channel, message) { |
| var reply = wireutil.reply(options.serial) |
| |
| log.info('Checking if account "%s" is added', message.account) |
| checkAccount(message.type, message.account) |
| .then(function() { |
| push.send([ |
| channel |
| , reply.okay() |
| ]) |
| }) |
| .catch(function(err) { |
| log.error('Account check failed', err.stack) |
| push.send([ |
| channel |
| , reply.fail(err.message) |
| ]) |
| }) |
| }) |
| |
| router.on(wire.AccountGetMessage, function(channel, message) { |
| var reply = wireutil.reply(options.serial) |
| |
| log.info('Getting account(s)') |
| |
| service.getAccounts(message) |
| .timeout(30000) |
| .then(function(accounts) { |
| push.send([ |
| channel |
| , reply.okay('success', accounts) |
| ]) |
| }) |
| .catch(function(err) { |
| log.error('Account get failed', err.stack) |
| push.send([ |
| channel |
| , reply.fail(err.message) |
| ]) |
| }) |
| }) |
| |
| router.on(wire.AccountRemoveMessage, function(channel, message) { |
| var reply = wireutil.reply(options.serial) |
| |
| log.info('Removing "%s" account(s)', message.type) |
| |
| service.removeAccount(message) |
| .timeout(30000) |
| .then(function() { |
| push.send([ |
| channel |
| , reply.okay() |
| ]) |
| }) |
| .catch(function(err) { |
| log.error('Account removal failed', err.stack) |
| push.send([ |
| channel |
| , reply.fail(err.message) |
| ]) |
| }) |
| }) |
| |
| router.on(wire.AccountAddMenuMessage, function(channel) { |
| var reply = wireutil.reply(options.serial) |
| |
| log.info('Showing add account menu for Google Account') |
| |
| service.addAccountMenu() |
| .timeout(30000) |
| .then(function() { |
| push.send([ |
| channel |
| , reply.okay() |
| ]) |
| }) |
| .catch(function(err) { |
| log.error('Add account menu failed', err.stack) |
| push.send([ |
| channel |
| , reply.fail(err.message) |
| ]) |
| }) |
| }) |
| |
| router.on(wire.AccountAddMessage, function(channel, message) { |
| var reply = wireutil.reply(options.serial) |
| var type = 'com.google' |
| var account = message.user + '@gmail.com' |
| |
| log.info('Adding Google Account automatedly') |
| |
| var version = identity.version.substring(0, 3) |
| |
| function automation() { |
| switch (version) { |
| case '2.3': // tested: 2.3.3-2.3.6 |
| return service.pressKey('dpad_down').delay(1000) |
| .then(function() { |
| return service.pressKey('dpad_down') |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(2000) |
| .then(function() { |
| return service.pressKey('dpad_down') |
| }).delay(2000) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(2000) |
| .then(function() { |
| return service.type(message.user) |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('switch_charset') |
| }).delay(100) |
| .then(function() { |
| return service.pressKey('switch_charset') |
| }).delay(100) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(1000) |
| .then(function() { |
| return service.type(message.password) |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }) |
| case '4.0': // tested: 4.0.3 and 4.0.4 |
| return service.pressKey('tab').delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(2000) |
| .then(function() { |
| return service.type(message.user) |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('switch_charset') |
| }).delay(100) |
| .then(function() { |
| return service.pressKey('switch_charset') |
| }).delay(100) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(1000) |
| .then(function() { |
| return service.type(message.password) |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }) |
| case '4.1': // tested: 4.1.1 and 4.1.2 |
| return service.pressKey('tab').delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(2000) |
| .then(function() { |
| return service.type(message.user) |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('switch_charset') |
| }).delay(100) |
| .then(function() { |
| return service.pressKey('switch_charset') |
| }).delay(100) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(1000) |
| .then(function() { |
| return service.type(message.password) |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }) |
| case '4.2': // tested: 4.2.2 |
| return service.pressKey('tab').delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(2000) |
| .then(function() { |
| return service.type(message.user) |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('switch_charset') |
| }).delay(100) |
| .then(function() { |
| return service.pressKey('switch_charset') |
| }).delay(100) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(1000) |
| .then(function() { |
| return service.type(message.password) |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('tab') |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('tab') |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('tab') |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }) |
| // case '4.3': // tested: 4.3 |
| // case '4.4': // tested: 4.4.2 |
| default: |
| return service.pressKey('tab').delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(2000) |
| .then(function() { |
| return service.type(message.user) |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('switch_charset') |
| }).delay(100) |
| .then(function() { |
| return service.pressKey('switch_charset') |
| }).delay(100) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(1000) |
| .then(function() { |
| return service.type(message.password) |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('tab') |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('tab') |
| }).delay(1000) |
| .then(function() { |
| return service.pressKey('enter') |
| }) |
| } |
| } |
| |
| // First check if the account is already added so we don't continue |
| return checkAccount(type, account) |
| .then(function() { |
| push.send([ |
| channel |
| , reply.fail('Add account failed: account was already added') |
| ]) |
| }) |
| .catch(function() { |
| return adb.clear(options.serial, 'com.google.android.gsf.login') |
| .catch(function() { |
| // The package name is different in 2.3, so let's try the old name |
| // if the new name fails. |
| return adb.clear(options.serial, 'com.google.android.gsf') |
| }) |
| .then(function() { |
| return service.addAccountMenu() |
| }) |
| .delay(5000) |
| .then(function() { |
| // Just in case the add account menu has any button focused |
| return touch.tap({x: 0, y: 0.9}) |
| }) |
| .delay(500) |
| .then(function() { |
| return automation() |
| }) |
| .delay(3000) |
| .then(function() { |
| return service.pressKey('home') |
| }) |
| .then(function() { |
| return checkAccount(type, account) |
| }) |
| .then(function() { |
| push.send([ |
| channel |
| , reply.okay() |
| ]) |
| }) |
| .catch(function(err) { |
| log.error('Add account failed', err.stack) |
| push.send([ |
| channel |
| , reply.fail('Add account failed: ' + err.message) |
| ]) |
| }) |
| }) |
| }) |
| }) |