Release Notes

7.1.0

New

  • Added a new VirtualService.getVideoCallStatistics() that returns statistics information about a video conference that occurred in the current DexCare SDK session.
  • Added a new method VirtualService.getVirtualVisitStatus(visitId: String) which returns the current status of a virtual visit. This can be used to determine if a visit can be reconnected to using VirtualService.resumeVirtualVisit.
  • The SDK now performs a device health check before entering the virtual visit waiting room. The check ensures that the device has a camera and microphone, both of which are required for virtual visits. In the event that the device does not have one or neither of them, a new UnsupportedDeviceError will be returned in the VirtualService.startVirtualVisit and VirtualService.resumeVirtualVisit methods.
  • Added a new PatientQuestion model. The RetailVisitInformation and ProviderVisitInformation objects now optionally take in a list of PatientQuestion. This can be used during retail and provider visits to pass additional information through to the Epic appointment record.

Important

  • When booking for retail, virtual, or provider, the visitDetails.contactPhoneNumber will be the only valid phone number needed. In previous versions, on someone else visits, the demographic.homePhone was required to be valid. Going forward, the SDK will only use contactPhoneNumber. If the phone number is different between the demographic.homePhone and the contactPhoneNumber then in Virtual Visits, the PRR will see the difference and can adjust the EPIC record if needed. It is recommended that on intake, you provide a Phone Number field that can be prepopulated with whichever phone you wish. That phone number should be saved to the visitDetails.contactPhoneNumber on booking.

Internal

  • Extended the amount of time the SDK will attempt to reconnect to a virtual visit upon a disconnect. The reconnecting spinner dialog now has a Cancel button. Users can use this button to stop reconnection attempts, and upon confirmation will be removed from the virtual visit. The visit remains active and can be rejoined using VirtualService.resumeVirtualVisit.
  • Button order updated for some dialogs inside virtual visit, according to Material Design. The confirmation button is now always the right-most button, and cancel is always left-most.
  • Updated endpoint for ProviderService.getProviderTimeSlots to a new version.
  • Kotlin updated from 1.5.0 to 1.5.21.
  • Android Gradle build tools updated from 4.2.1 to 4.2.2.
  • Jackson & Jackson-related dependencies updated from 2.12.2 to 2.12.4.

Breaking

  • Renamed SessionStatus to VisitStatus. This model was marked as public, but there wasn’t much use for it anywhere outside the SDK. Therefore, it will most likely be a seamless upgrade.

7.0.1

Fixed

  • Reverted changes in 7.0.0 related to Chuck. The Environment.isProd flag now controls whether or not Chuck will appear, as it did before 7.0.0.

7.0.0

New

  • Introduced a new VirtualEventListener interface that can optionally be set on VirtualService to listen for various events while the patient is inside the waiting room/video conference. Note that the listener should primarily be used for logging purposes.
  • Reintroduced VirtualService.getEstimatedWaitTime(visitId) as a public method. This can be used to get the estimated wait time for a particular visit. This is the same info that is displayed to the user in the waiting room.
  • Added a new PracticeService.getEstimatedWaitTime(practiceRegionId) method, which will retrieve the estimated wait time for a specific Virtual Practice region. Note that the estimate is cached and updated every 5 minutes.
  • Added a new CustomizationOptions.validateEmails boolean which allows the ability to disable email validation within the SDK.

Breaking

  • Several Date types in SDK models have been replaced by more appropriate Java 8 Date Time types. See the SDK 7.0 migration guide for details.
  • Removed deprecated models/methods/properties:
    • Address.address
    • Address.address2
    • Region
    • RetailService.uploadInsuranceCard
    • VirtualPracticeRegion.getVisitPriceInDollars
    • VirtualService.startVirtualVisit methods without practiceId argument
    • VirtualService.getRegions
    • VirtualService.getRegionAvailability
    • VirtualService.getInsurancePayers
    • VirtualService.verifyCouponCode
    • VirtualVisitInformation.currentState
  • Removed all of the DexCare SDK’s Date extension functions. They are no longer needed with the Java 8 Date Time types.
  • Changes around visit types:
    • AllowedVisitType.visitType renamed to AllowedVisitType.shortName.
    • AllowedVisitType.visitType type changed to a new VisitTypeShortName type (which is a typealias of String).
    • RetailService.getTimeSlots method’s allowedVisitType parameter changed to visitTypeShortName: VisitTypeShortName. This means that you can retrieve time slots for any visit type you want to support, and the SDK no longer restricts to the few that were defined in the VisitType enum.
    • ProviderService.getMaxLookaheadDays method’s visitTypeShortName type changed to VisitTypeShortName from String (no functional change).
    • ProviderVisitType.shortName type changed to VisitTypeShortName from String (no functional change).
    • VisitType.type renamed to VisitType.shortName
    • VisitType.type type changed to VisitTypeShortName from String (no functional change).
  • Removed MissingPropertyError as it was no longer returned in any SDK method.
  • Removed UnexpectedMethodOrderError as it was no longer returned in any SDK method.
  • Removed VirtualService.VISIT_NOT_TOKBOX_RESULT_CODE result code as it is no longer returned. All visits are now assumed to be TokBox.
  • All methods in PracticeService can now return a MissingInformationError when a required parameter is empty.
  • The no-op version of Chuck is now used for release builds. This means that even when Environment.isProd is false for release builds, Chuck will not appear.

Deprecated

  • EmailValidator.EMAIL_REGEX is now deprecated. It is renamed to EmailValidator.EMAIL_VALIDATION_REGEX to match iOS.

Fixed

  • Fixed proguard rules to keep VirtualService’s companion object, allowing access to the SDK’s result codes for the virtual visit activity.
  • Fixed YouTube player initialization error on API 30 devices.
  • Only the first address in the PatientDemographics.addresses list is now validated for the Retail, Virtual, and Provider scheduling APIs. All addresses are still validated for PatientService.findOrCreatePatient and PatientService.findOrCreateDependentPatient APIs.
  • ServiceUnavailableError now correctly extends sealed class NetworkError instead of Throwable.

Internal

  • Updated OpenTok to version 2.20.1.
  • Core library desugaring is now enabled in the SDK.
  • Kotlin updated from 1.4.21 to 1.5.0.
  • RxJava updated from 2.2.11 to 3.0.12.
  • RxAndroid updated from 2.1.1 to 3.0.0.
  • RxPermissions updated from 0.11 to 0.12.
  • Retrofit updated from 2.6.1 to 2.9.0.
  • Jackson & Jackson-related dependencies updated from 2.11.1 to 2.12.2.
  • The SDK now depends on com.fasterxml.jackson.datatype:jackson-datatype-jsr310 version 2.12.2.
  • Koin updated from 2.2.0 to 2.2.2.
    • Note: Koin’s groupid changed when migrating to MavenCentral. It’s now io.insert-koin instead of org.koin.
  • The SDK no longer depends on com.xwray:groupie and com.xwray:groupie-databinding.
  • Androidx Navigation Component updated from 2.3.3 to 2.3.5.
  • Removed usage kotlin-android-extensions plugin which is now deprecated.
  • Migrated to kotlin-parcelize plugin as a replacement for functionality that was available in kotlin-android-extensions.
  • Updated to a new version of the Virtual Visit wait time endpoint.
  • JCenter is no longer used as a dependency repository. MavenCentral should be used instead.
  • All non-network-related errors returned by the SDK are now logged for debugging purposes.

6.1.3

Changed

  • ZipCodeValidator (and the SDK as a result) now accepts 9-digit zip codes in addition to 5-digit zip codes. A hyphen is required for 9-digit zips.
  • ZipCodeValidator.ZIP_CODE_VALIDATION_REGEX is added. This is the regex used in the ZipCodeValidator.isValid method.
  • InvalidPatientDemographicsObjectError no longer returns the address in the error message when the zip code is invalid, and instead returns the index of the address in the addresses list.

6.1.2

New

  • Added a new optional parameter to the CustomizationOptions model, VirtualConfig. This new model contains various customization options related the the virtual visit experience. VirtualConfig currently has two optional parameters:
    • showWaitingRoomVideo - Whether or not to display the YouTube video on the waiting room. Defaults to true.
    • waitingRoomYouTubeVideoId - A YouTube video id that can be optionally specified to change the video that displays inside the virtual waiting room. When not specified, the YouTube video id 2woiLsEG2zo is used (the same video that has always played in the waiting room, no changes).

When these properties or VirtualConfig are not explicitly overridden, the default values are used.

Fixes

  • Fixed TytoCare QR code generation. Devices should now be able to pair directly after a factory reset.

Other

  • Changed the 5GHz error message to be more about connecting to a 2.4GHz Wi-Fi. The 5GHz error dialog would also display when the user is connected to mobile data, so the error message was reworded to make more sense in this case as well.

6.1.1

Fixes

  • Fixed TytoCare QR code generation on API 24 and 25.
  • Fixed TytoCare QR code getting cut off on smaller screen sizes.

6.1.0

New

  • Added support for TytoCare devices in the Virtual Visit experience. When enabled on the server, a new button will appear in the waiting room and conference screens. Clicking the button will open a new window that instructs the user on how to pair/connect their Tyto device. For more information about TytoCare, visit https://www.tytocare.com/.
  • The DexCare SDK now uses permissions ACCESS_WIFI_STATE and ACCESS_FINE_LOCATION. These are used to get the user’s current Wifi SSID in the TytoCare flow. The user is only prompted to allow location permission when the SSID is needed, and they have the option to decline and enter the SSID manually.
  • Added new methods DexCareSDK.setApiKey and DexCareSDK.setDomain. These methods can optionally be used to change the API key and domain at runtime. These methods are generally not needed if the configs are already set in string resources.
  • Added a new method DexCareSDK.setCustomizationOptions which will be used to set various minor customizations within the SDK.

Breaking

  • VirtualPracticeRegion.visitPrice is now already divided by 100. The visitCost represents the price of a visit in dollars, rather than cents as previously. The type has changed from Int to Double. If this division was done on your app, it should be removed to get the proper visit price in dollars.
    OLD SDK 6.0: visitPrice = 4900
    NEW SDK 6.1: visitPrice = 49.0
    

Deprecations

  • VirtualPracticeRegion.getVisitPriceInDollars() is now deprecated. The existing property visitPrice now represents the visit cost in dollars.

Fixes

  • Fixed an issue inside the video conference where the patient would not be able to see or hear the provider after the provider refreshed their window and reconnected.

Internal

  • Improved UI for the error dialog that appears when the Virtual session gets disconnected.
  • Updated to Kotlin version 1.4.21.
  • Updated Kotlin jvmTarget to Java 9.
  • Updated to a new version of the virtual visit cancellation endpoint.
  • Updated OpenTok to version 2.19.1

6.0.1

Fixes

  • Fixed an issue where network calls were logged to device logcat.

6.0.0

New

  • Added a new PaymentService, which now contains the existing payment-related methods. No new methods were added.

Deprecations

  • RetailService.uploadInsuranceCard is now deprecated. It has been moved to PaymentService.uploadInsuranceCard.
  • VirtualService.getInsurancePayers is now deprecated. It has been moved to PaymentService.getInsurancePayers.
  • VirtualService.verifyCouponCode is now deprecated. It has been moved to PaymentService.verifyCouponCode.

Changed

  • The SDK is now targeting Android API 30.

Fixes

  • Fixed a rare crash related to the waiting room YouTube video.

Dependencies

  • Updated OpenTok to version 2.19.0

5.0.1

  • Fixed a crash when inflating the Virtual Visit screens on certain AndroidX Navigation Component versions.
  • Updated androidx.core:core-ktx dependency to version 1.3.2.
  • Updated AndroidX Navigation Component dependency to version 2.3.3.

5.0.0

NOTE: SDK 5.0 requires at minimum version 7.0.0 of the DexCare backend services.

New

  • Added a new PracticeService, which contains new APIs to get info about a particular Practice and PracticeRegion. Practices will replace the existing Regions concept in the Virtual booking flow. See the documentation for more details: PracticeService
  • Added a new ProviderService, which contains new APIs to get info about a particular care Provider, retrieve the Provider’s time slots, and schedule a visit directly with the Provider. See the documentation for more details: ProviderService
  • Added a new PatientService.getSuffixes() API, which returns a list of acceptable name suffixes.

Changed

  • Push Notifications are now optional. It is still highly recommended to register for push notifications.
  • Loosened validation on SDK methods that schedule visits. Now only properties used in the API are validated, instead of anything that gets passed in.

Deprecations

  • Deprecated VirtualService.getRegions() and VirtualService.getRegionAvailability() methods. The “Regions” are being deprecated in favor of Practices and VirtualPracticeRegions. See the new PracticeService for details.
  • Deprecated most models related to Regions. Any regions-related models not deprecated are shared and used by Practices.
  • Deprecated VirtualVisitInformation.currentState and made it optional. With Practices, this parameter is no longer needed.
  • Deprecated VirtualService.startVirtualVisit methods. New startVirtualVisit methods were added with slightly different parameters to support Practices.
  • Deprecated Address.address1 and Address.address2 properties. New properties line1 and line2 are added as replacements. This is a rename to match iOS.

Breaking

  • The value returned by VirtualService.verifyCouponCode is now already divided by 100. 4900.0 -> 49.0. This now matches iOS.
  • Removed AppointmentService.getPcpAppointments() method. PCP is not supported by DexCare and is no longer accessible through the SDK.
  • Removed Environment.pcpUrl config property.
  • Removed all models related to PCP.
  • Removed Address.country property. Changing the country is not currently supported.
  • Removed all methods/models that were marked as deprecated in SDK 4.0.
  • Removed unused properties from VirtualSession model:
    • waitingRoomID
    • conferenceRoomID

Fixes

  • Fixed a rare crash when an error is encountered from the TokBox SDK.

Dependencies

  • Updated OkHttp to version 4.9.1

4.0.3

  • Resolved a potential SDK crash related to consumer app ProGuard conflicts with the SDK. Internally to the SDK, the issue has been avoided entirely. No changes required on the app side.

4.0.2

  • Updated ProGuard rules to minimize conflicts between multiple obfuscated libraries (duplicate class error).

4.0.1

  • Fixed an issue where PatientService.findOrCreateDependentPatient did not set the EHR system name in the PatientDemographics object before returning the full DexCarePatient object.

4.0.0

Internal

  • Updated several API endpoints to newer versions. These changes were internal to the SDK, no changes are required on the app.
  • Updated Kotlin to version 1.4.20.
  • Updated Koin to version 2.2.0.

Changes

New

  • Added new Virtual Visit return codes to enable the apps to distinguish and handle different virtual visit results. See VirtualService’s Companion object for details.
  • Made all public models implement Parcelable, in case implementing apps want to transfer models between fragments/activities.
  • RetailService.scheduleRetailAppointment now returns a visitId upon success, instead of nothing. The visitId can be used to cancel the visit. This is the only place the visitId is returned for “dependent” visits (AppointmentService.getRetailVisits only returns visits for the signed in user).
  • Added new method to DexCareSDK object: setRefreshTokenContract(refreshTokenContract: RefreshTokenContract?). This allows for changing the RefreshTokenContract after initialization.
  • Creating patients and booking have been overhauled to be simpler:
  • Removed the requirement to call PatientService.createPatient or PatientService.createDependentPatient method. New methods PatientService.findOrCreatePatient or PatientService.findOrCreateDependentPatient. These depend on a new CatchmentArea property that internally is what the SDK uses to figure out the visit state.
  • PatientService.getCatchmentArea is now available to figure out the EHRSystem based on a visit state. If you already know the EHR system and department Id (retail clinics have this info), there is no need to call this method.
  • VirtualService.startVirtualVisit have new methods to use the new CatchmentArea property. You also must pass up the full DexcarePatient instead of the just the demographics.

Deprecated

  • AppointmentService.cancelRetailVisit is now deprecated. AppointmentService.cancelRetailAppointment has been added to replace it. The new method AppointmentService.cancelRetailAppointment takes in the visitId (ScheduledVisit.id), not the appointment id as the old method did.
  • Clinic.distanceString property is now deprecated. Existing function Clinic.getDistanceString(userLocation: Location): String should be used instead.
  • Existing VirtualService.startVirtualVisit methods were deprecated, as new startVirtualVisit methods have been introduced, with slightly different parameters.
  • Existing PatientService.createPatient and PatientService.createDependentPatient methods have been deprecated, as new PatientService.findOrCreatePatient and PatientService.findOrCreateDependentPatient methods have been introduced, with slightly different parameters/return values.

Breaking

  • Made the SDK’s Koin instance internal to the SDK. DexCareSDK.initWithKoinSupport method is removed, now there is only one init method. If your app relied on any of the SDK’s modules, you will need to set up your own modules and providers in your app to replace them.
  • Answer model value property type changed from Any to String.
  • Added input validation for various required arguments throughout the SDK. A MissingInformationError will be returned when empty string is passed in to a required input parameter.
  • Removed dispose() method from RefreshTokenContract.
  • Removed properties reasonLabel and description from AllowedVisitType model.

Fixes

  • Added missing functionality where Virtual Visits were not continuously updating the estimated wait time in the virtual waiting room.

3.0.3

  • Removed internal Splunk Mint SDK. No changes required on the app side.

3.0.2

  • Fixed issue with SDK crashing during initialization (ProGuard rules tweaked). No changes required on the app side.

3.0.1

  • Fixed issue with autocomplete on the SDK/services.
  • Updated to Gradle 6.7, and Android build tools gradle plugin to 4.1.0.

3.0.0

See the 3.0.0 Migration Guide.

DexCare SDK 3.0.0 High-Level Overview

  • Aligned the iOS and Android SDKs. This means that the services and models are now much more similar between the platforms.
  • Updated the Insurance Card Capture endpoints. The APIs available in version 2.x of the SDK are not available on certain environments. This SDK release contains updated APIs that are available on all environments.
  • Simplified SDK usage, particularly around posting virtual feedback. The number of parameters required to post feedback has been reduced to 1 - the minimum amount of information required from the implementing app (the user’s feedback). Everything else is temporarily stored in memory from the most recent Virtual Visit, and handled by the SDK. It’s no longer necessary for the implementing app to keep track of visitIds, conferenceIds, etc.
  • New data validation requirements around phone numbers, emails, and zip codes. The requirements are detailed in each platform’s migration guide.
  • Various bug fixes and stabilization.
  • Updated TokBox SDK to version 2.18.0 - iOS/Android

2.2.0

Breaking

  • Made VirtualVisitService.getEstimatedWaitTime(visitID: String): DataObserver<EstimatedWaitTime> internal to the SDK. This API is handled in the virtual visit waiting room, which is managed by the SDK.
  • Made EstimatedWaitTime internal to the SDK.
  • CancelReason’s text property was renamed to displayText to match iOS.
  • Multiple changes to Retail-related models and methods. This was done to align Android and iOS SDKs. Changes include property renaming, new properties, and minor SDK contract changes.

Non-breaking

  • Updated AppointmentService.getCancelReasons(brandName: String): DataObserver<List<CancelReason>> to use an updated API internally. Aside from the property rename above, this should be a seamless transition.