summaryrefslogtreecommitdiffhomepage
path: root/app
diff options
context:
space:
mode:
authorErik Larkö <erik@mullvad.net>2018-01-25 14:12:45 +0100
committerErik Larkö <erik@mullvad.net>2018-01-25 14:12:45 +0100
commit2ab013667c028a2e75017080d8cffd37a3a6141d (patch)
treed4e669053d43f5c8e2393cab29d0b7558fed1963 /app
parent1bc8293ffebdc4afdb71fbfdafb109aec76d7ef9 (diff)
parent89469094049ee82862079f7b2301037f5aac9e22 (diff)
downloadmullvadvpn-2ab013667c028a2e75017080d8cffd37a3a6141d.tar.xz
mullvadvpn-2ab013667c028a2e75017080d8cffd37a3a6141d.zip
Merge branch 'android-preparation'
Diffstat (limited to 'app')
-rw-r--r--app/app.android.js76
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>
+ );
+ }
+}