Personal locations
Request accessPersonal 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 Type | Description |
|---|---|
StorageType.HOME | User’s home address |
StorageType.WORK | User’s work address |
StorageType.FAVORITE | User-saved favorite locations |
StorageType.RECENT | Automatically 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.Logimport com.tomtom.automotive.integration.client.api.model.Addressimport com.tomtom.automotive.integration.client.api.model.Coordinateimport com.tomtom.automotive.integration.client.api.model.NavigableLocation.PersonalLocationimport com.tomtom.automotive.integration.client.api.model.NavigableLocation.Placeimport com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManagerimport com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.ReservedWordsCatalogimport com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationCallbackimport com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationFailureimport com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationParametersimport com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationResponseimport com.tomtom.automotive.integration.client.common.Callbackimport 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.Logimport com.tomtom.automotive.integration.client.api.model.NavigableLocation.PersonalLocationimport com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManagerimport com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationFailureimport com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationsCallbackimport com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationsParametersimport com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationsResponseimport com.tomtom.automotive.integration.client.common.Callbackimport 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.Logimport com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManagerimport com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.ObservablePersonalLocationsTypeimport com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.ObservePersonalLocationsParametersimport com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.PersonalLocationsInfoimport com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.PersonalLocationsListenerimport com.tomtom.automotive.integration.client.common.Callbackimport 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.Logimport com.tomtom.automotive.integration.client.api.model.NavigableLocation.PersonalLocationimport com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManagerimport com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationCallbackimport com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationFailureimport com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationParametersimport com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationResponseimport com.tomtom.automotive.integration.client.common.Callbackimport 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}") } } )}