mirror of
https://github.com/twinksoftware/Gearslip.git
synced 2026-11-11 08:12:26 +01:00
voice: "navigate to the nearest gas station" searches for a gas station near the car
This commit is contained in:
1 parent
0bdc51ff6c
commit
8912e88406
1 file changed
+31
-1
@@ -124,6 +124,10 @@ object AssistantCommands {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// "the nearest gas station" -> "gas station": the map app already searches around the car
|
||||||
|
// (see CarMotion.nearHere), and Organic Maps took "nearest" as part of the name.
|
||||||
|
val (place, nearby) = plainPlace(destination)
|
||||||
|
destination = place
|
||||||
if (destination.isBlank()) return "Where to?"
|
if (destination.isBlank()) return "Where to?"
|
||||||
|
|
||||||
val chosen = chosenApp ?: when {
|
val chosen = chosenApp ?: when {
|
||||||
@@ -134,7 +138,23 @@ object AssistantCommands {
|
|||||||
|
|
||||||
CarServices.connectNav(template, frame, destination)
|
CarServices.connectNav(template, frame, destination)
|
||||||
navigator.home()
|
navigator.home()
|
||||||
return "Navigating to $destination with ${chosen.label}."
|
return if (nearby) "Finding the nearest $destination with ${chosen.label}." else "Navigating to $destination with ${chosen.label}."
|
||||||
|
}
|
||||||
|
|
||||||
|
/** [destination] without "a", "the nearest", "near me" and the like, and whether any of that said "close by". */
|
||||||
|
private fun plainPlace(destination: String): Pair<String, Boolean> {
|
||||||
|
var t = destination
|
||||||
|
var nearby = false
|
||||||
|
var changed = true
|
||||||
|
while (changed) {
|
||||||
|
changed = false
|
||||||
|
for (lead in PLACE_LEADS) if (t.startsWith(lead)) {
|
||||||
|
t = t.removePrefix(lead).trim(); changed = true
|
||||||
|
if (lead.trim() !in ARTICLES) nearby = true
|
||||||
|
}
|
||||||
|
for (tail in PLACE_TAILS) if (t.endsWith(tail)) { t = t.removeSuffix(tail).trim(); changed = true; nearby = true }
|
||||||
|
}
|
||||||
|
return t to nearby
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -316,8 +336,18 @@ object AssistantCommands {
|
|||||||
"navigate to ", "navigate me to ", "directions to ", "get directions to ", "give me directions to ",
|
"navigate to ", "navigate me to ", "directions to ", "get directions to ", "give me directions to ",
|
||||||
"take me to ", "drive to ", "drive me to ", "get me to ", "go to ", "head to ", "route to ",
|
"take me to ", "drive to ", "drive me to ", "get me to ", "go to ", "head to ", "route to ",
|
||||||
"how do i get to ", "show me the way to ", "find a route to ", "navigation to ", "get to ",
|
"how do i get to ", "show me the way to ", "find a route to ", "navigation to ", "get to ",
|
||||||
|
// Last, so "navigate to" wins: the recognizer sometimes drops the "to".
|
||||||
|
"navigate me ", "navigate ", "find me the nearest ", "find the nearest ", "find the closest ",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private val ARTICLES = setOf("a", "an", "the", "some")
|
||||||
|
// Longest first, so "the nearest " goes before "the ".
|
||||||
|
private val PLACE_LEADS = listOf(
|
||||||
|
"the nearest ", "the closest ", "a nearby ", "the nearby ", "nearest ", "closest ", "nearby ",
|
||||||
|
"a ", "an ", "some ",
|
||||||
|
)
|
||||||
|
private val PLACE_TAILS = listOf(" near me", " nearby", " near here", " around here", " close by", " closest to me")
|
||||||
|
|
||||||
private val PLAY_TRIGGERS = listOf("play me ", "play ", "put on ", "listen to ", "i want to hear ", "shuffle ")
|
private val PLAY_TRIGGERS = listOf("play me ", "play ", "put on ", "listen to ", "i want to hear ", "shuffle ")
|
||||||
|
|
||||||
private val CALL_TRIGGERS = listOf("call ", "phone ", "dial ", "ring ", "make a call to ", "place a call to ", "start a call with ")
|
private val CALL_TRIGGERS = listOf("call ", "phone ", "dial ", "ring ", "make a call to ", "place a call to ", "start a call with ")
|
||||||
|
|||||||
Reference in new issue
Block a user