Personal locations
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 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:
1import android.util.Log2import com.tomtom.automotive.integration.client.api.model.Address3import com.tomtom.automotive.integration.client.api.model.Coordinate4import com.tomtom.automotive.integration.client.api.model.NavigableLocation.PersonalLocation5import com.tomtom.automotive.integration.client.api.model.NavigableLocation.Place6import com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManager7import com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.ReservedWordsCatalog8import com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationCallback9import com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationFailure10import com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationParameters11import com.tomtom.automotive.integration.client.api.personalization.savepersonallocation.SavePersonalLocationResponse12import com.tomtom.automotive.integration.client.common.Callback13import com.tomtom.automotive.integration.client.common.Result1415private val TAG = "PersonalLocations"1617fun savePersonalLocation(18 personalLocationsManager: PersonalLocationsManager,19 name: String,20 coordinate: Coordinate,21 storageType: PersonalLocation.StorageType22) {23 val place = Place(coordinate, address = null)24 val personalLocation = PersonalLocation(name = name, place = place, store = storageType)2526 // ReservedWordsCatalog maps keywords like "Home"/"Work" to their storage types27 // Required when saving to HOME or WORK, optional for FAVORITE28 val reservedWordsCatalog = ReservedWordsCatalog("Home", "Work")29 val parameters = SavePersonalLocationParameters(personalLocation, reservedWordsCatalog)3031 personalLocationsManager.savePersonalLocation(32 parameters,33 object : SavePersonalLocationCallback {34 override fun onSaveCompleted(35 result: Result<SavePersonalLocationResponse, SavePersonalLocationFailure>36 ) {37 when (result) {38 is Result.Success -> Log.d(TAG, "Location saved: ${result.value.personalLocationId}")39 is Result.Failure -> Log.e(TAG, "Failed to save location: ${result.reason}")40 }41 }4243 override fun onFunctionalityUnavailable(reason: Callback.Reason) {44 Log.e(TAG, "Save location unavailable: ${reason.devMessage}")45 }46 }47 )48}4950// Usage examples:51// savePersonalLocation(manager, "Home", homeCoordinate, PersonalLocation.StorageType.HOME)52// savePersonalLocation(manager, "Work", workCoordinate, PersonalLocation.StorageType.WORK)53// savePersonalLocation(manager, "Favorite Coffee Shop", cafeCoordinate, PersonalLocation.StorageType.FAVORITE)
Retrieving personal locations
Get saved locations by storage type:
1import android.util.Log2import com.tomtom.automotive.integration.client.api.model.NavigableLocation.PersonalLocation3import com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManager4import com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationFailure5import com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationsCallback6import com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationsParameters7import com.tomtom.automotive.integration.client.api.personalization.getpersonallocation.GetPersonalLocationsResponse8import com.tomtom.automotive.integration.client.common.Callback9import com.tomtom.automotive.integration.client.common.Result1011private val TAG = "PersonalLocations"1213fun getPersonalLocations(personalLocationsManager: PersonalLocationsManager) {14 val storageTypes = listOf(15 PersonalLocation.StorageType.HOME,16 PersonalLocation.StorageType.WORK,17 PersonalLocation.StorageType.FAVORITE,18 PersonalLocation.StorageType.RECENT19 )2021 personalLocationsManager.getPersonalLocations(22 GetPersonalLocationsParameters(storageTypes),23 object : GetPersonalLocationsCallback {24 override fun onCompleted(25 result: Result<GetPersonalLocationsResponse, GetPersonalLocationFailure>26 ) {27 when (result) {28 is Result.Success -> {29 val locations = result.value.personalLocations30 Log.d(TAG, "Retrieved ${locations.size} locations")3132 // Organize by type33 val home = locations.filter { it.store == PersonalLocation.StorageType.HOME }34 val work = locations.filter { it.store == PersonalLocation.StorageType.WORK }35 val favorites = locations.filter { it.store == PersonalLocation.StorageType.FAVORITE }36 val recent = locations.filter { it.store == PersonalLocation.StorageType.RECENT }37 }38 is Result.Failure -> Log.e(TAG, "Failed to get locations: ${result.reason}")39 }40 }4142 override fun onFunctionalityUnavailable(reason: Callback.Reason) {43 Log.e(TAG, "Get locations unavailable: ${reason.devMessage}")44 }45 }46 )47}
Observing location changes
Subscribe to receive updates when favorites or recent destinations change. Use ObservablePersonalLocationsType.FAVORITES or ObservablePersonalLocationsType.RECENTS:
1import android.util.Log2import com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManager3import com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.ObservablePersonalLocationsType4import com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.ObservePersonalLocationsParameters5import com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.PersonalLocationsInfo6import com.tomtom.automotive.integration.client.api.personalization.observepersonallocation.PersonalLocationsListener7import com.tomtom.automotive.integration.client.common.Callback8import com.tomtom.automotive.integration.client.common.SdkReleasable910private val TAG = "PersonalLocations"11private var observeReleasable: SdkReleasable? = null1213fun observePersonalLocations(14 personalLocationsManager: PersonalLocationsManager,15 type: ObservablePersonalLocationsType16) {17 observeReleasable = personalLocationsManager.observePersonalLocations(18 ObservePersonalLocationsParameters(type),19 object : PersonalLocationsListener {20 override fun onPersonalLocations(info: PersonalLocationsInfo) {21 Log.d(TAG, "${type.name} updated: ${info.personalLocations.size} locations")22 }2324 override fun onFunctionalityUnavailable(reason: Callback.Reason) {25 Log.e(TAG, "Observe ${type.name} unavailable: ${reason.devMessage}")26 }27 }28 )29}3031fun stopObserving() {32 observeReleasable?.release()33 observeReleasable = null34}3536// Usage:37// observePersonalLocations(manager, ObservablePersonalLocationsType.FAVORITES)38// observePersonalLocations(manager, ObservablePersonalLocationsType.RECENTS)
Deleting personal locations
Remove a specific location or all locations:
1import android.util.Log2import com.tomtom.automotive.integration.client.api.model.NavigableLocation.PersonalLocation3import com.tomtom.automotive.integration.client.api.personalization.PersonalLocationsManager4import com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationCallback5import com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationFailure6import com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationParameters7import com.tomtom.automotive.integration.client.api.personalization.deletepersonallocation.DeletePersonalLocationResponse8import com.tomtom.automotive.integration.client.common.Callback9import com.tomtom.automotive.integration.client.common.Result1011private val TAG = "PersonalLocations"1213fun deletePersonalLocation(14 personalLocationsManager: PersonalLocationsManager,15 personalLocation: PersonalLocation16) {17 personalLocationsManager.deletePersonalLocation(18 DeletePersonalLocationParameters.Delete(personalLocation),19 object : DeletePersonalLocationCallback {20 override fun onDeleteCompleted(21 result: Result<DeletePersonalLocationResponse, DeletePersonalLocationFailure>22 ) {23 when (result) {24 is Result.Success -> Log.d(TAG, "Location deleted")25 is Result.Failure -> Log.e(TAG, "Failed to delete: ${result.reason}")26 }27 }2829 override fun onFunctionalityUnavailable(reason: Callback.Reason) {30 Log.e(TAG, "Delete location unavailable: ${reason.devMessage}")31 }32 }33 )34}3536fun deleteAllPersonalLocations(personalLocationsManager: PersonalLocationsManager) {37 personalLocationsManager.deletePersonalLocation(38 DeletePersonalLocationParameters.DeleteAll(),39 object : DeletePersonalLocationCallback {40 override fun onDeleteCompleted(41 result: Result<DeletePersonalLocationResponse, DeletePersonalLocationFailure>42 ) {43 when (result) {44 is Result.Success -> {45 val response = result.value as? DeletePersonalLocationResponse.DeleteAllResponse46 Log.d(TAG, "Deleted ${response?.deletedPersonalLocations?.size ?: 0} locations")47 }48 is Result.Failure -> Log.e(TAG, "Failed to delete all: ${result.reason}")49 }50 }5152 override fun onFunctionalityUnavailable(reason: Callback.Reason) {53 Log.e(TAG, "Delete all unavailable: ${reason.devMessage}")54 }55 }56 )57}