From 620aa3b8d8c21d4135cffffc0e04d43bd542ff9b Mon Sep 17 00:00:00 2001 From: estevez-dev Date: Tue, 3 Sep 2019 20:13:23 +0300 Subject: [PATCH] Disabling location tracking --- lib/main.dart | 6 - lib/managers/location_manager.class.dart | 142 ------------------ .../startup_user_messages_manager.class.dart | 27 +--- lib/panels/config_panel_widget.dart | 69 --------- pubspec.lock | 28 ---- pubspec.yaml | 2 - 6 files changed, 1 insertion(+), 273 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index e6bf49b..125d9f8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,5 @@ import 'dart:convert'; import 'dart:async'; -import 'dart:typed_data'; -import 'dart:isolate'; import 'package:flutter/rendering.dart'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -23,8 +21,6 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:device_info/device_info.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:in_app_purchase/in_app_purchase.dart'; -import 'package:android_alarm_manager/android_alarm_manager.dart'; -import 'package:geolocator/geolocator.dart'; part 'const.dart'; part 'utils/launcher.dart'; @@ -299,7 +295,6 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker _showInfoBottomBar(progress: true,); _subscribe().then((_) { ConnectionManager().init(loadSettings: true, forceReconnect: true).then((__){ - LocationManager(); _fetchData(); StartupUserMessagesManager().checkMessagesToShow(); }, onError: (e) { @@ -312,7 +307,6 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker _hideBottomBar(); _showInfoBottomBar(progress: true,); ConnectionManager().init(loadSettings: false, forceReconnect: false).then((_){ - LocationManager().updateDeviceLocation(); _fetchData(); StartupUserMessagesManager().checkMessagesToShow(); }, onError: (e) { diff --git a/lib/managers/location_manager.class.dart b/lib/managers/location_manager.class.dart index aba9db2..4b3d35f 100644 --- a/lib/managers/location_manager.class.dart +++ b/lib/managers/location_manager.class.dart @@ -2,146 +2,4 @@ part of '../main.dart'; class LocationManager { - static void updateDeviceLocationIsolate() { - print("[Location isolate #${Isolate.current.hashCode}] started"); - SharedPreferences.getInstance().then((prefs){ - print("[Location isolate #${Isolate.current.hashCode}] loading settings"); - String webhookId = prefs.getString('app-webhook-id'); - String domain = prefs.getString('hassio-domain'); - String port = prefs.getString('hassio-port'); - String httpWebHost = - "${prefs.getString('hassio-res-protocol')}://$domain:$port"; - if (webhookId != null && webhookId.isNotEmpty) { - Logger.d("[Location isolate #${Isolate.current.hashCode}] Getting device location..."); - Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.medium).then((location) { - Logger.d("[Location isolate #${Isolate.current.hashCode}] Got location: ${location.latitude} ${location.longitude}. Sending home..."); - int battery = DateTime.now().hour; - String url = "$httpWebHost/api/webhook/$webhookId"; - Map headers = {}; - headers["Content-Type"] = "application/json"; - var data = { - "type": "update_location", - "data": { - "gps": [location.latitude, location.longitude], - "gps_accuracy": location.accuracy, - "battery": battery - } - }; - http.post( - url, - headers: headers, - body: json.encode(data) - ).catchError((e) => print("[Location isolate #${Isolate.current.hashCode}] Error sending data: ${e.toString()}")); - }); - - } else { - print("[Location isolate #${Isolate.current.hashCode}] No webhook id. Aborting"); - } - }); - } - - static final LocationManager _instance = LocationManager - ._internal(); - - factory LocationManager() { - return _instance; - } - - LocationManager._internal() { - init(); - } - - final int defaultUpdateIntervalMinutes = 15; - final int alarmId = 34901199; - Duration _updateInterval; - bool _isEnabled; - - void init() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - await prefs.reload(); - _updateInterval = Duration(minutes: prefs.getInt("location-interval") ?? - defaultUpdateIntervalMinutes); - _isEnabled = prefs.getBool("location-enabled") ?? false; - if (_isEnabled) { - _startLocationService(); - } - } - - void setSettings(bool enabled, int interval) async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - if (interval != _updateInterval.inMinutes) { - prefs.setInt("location-interval", interval); - _updateInterval = Duration(minutes: interval); - } - if (enabled && !_isEnabled) { - Logger.d("Enabling location service"); - SharedPreferences prefs = await SharedPreferences.getInstance(); - prefs.setBool("location-enabled", enabled); - _isEnabled = true; - _startLocationService(); - updateDeviceLocation(); - } else if (!enabled && _isEnabled) { - Logger.d("Disabling location service"); - SharedPreferences prefs = await SharedPreferences.getInstance(); - prefs.setBool("location-enabled", enabled); - _isEnabled = false; - _stopLocationService(); - } - } - - void _startLocationService() async { - Logger.d("Scheduling location update for every ${_updateInterval - .inMinutes} minutes..."); - await AndroidAlarmManager.periodic( - _updateInterval, - alarmId, - LocationManager.updateDeviceLocationIsolate, - wakeup: true, - rescheduleOnReboot: true - ); - } - - void _stopLocationService() async { - Logger.d("Canceling previous schedule if any..."); - await AndroidAlarmManager.cancel(alarmId); - } - - void updateDeviceLocation() async { - if (_isEnabled) { - if (ConnectionManager().webhookId != null && - ConnectionManager().webhookId.isNotEmpty) { - String url = "${ConnectionManager() - .httpWebHost}/api/webhook/${ConnectionManager().webhookId}"; - Map headers = {}; - Logger.d("[Location] Getting device location..."); - Position location = await Geolocator().getCurrentPosition( - desiredAccuracy: LocationAccuracy.medium); - Logger.d("[Location] Got location: ${location.latitude} ${location - .longitude}. Sending home..."); - int battery = DateTime - .now() - .hour; - var data = { - "type": "update_location", - "data": { - "gps": [location.latitude, location.longitude], - "gps_accuracy": location.accuracy, - "battery": battery - } - }; - headers["Content-Type"] = "application/json"; - await http.post( - url, - headers: headers, - body: json.encode(data) - ); - Logger.d("[Location] ...done."); - } else { - Logger.d("[Location] No webhook id. Aborting"); - } - } else { - Logger.d("[Location] Location tracking is disabled"); - } - } - } \ No newline at end of file diff --git a/lib/managers/startup_user_messages_manager.class.dart b/lib/managers/startup_user_messages_manager.class.dart index 8f4111a..bde1a50 100644 --- a/lib/managers/startup_user_messages_manager.class.dart +++ b/lib/managers/startup_user_messages_manager.class.dart @@ -11,43 +11,18 @@ class StartupUserMessagesManager { StartupUserMessagesManager._internal() {} - bool _locationTrackingMessageShown; bool _supportAppDevelopmentMessageShown; - static final _locationTrackingMessageKey = "user-message-shown-location_3"; static final _supportAppDevelopmentMessageKey = "user-message-shown-support-development_3"; void checkMessagesToShow() async { SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.reload(); - _locationTrackingMessageShown = prefs.getBool(_locationTrackingMessageKey) ?? false; _supportAppDevelopmentMessageShown = prefs.getBool(_supportAppDevelopmentMessageKey) ?? false; - if (!_locationTrackingMessageShown) { - _showLocationTrackingMessage(); - } else if (!_supportAppDevelopmentMessageShown) { + if (!_supportAppDevelopmentMessageShown) { _showSupportAppDevelopmentMessage(); } } - void _showLocationTrackingMessage() { - eventBus.fire(ShowPopupDialogEvent( - title: "Device location tracking is here!", - body: "HA Client now support sending your device gps data to device_tracker instance created for current app integration. You can control location tracking in Configuration.", - positiveText: "Enable now", - negativeText: "Cancel", - onPositive: () { - SharedPreferences.getInstance().then((prefs) { - prefs.setBool(_locationTrackingMessageKey, true); - LocationManager().setSettings(true, 15); - }); - }, - onNegative: () { - SharedPreferences.getInstance().then((prefs) { - prefs.setBool(_locationTrackingMessageKey, true); - }); - } - )); - } - void _showSupportAppDevelopmentMessage() { eventBus.fire(ShowPopupDialogEvent( title: "Hi!", diff --git a/lib/panels/config_panel_widget.dart b/lib/panels/config_panel_widget.dart index 9e58dbb..7a33dad 100644 --- a/lib/panels/config_panel_widget.dart +++ b/lib/panels/config_panel_widget.dart @@ -9,40 +9,9 @@ class ConfigPanelWidget extends StatefulWidget { class _ConfigPanelWidgetState extends State { - int _locationInterval = LocationManager().defaultUpdateIntervalMinutes; - bool _locationTrackingEnabled = false; - @override void initState() { super.initState(); - _loadSettings(); - } - - _loadSettings() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - await prefs.reload(); - SharedPreferences.getInstance().then((prefs) { - setState(() { - _locationTrackingEnabled = prefs.getBool("location-enabled") ?? false; - _locationInterval = prefs.getInt("location-interval") ?? LocationManager().defaultUpdateIntervalMinutes; - }); - }); - } - - void incLocationInterval() { - if (_locationInterval < 720) { - setState(() { - _locationInterval = _locationInterval + 1; - }); - } - } - - void decLocationInterval() { - if (_locationInterval > 1) { - setState(() { - _locationInterval = _locationInterval - 1; - }); - } } restart() { @@ -123,43 +92,6 @@ class _ConfigPanelWidgetState extends State { ) ], ), - Divider(), - Text("Location tracking", style: TextStyle(fontSize: Sizes.largeFontSize-2)), - Container(height: Sizes.rowPadding,), - Row( - children: [ - Text("Enable device location tracking"), - Switch( - value: _locationTrackingEnabled, - onChanged: (value) { - SharedPreferences.getInstance().then((prefs) => prefs.setBool("location-enabled", value)); - setState(() { - _locationTrackingEnabled = value; - }); - }, - ), - ], - ), - Container(height: Sizes.rowPadding,), - Text("Location update interval in minutes:"), - Row( - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - children: [ - //Expanded(child: Container(),), - FlatButton( - padding: EdgeInsets.all(0.0), - child: Text("+", style: TextStyle(fontSize: Sizes.largeFontSize)), - onPressed: () => incLocationInterval(), - ), - Text("$_locationInterval", style: TextStyle(fontSize: Sizes.largeFontSize)), - FlatButton( - padding: EdgeInsets.all(0.0), - child: Text("-", style: TextStyle(fontSize: Sizes.largeFontSize)), - onPressed: () => decLocationInterval(), - ), - ], - ) ], ), ), @@ -183,7 +115,6 @@ class _ConfigPanelWidgetState extends State { @override void dispose() { - LocationManager().setSettings(_locationTrackingEnabled, _locationInterval); super.dispose(); } } diff --git a/pubspec.lock b/pubspec.lock index c4fd655..82849b1 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,13 +1,6 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - android_alarm_manager: - dependency: "direct main" - description: - name: android_alarm_manager - url: "https://pub.dartlang.org" - source: hosted - version: "0.4.4" archive: dependency: transitive description: @@ -172,20 +165,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.3.7" - geolocator: - dependency: "direct main" - description: - name: geolocator - url: "https://pub.dartlang.org" - source: hosted - version: "5.1.3" - google_api_availability: - dependency: transitive - description: - name: google_api_availability - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.1" http: dependency: transitive description: @@ -228,13 +207,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.4.0" - location_permissions: - dependency: transitive - description: - name: location_permissions - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.2" logging: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 4093f62..f57c572 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,8 +26,6 @@ dependencies: flutter_secure_storage: ^3.2.1+1 device_info: ^0.4.0+2 flutter_local_notifications: ^0.8.2 - android_alarm_manager: ^0.4.4 - geolocator: ^5.1.3 dev_dependencies: flutter_test: