Automotive Navigation Application

Personal locations

Request access

Personal locations

The PersonalLocationsManager allows clients to save, retrieve, and manage personal locations in the navigation application. This includes favorites, home, work addresses, and recent destinations.

Overview

PersonalLocationsManager provides functionality for:

  • Saving personal locations (Home, Work, Favorites)
  • Retrieving saved locations by storage type
  • Observing favorite and recent location changes
  • Deleting personal locations

Storage types

Personal locations are organized by storage type:

Storage TypeDescription
StorageType.HOMEUser’s home address
StorageType.WORKUser’s work address
StorageType.FAVORITEUser-saved favorite locations
StorageType.RECENTAutomatically saved recent destinations

Saving personal locations

Save a location with a specific storage type. The same method works for Home, Work, and Favorites—just change the StorageType:

import android.util.Log
import com.tomtom.automotive.integration.client.api.model.Address
import com.tomtom.automotive.integration.client.api.model.Coordinate
import com.tomtom.automotive.integration.client.api.model.NavigableLocation.PersonalLocation
import com.tomtom.automotive.integration.client.api.model.NavigableLocation.Place
import com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManager
import com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.ReservedWordsCatalog
import com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationCallback
import com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationFailure
import com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationParameters
import com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationResponse
import com.tomtom.automotive.integration.client.common.Callback
import com.tomtom.automotive.integration.client.common.Result
private val TAG = "PersonalLocations"
fun savePersonalLocation(
personalLocationsManager: PersonalLocationsManager,
name: String,
coordinate: Coordinate,
storageType: PersonalLocation.StorageType
) {
val place = Place(coordinate, address = null)
val personalLocation = PersonalLocation(name = name, place = place, store = storageType)
// ReservedWordsCatalog maps keywords like "Home"/"Work" to their storage types
// Required when saving to HOME or WORK, optional for FAVORITE
val reservedWordsCatalog = ReservedWordsCatalog("Home", "Work")
val parameters = SavePersonalLocationParameters(personalLocation, reservedWordsCatalog)
personalLocationsManager.savePersonalLocation(
parameters,
object : SavePersonalLocationCallback {
override fun onSaveCompleted(
result: Result<SavePersonalLocationResponse, SavePersonalLocationFailure>
) {
when (result) {
is Result.Success -> Log.d(TAG, "Location saved: ${result.value.personalLocationId}")
is Result.Failure -> Log.e(TAG, "Failed to save location: ${result.reason}")
}
}
override fun onFunctionalityUnavailable(reason: Callback.Reason) {
Log.e(TAG, "Save location unavailable: ${reason.devMessage}")
}
}
)
}
// Usage examples:
// savePersonalLocation(manager, "Home", homeCoordinate, PersonalLocation.StorageType.HOME)
// savePersonalLocation(manager, "Work", workCoordinate, PersonalLocation.StorageType.WORK)
// savePersonalLocation(manager, "Favorite Coffee Shop", cafeCoordinate, PersonalLocation.StorageType.FAVORITE)

Retrieving personal locations

Get saved locations by storage type:

import android.util.Log
import com.tomtom.automotive.integration.client.api.model.NavigableLocation.PersonalLocation
import com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManager
import com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationFailure
import com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationsCallback
import com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationsParameters
import com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationsResponse
import com.tomtom.automotive.integration.client.common.Callback
import com.tomtom.automotive.integration.client.common.Result
private val TAG = "PersonalLocations"
fun getPersonalLocations(personalLocationsManager: PersonalLocationsManager) {
val storageTypes = listOf(
PersonalLocation.StorageType.HOME,
PersonalLocation.StorageType.WORK,
PersonalLocation.StorageType.FAVORITE,
PersonalLocation.StorageType.RECENT
)
personalLocationsManager.getPersonalLocations(
GetPersonalLocationsParameters(storageTypes),
object : GetPersonalLocationsCallback {
override fun onCompleted(
result: Result<GetPersonalLocationsResponse, GetPersonalLocationFailure>
) {
when (result) {
is Result.Success -> {
val locations = result.value.personalLocations
Log.d(TAG, "Retrieved ${locations.size} locations")
// Organize by type
val home = locations.filter { it.store == PersonalLocation.StorageType.HOME }
val work = locations.filter { it.store == PersonalLocation.StorageType.WORK }
val favorites = locations.filter { it.store == PersonalLocation.StorageType.FAVORITE }
val recent = locations.filter { it.store == PersonalLocation.StorageType.RECENT }
}
is Result.Failure -> Log.e(TAG, "Failed to get locations: ${result.reason}")
}
}
override fun onFunctionalityUnavailable(reason: Callback.Reason) {
Log.e(TAG, "Get locations unavailable: ${reason.devMessage}")
}
}
)
}

Observing location changes

Subscribe to receive updates when favorites or recent destinations change. Use ObservablePersonalLocationsType.FAVORITES or ObservablePersonalLocationsType.RECENTS:

import android.util.Log
import com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManager
import com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.ObservablePersonalLocationsType
import com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.ObservePersonalLocationsParameters
import com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.PersonalLocationsInfo
import com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.PersonalLocationsListener
import com.tomtom.automotive.integration.client.common.Callback
import com.tomtom.automotive.integration.client.common.SdkReleasable
private val TAG = "PersonalLocations"
private var observeReleasable: SdkReleasable? = null
fun observePersonalLocations(
personalLocationsManager: PersonalLocationsManager,
type: ObservablePersonalLocationsType
) {
observeReleasable = personalLocationsManager.observePersonalLocations(
ObservePersonalLocationsParameters(type),
object : PersonalLocationsListener {
override fun onPersonalLocations(info: PersonalLocationsInfo) {
Log.d(TAG, "${type.name} updated: ${info.personalLocations.size} locations")
}
override fun onFunctionalityUnavailable(reason: Callback.Reason) {
Log.e(TAG, "Observe ${type.name} unavailable: ${reason.devMessage}")
}
}
)
}
fun stopObserving() {
observeReleasable?.release()
observeReleasable = null
}
// Usage:
// observePersonalLocations(manager, ObservablePersonalLocationsType.FAVORITES)
// observePersonalLocations(manager, ObservablePersonalLocationsType.RECENTS)

Deleting personal locations

Remove a specific location or all locations:

import android.util.Log
import com.tomtom.automotive.integration.client.api.model.NavigableLocation.PersonalLocation
import com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManager
import com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationCallback
import com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationFailure
import com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationParameters
import com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationResponse
import com.tomtom.automotive.integration.client.common.Callback
import com.tomtom.automotive.integration.client.common.Result
private val TAG = "PersonalLocations"
fun deletePersonalLocation(
personalLocationsManager: PersonalLocationsManager,
personalLocation: PersonalLocation
) {
personalLocationsManager.deletePersonalLocation(
DeletePersonalLocationParameters.Delete(personalLocation),
object : DeletePersonalLocationCallback {
override fun onDeleteCompleted(
result: Result<DeletePersonalLocationResponse, DeletePersonalLocationFailure>
) {
when (result) {
is Result.Success -> Log.d(TAG, "Location deleted")
is Result.Failure -> Log.e(TAG, "Failed to delete: ${result.reason}")
}
}
override fun onFunctionalityUnavailable(reason: Callback.Reason) {
Log.e(TAG, "Delete location unavailable: ${reason.devMessage}")
}
}
)
}
fun deleteAllPersonalLocations(personalLocationsManager: PersonalLocationsManager) {
personalLocationsManager.deletePersonalLocation(
DeletePersonalLocationParameters.DeleteAll(),
object : DeletePersonalLocationCallback {
override fun onDeleteCompleted(
result: Result<DeletePersonalLocationResponse, DeletePersonalLocationFailure>
) {
when (result) {
is Result.Success -> {
val response = result.value as? DeletePersonalLocationResponse.DeleteAllResponse
Log.d(TAG, "Deleted ${response?.deletedPersonalLocations?.size ?: 0} locations")
}
is Result.Failure -> Log.e(TAG, "Failed to delete all: ${result.reason}")
}
}
override fun onFunctionalityUnavailable(reason: Callback.Reason) {
Log.e(TAG, "Delete all unavailable: ${reason.devMessage}")
}
}
)
}