# Change Log
- 1.7.3 Mar 2025
  - ProGuard rules updated to prevent mix case class names
- 1.7.2 Feb 2025
  - Disable R8's full mode to fix ProGuard issues
- 1.7.1 Jan 2025
  - Update targetSdk version to 35
  - Update Android Gradle Plugin to 1.8.22
- 1.7.0 Nov 2024
  - `TealiumInitProvider` added to automatically execute the minimum amount of Tealium work on the Main Thread at app launch
    - This will register for Application/Activity lifecycle events at launch
    - This allows for `Tealium` instances to be safely created off of the Android Main Thread.
    - `Tealium` instances have a grace period of 10s (by default) from launch to be created in order to ensure accurate Activity tracking
      - This time limit is configurable either by:
        - updating the content-provider's meta-data using AndroidManifest merge rules 
        - or by removing it using AndroidManifest merge rules, and calling `ActivityManager.getInstance(context, <timeout in seconds>)` in `Application.onCreate()` before any `Tealium` instances are created.
  - `Batching.batchSize` now actively restricts size to be between 1 and 10
  - `Dispatch.remove(key: String)` method added to allow for removing data
    - this was added to the `interface` in a backward compatible way, but any custom implementations are advised to override the default implementation.
  - BugFix: RemoteCommands not being processed when expected
    - Remote Command processing now inline with [tealium-swift](https://github.com/Tealium/tealium-swift)
    - RemoteCommand events are now processed earlier in the dispatch process, unless explicitly forbidden by a `DispatchValidator` (e.g. Consent or a custom supplied `DispatchValidator`)
    - The exceptions to this are for Batching, Connectivity and Low Battery. 
    - __important__ - Users upgrading to `kotlin-core:1.7.0` are advised to update `kotlin-remotecommand-dispatcher` to `1.5.0` to avoid the possibility of duplicated events
  - BugFix: Queued events sent on backgrounding sometimes caused ANRs or OOM
    - Queue dispatches are now dispatched in batches according to the configured batch size to minimize memory requirements
    - These dispatches are also processed on the Tealium processing thread.
  - RemoteCommandDispatcher 1.5.0
    - RemoteCommand events no longer processed on `onDispatchSend` but only on `onRemoteCommandSend` (WebView controlled) and `onProcessRemoteCommand` (JSON controlled)
    - __important__ - Users upgrading to `kotlin-remotecommand-dispatcher:1.5.0` are advised to update `kotlin-core` to `1.7.0` to avoid the possibility of missed events
  - Location 1.1.3
    - BugFix: Stopping location tracking threw exceptions under some conditions
- 1.6.1 Oct 2024 
  - Added proper error handling for loadFromFile in JsonLoader
  - VisitorService 1.2.1
    - Added proper error handle when saving VisitorProfile
- 1.6.0 May 2024
  - `HttpClient` now supports only retrying on retryable response codes. 
  - BugFix: `ResourceRetriever` refresh interval affecting library settings being fetched too often
  - BugFix: Reinstated missing `ResourceEntity` class
  - RemoteCommandDispatcher 1.4.0
    - Adding a RemoteCommand with a remote URL config, now supports falling back to loading from an `Asset` names `{command id}.json` on the first launch. 
      - if a file name is also provided, then it will use that name to lookup the `Asset`
    - It is also now safe to omit the `.json` extension on the `filename` parameter when adding a new remote command, though the `.json` extension of the actual file should still be present. 
    - BugFix: Refresh interval was not being adhered to
    - *Note* - `com.tealium:kotlin-core` module dependency minimum raised to `1.6.0`
  - TagManagementDispatcher 1.2.2
    - WebView is refreshed on new session to ensure latest IQ configuration is available.  
- 1.5.5 Sep 2023
  - BugFix: proguard adjustment resolve missing `BatchDispatch$Companion` class.
  - Minor lint warning fixes
- 1.5.4 Aug 2023
  - Core 1.5.4
    - Session Data Expiration BugFix: fixes an issue whereby session scoped data may not be expired on launch
    - Event Router events Buffering: buffers events until sdk is ready so events are not missed during startup
    - Database Lock crash BugFix: Some uncaught exceptions in persistence led to possible crashes
    - ProGuard rules updates to reinstate incorrectly obfuscated `BatchDispatch` class
  - AdIdentifier 1.1.2
    - BugFix: DataLayer writes moved onto Tealium background thread
- 1.5.3 Jun 2023
  - Database BugFix: add database status check before performing writable actions, and allow event queueing until database is fully operational
  - Library Settings BugFix: update how remote settings were fetched and saved
  - Module Manager BugFix: update to thread-safe collection
- 1.5.2 Apr 2023
  - Connectivity Collector BugFix:
    - Fixes an issue in the event where there is a blank string returned from `telephonyManager.networkOperator`
  - Deep Link Reporting BugFix:
    - Deep Link handling limited to Activities launched with Intents where action == Intent.ACTION_VIEW
    - Empty Uris are ignored, and deep links that match what is already stored is a no-op 
    - Handling pushed onto Tealium background thread.
- 1.5.1 Oct 2022
  - BugFix - Fixes an edge case where events can arrive at dispatchers in the incorrect order 
- 1.5.0 Oct 2022
  - Visitor Switching
    - Additional TealiumConfig option `visitorIdentityKey` to configure where to find a known identity in the DataLayer
    - Known identities are hashed and linked to the `tealium_visitor_id` to allow better switching between returning identities
  - Additional listeners
    - `VisitorIdUpdatedListener` - notifies when the visitor id has been updated, either as a result of switching identities or of resetting the visitor id
    - `DataLayerUpdatedListener`
      - `onDataUpdated(String, Any)` - notifies that a value has been updated in the DataLayer 
      - `onDataRemoved(Set<String>)` - notifies that the given keys have been removed from the DataLayer, either by user interaction or data expiration
  - RemoteCommandDispatcher 1.2.0
    - Support for default mapping `all_events` and `all_views` in the JSON mappings file to enable triggering specified commands in response to every view/event
  - TagManagement 1.2.0
    - `QueryParameterProvider` - allows additional parameters to be added to the URL used for the TagManagement module
    - Improved WebView instantiation and page load management
  - Kotlin Dependency updates 
    - Stdlib: 1.6.21
    - Coroutines: 1.6.2
- 1.4.3 Sep 2022
  - Core 1.4.3
     - DeviceCollector Bug fix - Correct calculation for tealium_logical_resolution
  - TagManagement 1.1.3
    - Bug fix - Relocate sessionCountingEnabled to fix miscount on fresh launch
  - VisitorService 1.1.1
     - Bug fix - Move VisitorService profile override to earlier initialization
  - Location: Add missing Proguard rules for new classes
- 1.4.2 Jun 2022
  - Core 1.4.2
    - Add `overrideConsentCategoriesKey` to `TealiumConfig` to allow for a custom consent categories key
- 1.4.1 Jun 2022
  - Core 1.4.1
    - Fix: Update Consent Status to return string instead of enum value
- 1.4.0 May 2022
  - Core 1.4.0
    - Add `gatherTrackData` to exposed all datalayer and collectors variables
- 1.3.3 Apr 2022
  - Core 1.3.3
    - Update remote command dependency
  - RemoteCommandDispatcher 1.1.1
    - Add remote command names and versions to datalayer
- 1.3.2 Mar 2022
  - Core 1.3.2
    - `events` property added to `TealiumConfig` to enable adding listeners on startup, as some events could be missed during startup.
  - Lifecycle 1.1.1
    - Fix: Default values for some attributes causing missed events when combined with TagManagement
  - InAppPurchase 1.0.1
    - Additional `purchase_date` key provided in ISO-8601 format
- Tag Management 1.1.2 Feb 2022
  - Add `sessionCountingEnabled` to `TealiumConfig` to enable/disable session counting for TealiumIQ
- 1.3.1 Feb 2022
  - Core 1.3.1
    - Stability fix for failed WebView creation
    - Stability fix for connectivity exception handling
    - InApp Purchase auto tracking 1.0.0 release.
- 1.3.0 Nov 2021
  - Core 1.3.0
    - Missing variables reinstated from the Java library:
      - Default: `tealium_random` and `was_queued`
      - DeviceCollector - `device_battery_percent` and `device_ischarging`
      - TimeCollector - `timestamp_epoch`
    - DataLayer performance improvements, and additional support for storing `JSONArray` objects
    - Dates now get formatted as ISO 8601 as standard
    - Dependency updates to Kotlin, Coroutines, Android Target Version, AGP 7, Java 11, MockK, Robolectric
    - BugFixes:
      - Opaque URI's are now appropriately handled by the DeepLinkHandler
    - Deprecations to unused code
  - AutoTracking 1.0.0
    - New activity tracking module to automatically track screen view events
  - AdIdentifier 1.1.0
    - Support for new AppSet identifier 
    - Dependency Updates in line with Core.
  - CollectDispatcher 1.1.0, TagManagementDispatcher 1.1.0
    - Serialization standardized to use `JsonUtils`
    - Dependency Updates in line with Core.
  - CrashReporter 1.1.0, HostedDataLayer 1.1.0, InstallReferrer 1.1.0, Lifecycle 1.1.0, Location 1.1.0, Media 1.1.0, RemoteCommandDispatcher 1.1.0
    - Dependency Updates in line with Core.
  - VisitorService 1.1.0
    - Additional configuration option to override the Tealium Profile name to use when updating a Visitor: `config.overrideVisitorServiceProfile`
    - Serialization/Deserialization performance improvements
    - Dependency Updates in line with Core.
    - BugFix:
      - Date parsing exception when dates are 0
- 1.2.8 Oct 2021
  - Core 1.2.8 
    - `config.logLevel` added to enable overriding the log level derived from the Environment
    - `consent_last_updated` timestamp is now added to the payload by the Consent Manager for each event
    - Payload key constants migrated to `Dispatch.Keys.XXX` for ease of access
    - Bug Fixes
      - `app_name` now falls back to a non-localized version of the app label
      - Event router crashes caused by threading
      - `screen_title` re-added to the TealiumView payload by default, and set to the viewName when one is not provided in the context data
      - Unnecessary logging removed when trying to load `tealium-settings.json` as an Asset
      - Where multiple deep links occur during a Session, previous deep link params are now removed from the datalayer prior to adding the new ones

  - CollectDispatcher 1.0.6, HostedDataLayer 1.0.4, RemoteCommandDispatcher 1.0.5, TagManagement 1.0.7
    - event key references updated to use the new `Dispatch.Keys.XXX` - note, these are only present in Core 1.2.8+ so should ensure the latest version is in use.
- 1.2.7 Sep 2021
  - Core 1.2.7
    - Support for logical resolution in DeviceData
- 1.2.6 Jul 2021
  - Core 1.2.6
    - Add support for existingVisitorId to TealiumConfig
    - Add support to override profile for Consent Logging using consentManagerLoggingProfile
    - Consent Logging event routed through all enabled Dispatchers
    - Update values for app_build and app_version
  - Tag Management Dispatcher 1.0.6
    - Support for Consent Logging profile override
  - Collect Dispatcher 1.0.5
    - Support for Consent Logging profile override
  - Visitor Service 1.0.5
    - Bug fix: deserializing stored long values
- 1.2.5 May 2021
  - Core 1.2.5
    - BugFix: HttpClient post update fixes issues with consent logging failures.
    - HttpClient execution moved onto IO dispatcher for better asynchronous performance
- 1.2.4 Apr 2021
  - Core 1.2.4
    - New enabled_modules and enabled_modules_versions data layer keys added in keeping with the Swift SDK. Both are arrays of strings, containing a sorted list of Modules in use and their Version number - latest versions of all modules required to retrieve their version. note module names have also been changed from UPPER_SNAKE_CASE to PascalCase to match Swift.
    - New Config option remoteApiEnabled to allow disabling of remote_api events when using the RemoteCommands and TagManagement modules
    - New Config option overrideCollectProfile to allow overriding the value of tealium_profile in the event payload, thus routing events to a different Tealium Profile to the one set on the TealiumConfig object.
    - BugFix - added support for both application/json and x-www-form-urlencoded content types when using the HttpRemoteCommand
    - BugFix - fixed an issue with specific collections not being encoded correctly.
- 1.2.3 Mar 2021
  - Core 1.2.3
    - Consent Management: Add option for setting a custom consent policy.
    - Add new `device_language`, `os_name` to DeviceCollector
  - Crash Reporter 1.0.2
    - Update keys for CrashReporter: `crash_exception_name` changed to `crash_name`, `crash_exception_cause` changed to `crash_cause`  
- 1.2.2 Mar 2021
  - Core 1.2.2
    - Add `request_uuid` to event/view payload
  - TagManagement Dispatcher 1.0.4, RemoteCommand Dispatcher 1.0.3
    - Bug Fix: Route HttpRemoteCommand to background thread for execution.
    - Test updates
- 1.2.1 Mar 2021
  - Proguard and Consumer Rules revision; some public classes were missed initially, and the consumer rules have been revised.
  - Core 1.2.1, Collect Dispatcher 1.0.3, TagManagement Dispatcher 1.0.3, Install Referrer 1.0.2, Lifecycle 1.0.3, Location 1.0.3, VisitorService 1.0.3, RemoteCommand Dispatcher 1.0.2, Hosted DataLayer 1.0.2, Crash Reporter 1.0.1, Ad Identifier 1.0.1
- 1.2.0 Jan 2021
  - Consent Management
    - Consent Expiration - Introduces the ability to set an expiration for provided consent.
    - Deprecated consentManagerEnabled config property; setting a valid ConsentPolicy will automatically enable the Consent Manager.
    - Bug Fix - Incorrect consent collector logic
  - Visitor Id - new method to allow manually regenerating a Visitor Id for the device.
    - Proguard - Initial proguard rules added to generated binaries and consumer proguard rules.
  - AdIdentifier 1.0.0
    - Initial release of the AdIdentifier module - if available, then the ad identifier will be added to each Dispatch
  - CrashReporter 1.0.0
    - Initial release of the CrashReporter module - uncaught exceptions causing a crash are recorded and any crash data is sent on the next dispatch when the app is next launched.
  - Collect Dispatcher 1.0.2, Hosted DataLayer 1.0.1, InstallReferrer 1.0.1, Lifecycle 1.0.2, Location 1.0.2, RemoteCommand Dispatcher 1.0.1, TagManagement Dispatcher 1.0.1, Visitor Service 1.0.2
      - Proguard - Initial proguard rules added to generated binaries and consumer proguard rules.
- 1.1.0 Nov. 2020
  - Timed Events support for reporting the time taken between user events of interest.
  - New device_model and device_manufacturer data keys provided by the DeviceCollector
  - Automated unit and instrumented tests for PRs into master using Github Actions.
  - Collect Dispatcher 1.0.1
    - Additional Collect URL overrides
    - Test coverage increase
  - Hosted Datalayer 1.0.0
    - Test coverage increase
  - Lifecycle 1.0.1
    - Bug Fix: missing autotracked key on sleep events
    - Test coverage increase
    - Location 1.0.1
    - Bug Fix: issue with automatically adding nearby geofences
    - Test coverage increase
  - Visitor Service 1.0.1
    - Non-breaking change for testability purposes
    - Test coverage increase
- 1.0.0 Oct. 2020
  - New and improved modular Tealium Kotlin for Android
  - Release includes modifications based on feedback
  - JSON controlled Remote Commands
  - Hosted Data layer support
    
- 0.1.2 Sept 2020
  - Tealium multi-instance management added
  - Some utilities/modules updated to better support multiple instances

- 0.1.1 Sept 2020
  - Maven dependency fix
  - Additional Dispatch payload logging

- 0.1.0 Beta Release: August 2020
  - Tealium Core
  - Support for the following modules: 
    - Tag Management Dispatcher 
    - Collect Dispatcher
    - Install Referrer 
    - Location
    - Lifecycle Tracking
    - Visitor Service
    - Remote Commands
    - Hosted Data Layer
    - Crash Reporter