From d37fb09d629f6b4523b81a1103abfd58887fa5c7 Mon Sep 17 00:00:00 2001
From: Remy Moll <me@moll.re>
Date: Wed, 25 Sep 2024 15:10:49 +0200
Subject: [PATCH] trip destination from current location

---
 frontend/android/settings.gradle              |  2 +-
 .../lib/modules/new_trip_location_search.dart | 13 ++++-
 .../Flutter/GeneratedPluginRegistrant.swift   |  2 +
 frontend/pubspec.lock                         | 56 +++++++++++++++++--
 frontend/pubspec.yaml                         |  1 +
 .../flutter/generated_plugin_registrant.cc    |  3 +
 .../windows/flutter/generated_plugins.cmake   |  1 +
 7 files changed, 72 insertions(+), 6 deletions(-)

diff --git a/frontend/android/settings.gradle b/frontend/android/settings.gradle
index 1d6d19b..c9fb5ba 100644
--- a/frontend/android/settings.gradle
+++ b/frontend/android/settings.gradle
@@ -20,7 +20,7 @@ pluginManagement {
 plugins {
     id "dev.flutter.flutter-plugin-loader" version "1.0.0"
     id "com.android.application" version "7.3.0" apply false
-    id "org.jetbrains.kotlin.android" version "1.7.10" apply false
+    id "org.jetbrains.kotlin.android" version "2.0.20" apply false
 }
 
 include ":app"
diff --git a/frontend/lib/modules/new_trip_location_search.dart b/frontend/lib/modules/new_trip_location_search.dart
index c737a75..2f285c1 100644
--- a/frontend/lib/modules/new_trip_location_search.dart
+++ b/frontend/lib/modules/new_trip_location_search.dart
@@ -6,6 +6,7 @@ import 'dart:developer';
 
 import 'package:anyway/structs/trip.dart';
 import 'package:flutter/material.dart';
+import 'package:geolocator/geolocator.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 
 class NewTripLocationSearch extends StatefulWidget {
@@ -66,7 +67,17 @@ class _NewTripLocationSearchState extends State<NewTripLocationSearch> {
 
   late Widget useCurrentLocationButton = ElevatedButton(
     onPressed: () async {
-      
+      // this widget is only shown if the user has already granted location permissions
+      Position position = await Geolocator.getCurrentPosition();
+      widget.trip.landmarks.clear();
+      widget.trip.addLandmark(
+        Landmark(
+          uuid: 'pending',
+          name: 'start',
+          location: [position.latitude, position.longitude],
+          type: typeStart
+        )
+      );
     },
     child: Text('Use current location'),
   );
diff --git a/frontend/macos/Flutter/GeneratedPluginRegistrant.swift b/frontend/macos/Flutter/GeneratedPluginRegistrant.swift
index 63ad0d1..c0164f1 100644
--- a/frontend/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/frontend/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -5,12 +5,14 @@
 import FlutterMacOS
 import Foundation
 
+import geolocator_apple
 import path_provider_foundation
 import shared_preferences_foundation
 import sqflite
 import url_launcher_macos
 
 func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
+  GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
   PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
   SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
   SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
diff --git a/frontend/pubspec.lock b/frontend/pubspec.lock
index d6c1b56..7532658 100644
--- a/frontend/pubspec.lock
+++ b/frontend/pubspec.lock
@@ -264,6 +264,54 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "3.2.0"
+  geolocator:
+    dependency: "direct main"
+    description:
+      name: geolocator
+      sha256: "0ec58b731776bc43097fcf751f79681b6a8f6d3bc737c94779fe9f1ad73c1a81"
+      url: "https://pub.dev"
+    source: hosted
+    version: "13.0.1"
+  geolocator_android:
+    dependency: transitive
+    description:
+      name: geolocator_android
+      sha256: "7aefc530db47d90d0580b552df3242440a10fe60814496a979aa67aa98b1fd47"
+      url: "https://pub.dev"
+    source: hosted
+    version: "4.6.1"
+  geolocator_apple:
+    dependency: transitive
+    description:
+      name: geolocator_apple
+      sha256: bc2aca02423ad429cb0556121f56e60360a2b7d694c8570301d06ea0c00732fd
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.3.7"
+  geolocator_platform_interface:
+    dependency: transitive
+    description:
+      name: geolocator_platform_interface
+      sha256: "386ce3d9cce47838355000070b1d0b13efb5bc430f8ecda7e9238c8409ace012"
+      url: "https://pub.dev"
+    source: hosted
+    version: "4.2.4"
+  geolocator_web:
+    dependency: transitive
+    description:
+      name: geolocator_web
+      sha256: "2ed69328e05cd94e7eb48bb0535f5fc0c0c44d1c4fa1e9737267484d05c29b5e"
+      url: "https://pub.dev"
+    source: hosted
+    version: "4.1.1"
+  geolocator_windows:
+    dependency: transitive
+    description:
+      name: geolocator_windows
+      sha256: "53da08937d07c24b0d9952eb57a3b474e29aae2abf9dd717f7e1230995f13f0e"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.2.3"
   google_maps:
     dependency: transitive
     description:
@@ -636,10 +684,10 @@ packages:
     dependency: transitive
     description:
       name: shared_preferences_web
-      sha256: "3a293170d4d9403c3254ee05b84e62e8a9b3c5808ebd17de6a33fe9ea6457936"
+      sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
       url: "https://pub.dev"
     source: hosted
-    version: "2.4.0"
+    version: "2.4.2"
   shared_preferences_windows:
     dependency: transitive
     description:
@@ -873,10 +921,10 @@ packages:
     dependency: transitive
     description:
       name: web
-      sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
+      sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
       url: "https://pub.dev"
     source: hosted
-    version: "0.5.1"
+    version: "1.1.0"
   widget_to_marker:
     dependency: "direct main"
     description:
diff --git a/frontend/pubspec.yaml b/frontend/pubspec.yaml
index ad2961f..98c7fc2 100644
--- a/frontend/pubspec.yaml
+++ b/frontend/pubspec.yaml
@@ -50,6 +50,7 @@ dependencies:
   url_launcher: ^6.3.0
   flutter_launcher_icons: ^0.13.1
   permission_handler: ^11.3.1
+  geolocator: ^13.0.1
 
 dev_dependencies:
   flutter_test:
diff --git a/frontend/windows/flutter/generated_plugin_registrant.cc b/frontend/windows/flutter/generated_plugin_registrant.cc
index a0d0bbe..ce843bc 100644
--- a/frontend/windows/flutter/generated_plugin_registrant.cc
+++ b/frontend/windows/flutter/generated_plugin_registrant.cc
@@ -6,10 +6,13 @@
 
 #include "generated_plugin_registrant.h"
 
+#include <geolocator_windows/geolocator_windows.h>
 #include <permission_handler_windows/permission_handler_windows_plugin.h>
 #include <url_launcher_windows/url_launcher_windows.h>
 
 void RegisterPlugins(flutter::PluginRegistry* registry) {
+  GeolocatorWindowsRegisterWithRegistrar(
+      registry->GetRegistrarForPlugin("GeolocatorWindows"));
   PermissionHandlerWindowsPluginRegisterWithRegistrar(
       registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
   UrlLauncherWindowsRegisterWithRegistrar(
diff --git a/frontend/windows/flutter/generated_plugins.cmake b/frontend/windows/flutter/generated_plugins.cmake
index c20a586..b3ea692 100644
--- a/frontend/windows/flutter/generated_plugins.cmake
+++ b/frontend/windows/flutter/generated_plugins.cmake
@@ -3,6 +3,7 @@
 #
 
 list(APPEND FLUTTER_PLUGIN_LIST
+  geolocator_windows
   permission_handler_windows
   url_launcher_windows
 )