diff options
| author | Erik Larkö <erik@mullvad.net> | 2018-01-25 14:12:45 +0100 |
|---|---|---|
| committer | Erik Larkö <erik@mullvad.net> | 2018-01-25 14:12:45 +0100 |
| commit | 2ab013667c028a2e75017080d8cffd37a3a6141d (patch) | |
| tree | d4e669053d43f5c8e2393cab29d0b7558fed1963 /app | |
| parent | 1bc8293ffebdc4afdb71fbfdafb109aec76d7ef9 (diff) | |
| parent | 89469094049ee82862079f7b2301037f5aac9e22 (diff) | |
| download | mullvadvpn-2ab013667c028a2e75017080d8cffd37a3a6141d.tar.xz mullvadvpn-2ab013667c028a2e75017080d8cffd37a3a6141d.zip | |
Merge branch 'android-preparation'
Diffstat (limited to 'app')
| -rw-r--r-- | app/app.android.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/app/app.android.js b/app/app.android.js new file mode 100644 index 0000000000..0f31116447 --- /dev/null +++ b/app/app.android.js @@ -0,0 +1,76 @@ +// @flow + +import React from 'react'; +import RX, { Component } from 'reactxp'; +import { Provider } from 'react-redux'; +import { Router } from 'react-router-redux'; +import { createMemoryHistory } from 'history'; +import makeRoutes from './routes'; +import configureStore from './redux/store'; +import { log } from './lib/platform'; +import { Backend, BackendError } from './lib/backend'; +import { DeviceEventEmitter } from 'react-native'; +import { MobileAppBridge } from 'NativeModules'; +import { Dimensions } from 'react-native'; + +const initialState = null; +const memoryHistory = createMemoryHistory(); +const store = configureStore(initialState, memoryHistory); + +////////////////////////////////////////////////////////////////////////// +// Backend +////////////////////////////////////////////////////////////////////////// +const backend = new Backend(store); + +DeviceEventEmitter.addListener('com.mullvad.backend-info', async (_event, args) => { + backend.setCredentials(args.credentials); + backend.sync(); + try { + await backend.autologin(); + await backend.fetchRelaySettings(); + await backend.fetchSecurityState(); + await backend.connect(); + } catch (e) { + if(e instanceof BackendError) { + if(e.type === 'NO_ACCOUNT') { + log.debug('No user set in the backend, showing window'); + MobileAppBridge.showWindow(); + } + } + } +}); + +MobileAppBridge.startBackend().then(_response => {}).catch(e => { + log.error('Failed starting backend:', e); +}); + +const _isPortrait = () => { + const dim = RX.UserInterface.measureWindow(); + return dim.height >= dim.width; +}; + +export default class App extends Component{ + constructor() { + super(); + + this.state = { + orientation: _isPortrait() ? 'portrait' : 'landscape', + }; + + Dimensions.addEventListener('change', () => { + this.setState({ + orientation: _isPortrait() ? 'portrait' : 'landscape' + }); + }); + } + + render() { + return ( + <Provider store={ store }> + <Router history={ memoryHistory }> + { makeRoutes(store.getState, { backend }) } + </Router> + </Provider> + ); + } +} |
