Android SDK Release Notes

9.1.0 March 7, 2024

New

  • Added ability to transfer the patient to another provider. The patient will be set back to the waiting room once the provider transfers them. Another provider will receive the patient from the waiting room again. There are no changes in the flow for scheduling the virtual visit.

    Note A new function onTransferredToWaitingRoom() has been added to the interface VirtualEventListener. If you have an implementation of VirtualEventListener, make sure to override the new function.

  • Chat UI toolbar has been updated to align with Android design standards. The Actionbar back button is now an arrow back button and the toolbar title is now left aligned. The status bar color should now use colorPrimary color defined in the style. Some minor updates on the spacing of UI components have also been made.

Fixed

  • A message is now displayed to the user if the visit has been declined by the staff. A bug was introduced in an earlier version of SDK where no visual updates happened in the UI when the visit was declined.
  • Updated styling for input field on Chat UI so that font color is visible in dark mode.

Internal

  • Updated Android Gradle Plugin to version 8.2.2.
  • Updated Kotlin to version 1.9.21.
  • Removed material alert dialog library. SDK will use a system alert dialog.

9.0.0 November 21, 2023

Internal

  • Updated Android Gradle Plugin to version 8.1.2.
  • Updated compileSdk and targetSdk to 34.
  • Updated to JDK 17.
  • Updated OpenTok/TokBox to version 2.26.2.

Breaking

  • Removed support for previously deprecated PaymentMethods InsuranceImageSelf and InsuranceImageOther.
  • Removed uploadInsuranceCard() function from PaymentService.
  • InsuranceManualSelf has been renamed to InsuranceSelf and InsuranceManualOther has been renamed to InsuranceOther.
  • Removed deprecated field providerId from InsuranceSelf and InsuranceOther.
  • Removed documents property from DexCarePatient.
  • Removed EMAIL_REGEX from EmailValidator. Use EMAIL_VALIDATION_REGEX instead.
  • Removed setGoogleApiKey function from DexCareSDK. Youtube player doesn’t need Google API Key anymore.
  • Removed createVirtualVisit function from VirtualService. Use function createVirtualVisitWithPatientActor instead.
  • payorId and payorName are now required in InsuranceSelf and InsuranceOther. See PaymentService.getInsurancePayers to find the list of supported payers.
  • getCatchmentArea function from PatientService has been removed. There are other ways to find out “ehrSystemName” and “departmentId” for scheduling the visits.

    For virtual booking - VirtualPracticeRegion now provides PracticeRegionDepartment associated with the given region that contains required information.

    For retail booking - RetailDepartment contains information about “ehrSystemName”.

    For provider direct booking - ProviderDepartment associated with Provider contains information about “ehrSystemName”.

  • Removed VirtualActor model that was previously deprecated. It’s recommended to use Patient instead.
  • Removed previously deprecated function getProviderTimeslots from ProviderService. Use getProviderTimeslotsWithShortName passing in visitTypeShortName instead.
  • Removed UnavailableAppointmentError. It is replaced by NetworkError.ServiceUnavailableError.
  • Removed WaitingRoomYouTubePlayerError and WaitingRoomYouTubeInitializationError type from VirtualVisitError. These are replaced by WaitingRoomMediaError.

Fixed

  • Fixed validation error message for missing fields while scheduling appointments.
  • Fixed issue with RetailDepartment model serialization in Android 14. Following exception would be thrown if the RetailDepartment model was serialized using ObjectMapper.

com.fasterxml.jackson.databind.JsonMappingException: The Mean Sea Level altitude accuracy of this location is not set.

  • Fixed issue for Android 14 where extra stability serialization was causing issues with visits scheduling.
  • Fixed an issue on virtual visit where a Toast was showing up with provider video disabled message if the app was backgrounded.
  • Fixed issue with reconnection alert dialog. If the network connection drops out during virtual visit, the reconnection alert dialog will now dismiss once the connection is reestablished.

See migration guide for SDK 9.0.0 for more details.

8.5.0 August 11, 2023

New

  • Added WaitingRoomMediaError type in VirtualVisitError to consolidate media errors in waiting room.
  • Playing the Youtube video in virtual visit waiting room requires the app to have two permissions; android.permission.ACCESS_NETWORK_STATE and android.permission.INTERNET. So Make sure your app has these two permissions if you have the configuration to play youtube video in the waiting room.

Internal

  • Optimization and improvements for virtual visit flow.

  • Migrated Youtube Video Player for waiting room to IFrame API. Youtube has deprecated their native SDK in favor of IFrame API. Learn more: https://developers.google.com/youtube/android/player.

  • Updated OpenTok to version 2.25.3.

Deprecated

  • With Youtube player migration to IFrame API, there is no need for Google API Key to play the Youtube video. So DexCareSDK.setGoogleApiKey() method has been deprecated.
  • WaitingRoomYouTubePlayerError and WaitingRoomYouTubeInitializationError are no longer used in waiting room callback with VirtualVisitError. They are deprecated in favor of WaitingRoomMediaError.

Fixed

  • The issue for network logs from the SDK not showing up has been fixed. The network logs are enabled if the provided environment is non-prod.

    DexCare SDK uses logging interceptor from OKHTTP3 to print out any network logs. The SDK already includes the dependency in the library but sometimes you may get runtime errors if the HttpLoggingInterceptor dependency is not found in the classpath for any other reasons.

    So if you run into error like below;

java.lang.NoClassDefFoundError: Failed resolution of: Lokhttp3/logging/HttpLoggingInterceptor$Logger

Please include the following dependency in your app build gradle file;

implementation "com.squareup.okhttp3:logging-interceptor:{OKHTTP3_VERSION}"

8.4.0 Jun 2, 2023

New

  • Added payorId and payorName support in InsuranceManualSelf.
  • Added payorId, payorName, and subscriberId support in InsuranceManualOther.
  • Added getEMRPatient to PatientService to allow loading a patient information using identity providers other than DexCare.

Fixed

  • Updated dependency on Chucker so that SDK doesn’t conflict with client apps. You can now use Chucker dependency as recommended.
    debugImplementation "com.github.chuckerteam.chucker:library:<VERSION>"
    releaseImplementation "com.github.chuckerteam.chucker:library-no-op:<VERSION>"
    

Deprecated

  • Deprecated providerId in both InsuranceManualOther and InsuranceManualSelf in favor of payorId.
  • Deprecated documents property in DexCarePatient. It wasn’t supported in previous versions but is now deprecated in this release to avoid breaking changes. Expect this to be removed in the next major release.

8.3.1 Mar 29, 2023

Internal

  • Updated OpenTok to version 2.24.2.
  • Fix issue for camera when provider joins the call with the app in background.

8.3.0 Dec 14, 2022

New

  • Added Vimeo Support
  • Added new property vimeoURL under VirtualConfig to allow for a vimeo video to play during a virtual video visit waiting room.
  • Updated logic to support wither youtube or vimeo videos. Youtube video take precedence.
  • Update appTargetSdkVersion and appCompileSdkVersion to 33
  • Updated OpenTok to version 2.24.0.
  • Added new API RetailService.getRetailDepartment to fetch a single RetailDepartment by name

Internal

  • Updated the SDK’s targetSdkVersion and compileSdkVersion to API 33 (Android 13 support).
  • Added kotlinx coroutine testing libs 1.5.2-native-mt
  • Added kotlinx coroutines android lib version 1.5.2-native-mt
  • Added androidx core arch lib version 2.1.0
  • Updated espresso from 3.4.0 to 3.5.0
  • Updated androidx test extJunit from 1.1.3 to 1.1.4
  • Updated androidx test rules from 1.4.1-alpha07 to 1.5.0
  • Updated androidx test runner from 1.4.1-alpha01 to 1.5.1
  • Updated Kotlin and kotlin-gradle-plugin version from 1.7.0 to 1.7.20
  • Update androidx coreKtx from 1.3.2 to 1.9.0
  • Update fragment testing from 1.5.2 to 1.5.4
  • Update androidx test junitKtx from 1.1.3 to 2.2
  • Update gradle version from 7.2.1 to 7.3.1
  • Update jacoco from 0.8.7 to 0.8.8
  • Update mockitoKotlin from 2.2.0 to 4.1.0
  • Update roboelectric from 4.5.1 to 4.7.3

8.2.1 Nov 9, 2022

Internal

  • Fix JSON parsing issue that was causing date parsing to fail

8.2.0 Oct 31, 2022

Internal

  • Target and Compile SDK updated to 32
  • Updated kotlin version from 1.6.10 to 1.7.0
  • Updated OpenTok to version 2.23.1.
  • androidx activityKtx updated from 1.2.0 to 1.5.1
  • androidx annotation updated from 1.3.0 to 1.4.0
  • androidx appCompat updated from 1.2.0 to 1.5.0
  • androidx constraintLayout updated from 2.0.4 to 2.1.4
  • androidx fragmentTesting updated from 1.4.1 to 1.5.2
  • androidx navigation updated from 2.4.1 to 2.5.1
  • androidx test rules updated from 1.4.1-alpha06 to 1.4.1-alpha07

New

  • Added a new property WaitTimeLocalizationInfo to WaitTime used in VirtualService.getEstimatedWaitTime
  • Added new service AvailabilityService
  • Added 3 methods AvailabilityService.getProviderAvailability for access to care options provider.
  • These can be filtered by
  • departmentIds
  • latitude,longitude, and radius, and
  • zipcode
  • Added 3 methods AvailabilityService.getProviderAvailabilitySlots to access availability slots
  • These can be filtered by
  • departmentIds
  • latitude,longitude, and radius and
  • zipcode
  • Added new error responses for provider booking. PatientNotOnPhysicalPanelError and PatientDoubleBookedError
  • VisitService now has a new optional property insuranceGroupNumber as part of the BillingInformation in registration

Deprecated

  • Deprecated PaymentMethod.InsuranceImageSelf, PaymentMethod.InsuranceImageOther, and PaymentService.uploadInsuranceCard

8.1.3 Sept 26 2022

  • Remove the requirement to provide relationship information as part of a patient data. This will not be self contained inside VirtualVisitDetails only

8.1.2 Sept 15 2022

Internal

  • Fix the structure blocking a patient relationship detail from being displayed correctly on consumer portal.

8.1.1 Sep 2, 2022

New

  • Added a new property to VirtualVisitDetails named actorRelationshipToPatient representing the patient’s relationship to the patient if scheduling for someone else. Possible values for this are found under RelationshipToPatient enum.
  • If creating a visit for PatientDeclaration.Other, it is now a requirement to provide an actorRelationshipToPatient or validation fails with Relationship must be defined message.

8.1.0

New

  • DexCareVirtualPatient will have throw Missing Phone Number error if none of the three phone numbers exist in the order of home, work, and mobile
  • Added Spanish language translations for most of the communicated information
  • Added a new VirtualService.createVirtualVisitWithPatient method, to create a patient with the virtualActor that makes use of a Patient model.
  • Added new property for VirtualVisitDetails model named traveling. It is an optional field that can be passed a boolean value.

Internal

  • Updated OpenTok to version 2.23.0.
  • Updated proguard to reduce SDK size

Deprecated

  • Deprecated the use of VirtualActor and it’s usage and replaced by Patient information instead.
  • Deprecated the use of VirtualService.createVirtualVisit and replaced by VirtualService.createVirtualVisitWithPatient

8.0.1

New

VirtualVisitDetails can now take in null as the assignmentQualifiers. Null will assume default qualifiers and you will have to use VirtualService.getAssignmentQualifiers to get access to available qualifiers.

Internal

  • Removed DefaultVirtualVisitAssignmentQualifiers

8.0.0

New

  • Added a new VirtualService.createVirtualVisit method, which uses a new backend endpoint with more functionality. The new API allows for scheduling for a patient using an Epic identifier instead of a DexCare patientGuid, scheduling phone-call virtual visits, and is more flexible in terms of required information to schedule a virtual visit. See the DexCare developers site for more information.
  • Added a new VirtualService.getWaitTimeAvailability method to fetch the new WaitTimeAvailability list for all Virtual Provider queues. This includes information about all available regions for all practices. The results can optionally be filtered by several parameters. See the code documentation for available filters.
  • Added a new VirtualService.getAssignmentQualifiers method to fetch the all supported VirtualVisitAssignmentQualifier to use to filter VirtualService.getWaitTimeAvailability and in VirtualService.createVirtualVisit.
  • Added new mandatory parameters userEmail and contactPhoneNumber in VirtualVisitDetails model, these parameters are used to contact the user. -VirtualVisitDetails replaces the deprecated VirtualVisitInformation. Please see documentation for more information on the properties.
  • Added a new VirtualService.getModalities method to fetch the all supported VirtualVisitModality to use to filter VirtualService.getWaitTimeAvailability and in VirtualService.createVirtualVisit.
  • Scheduling a phone-call virtual visits using VirtualService.createVirtualVisit and VirtualVisitTypeName as phone will return empty Intent, a visitId, and a VirtualVisitTypeName object.
  • VisitStatus enum converted to a String
  • New method VisitStatus.isVisitStatusActive is added which returns a Boolean depending on the VisitStatus passed as an argument.
  • New enum DefaultVisitStatus is available to give access to the list of default visit status names.
  • Added a new VirtualPracticeRegion.pedatricsAgeRange property to indicate the age of patients that pediatric providers can see.

Breaking

  • A MissingInformationError is now returned in the VirtualService.createVirtualVisit methods when VirtualVisitInformation.visitReason is empty string. This now matches the behavior in the Retail and Provider services.
  • VirtualSerivce.startVirtualVisit - use the new VirtualSerivce.createVirtualVisit passing in the new VirtualVisitDetails.
  • VirtualVisitInformation - use VirtualVisitDetails with the new VirtualSerivce.createVirtualVisit.
  • PracticeService.getVirtualPracticeRegionAvailability - use the new VirtualService.getWaitTimeAvailability.
  • PracticeService.getEstimatedWaitTime - use the new VirtualService.getEstimatedWaitTime.
  • RegionAvailability - use the new WaitTimeAvailability returning from VirtualService.getWaitTimeAvailability.
  • Removed PatientService.createPatientWithMyChart() method. This is no longer supported by the SDK.
  • Clinic references have been updated to RetailDepartment.
  • ClinicTimeSlot is replaced by RetailAppointmentTimeSlot.
  • RetailService.getClinics is replaced by RetailService.getRetailDepartments
  • ScheduledVisit.clinic is replaced by ScheduledVisit.retailDepartment

Deprecated

  • UnavailableAppointmentError is now deprecated. It will be replaced by the standard NetworkError.ServiceUnavailableError in a future release.
  • ProviderService.getProviderTimeslots passing in visitTypeId is deprecated in favour of ProviderService.getProviderTimeslotsWithShortName and passing in a VisitTypeShortName instead.

Internal

  • VisitStatus is now just a typealias that is a String.

  • Updated TokBox SDK version from 2.22.0 to 2.22.3
  • Updated androidMaterial version from 1.0.0 to 1.4.0
  • Updated Jackson parser versions from 2.12.4 to 2.13.3
  • Updated androidx test junit ext from 1.1.2 to 1.1.3
  • Updated androidx test rules from 1.3.0 to 1.4.1-alpha06
  • Updated androidx constraint layout from 1.1.3 to 2.0.4
  • Updated androidx databindingCompiler from 4.1.2 to 7.2.1
  • Updated androidx fragmentTesting from 1.3.0 to 1.4.1
  • Updated mockitoAndroid from 3.0.0 to 3.3.0

  • Update getEstimatedWaitTime under VirtualVisitContract from v6 to v9 api endpoint
  • Update cancelVirtualVisit under VisitServiceContract from v8 to v9 api endpoint
  • Update getVirtualPractice under PracticeService from v8 to v9 api endpoint

7.2.2

Internal

  • Update navigation initialization to onPostCreate

Fixes

  • Fix for intermittent crashes observed while waiting for a virtual visit

7.2.1

New

  • It is safe to remove BLUETOOTH, ACCESS_NETWORK_STATE, and WIFI_STATE permissions from your manifest. If you have TytoCare integrations, do not remove WIFI_STATE.

Internal

  • Updated TokBox SDK version from 2.21.3 to 2.22.0
  • Kotlin version updated from 1.5.21 to 1.6.10
  • JVM target updated from 8 to 11
  • Updated androidxNavigationVersion from 2.3.5 to 2.4.1
  • Updated gradle build tools 7.0.1 to 7.1.2
  • Remove javax.annotation-api:1.3.2 and replaced with androidx.annotation:annotation:1.3.0
  • Updated gradle from gradle-7.1.1 to gradle-7.4.1
  • Remove outdated test modules

7.2.0

New

  • Added a new API DexCareSDK.getDexCareStatus() which returns information about any planned or unplanned incidents that may be affecting the DexCare platform and services.
  • Large improvements to KDocs on the DexCare developers site
  • Upon signing in to the SDK, some validation configs are pulled down from the server. This allows for the validation to be consistent across DexCare platforms, and also allows for the validation requirements to be configurable per-environment. This currently only affects the EmailValidator, but may be expanded to other areas in a future SDK version.
  • Added optional runtime configuration for Google API key using DexCareSDK.setGoogleApiKey(your_google_api_key) to play youtube video while waiting for virtual visit start.
  • PatientDemographics.birthDate is now validated for future dates
  • Virtual visits on Android 12 now require the READ_PHONE_STATE runtime permission
  • Changed PatientDemographics.homePhone to optional parameter. So now homePhone is a optional parameter while creating patient.
  • Adds a PatientService.deletePatientAccount to start the process of deleting a DexCare Patient Account.

Breaking

  • A MissingInformationError is now returned in the VirtualService.startVirtualVisit methods when VirtualVisitInformation.visitReason is empty string. This now matches the behavior in the Retail and Provider services.

Deprecated

  • UnavailableAppointmentError is now deprecated. It will be replaced by the standard NetworkError.ServiceUnavailableError in a future release.

Internal

  • Updated the SDK’s targetSdkVersion and compileSdkVersion to API 31 (Android 12 support).
  • The DexCare SDK now uses permission ACCESS_COARSE_LOCATION. With Android 12, it is required to always request ACCESS_COARSE_LOCATION when requesting ACCESS_FINE_LOCATION. These are still only requested when needed during the TytoCare Integration flow.
  • Removed Chuck as an SDK dependency. Added Chucker as a replacement. Chucker is a newer and maintained version of Chuck.
  • Improved incoming call detection during a virtual visit. Audio and video publishing are automatically paused during a phone call and resumed after the call ends.
  • Updated Android Gradle Plugin to 7.0.1.
  • Updated Gradle to 7.1.1.
  • The DexCare SDK now uses permission READ_PHONE_STATE. With Android 12, it is required to always request READ_PHONE_STATE` before starting virtual visit.
  • The DexCare SDK now uses permission BLUETOOTH_CONNECT. With Android 12, it is required to always request BLUETOOTH_CONNECT before starting virtual visit to connect audio stream.
  • Updated TokBox SDK version to 2.21.3

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.