Changelog
1.12.6
** Date of release:** 08th February 2023
Changes
- Fix app crash on app start when live data is observed on a background thread
1.12.5
Date of release: 19th December 2022
Changes
- Add helper functions to
UnitController
to manually trigger BlueIdSDK initialization and synchronization.
1.12.4
Date of release: 3rd August 2022
Changes
- MOB-1088 BlueId opening returns an
NoAccessToSecureObjectIdException
when no secureObjectId could be found for the cylinder
Fixes
- PD-586 Add refresh token api to Authentication Interceptor for Error Handling
1.12.3
Date of release: 12th April 2022
Fixes
- initialize AndroidThreeTen in SmartSpacesSdk builder
- set compileSdk to 31; add permission BLUETOOTH_CONNECT to Manifest
1.12.2
Date of release: 8th April 2022
Fixes
- Add missing dependency for
RefreshAuthTokenUseCase
1.12.1
Date of release: 7th April 2022
Fixes
- Use synchronous-gatt 1.1.3 (that remove the
BLUETOOTH_CONNECT
permission - that must only be declared when targeting
Android 12 or higher - which is not the case at the moment)
1.12.0
Date of release: 6th April 2022
Removed
- MOB-953 remove MyRenz (PostBox)
- MOB-952 remove push notifications for Intercom
Changes
- MOB-762 make id from ‘InternalAccessPoint’ available in ‘AccessPoint’ interface
- MOB-638 Increase minSdk version to API 28 (Android 9)
- MOB-857 sample BleScans (by default) with 2 seconds
- MOB-961 improve AuthToken parsing and error handling
Fixes
- Sync BlueId secureIds periodically
- MOB-977 initialization of BlueId can fail after login, so we check at every Activity starts if BlueId was initialized
1.11.2
Date of release: 17th January 2022
Fixes
- MOB-814 fix Proguard configuration for
kotlin-serialization
1.11.1
Date of release: 30th November 2021
Internal
- MOB-516: Log SSLPeerUnverifiedException as error to Timber
1.11.0
Date of release: 15th November 2021
Changes
- Do not report exceptions for
UnknownHostException
, SocketTimeoutException
, ConnectException
.
- MOB-462 set MyRenz opening timeout to 15 seconds
- MOB-463 block multiple MyRenz openings
- MOB-252 SmartSpacesSdk.Builder now expects a
Set
of certificates (String)
- Upgrade Apollo to 2.4.6
Removed
- Remove constructor in Result.Error that takes a list of
Throwable
.
- MOB-343 remove (opt-in) crash reporting to Sentry from SDK
- Remove deprecated PostBoxController
getNearbyPostBoxes(unitId)
- Remove
DebugActivity
1.10.6
Date of release: 3rd November 2021
Fixes
- MOB-590 Coroutines that called a Retrofit Api did not handle Exception (ie
UnknownHostException
, SocketException
, SocketTimeoutException
, SSLException)
properly
1.10.5
Date of release: 15th October 2021
Fixes
- MOB-427 synchronize execution of RegisterMobileDeviceMutation to avoid concurrency problems on the backend
1.10.4
Date of release: 31th August 2021
Fixes
- MOB-430: should not crash on logout when
com.sensorberg.smartspaces:push
dependency is not declared
1.10.3
Date of release: 30th August 2021
Fixes
- MOB-422: SDK will not crash when
com.sensorberg.smartspaces:push
dependency is not declared
1.10.2
Date of release: 9th August 2021
Fixes
- DEV-2931: fix BlueId cylinders not visible after App restart.
Changes
- DEV-2931: removed
isActuatorAvailableNow
from IotUnit
1.10.1
Date of release: 20th July 2021
Fixes
- TSUP-1060: Fix syncing time for BlueId cylinders.
1.10.0
Date of release: 12th July 2021
Fixes
- Fix crash that happened when authenticating the user on backend fails with http error
401
or 403
. Now if the authentication fails the user gets logged out on the device.
- DEV-2608: Fix endless loop when renewal of
AuthToken
failed. After 3 times the user gets logged out.
- DEV-2704: Ensure all controller dependencies gets renewed after logout.
- DEV-2715: SensorbergFirebaseMessagingService did not refresh its own dependencies after logout.
Changes
- DEV-2413
UserManager.usernamePasswordLoginLiveData(): LiveData<SimpleResponse<Void>>
returns now LiveData<Result<Unit>>
- Rename
UserManager.oAuth2LoginLiveData(): LiveData<SimpleResponse<Void>>
to oAuthLoginLiveData
, and it returns now LiveData<Result<Unit>>
UserManager.externalTokenLoginLiveData(): LiveData<SimpleResponse<Void>>
returns now LiveData<Result<Unit>>
- Migrate
UserManager.changePassword
to Coroutines
- DEV-2505: Migrate REST API post request
/api/mobile-sdk/v1/user_devices
to GraphQl mutation viewerRegisterMobileDevice
.
- Rename
oauthId
to clientId
in SmartSpacesSdk.Builder
- DEV-2538: explicitly return nullable values in LiveData
- DEV-2539:
- remove unnecessary properties
connection
and bluetoothScan
from IotDevice
- delete unnecessary class
ConnectionDetails
- DEV-2620
- DEV-2303: added
ringDurationInSeconds
to Call.Incoming
which describes the time a call should ring on the mobile device
- Report parsing errors that happen in
SensorbergFirebaseMessagingService
.
- DEV-2722: LiveData in Controller and Manager interfaces return null after logout.
1.9.0
Date of release: 14th April 2021
- DEV-2381: Refactor BlueId SDK wrapper:
- Increased testability.
- Supporting Coroutines.
- DEV-2402: Add new mutation for answering intercom calls.
- DEV-2378: Upgrade Koin to 2.2.2 (this might require changes if you are using Koin)
- Extract code for push notifications into separate plugin
com.sensorberg.smartspaces:push
. Please read Push Notification for more information of how to use the push notification plugin.
1.9.0-RC-3
Date of release: 24th March 2021
Changes
- DEV-2324: For
SupportUnitController.getUnits()
and SupportUnitController.getUnitsLiveData()
you can now pass a samplePeriodInMillis
parameter.
1.9.0-RC-2
Date of release: 23th March 2021
Changes
- DEV-2352: Change push notification identifier.
1.9.0-RC-1
Date of release: 19th March 2021
Changes
- Rename parameters in
BookingManager
, from
-> endsAfter
, to
-> startsBefore
.
- Coroutines, use
Dispatchers.IO
instead of Dispatchers.Default
.
- Coroutines, use
Dispatchers.Main.immediate
instead of Dispatchers.Main
.
- DEV-2247: In
PostBoxController.getNearbyPostBoxes(Long)
you can now pass refreshInterval: Long
that controls how often PostBoxes should be refreshed from the Backend.
- App can now enable Kalman-Filter for Bluetooth RSSI noise filtering (next to MotionlessAverage). This feature is yet experimental and can be enabled by calling
SmartSpacesSdk.Builder.enableKalmanFilter()
.
New
- DEV-2255: For better error tracking we are using Sentry for receiving centralized crash reports from the SDK. Clients have to opt-in to make this work.
- All support functions that return
Cancelable
do now expect a LifecleOwner
. This will ensure that the Cancelable
will be automatically cancelled on Lifecycle.State.DESTROYED
.
- DEV-2332: Clients can now receive Sensorberg push message by registering
SensorbergFirebaseMessagingService
. For more information please read this document.
Removed
- DEV-2332: With handling push messages within
SensorbergFirebaseMessagingService
, the SecurityController
got obsolete and is now removed.
1.8.3
Date of release: 16th March 2021
Fixes
- Upgrade
ObservableData
to 1.4.1 that fixes an issue that an item was emitted without checking if the channel was closed.
Changes
- Explicitly expose
androidx.lifecycle:lifecycle-livedata-ktx
dependency because the SDK exposes LiveData.
1.8.2
Date of release: 9th February 2021
Changes
- TSUP-704:
BookingManager.getBookableUnits
requires now a ISO8601 timestamp endsAfter
. This will give you all bookings that ends after the given timestamp.
1.8.1
Date of release: 29th January 2021
Fixes
- TSUP-673: Fix crash when using Magneto Tap opening.
Changes
- DEV-2162: SDK clients can now define their own
apduservice.xml
and filter for their own AID for NFC openings.
- DEV-2208: getting AuthToken and PublicKey synchronously, so that registering firebase deviceToken does not run into a deadlock.
New
- DEV-2235:
PostBoxController.getNearbyPostBoxes()
does not need a unitId
for filtering.
Deprecated
- DEV-2235:
PostBoxController.getNearbyPostBoxes(unitId)
.
1.8.0
Date of release: 12th January 2021
Changes
- Building the SDK in
SmartSpacesSdk.Builder
requires now an instance of Application
rather than Context
. The reason is an external partner we are using for opening.
- Clients of the SDK must add
maven { url "https://maven.tapkey.com" }
to their build.gradle
.
- DEV-1624: Auto-connect parameter is set to
true
when connecting to a BLE device.
- Instead of fixed 20 bytes the number of bytes will be now based on requestedMTU - L2CAP_HEADER_SIZE(4 bytes)
- TSUP-519: Unknown GATT response errors are now handled gracefully and will not make the SDK crash.
- TSUP-520: Expect GATT response ending with an optional trailing newline
\n
.
- TSUP-321: Catch rare IncompatibleClassChangeError that happens on some devices (Sony, Samsung) on Android 5 and 6.
- DEV-2004: Added
registerPushNotificationToken(pushNotificationToken: String)
in UserManager
to register device for receiving notification using firebase cloud messaging.
- DEV-2086: Add
SecurityController
that offers a function decrypt
to decrypt any ByteArray with either public or private key type.
- DEV-2065: Parameter
to
in BookingManager.getSchedules()
is now nullable. When to
is null you will get all Schedules after from
.
- DEV-2109: Migrate to Dokka 1.4
1.7.3 - 2020-11-24
Changes
- DEV-1976: Provide a compatability copy method for
NearbyPostBox
.
1.7.2 - 2020-11-09
Changes
- TSUP-483: provide
externalIdentifier
property for class BookableUnit
to let the app filter bookings that are not of type locker
.
1.7.1 - 2020-11-06
Fixes
- TSUP-321: Catch rare
IncompatibleClassChangeError
exception that happens on some devices (Sony, Samsung) on Android 5 and 6.
- DEV-1874: Do early check for properties
baseUrl
and certificate
in SmartSpacesSdk.Builder
. They can break dependency injection, when a required instance can not be created because of a malformed parameter. And the resulting Stacktrace can be misleading here.
1.7.0 - 2020-09-29
Changes
- Remove the Result wrapper in
AuthenticationController
. Now you get a Flow<QrCode>
.
- DEV-1647: Update jsonapi-converter to 0.10
- DEV-1298: In
BookingManager.getBookings()
, make ‘to’ parameter optional. (Note: Backend is pre-sorting bookings by startsAt
).
- DEV-1241: Update Gatt exception messages (to be more clear on the backend).
1.6.1 - 2020-09-09
Changes
- Use shortened pkaId (12 characters - without underscores).
Fix
- Fix crash with Ble scanner.
- Fix crash when trying to unregister BroadcastReceiver that was not registered before.
1.6.0 - 2020-08-14
This versions includes a refactoring of the Bluetooth scanner, supporting now Coroutines.
It also provides new PostBoxController
that scans for nearby MyRenz boxes and opens them.
New
BookingManager
has a new function getBookableParameters()
.
PostBoxController
offering open()
and getNearbyPostBoxes()
functions .
Changes
- Renamed
LetterBoxController
to PostBoxController
.
- BookingManager
getSchedules(unitId: String)
does not return Result<Schedule>
but Result<Paged<TimePeriod>>
instead.
- Removed
com.sensorberg.smartspaces.domain.schedule.Schedule
. List of TimePeriod
and BookableParams
are delivered separately.
Internal
- Refactor Bluetooth Scanner, supporting Coroutines.
1.5.3 - 2020-07-02
- Added:
LetterBoxController
to open a letter box. This Api experimental and will change in future!
1.5.2 - 2020-06-25
- Changed: (DEV-950) When Ble opening fails send the error message that is displayed to the user (incl. error code) to the backend.
1.5.1 - 2020-06-19
- Fixed: (TSUP-124) Bluetooth based opening lead to constant invalid checksum errors
1.5.0 - 2020-06-10
- Added:
query()
to GraphQl
which lets you execute your custom queries.
- Added:
Result.Error
has now a list of Exception
which gives more information by printing StackTraces.
- Added: to
BookingManager
:
getBookings
return your bookings with page information.
getBookableUnits()
return bookable units with page information.
getSchedules()
gives you the already booked times of a unit.
removeBooking()
removes a booking with a given ID.
createBooking()
creates a booking.
- Added:
getRootUnits()
to UnitController
that gives you all root units.
- Changed:
SmartSpacesSdk.refresh()
does not longer expect a vararg
. You can either pass a single Refresh
or a List<Refresh>
.
- Changed: Renew Authentication Token when its older than 24 hours.
- Changed: Move
com.sensorberg.smartspaces.sdk.model.TimePeriod
to com.sensorberg.smartspaces.domain.schedule.TimePeriod
.
- Changed: Remove booking
id
field from TimePeriod
.
- Changed:
Result.onError()
gets called with List<Throwable>
instead of Result<Error>
.
- Changed:
Result.onSuccess()
gets called with data of type T
instead of Result<Success>
.
- Changed:
Result.onLoading()
gets called without any parameter instead of Result<Loading>
.
- Deprecated:
createBookingLiveData()
- Deprecated:
getMyBookingsLiveData()
- Deprecated:
getSchedulesLiveData()
- Deprecated:
endBookingNowLiveData()
- Deprecated:
deleteBookingLiveData()
1.4.0 - 2020-02-19
- Added:
AuthenticationController
that gives you way(s) to authenticate yourself. At the moment it only provide QrCodes.
- Changed:
BookableParams
of type Long
are now nullable - in case they are not set on the Backend.
- Changed: Result has now subtypes
Loading
, Success
or Error
.
- Changed: Clients of the SDK must add
maven { url "https://jitpack.io" }
repository url to their build.gradle
.
- Changed: Renamed functions in
UserManager
, BookingManager
and UnitController
that return LiveData
.
- Deprecated:
IotDeviceController.getStatusLiveData()
, will be removed from SDK soon
- Fixed: When trying to login while you already logged in successfully, you will get an
IllegalStateException
. This prevents having the SDK in a wrong state.
- Fixed: Publish Kotlin Sources and documentation so they are available in your IDE.
1.3.1 - 2020-01-14
1.3.0 - 2020-01-09
- Changed: If network fails and only cached data was available the response status will be
Response.Status.SUCCESS
instead of Response.Status.FAIL
.
- Changed: Increase booking scheduling time frame from 2 to 6 weeks
- Removed: Testing Module containing TestSdk
- Added: Support for Kotlin Coroutines. For clients that are not able to use Kotlin Coroutines alternative methods with a callback parameter are provided.
- In
IotDeviceController
- Changed:
getIotDevices()
renamed to getIotDevicesLiveData()
- Changed:
execute()
renamed to executeLiveData()
- Changed:
getStatus()
renamed to getStatusLiveData()
- Deprecated:
getIotDevicesLiveData()
, will be removed soon from the SDK
- Deprecated:
executeLiveData()
, will be removed soon from the SDK
- In
GraphQl
- Changed:
query()
renamed to queryLiveData()
- Changed:
mutate()
renamed to mutateLiveData()
- Deprecated:
queryLiveData()
, will be removed soon from the SDK
- Deprecated:
mutateLiveData()
, will be removed soon from the SDK
1.2.9 - 2019-10-28
- Changed: GraphQl caching age is controlled by backend
1.2.8 - 2019-10-24
- Changed: Updated to latest blue-id SDK
- Changed: Improve blue-id time-sync
- Fixed: Blue-id battery status handling
1.2.7 - 2019-10-02
- Changed: Improved logout process, avoid leaked objects
- Changed: Improved devices removal from nearby list
- Changed: Preset GraphQL cache expiration
1.2.6 - 2019-09-24
- Added: BookableParameters to IotUnits
- Removed: Deprecated NfcHandler. There are no gateways with NFC tags anymore.
1.2.5 - 2019-09-18
- Added: GraphQl interface
- Added: Caching layer to GraphQl queries
1.2.4.1 - 2019-09-23
- Fixed: NullPointerException handling bad formatted NFC data-packs
1.2.4 - 2019-09-11
- Changed: Update and organization of internal dependencies
1.2.3 - 2019-08-30
- Fixed: Timber crash when network connection fail
1.2.2 - 2019-08-30
- Fixed: Change password error message, when operation fail
1.2.1 - 2019-08-29
- Fixed: GraphQl pooling logic
1.2.0 - 2019-08-23
- Changed: Updated to Koin 2.0
- Added: Support for IotDevices using IotDeviceController
- Added: Locker cluster
- Deprecated: IotDeviceRequest. Renamed to DeprecatedIotDeviceRequest. Instead use IotDeviceController
- Deprecated: IotDeviceState. Renamed to DeprecatedIotDeviceState. Instead use IotDeviceController
- Deprecated: IotDevice. Renamed to DeprecatedIotDevice. Instead use IotDeviceController
1.1.8 - 2019-08-02
- Fixed: Rare crash on backend response parser
- Fixed: Uninitialized unit controller status
1.1.7 - 2019-06-20
- Added: GraphQl Apollo support
- Fixed: Threading issue on bluetooth connection
1.1.6 - 2019-05-23
- Changed: Lower Timber.e to Timber.w for catched exceptions
1.1.5 - 2019-05-21
- Fixed: rare crash on statistics calculation
1.1.4 - 2019-05-16
- Added: IotUnit debug screen
- Added: Detekt checks and fixes
- Fixed: Login process was not changing status to
Initializing
1.1.3 - 2019-05-03 (internal release)
1.1.2 - 2019-05-02 (internal release)
- Added: Improved handling of Actuator request and Statistics post.
- Changed: Updated Gradle Plugin to 3.4.0 and Gradle to 5.1.1
- Fixed: On rare cases opening process stuck.
- Fixed: On rare cases backend does not receive actuator request
1.1.1 - 2019-04-18
- Fixed: Dealing properly when backend sends same actuator in different units
1.1.0 - 2019-04-17
- Added: NfcActivity, see docs for implementation
- Added:
backendUnitType
field to IotUnit class
- Added: DebugActivity
- Removed: AbstractNfcActivity
- Changed: Improved logout handling
- Changed: Improved NFC handling
1.0.5 - 2019-04-09
- Fixed: SDK initialize forever when no connection.
- Changed: Make IotUnit unitId and actuatorId public
1.0.4 - 2019-04-08
- Fixed: Case when UnitController not scaning for devices, would report as
ready
, even if bluetooth or location was off.
- Fixed: Different booking requests and parsing for lockers and doors.
- Changed: Improved blue-id scan detection on
debugGetBlueIdDetails
- Fixed: Blue-id battery -1 on
debugGetBlueIdDetails
1.0.3 - 2019-04-02
- Fixed: Unit Controller would get stuck on
busy
when ble fail on a ble-only unit.
- Fixed:
availableNow
not properly processed.
1.0.2 - 2019-03-26
- Changed: calls to
unitController.open()
do not throw Exception anymore if the controller is not ready. It will return a Response.fail with an IllegalStateException
parameter
1.0.1 - 2019-03-21
- Fixed: ProGuard rules with new
smartspaces
package.
1.0.0 - 2019-03-20
- Changed: renamed from
smartworkspace
to smartspaces
.
This change affects the maven artifacts, package and class names.
0.11.6 - 2019-03-19
- Fixed: Executing state of getSchedules() not reporting properly.
0.11.5 - 2019-03-15
- Fixed: A few different rare crash events.
0.11.4 - 2019-03-13
- Changed: clean-up, removing unused IotUnit.Types
0.11.3 - 2019-03-13
- Changed: improve usage of cached data
- Fixed: IotUnit matching on schedules call
0.11.2 - 2019-03-12
- Changed: extracted CancellationSignal to its own class
0.11.1 - 2019-03-11
- Fixed: Backend endpoint changes
- Changed:
refresh()
can receive multiple parameters.
0.11.0 - 2019-03-11
- Changed: API changes on the SDK interface.
- Added: Added
TapController
and UserManager
- Changed:
UnitController.open
now receives an optional CancellationSignal
and returns a normal LiveData
with the execution status.
- Changed:
refresh()
method accepts optional Refresh
enum to include what’s to be refreshed.
- Changed: Test implementation now is on a separate maven artifact.
0.10.1 - 2019-03-06
- Changed: Changed to WorkManager 1.0.0.
0.10.0 - 2019-02-28
- Changed: Moved the whole project to JetPack (androidx) package naming.
- Fixed: All the internal calls on the SDK now goes through background threads.
0.9.2 - 2019-02-26
- Fixed: Bluetooth scanning crash when enabling/disabling bluetooth radio
0.9.1 - 2019-02-18
- Fixed: Bookings id matching
0.9.0 - 2019-01-24
- Added: Get blue-id details method. This call also fixes blue-id clock if needed
- Fixed: Crash during logout.
- Changed: Better handling of encryptiong failure
- Changed:
getUnits()
Proximity
have been removed in favour of Sorting
. Sorting.None
is the same as Proximity.All
. Sorting.Distance
orders the units from closest to furthers, including all the out-of-range IotUnits. The call IotUnit.isNearby()
should be used to check if unit is in range or not.
0.8.0 - 2018-12-18
- Changed: Simplified SDK status. This is a breaking API change. Check the documentation
- Changed: Updated to Kotlin 1.3.11, Android Gradle Plugin 3.2.1 and Gradle 4.10.3
- Fixed: Automatic logout when encryption fails
- Fixed: Failing decryption when Android auto-backup previous data
- Moved encryptor and preferences to no-backup folder (file-preferences library)
- Fixed: Unit bookings without actuator-id not getting mapped
- Changed: moved API calls to /mobile-sdk/ backend endpoints
- Changed: Improved some Exception messages
- Fixed: Checks to bluetooth radio status before starting scan