From b88994292e3e986577815ab4aeda68f3e33e81d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20W=C3=BCthrich?= Date: Fri, 8 Dec 2023 20:38:01 -0800 Subject: [PATCH] [ios] CarPlay search button shows search results MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently the keyboard is blocking the search results in CarPlay. The keyboard cannot be minimized but this commits implements the search button action which shows a list of search results. Fixes: #2241 Signed-off-by: Fabian Wüthrich --- iphone/Maps/Classes/CarPlay/CarPlayService.swift | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/iphone/Maps/Classes/CarPlay/CarPlayService.swift b/iphone/Maps/Classes/CarPlay/CarPlayService.swift index c07a8f1cbc..25ab63b3af 100644 --- a/iphone/Maps/Classes/CarPlay/CarPlayService.swift +++ b/iphone/Maps/Classes/CarPlay/CarPlayService.swift @@ -31,6 +31,7 @@ final class CarPlayService: NSObject { } var preparedToPreviewTrips: [CPTrip] = [] var isUserPanMap: Bool = false + private var searchText = "" @objc func setup(window: CPWindow, interfaceController: CPInterfaceController) { isCarplayActivated = true @@ -480,12 +481,13 @@ extension CarPlayService: CPListTemplateDelegate { // MARK: - CPSearchTemplateDelegate implementation extension CarPlayService: CPSearchTemplateDelegate { func searchTemplate(_ searchTemplate: CPSearchTemplate, updatedSearchText searchText: String, completionHandler: @escaping ([CPListItem]) -> Void) { + self.searchText = searchText let locale = window?.textInputMode?.primaryLanguage ?? "en" guard let searchService = searchService else { completionHandler([]) return } - searchService.searchText(searchText, forInputLocale: locale, completionHandler: { results in + searchService.searchText(self.searchText, forInputLocale: locale, completionHandler: { results in var items = [CPListItem]() for object in results { let item = CPListItem(text: object.title, detailText: object.address) @@ -505,6 +507,18 @@ extension CarPlayService: CPSearchTemplateDelegate { } completionHandler() } + + func searchTemplateSearchButtonPressed(_ searchTemplate: CPSearchTemplate) { + let locale = window?.textInputMode?.primaryLanguage ?? "en" + guard let searchService = searchService else { + return + } + searchService.searchText(searchText, forInputLocale: locale, completionHandler: { [weak self] results in + guard let self = self else { return } + let template = ListTemplateBuilder.buildListTemplate(for: .searchResults(results: results)) + self.pushTemplate(template, animated: true) + }) + } } // MARK: - CarPlayRouterListener implementation