Ver código fonte

Expand Google Maps desktop widget with official Maps URLs.

Redesign Maps variants: small row for driving directions, traffic layer,
and nearby restaurant search; medium for driving/transit directions,
traffic, and saved; new large hub with travel modes, map layers (traffic,
transit, bike paths), satellite, saved, and common nearby searches.

Use api=1 Maps URL scheme for directions, search, and map_action views.
Allow large Maps widgets up to 15 actions (same cap as Gmail and Drive).

Made-with: Cursor
huzaifahayat12 3 meses atrás
pai
commit
fa9c5fcf6f

+ 1 - 1
google_apps/Widgets/DesktopWidgetView.swift

@@ -99,7 +99,7 @@ struct DesktopWidgetView: View {
         case .medium: return 4
         case .large:
             switch WidgetAppProfile.from(app: app) {
-            case .gmail, .drive: return 15
+            case .gmail, .drive, .maps: return 15
             default: return 8
             }
         }

+ 30 - 10
google_apps/Widgets/WidgetTemplates.swift

@@ -221,16 +221,36 @@ enum WidgetTemplates {
                 ]),
             ]
         case .maps:
-            return [
-                v("maps_small", "Maps", .small, false, .actionsRow, [
-                    a("search", "Search", "magnifyingglass", "https://www.google.com/maps"),
-                    a("directions", "Directions", "arrow.triangle.turn.up.right.diamond", "https://www.google.com/maps/dir/"),
-                ]),
-                v("maps_medium", "Places & routes", .medium, true, .actionsGrid(columns: 2), [
-                    a("search", "Search", "magnifyingglass", "https://www.google.com/maps"),
-                    a("directions", "Directions", "arrow.triangle.turn.up.right.diamond", "https://www.google.com/maps/dir/"),
-                    a("saved", "Saved", "bookmark", "https://www.google.com/maps/saved"),
-                    a("traffic", "Traffic", "car", "https://www.google.com/maps/@?layer=traffic"),
+            // Universal Maps URLs use api=1 per https://developers.google.com/maps/documentation/urls/get-started
+            func m(_ path: String) -> String { path }
+            return [
+                v("maps_small", "Navigate", .small, false, .actionsRow, [
+                    a("drive", "Drive", "car.fill", m("https://www.google.com/maps/dir/?api=1&travelmode=driving")),
+                    a("traffic", "Traffic", "road.lanes", m("https://www.google.com/maps/@?api=1&map_action=map&layer=traffic")),
+                    a("search", "Explore", "magnifyingglass", m("https://www.google.com/maps/search/?api=1&query=restaurants")),
+                ]),
+                v("maps_medium", "Routes & layers", .medium, true, .actionsGrid(columns: 2), [
+                    a("drive", "Driving", "car.fill", m("https://www.google.com/maps/dir/?api=1&travelmode=driving")),
+                    a("transit", "Transit", "tram.fill", m("https://www.google.com/maps/dir/?api=1&travelmode=transit")),
+                    a("traffic", "Traffic", "road.lanes", m("https://www.google.com/maps/@?api=1&map_action=map&layer=traffic")),
+                    a("saved", "Saved", "bookmark.fill", m("https://www.google.com/maps/saved")),
+                ]),
+                v("maps_large", "Maps hub", .large, true, .actionsGrid(columns: 2), [
+                    a("drive", "Drive", "car.fill", m("https://www.google.com/maps/dir/?api=1&travelmode=driving")),
+                    a("transitdir", "Transit", "tram.fill", m("https://www.google.com/maps/dir/?api=1&travelmode=transit")),
+                    a("walk", "Walk", "figure.walk", m("https://www.google.com/maps/dir/?api=1&travelmode=walking")),
+                    a("bike", "Bike", "bicycle", m("https://www.google.com/maps/dir/?api=1&travelmode=bicycling")),
+                    a("traffic", "Traffic", "road.lanes", m("https://www.google.com/maps/@?api=1&map_action=map&layer=traffic")),
+                    a("transitmap", "Transit map", "map.circle.fill", m("https://www.google.com/maps/@?api=1&map_action=map&layer=transit")),
+                    a("bikepaths", "Bike paths", "bicycle.circle", m("https://www.google.com/maps/@?api=1&map_action=map&layer=bicycling")),
+                    a("satellite", "Satellite", "globe.americas.fill", m("https://www.google.com/maps/@?api=1&map_action=map&basemap=satellite")),
+                    a("saved", "Saved", "bookmark.fill", m("https://www.google.com/maps/saved")),
+                    a("food", "Restaurants", "fork.knife", m("https://www.google.com/maps/search/?api=1&query=restaurants")),
+                    a("gas", "Gas", "fuelpump.fill", m("https://www.google.com/maps/search/?api=1&query=gas+stations")),
+                    a("hotels", "Hotels", "bed.double.fill", m("https://www.google.com/maps/search/?api=1&query=hotels")),
+                    a("coffee", "Coffee", "cup.and.saucer.fill", m("https://www.google.com/maps/search/?api=1&query=coffee")),
+                    a("parking", "Parking", "parkingsign.circle.fill", m("https://www.google.com/maps/search/?api=1&query=parking")),
+                    a("map", "My map", "map.fill", m("https://www.google.com/maps/@?api=1&map_action=map")),
                 ]),
             ]
         case .youtube: