diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 054b87f..e309ef2 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -6,7 +6,6 @@
-
diff --git a/lib/main.dart b/lib/main.dart
index 9228a26..2e45d4c 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -4,7 +4,6 @@ import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/material.dart';
-import 'package:flutter/gestures.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:web_socket_channel/io.dart';
import 'package:event_bus/event_bus.dart';
@@ -192,6 +191,10 @@ class _HAClientAppState extends State {
_subscription = purchaseUpdates.listen((purchases) {
_handlePurchaseUpdates(purchases);
});
+ workManager.Workmanager.initialize(
+ updateDeviceLocationIsolate,
+ isInDebugMode: false
+ );
super.initState();
}
diff --git a/lib/managers/connection_manager.class.dart b/lib/managers/connection_manager.class.dart
index c123b4e..2dbe80c 100644
--- a/lib/managers/connection_manager.class.dart
+++ b/lib/managers/connection_manager.class.dart
@@ -20,7 +20,6 @@ class ConnectionManager {
String oauthUrl;
String webhookId;
bool useLovelace = true;
- bool useWebView = false;
bool settingsLoaded = false;
bool get isAuthenticated => _token != null;
StreamSubscription _socketSubscription;
@@ -39,10 +38,10 @@ class ConnectionManager {
Completer completer = Completer();
bool stopInit = false;
if (loadSettings) {
- Logger.e("Loading settings...");
+ Logger.d("Loading settings...");
SharedPreferences prefs = await SharedPreferences.getInstance();
+ Logger.d("..done");
useLovelace = prefs.getBool('use-lovelace') ?? true;
- useWebView = prefs.getBool("use-webview") ?? false;
_domain = prefs.getString('hassio-domain');
_port = prefs.getString('hassio-port');
webhookId = prefs.getString('app-webhook-id');
diff --git a/lib/managers/location_manager.class.dart b/lib/managers/location_manager.class.dart
index ab46f01..3c6f33f 100644
--- a/lib/managers/location_manager.class.dart
+++ b/lib/managers/location_manager.class.dart
@@ -91,12 +91,12 @@ class LocationManager {
},
frequency: interval,
initialDelay: Duration(minutes: delay),
- existingWorkPolicy: workManager.ExistingWorkPolicy.keep,
+ existingWorkPolicy: workManager.ExistingWorkPolicy.replace,
backoffPolicy: workManager.BackoffPolicy.linear,
backoffPolicyDelay: interval,
constraints: workManager.Constraints(
- networkType: workManager.NetworkType.connected
- )
+ networkType: workManager.NetworkType.connected,
+ ),
);
}
}
@@ -149,46 +149,52 @@ class LocationManager {
void updateDeviceLocationIsolate() {
workManager.Workmanager.executeTask((backgroundTask, data) {
- //print("[Background $backgroundTask] Started");
+ Completer completer = Completer();
+ print("[Background $backgroundTask] Started");
Geolocator geolocator = Geolocator();
var battery = Battery();
- int batteryLevel = 100;
+ int batteryLevel = 1;
String webhookId = data["webhookId"];
String httpWebHost = data["httpWebHost"];
if (webhookId != null && webhookId.isNotEmpty) {
- //print("[Background $backgroundTask] hour=$battery");
- String url = "$httpWebHost/api/webhook/$webhookId";
- Map headers = {};
- headers["Content-Type"] = "application/json";
- Map data = {
- "type": "update_location",
- "data": {
- "gps": [],
- "gps_accuracy": 0,
- "battery": batteryLevel
+ String url = "$httpWebHost/api/webhook/$webhookId";
+ Map headers = {};
+ headers["Content-Type"] = "application/json";
+ Map data = {
+ "type": "update_location",
+ "data": {
+ "gps": [],
+ "gps_accuracy": 0,
+ "battery": batteryLevel
+ }
+ };
+ print("[Background $backgroundTask] Getting battery level...");
+ battery.batteryLevel.then((val) => data["data"]["battery"] = val).whenComplete((){
+ print("[Background $backgroundTask] Battery level is ${data["data"]["battery"]}. Getting device location...");
+ geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high, locationPermissionLevel: GeolocationPermission.locationAlways).then((location) {
+ if (location != null) {
+ print("[Background $backgroundTask] Got location: ${location.latitude} ${location.longitude}");
+ data["data"]["gps"] = [location.latitude, location.longitude];
+ data["data"]["gps_accuracy"] = location.accuracy;
+ print("[Background $backgroundTask] Sending data home.");
+ http.post(
+ url,
+ headers: headers,
+ body: json.encode(data)
+ );
+ completer.complete(true);
+ } else {
+ print("[Background $backgroundTask] Can't get device location. Location is null");
+ completer.complete(true);
}
- };
- //print("[Background $backgroundTask] Getting battery level...");
- battery.batteryLevel.then((val) => data["data"]["battery"] = val).whenComplete((){
- //print("[Background $backgroundTask] Getting device location...");
- geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high, locationPermissionLevel: GeolocationPermission.locationAlways).then((location) {
- if (location != null) {
- //print("[Background $backgroundTask] Got location: ${location.latitude} ${location.longitude}");
- data["data"]["gps"] = [location.latitude, location.longitude];
- data["data"]["gps_accuracy"] = location.accuracy;
- //print("[Background $backgroundTask] Sending data home.");
- http.post(
- url,
- headers: headers,
- body: json.encode(data)
- );
- } else {
- throw "Can't get device location. Location is null";
- }
- }).catchError((e) {
- //print("[Background $backgroundTask] Error getting current location: ${e.toString()}");
- });
+ }).catchError((e) {
+ print("[Background $backgroundTask] Error getting current location: ${e.toString()}");
+ completer.complete(true);
});
+ });
+ } else {
+ print("[Background $backgroundTask] Not configured");
+ completer.complete(true);
}
return Future.value(true);
});
diff --git a/lib/pages/main/main.page.dart b/lib/pages/main/main.page.dart
index 7085b76..32c016a 100644
--- a/lib/pages/main/main.page.dart
+++ b/lib/pages/main/main.page.dart
@@ -29,10 +29,6 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker
@override
void initState() {
super.initState();
- workManager.Workmanager.initialize(
- updateDeviceLocationIsolate,
- isInDebugMode: false
- );
WidgetsBinding.instance.addObserver(this);
_firebaseMessaging.configure(
@@ -118,25 +114,6 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker
}
_fetchData() async {
- if (ConnectionManager().useWebView) {
- //final flutterWebViewPlugin = new FlutterWebviewPlugin();
-
- /*flutterWebViewPlugin.onStateChanged.listen((viewState) async {
- if (viewState.type == WebViewState.startLoad) {
- Logger.d("[WebView] Injecting external auth JS");
- rootBundle.loadString('assets/js/externalAuth.js').then((js){
- flutterWebViewPlugin.evalJavascript(js.replaceFirst("[token]", ConnectionManager()._token));
- });
- }
- });
-
- flutterWebViewPlugin.onUrlChanged.listen((String url) {
- if (url.contains("htcmd://show-settings")) {
- flutterWebViewPlugin.hide();
- Navigator.pushNamed(context, "/connection-settings");
- }
- });*/
- }
await HomeAssistant().fetchData().then((_) {
_hideBottomBar();
if (_entityToShow != null) {
@@ -857,17 +834,7 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker
);
}
}
- if (!ConnectionManager().settingsLoaded) {
- return Scaffold(
- key: _scaffoldKey,
- primary: false,
- //bottomNavigationBar: bottomBar,
- body: Container(
- color: Colors.blue,
- )
- );
- } else {
- if (HomeAssistant().isNoViews) {
+ if (HomeAssistant().isNoViews) {
return Scaffold(
key: _scaffoldKey,
primary: false,
@@ -894,7 +861,6 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker
},
);
}
- }
}
@override