diff --git a/forestmapview.kv b/forestmapview.kv index 4ca23dc..ef6a8b4 100644 --- a/forestmapview.kv +++ b/forestmapview.kv @@ -1,6 +1,7 @@ #:import MapView kivy_garden.mapview.MapView #:import GpsBlinker gpsblinker.GpsBlinker #:include gpsblinker.kv +#:include treemarker.kv : lat: 42.131331 diff --git a/forestmapview.py b/forestmapview.py index 17b0c81..7c06e4f 100644 --- a/forestmapview.py +++ b/forestmapview.py @@ -41,7 +41,7 @@ class ForestMapView(MapView): # Create TreeMarker name = tree[0] lat, lon = tree[1], tree[2] - treemarker = TreeMarker(lat=lat, lon=lon, source='assets/images/markers/tree.png') + treemarker = TreeMarker(lat=lat, lon=lon) treemarker.tree_data = treemarker # Add TreeMarker to the map diff --git a/gpshelper.py b/gpshelper.py index aed1dcc..21ce50b 100644 --- a/gpshelper.py +++ b/gpshelper.py @@ -1,12 +1,66 @@ from kivy.app import App +from kivy.utils import platform +from kivymd.uix.dialog import MDDialog class GpsHelper(): + has_centered_map = False + def run(self): # Start blinking the GpsBlinker # Get a reference to GpsBlinker, then call blink() - #gps_blinker = App.get_running_app().root.ids.mapview.ids.blinker + #gps_blinker = App.get_running_app().root.ids.forestmapview.ids.blinker #gps_blinker.blink() - # Request permission on Android - pass \ No newline at end of file + # Request permissions on Android + if platform == 'android': + from android.permissions import Permission, request_permissions + def callback(permission, results): + if all([res for res in results]): + print("Got all permissions") + from plyer import gps + gps.configure(on_location=self.update_blinker_position, + on_status=self.on_auth_status) + gps.start(minTime=1000, minDistance=0) + else: + print("Did not get all permissions") + + request_permissions([Permission.ACCESS_COARSE_LOCATION, + Permission.ACCESS_FINE_LOCATION], callback) + + # Configure GPS + if platform == 'ios': + from plyer import gps + gps.configure(on_location=self.update_blinker_position, + on_status=self.on_auth_status) + gps.start(minTime=1000, minDistance=0) + + + def update_blinker_position(self, *args, **kwargs): + my_lat = kwargs['lat'] + my_lon = kwargs['lon'] + print("GPS POSITION", my_lat, my_lon) + # Update GpsBlinker position + gps_blinker = App.get_running_app().root.ids.mapview.ids.blinker + gps_blinker.lat = my_lat + gps_blinker.lon = my_lon + + # Center map on gps + if not self.has_centered_map: + map = App.get_running_app().root.ids.mapview + map.center_on(my_lat, my_lon) + self.has_centered_map = True + + + def on_auth_status(self, general_status, status_message): + if general_status == 'provider-enabled': + pass + else: + self.open_gps_access_popup() + + def open_gps_access_popup(self): + dialog = MDDialog(title="GPS Error", text="You need to enable GPS access for the app to function properly") + dialog.size_hint = [.8, .8] + dialog.pos_hint = {'center_x': .5, 'center_y': .5} + dialog.open() + diff --git a/main.kv b/main.kv index 5fdd8db..e40989e 100644 --- a/main.kv +++ b/main.kv @@ -2,4 +2,4 @@ ForestMapView: orientation: 'vertical' - id: mapview \ No newline at end of file + id: forestmapview diff --git a/treemarker.py b/treemarker.py index 9795d2f..d8e63bf 100644 --- a/treemarker.py +++ b/treemarker.py @@ -8,4 +8,4 @@ class TreeMarker(MapMarkerPopup): # Open the TreePopupMenu menu = TreePopupMenu(self.tree_data) menu.size_hint = [.8, .9] - menu.open() \ No newline at end of file + menu.open() diff --git a/treepopupmenu.py b/treepopupmenu.py index 55348c3..206eab1 100644 --- a/treepopupmenu.py +++ b/treepopupmenu.py @@ -1,9 +1,9 @@ from kivymd.uix.dialog2 import ListMDDialog -class TreePopupMenu(ListMDDialog): +class TreePopupMenu(ListMDDialog): def __init__(self, tree_data): super().__init__() - + # Set all of the fields of tree data #headers = "Name,Lat,Lon,Description" #headers = headers.split(',') @@ -14,4 +14,4 @@ class TreePopupMenu(ListMDDialog): for i in range(len(headers)): attribute_name = headers[i] attribute_value = tree_data[i] - setattr(self, attribute_name, attribute_value) \ No newline at end of file + setattr(self, attribute_name, attribute_value)