Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

4.0.0

Added

  • The deprecated Callback.statusUpdate(String) and no-argument Callback.taskComplete() hooks now have no-op default implementations. The library never calls either, so implementations no longer need to override them. Existing implementations that do override them are unaffected.

Changed

  • BREAKING CHANGE: only imports change — no method names, signatures or behaviour changed. The library's packages now separate the public API from the implementation: four types are the supported API and sit at the top of com.deviceassure.android.library; everything else — the HTTP client, the collector framework, the request DTO and the helpers — moved under .internal and is no longer visible to a consumer at all. The class name DeviceAssure is deliberately unchanged.

    Migration Guide:

    • com.deviceassure.android.library.networking.DeviceAssure → com.deviceassure.android.library.DeviceAssure
    • com.deviceassure.android.library.networking.Callback → com.deviceassure.android.library.Callback
    • com.deviceassure.android.library.data.collector.collectors.PropertyCollector → com.deviceassure.android.library.PropertyCollector
    • ValidationResult is unchanged at com.deviceassure.android.library.ValidationResult
  • A suspending API is available for Kotlin callers. DeviceAssure.checkAsync, getDataAsync and the two OnSite checkAsync overloads suspend until the validation completes and return a ValidationResult, which is either Success with the response or Error with the reason. ValidationResult also offers getOrNull, getOrThrow, onSuccess and onError.

    This is additive. The existing Callback entry points are unchanged and remain the supported API for Java callers; the suspending functions run the same validation and report the same outcomes.

  • Two new dependencies must be on the consuming application's runtime classpath, because the library (and both sample apps) are now written in Kotlin and use coroutines internally on every validation path, the Callback API included:

    • org.jetbrains.kotlin:kotlin-stdlib — resolving the library from Maven supplies it automatically, via the library's own POM. Only a raw-.aar integration must add it itself, otherwise the first call into DeviceAssure fails with NoClassDefFoundError: kotlin/jvm/internal/Intrinsics.
    • org.jetbrains.kotlinx:kotlinx-coroutines-android — required whether or not the suspending API above is used. Resolving the library from Maven supplies it automatically, via the library's own POM; only a raw-.aar integration must add it itself, otherwise the first call into DeviceAssure fails with a NoClassDefFoundError on a kotlinx/coroutines class.

    The sample app and source packages declare both already. The public API is unchanged: DeviceAssure.init, check and getData keep the same names, signatures and behaviour, and existing Java integrations compile and run against this release without modification. See Add the Dependency.

  • The permissions the library merges into your application have changed. ACCESS_WIFI_STATE is now merged in automatically — no action needed on your part; it is required for the new Wi-Fi and mDNS data described below. READ_PHONE_STATE is no longer merged in: if you relied on the library to supply it, declare it in your own manifest, otherwise the TAC (Type Allocation Code, part of the IMEI) and Manufacturer Code cannot be read on Android 9 (API 28) and lower. Validation itself still succeeds without them; the device profile is simply less complete. See Permissions.

  • The device profile now includes Wi-Fi, mDNS and DRM information, which earlier releases did not collect (see the permissions entry above for the ACCESS_WIFI_STATE change this requires). The full list of collected data groups is in the online documentation.

  • Hearing aid compatibility and TTY mode support are omitted from the device profile unless READ_PHONE_STATE has been granted. This applies on Android 6.0 (API 23) and above with no upper bound, including Android 10 (API 29) and later where the TAC itself no longer needs the permission. Validation is unaffected; the profile is simply less complete.

Fixed

  • A successful check response that carried no body crashed the library. The status code is recorded before the body is read, so a 200 or 202 could reach the JSON parse with nothing to parse and throw a NullPointerException that no caller caught. An absent body is now an empty result, matching how a malformed body already behaved.

Security

  • Fixed a TLS certificate validation bypass. The library installed a trust manager that accepted any certificate, over a context requested as SSL, on every HTTPS request it made. A party holding any certificate for the hostname, self-signed included, could read and alter the traffic between the application and the validation server. The context is now requested as TLS and validates the chain against the platform's trust store, which on Android means the application's network security configuration is honoured.

3.0.3

Changed

  • Updated to use the 0.17 version of the deviceinfo Android library.

3.0.2

Added

  • Added additional headers to API requests: DeviceAssure-Attempt, DeviceAssure-Request-ID, and DeviceAssure-Version.

Changed

  • BREAKING CHANGE: Renamed all DeviceValidation* classes to DeviceAssure* to align with project branding. To migrate:
    • Update imports: import com.deviceassure.android.library.networking.DeviceValidation; → import com.deviceassure.android.library.networking.DeviceAssure;
    • DeviceValidation.init(context) → DeviceAssure.init(context)
    • DeviceValidation.check(licence, callback) → DeviceAssure.check(licence, callback)
    • DeviceValidation.check(callback, urls) → DeviceAssure.check(callback, urls)
    • DeviceValidation.getData(callback) → DeviceAssure.getData(callback)
    • Rename DeviceValidationActivity → DeviceAssureActivity

3.0.1

Changed

  • Updated the retry mechanism to not make multiple requests if the response status code one of 403, 409, 410, 422 or 429.
  • Updated to be JDK 11 based.
  • Migrated to JUnit 5.
  • Updated Examples to use Delegates.
  • Updated to Compile SDK 34

Deprecated

  • Deprecated unused methods in the Callback.

3.0.0

Added

  • Added the library-type header
  • Fixed some typos in README.
  • Added OnSite api calls for specifying a url without a licence.
  • Added OnSite sample app.

Changed

  • Updated strings for app_name to be DeviceAssure instead of DeviceValidation
  • Updated the sample app icons
  • Updated DeviceAtlas Data Collector version to 0.16.1
  • Updated some dependencies.

2.0.7

Changed

  • Updated DeviceAtlas Data Collector version to 0.14

2.0.6

Changed

  • Updating the gradle version of the build tools to 3.4.2 in the root build.gradle
  • Updated the package structure to use com/devicassure
  • Updated targetSdkVersion to 30, buildToolsVersion to 30 and compileVersion to 30 for sdk 30.
  • Updated the android aar package to embed the DeviceInfo library resulting in delivering 1 library to customers.
  • Updated to use the latest version of the DeviceInfo library
  • Updated generation of DeviceAssure library packages

2.0.5

Added

  • Added a new property to indicate when the request is from a Server to Server request.

Changed

  • Updating the gradle version of the build tools to 3.4.2 in the root build.gradle
  • Updated the package structure to use com/devicassure
  • Updated targetSdkVersion to 30, buildToolsVersion to 30 and compileVersion to 30 for sdk 30.

2.0.4

Changed

  • Updated the DataSender to not continue sending requests when a 429 is returned
  • Renamed Counterfeit to Non-Authentic.
  • Updated to use the latest version of the deviceinfo library

2.0.3

Changed

  • Updated targetSdkVersion to 29, buildToolsVersion to 29.0.3.
  • Updated to use Device Atlas data collector version 0.11.

2.0.2

Changed

  • Updated targetSdkVersion to 29, using getImei, getTypeAllocationCode and getManufacturerCode for SDK 29 and higher.
  • Updated to use Device Atlas data collector version 0.10 which supports retrieving the TAC data all the time on SDK 29.

Removed

  • Removed data.installedSystemPackages

2.0.1

Changed

  • Updated Library Source field from Device Validation to Device Validation Android Client in order to be more specific.

2.0.0

Changed

  • Updated to SDK 28 and the androidx packages, updated to use Device Atlas data collector version 0.9 which supports androidx packages

1.1.1

Removed

  • Removed application tag from android library manifest

1.1.0

Added

  • New Server to Server option for calling DeviceAssure

1.0.1

Changed

  • Updated copyright year to 2019 in README

1.0.0

Changed

  • Removing Beta postfix as the library is no longer in beta
  • Updated to send the library version with the collected data