# Voice Android SDK Changelog

## Welcome to the Programmable Voice Android SDK

The Twilio Programmable Voice SDKs allow you to add voice-over-IP (VoIP) calling into your native Android applications. See [**Android Getting Started Guide**](https://github.com/twilio/voice-quickstart-android) to begin using the SDK.

> \[!NOTE]
>
> As of June 2023, legacy Firebase Cloud Messaging (FCM) credentials have been deprecated and will be removed in June 2024, please upgrade to FCM v1 credentials as soon as possible. The Android Voice SDK already supports FCM v1 credentials and [a migration guide](https://help.twilio.com/articles/20768292997147-Updating-Twilio-Push-for-FCM-HTTP-v1-API) has been prepared to help aid developers through the process. For information about the deprecation, please visit [Google's announcement](https://firebase.google.com/docs/cloud-messaging/migrate-v1).

> \[!WARNING]
>
> The Twilio Programmable Voice SDKs use [Semantic Versioning](https://www.semver.org/). Twilio supports version N-1 for 12 months after the first GA release of version N. We recommend that you upgrade to the latest version as soon as possible to avoid any breaking changes. Version 6.x is the latest Android version.

## 6.9.0

**Feb 11th 2025**

* Programmable Voice Android SDK 6.9.0 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.9.0/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.9.0/docs/) MD5 Checksum : 5f02cff33d0092c0d22d31b6aa2fdb6a

### API Enhancement

* Modified registration error codes. Server-side errors report as the exception error code instead of a generic registration error (error code 31301). This brings the registration error handling inline with the iOS SDK.

### Bug Fixes

* Fixed `java.lang.UnsatisfiedLinkError` error when using a custom audio device.

### Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.7MB           |
| x86\_64     | 4.5MB           |
| armeabi-v7a | 3.6MB           |
| arm64-v8a   | 4.5MB           |
| universal   | 17MB            |

## 6.8.0

**Jan 21st 2025**

* Programmable Voice Android SDK 6.8.0 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.8.0/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.8.0/docs/) MD5 Checksum : 61ba3a7038b41b7aa5ab7598f0e842a9

### Updates

* Upgraded to use WebRTC-124

### Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.7MB           |
| x86\_64     | 4.5MB           |
| armeabi-v7a | 3.6MB           |
| arm64-v8a   | 4.5MB           |
| universal   | 17MB            |

## 6.7.1

**Dec 3rd 2024**

* Programmable Voice Android SDK 6.7.1 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.7.1/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.7.1/docs/) MD5 Checksum : 29da197b268f2d7268198eb06f2a28ce

### Bug Fixes

* Fixed a bug where the signaling library was throwing an exception while initiating a call with per-app based VPN enabled.

### Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.5MB           |
| x86\_64     | 4.3MB           |
| armeabi-v7a | 3.4MB           |
| arm64-v8a   | 4.1MB           |
| universal   | 16MB            |

## 6.7.0

**Oct 21st 2024**

* Programmable Voice Android SDK 6.7.0 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.7.0/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.7.0/docs/) MD5 Checksum : 201a7c51ff2644b7558f97601972009d

### New Features

* New API `Voice.runPreflight(@NonNull final Context context, @NonNull final String accessToken, @NonNull final PreflightTest.Listener listener)` to run a preflight test is added.
* A new class `PreflightOptions` is added. A const reference to this class type needs to be passed as the first argument to the `runPreflight()`
  method. An instance of this class can be constructed using the `PreflightOptions.Builder`. Setting the `accessToken` to run
  preflight test is mandatory. Following are the optional APIs for the `PreflightOptions.Builder` class.

```java
    Builder setIceOptions(@NonNull IceOptions iceOptions);
    Builder setPreferredAudioCodecs(@NonNull List<AudioCodec> preferredAudioCodecs);
```

The API documentation for the above-mentioned methods can be found in the `PreflightOptions.Builder` class.

* A new `PreflightTest.Listener` interface is added. It needs to be provided as the third argument to the
  `runPreflight()` method. This interface provides the callbacks for the `PreflightTest`. Implement the following callbacks
  to receive callbacks during the preflight test and to receive the `PreflightReport` when the test is completed. The report
  is a JSONObject containing the details of its findings.

```java
  void onPreflightCompleted(@NonNull final PreflightTest preflightTest, @NonNull final JSONObject report);
  void onPreflightFailed(@NonNull final PreflightTest preflightTest, @NonNull final CallException error);
  void onPreflightConnected(final PreflightTest preflightTest);
  void onPreflightWarning(@NonNull final PreflightTest preflightTest,
                          @NonNull final Set<Call.CallQualityWarning> currentWarnings,
                          @NonNull final Set<Call.CallQualityWarning> previousWarnings);
  void onPreflightSample(@NonNull final PreflightTest preflightTest, @NonNull final JSONObject sample);
```

The API documentation for the above-mentioned methods can be found in the `PreflightTest.Listener` interface.

* `Voice.runPreflight()` method returns a `PreflightTest` object. Following APIs can be used to access different
  properties of underlying `Call` and `PreflightTest` object.

```java
  void stop();
  String getCallSid();
  long getStartTime();
  long getEndTime();
  JSONObject getLatestSample();
  JSONObject getReport();
  PreflightTest.State getState();
```

Please note `stop()` method can be used to prematurely disconnect a `PreflightTest` resulting in a failure. Please refer
to the API documentation of the `PreflightTest` class for more details.

### Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.5MB           |
| x86\_64     | 4.3MB           |
| armeabi-v7a | 3.4MB           |
| arm64-v8a   | 4.1MB           |
| universal   | 16MB            |

## 6.6.4

**Sep 10th 2024**

* Programmable Voice Android SDK 6.6.4 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.6.4/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.6.4/docs/) MD5 Checksum : 1121d216712bfd06252a35ed4d09c5a7

### New Features

* The Voice SDK now supports Server Name Indication (SNI) during initial TLS handshake with Twilio infrastructure.

### Known Issues

* The `CallMessage.Builder.setContentType()` API has no effect on the content type of the Call Message object. The content type always defaults to `application/json`.

### Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.4MB           |
| x86\_64     | 4.3MB           |
| armeabi-v7a | 3.4MB           |
| arm64-v8a   | 4MB             |
| universal   | 15.7MB          |

## 6.6.3

**Sep 3rd 2024**

* Programmable Voice Android SDK 6.6.3 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.6.3/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.6.3/docs/) MD5 Checksum : 37633de89f65845cdb3d73f9d63919c2

### New Features

* Added support for Android 15 with 16k memory page sizes.

#### Known Issues

* The `CallMessage.Builder.setContentType()` API has no effect on the content type of the Call Message object. The content type always defaults to `application/json`.

### Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.3MB           |
| x86\_64     | 4.3MB           |
| armeabi-v7a | 3.4MB           |
| arm64-v8a   | 4MB             |
| universal   | 15.6MB          |

## 6.6.2

**Aug 26th 2024**

* Programmable Voice Android SDK 6.6.2 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.6.2/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.6.2/docs/) MD5 Checksum : 87649dd38123fc4310659cd6518c201a

#### API Updates

* The Call Message Events (Beta), originally released in 6.3.3, has been promoted to GA. This release includes the following breaking changes from the beta.
  * Changed error code `31209` to `31212`. This error code is emitted when a call message payload exceeds the authorized limit.
  * Call Message types (`CallMessage.messageType`) are treated as strings instead of enumerated values.
    * The SDK no longer validates `CallMessage.messageType` and acts as a pass through for unknown message types in both directions (messages received by the SDK and those sent by the SDK).
    * To send a user defined message, the `sendMessage()` API should be invoked with a `CallMessage` object where the `messageType` is set to one of the supported message types from [https://www.twilio.com/docs/voice/sdks/call-message-events](/docs/voice/sdks/call-message-events)
    * Added new error code `31210` for invalid call message type when `sendMessage()` API is invoked with a `CallMessage` object where the `messageType`
      is *not* set to `user-defined-message`.
  * `Call.CallMessageListener` methods have been updated to include the CallSid, which is a unique identifier for the Call or the CallInvite. The updated APIs are:

```java
public interface CallMessageListener {

     void onMessageReceived(final String callSid, final CallMessage callMesssage);

     void onMessageSent(final String callSid, final String voiceEventSID);

     void onMessageFailure(final String callSid, final String voiceEventSID, final VoiceException error);
 }
```

#### Bug Fixes

* Fixed issue preventing execution on Android API 21-23 devices starting with version 6.3.0.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.
* The `CallMessage.Builder.setContentType()` API has no effect on the content type of the Call Message object. The content type always defaults to `application/json`.

#### Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.3MB           |
| x86\_64     | 4.3MB           |
| armeabi-v7a | 3.4MB           |
| arm64-v8a   | 4MB             |
| universal   | 15.6MB          |

## 6.6.1

**June 3rd, 2024**

* Programmable Voice Android SDK 6.6.1 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.6.1/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.6.1/docs/) MD5 Checksum : 8d5ef63fe22002d17209fbdd79b2c238

#### API Updates

* Added new error code `31211` when `sendMessage()` API is invoked with a `CallMessage` object using the `CallInvite` object
  when the `CallInvite` is not reached the `Ringing` state yet. `onMessageFailure()` callback will be invoked in this case
  with the above mentioned error code.

### Known Issues

* Starting with SDK version 6.3.0, the required Android SDK version is 24 not 21. This issue is fixed as of SDK version 6.6.2.
* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.3MB           |
| x86\_64     | 4.3MB           |
| armeabi-v7a | 3.4MB           |
| arm64-v8a   | 4MB             |
| universal   | 15.6MB          |

## 6.6.0

**May 21st, 2024**

* Programmable Voice Android SDK 6.6.0 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.6.0/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.6.0/docs/) MD5 Checksum : d4363792448280d85ff84c802186610a

### API Updates

* Call Message types (`CallMessage.messageType`) are treated as strings instead of enumerated values.
  * The SDK no longer validates `CallMessage.messageType` and acts as a pass through for unknown message types in both directions (messages received by the SDK and those sent by the SDK).
  * To send a user defined message, the `sendMessage()` API should be invoked with a `CallMessage` object where the `messageType` is set to one of the supported message types from \[[https://www.twilio.com/docs/voice/sdks/call-message-events](/docs/voice/sdks/call-message-events)]\([https://www.twilio.com/docs/voice/sdks/call-message-events](/docs/voice/sdks/call-message-events))
  * Added new error code `31210` for invalid call message type when `sendMessage()` API is invoked with a `CallMessage` object where the `messageType`
    is *not* set to `user-defined-message`.
* Added new Call Exception, `InvalidPhoneNumberException` that happens when a call is attempted with an invalid phone number id [error 13224](/docs/api/errors/13224).

### Enhancements

* New `constant-audio-output-level` call quality warning added. This warning is triggered when the audio received is of a constant volume and can be used to determine when someone is speaking. Please note, if the remote party mutes the audio track or places the call on `hold`, this warning will
  still be raised.
* Metrics and events reported to Twilio Insights is now encoded via gzip to reduce transmission bandwidth.

### Known Issues

* Starting with SDK version 6.3.0, the required Android SDK version is 24 not 21. This issue is fixed as of SDK version 6.6.2.
* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.3MB           |
| x86\_64     | 4.3MB           |
| armeabi-v7a | 3.4MB           |
| arm64-v8a   | 4MB             |
| universal   | 15.6MB          |

## 6.5.1

**April 15th, 2024**

* Programmable Voice Android SDK 6.5.1 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.5.1/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.5.1/docs/) MD5 Checksum : 99f789ccbd3c44b88417c0f38605cd72

### Enhancements

* Increased sampling resolution of Voice Insights call quality metrics events.

### Known Issues

* Starting with SDK version 6.3.0, the required Android SDK version is 24 not 21. This issue is fixed as of SDK version 6.6.2.
* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.3MB           |
| x86\_64     | 4.2MB           |
| armeabi-v7a | 3.4MB           |
| arm64-v8a   | 4MB             |
| universal   | 15.6MB          |

## 6.5.0

**Mar 12th, 2024**

* Programmable Voice Android SDK 6.5.0 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.5.0/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.5.0/docs/) MD5 Checksum : 62c4f7e52e5af586ab6da62cbe7d9d0e

### API Updates

* A new `AudioOptions` API has been added, enabling audio processing operations on the local audio track/source.
  * Audio processing operations include Echo Cancellation, Automatic Gain Control, Noise Suppression, High Pass Filtering, setting jitter buffer max size in packets, and setting jitter buffer min delay in milliseconds (msec).
  * By default, all audio processing operations are enabled (set to true), the jitter buffer's maximum size is 200 packets, and the jitter buffer's minimum delay is 0 msec.
  * The default values can be modified and custom `AudioOptions` can be set as part of `ConnectOptions` when making outbound calls and/or as part of `AcceptOptions` when receiving incoming calls.
* Example of customized `AudioOptions` when making an outbound call - In this example, Automatic Gain Control and High Pass Filtering are disabled, jitter buffer max size is set to 100 packets and jitter buffer min delay is set to 5 msec.

```java
connectOptions = new ConnectOptions.Builder(accessToken)
                    .iceOptions(iceOptions)
                    .audioOptions(new AudioOptions.Builder()
                        .autoGainControl(false)
                        .highpassFilter(false)
                        .audioJitterBufferMaxPackets(100)
                        .audioJitterBufferMinDelayMs(5)
                        .build())
                    .build();
Voice.connect(context, connectOptions, callListener);
```

* Example of customized `AudioOptions` when receiving an incoming call - In this example, Echo Cancellation and Noise Suppression are disabled, and jitter buffer max size is set to 50 packets.

```java
acceptOptions = new AcceptOptions.Builder()
                    .iceOptions(iceOptions)
                    .audioOptions(new AudioOptions.Builder()
                        .echoCancellation(false)
                        .noiseSuppression(false)
                        .audioJitterBufferMaxPackets(50)
                        .build())
                    .build();
callInvite.accept(context, acceptOptions, callListener);
```

### Enhancements

* The SDK publishes Voice Insights events when [user-defined messages](/docs/voice/sdks/call-message-events) are sent, received, or when sending fails.

### Known Issues

* Starting with SDK version 6.3.0, the required Android SDK version is 24 not 21. This issue is fixed as of SDK version 6.6.2.
* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

Size Report

The following table outlines the APK size impact for different Application Binary Interfaces (ABIs):

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.3MB           |
| x86\_64     | 4.2MB           |
| armeabi-v7a | 3.4MB           |
| arm64-v8a   | 4MB             |
| universal   | 15.6MB          |

## 6.4.1

Feb 12th, 2024

* Programmable Voice Android SDK 6.4.1 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.4.1/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.4.1/docs/) MD5 Checksum : 0cd47c848842696ad6bcedab1db9615a

### API Updates

* `Call.CallMessageListener` methods have been updated to include the CallSid, which is a unique identifier for the Call or the CallInvite. The updated APIs are:

```java
public interface CallMessageListener {

        void onMessageReceived(final String callSid, final CallMessage callMesssage);

        void onMessageSent(final String callSid, final String voiceEventSID);

        void onMessageFailure(final String callSid, final String voiceEventSID, final VoiceException error);

   }
```

* `LogParameters` class includes a `Throwable` field named `tr`. This allows us to log stack traces from Exceptions and other Throwable objects.
* `LogParameters` objects can now be constructed using `LogParameters.Builder()` that utilizes a builder pattern avoiding multi argument cumbersome direct constructors.
* The existing constructors for `LogParameters` have been deprecated in favor of construction using `LogParamters.Builder()` and will be removed in the next major release.

### Maintenance

* Removed dead/unused c/c++ jni method, Java\_com\_twilio\_voice\_JniUtils\_nativeJavaUtf16StringToStdString. This is somewhat related to github [issue 572](https://github.com/twilio/voice-quickstart-android/issues/572).
* Added new Call Exception, `InvalidCallerIdException` that happens when a call is attempted with an invalid caller id [error 13214](/docs/api/errors/13214#warning-13214).
* Report the usage of Default Logger or Custom Logger to Twilio Insights. It only reports the type of Logger but not the actual log messages.

### Known Issues

* Starting with SDK version 6.3.0, the required Android SDK version is 24 not 21. This issue is fixed as of SDK version 6.6.2.
* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.3MB           |
| x86\_64     | 4.2MB           |
| armeabi-v7a | 3.4MB           |
| arm64-v8a   | 4MB             |
| universal   | 15.6MB          |

## 6.4.0

Nov 30th, 2023

* Programmable Voice Android SDK 6.4.0 [\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.4.0/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.4.0/docs/) MD5 Checksum : ccb825d69416838d521692e99ff8e091

### Updates

* Upgraded to use WebRTC-112.

### Known Issues

* Starting with SDK version 6.3.0, the required Android SDK version is 24 not 21. This issue is fixed as of SDK version 6.6.2.
* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.3MB           |
| x86\_64     | 4.2MB           |
| armeabi-v7a | 3.4MB           |
| arm64-v8a   | 4MB             |
| universal   | 15.6MB          |

## 6.3.3

Nov 9th, 2023

* Programmable Voice Android SDK 6.3.3[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.3.3/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.3.3/docs/) MD5 Checksum : e6dd7df94fe8c83e3ed6765444742709

### API Updates

* The SDK now supports sending and receiving in-call user-defined messages. Use the
  `Call::sendMessage(...)` method to send messages. Endpoints subscribed to the events of the call
  will be receiving the messages. The `CallMessageInterface::onReceiveMessage(...)` callback will
  be raised to the application when a message is received by the client. Please visit this
  [page](/docs/voice/sdks/call-message-events) for more details about this
  feature. Additionally, please see the following for more information on how to send and receive
  messages on the server. This feature is currently in Beta. Example below.

```java
    private static class TestCallMessageObserver implements Call.CallMessageListener {
        @Override
        public void onMessageReceived(CallMessage callMesssage) {
            Log.d("[test]", "Call Message received");
        }
        @Override
        public void onMessageSent(String voiceEventSID) {
            Log.d("[test]", "Call Message:" + voiceEventSID + " sent");
        }
        @Override
        public void onMessageFailure(String voiceEventSID, VoiceException error) {
            Log.d("[test]", "Call Message: " + voiceEventSID + " failed to send: " + error.getMessage());
        }
    }
    .
    .
    .
    // register notification callbacks upon connect
    ConnectOptions cxnOptions = new ConnectOptions.Builder(accessToken))
                .callMessageListener(new TestCallMessageObserver())
                .build();
    Call call = Voice.connect(context, connectOptions, new Call.Listener() {...});
    .
    .
    .
    // send a message
    final CallMessage callMessage = (
        new CallMessage.Builder(CallMessage.MessageType.UserDefinedMessage))
        .contentType("application/json")
        .content((new JSONObject())
                .put("foo", "bar")
                .toString())
        .build();
    call.sendMessage(callMessage);
    .
    .
    .
    // receive call message before accpeting invite
    Voice.handleMessage(this, data, new TestCallMessageObserver());
```

#### Known Issues

* Starting with SDK version 6.3.0, the required Android SDK version is 24 not 21. This issue is fixed as of SDK version 6.6.2.
* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.8MB           |
| x86\_64     | 4.8MB           |
| armeabi-v7a | 3.6MB           |
| arm64-v8a   | 4.5MB           |
| universal   | 17.4MB          |

## 6.3.2

Oct 2nd, 2023

* Programmable Voice Android SDK 6.3.2[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.3.2/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.3.2/docs/) MD5 Checksum : 40966f1d9fbece4a960b493a3a520725

### API Updates \[#api-updates-3]

* Adds a `thread` member to `LogParameters` class. The `thread` member contains the name (or id) of the thread where the log message was generated.

### Bug Fixes

* Fixed a crash when the incoming call listener goes out of scope after timeout.

#### Known Issues

* Starting with SDK version 6.3.0, the required Android SDK version is 24 not 21. This issue is fixed as of SDK version 6.6.2.
* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.8MB           |
| x86\_64     | 4.8MB           |
| armeabi-v7a | 3.6MB           |
| arm64-v8a   | 4.5MB           |
| universal   | 17.4MB          |

## 6.3.0

Sept 5th, 2023

* Programmable Voice Android SDK 6.3.0[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.3.0/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.3.0/docs/) MD5 Checksum : a2e5f997dbf3c6b0e6b1a169e2cbf79d

### API Updates \[#api-updates-4]

* Provides a `LoggerInterface` interface. This interface contains a `log` method that is invoked with a `LogParameters` object every time a log message becomes available. The `LogParameters` object contains all the information relevant to the log message being delivered.
* The Android SDK internally implements the `LoggerInterface` to provide default logging capabilities to stdout using android.util.Log.
* Provides a `Voice.SetLogger(LoggerInterface)` method that allows setting a custom logger that conforms to `LoggerInterface` to which log messages will be delivered.
* Provides a `Voice.GetLogger()` method that returns the logger that was previously set with `setLogger`. If no custom logger was set, this method returns the default logger currently used by the SDK.
* Users can send their messages to be logged by the SDK using `Voice.GetLogger().log(LogParameters)`. This logs the message using the SDK's default logger.
* Users can also implement custom loggers that conform to `LoggerInterface` to customize the logging mechanism, for eg., logging to a file, sending the logs to a server, etc.
* The existing `Logger` class is deprecated and will be removed in the next major version release.

#### Known Issues

* Starting with SDK version 6.3.0, the required Android SDK version is 24 not 21. This issue is fixed as of SDK version 6.6.2.
* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

Size Report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.8MB           |
| x86\_64     | 4.8MB           |
| armeabi-v7a | 3.6MB           |
| arm64-v8a   | 4.5MB           |
| universal   | 17.3MB          |

## 6.2.1

June 23rd, 2023

* Programmable Voice Android SDK 6.2.1[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.2.1/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.2.1/docs/) MD5 Checksum : 8875d823f55cad837f972a700696be8b

### Bug Fixes \[#bug-fixes-2]

Fixed a bug where the incoming call invite could only ring up to 3 minutes instead of the [maximum 10 minutes call timeout](/docs/voice/twiml/dial#timeout).

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.8MB           |
| x86\_64     | 4.8MB           |
| armeabi-v7a | 3.6MB           |
| arm64-v8a   | 4.5MB           |
| universal   | 17.3MB          |

## 6.2.0

June 12th, 2023

* Programmable Voice Android SDK 6.2.0[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.2.0/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.2.0/docs/) MD5 Checksum : 5fd4d8b18a8cbfacc56c16a699080e8a

### Bug Fixes & Updates

* Upgraded to use WebRTC-105.
* AudioOption, typing\_detection is now deprecated, no longer supported by WebRTC.
* Fixed a crash when using an external audio device due to JAVA stack frame not being constructed.
* Fixed a crash due to file handle exhaustion.
* Fixed memory leaks regarding WebRTC shutdown & lingering Media Factory references.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-2]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4.8MB           |
| x86\_64     | 4.8MB           |
| armeabi-v7a | 3.6MB           |
| arm64-v8a   | 4.5MB           |
| universal   | 17.3MB          |

## 6.1.2

July 11th, 2022

* Programmable Voice Android SDK 6.1.2[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.1.2/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.1.2/docs/) MD5 Checksum : 1e9ce7d72f561c46711bbcdfa1df2873

### API updates

* New edge `umatilla` is now supported. Set the `Voice.setEdge(...)` property before connecting or accepting the call.

### Things to Note

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-3]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4MB             |
| x86\_64     | 4MB             |
| armeabi-v7a | 3.3MB           |
| arm64-v8a   | 3.8MB           |
| universal   | 14.9MB          |

## 6.1.1

May 26th, 2022

* Programmable Voice Android SDK 6.1.1[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.1.1/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.1.1/docs/) MD5 Checksum : 355865e5f9e1f82be63af8225c4f0bfc

### Bug Fixes \[#bug-fixes-3]

* Fixed a crash when the home region specifier (`twr`) in the access token is `null`.

### Things to Note \[#things-to-note-2]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-4]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4MB             |
| x86\_64     | 4MB             |
| armeabi-v7a | 3.3MB           |
| arm64-v8a   | 3.8MB           |
| universal   | 14.9MB          |

## 6.1.0

May 9th, 2022

* Programmable Voice Android SDK 6.1.0[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.1.0/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.1.0/docs/) MD5 Checksum : 164b77f552b7a2a9c8c40ace9b30077f

### API updates \[#api-updates-2]

* The Voice Android SDK now supports Twilio Regional by providing the home region specifier in the access token header when calling the `Voice.register()` method, the `Voice.unregister()` method, or the `Voice.connect()` method.

Existing customers can now migrate their Voice use-cases to data centers in Ireland or Australia to establish data residency within the region. In addition, new customers may now select Ireland or Australia as their region of choice for Voice related use cases. There is no additional cost to use the new data centers in Ireland or Australia. To learn more about Regional Voice, check out our [blog post](https://www.twilio.com/blog/expanded-data-protection-options-eu-schrems-ii#ongoing-updates-q4) or head over to our [developer docs](/docs/global-infrastructure) to get started.

Below is an example of specifying home region in the access token using the Twilio [Node.js](https://github.com/twilio/twilio-node) helper library:

```bash
const accessToken = new twilio.jwt.AccessToken(
    credentials.accountSid,
    credentials.apiKeySid,
    credentials.apiKeySecret, {
      identity,
      ttl,
      region: 'au1',
    },
  );
```

The decoded header of your access token should look like this:

```bash
{
  "alg": "HS256",
  "typ": "JWT",
  "cty": "twilio-fpa;v=1",
  "twr": "au1"
}
```

### Maintenance \[#maintenance-2]

* The SDK compileSDKVersion and targetSDKVersion were updated to 31.
* Updated `getStats(...)` API doc.

### Bug Fixes \[#bug-fixes-4]

* Fixed `IceCandidatePairStats` javadoc. Added `responsesSent` attribute to `IceCandidatePairStats`.

### Things to Note \[#things-to-note-3]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-5]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4MB             |
| x86\_64     | 4MB             |
| armeabi-v7a | 3.3MB           |
| arm64-v8a   | 3.8MB           |
| universal   | 14.9MB          |

## 6.0.7

February 8th, 2022

* Programmable Voice Android SDK 6.0.7[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.0.7/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.0.7/docs/) MD5 Checksum : ddb5b1530276c8a5ceb2fc773a5e6dc7

#### New Features

* Upgraded SDK to build with Java 11.
* Updated the SDK to Android Gradle Plugin 7.0.4.

### Things to Note \[#things-to-note-4]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-6]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4MB             |
| x86\_64     | 4MB             |
| armeabi-v7a | 3.3MB           |
| arm64-v8a   | 3.8MB           |
| universal   | 14.9MB          |

## 6.0.2

November 19, 2021

* Programmable Voice Android SDK 6.0.2[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.0.2/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.0.2/docs/) MD5 Checksum : 9d3914d5b7cb05b9ded42611db408cd9

#### Enhancements

* Updated the SDK to Android Gradle Plugin 4.2.2.

### Things to Note \[#things-to-note-5]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-7]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4MB             |
| x86\_64     | 4MB             |
| armeabi-v7a | 3.3MB           |
| arm64-v8a   | 3.8MB           |
| universal   | 14.8MB          |

## 6.0.1

November 5, 2021

* Programmable Voice Android SDK 6.0.1[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.0.1/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.0.1/docs/) MD5 Checksum : 8be66d2ff2da31b89a5d904525a7b0a5

### Maintenance \[#maintenance-3]

* Upgraded the SDK to use AndroidX.

### Things to Note \[#things-to-note-6]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-8]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4MB             |
| x86\_64     | 4MB             |
| armeabi-v7a | 3.3MB           |
| arm64-v8a   | 3.8MB           |
| universal   | 14.8MB          |

## 6.0.0

November 2, 2021

* Programmable Voice Android SDK 6.0.0[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/6.0.0/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/6.0.0/docs/) MD5 Checksum : c6150be451e4ad4948f2b5d2a7212ff0

### API Changes

* The minimum Android SDK version has been increased from 16 to 21.

### Enhancements \[#enhancements-2]

* The voice SDK now validates full remote domain names while setting up the TLS connection.

### Things to Note \[#things-to-note-7]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-9]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4MB             |
| x86\_64     | 4MB             |
| armeabi-v7a | 3.3MB           |
| arm64-v8a   | 3.8MB           |
| universal   | 14.8MB          |

## 5.8.0

May 24, 2021

* Programmable Voice Android SDK 5.8.0[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/5.8.0/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.8.0/docs/) MD5 Checksum : dff5963249ff07f1378cd322fd50b50b

### Enhancements \[#enhancements-3]

* This release is based on Chromium WebRTC 88.
* The SDK uses Unified Plan SDP semantics instead of Plan-B.

### Things to Note \[#things-to-note-8]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-10]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 4MB             |
| x86\_64     | 3.9MB           |
| armeabi-v7a | 3.3MB           |
| arm64-v8a   | 3.8MB           |
| universal   | 14.8MB          |

## 5.7.2

March 29, 2021

* Programmable Voice Android SDK 5.7.2[\[Maven Central\]](https://search.maven.org/artifact/com.twilio/voice-android/5.7.2/aar), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.7.2/docs/) MD5 Checksum : cac4a963814637b23e2d1ffadda30036

### Enhancements \[#enhancements-4]

* Voice Android artifacts are now published to `MavenCentral` instead of `Bintray`.
  * Ensure to include `mavenCentral()` listed in your project's buildscript repositories section:

    ```bash
    buildscript {
            repositories {
                    mavenCentral()
                    ...
            }
    }
    ```
* Voice Android SDK now publishes the checksum in the release notes.

### Bug Fixes \[#bug-fixes-5]

* Fixed a crash when `onNetworkChanged` was called during the teardown process.

### Things to Note \[#things-to-note-9]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-11]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 3.9MB           |
| x86\_64     | 3.9MB           |
| armeabi-v7a | 3.2MB           |
| arm64-v8a   | 3.7MB           |
| universal   | 14.4MB          |

## 5.6.3

March 11, 2021

* Programmable Voice Android SDK 5.6.3 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.6.3), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.6.3/docs/)

### Bug Fixes \[#bug-fixes-6]

* Fixed a potential bug in the core module where the Logger could be accessed after being destroyed by another thread.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-12]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 3.9MB           |
| x86\_64     | 3.9MB           |
| armeabi-v7a | 3.2MB           |
| arm64-v8a   | 3.7MB           |
| universal   | 14.4MB          |

### Things to note

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

## 5.6.2

January 26, 2021

* Programmable Voice Android SDK 5.6.2 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.6.2), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.6.2/docs/)

### Enhancements \[#enhancements-5]

* Updated the SDK to Android Gradle Plugin to 4.1.1.

### Library size report \[#library-size-report-13]

| ABI         | APK Size Impact |
| ----------- | --------------- |
| x86         | 3.9MB           |
| x86\_64     | 3.8MB           |
| armeabi-v7a | 3.2MB           |
| arm64-v8a   | 3.7MB           |
| universal   | 14.3MB          |

### Things to note \[#things-to-note-2]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

## 5.6.1

January 5, 2021

* Programmable Voice Android SDK 5.6.1 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.6.1), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.6.1/docs/)

### Bug fixes

* Fixed a bug where caller did not receive the `onDisconnected` callback with error when the callee hung up.
* Fixed a bug where callee did not receive the `onCancelledCallInvite` callback with error when signaling connection error happened.

### Enhancements \[#enhancements-6]

* Private IP addresses are masked in Release mode for the SDK logs and the `ice-candidate` Insights event payload.
* Private IP addresses will not be masked in `Debug` mode. The `selected-ice-candidate-pair` event will contain private IP address of the local active ICE candidate for debugging purpose in both Release and Debug modes.
* Stop publishing Voice Insights event with invalid access token.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-14]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.3MB            |
| armeabi-v7a | 3.2MB             |
| arm64-v8a   | 3.7MB             |
| x86         | 3.9MB             |
| x86\_64     | 3.8MB             |

### Things to note \[#things-to-note-3]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

## 5.6.0

September 29th, 2020

* Programmable Voice Android SDK 5.6.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.6.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.6.0/docs/)

### Maintenance \[#maintenance-4]

* The SDK compileSDKVersion and targetSDKVersion were updated to 30 from 28. No changes are required to migrate to this version in an existing application.

### Library size report \[#library-size-report-15]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.3MB            |
| armeabi-v7a | 3.2MB             |
| arm64-v8a   | 3.7MB             |
| x86         | 3.9MB             |
| x86\_64     | 3.8MB             |

### Things to note \[#things-to-note-4]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

## 5.5.0

September 16, 2020

* Programmable Voice Android SDK 5.5.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.5.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.5.0/docs/)

### Enhancements \[#enhancements-7]

* The Voice Android SDK uses Chromium WebRTC 83.
* The Voice Android SDK is built with NDK r20b.
* PeerConnection state is now reported to Insights.
* `mos` calculation algorithm has been updated to make it monotonically decreasing with increasing `jitter` and `packets-lost-fraction` values over a range of `rtt` values. The final mos should always be in the range \[1.0, 4.6].

| Event Group         | Level | Event Name   | Description                                       |
| ------------------- | ----- | ------------ | ------------------------------------------------- |
| pc-connection-state | DEBUG | new          | Raised when peer connection state is new          |
| pc-connection-state | DEBUG | connecting   | Raised when peer connection state is connecting   |
| pc-connection-state | DEBUG | connected    | Raised when peer connection state is connected    |
| pc-connection-state | DEBUG | disconnected | Raised when peer connection state is disconnected |
| pc-connection-state | ERROR | failed       | Raised when peer connection state is failed       |
| pc-connection-state | DEBUG | closed       | Raised when peer connection state is closed       |

* A new Insights event `selected-ice-candidate-pair` is reported with the active local ICE candidate and remote ICE candidate.

| Event Group   | Level | Event Name                  | Description                                                                                  |
| ------------- | ----- | --------------------------- | -------------------------------------------------------------------------------------------- |
| ice-candidate | DEBUG | selected-ice-candidate-pair | Raised when the active local and remote ICE candidates of the peer connection are determined |

* Defined new error code

| Error Codes | ErrorCode                                 | Error Message                                         |
| ----------- | ----------------------------------------- | ----------------------------------------------------- |
| 53407       | EXCEPTION\_MEDIA\_DTLS\_TRANSPORT\_FAILED | Media connection failed due to DTLS handshake failure |

### Maintenance \[#maintenance-5]

* A security patch has been applied to prevent host candidate DNS attacks. See \[[https://bugs.chromium.org/p/webrtc/issues/detail?id=11597](https://bugs.chromium.org/p/webrtc/issues/detail?id=11597)] for details.

### Bug fixes \[#bug-fixes-2]

* Fixed a crash bug when processing empty stats reports or stats reports without remote audio tracks.

### SDK size update

The table below highlights the updated App Size Impact.

| ABI         | App Size Impact 5.3.0 | App Size Impact 5.5.0 |
| ----------- | --------------------- | --------------------- |
| universal   | 15.2MB                | 14.3MB                |
| armeabi-v7a | 3.3MB                 | 3.2MB                 |
| arm64-v8a   | 3.8MB                 | 3.7MB                 |
| x86         | 4MB                   | 3.9MB                 |
| x86\_64     | 4.1MB                 | 3.8MB                 |

### Library size report \[#library-size-report-16]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.3MB            |
| armeabi-v7a | 3.2MB             |
| arm64-v8a   | 3.7MB             |
| x86         | 3.9MB             |
| x86\_64     | 3.8MB             |

### Things to note \[#things-to-note-5]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

## 5.4.2

September 14, 2020

* Programmable Voice Android SDK 5.4.1 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.4.2), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.4.2/docs/)

### Bug fixes \[#bug-fixes-3]

* Fixed a crash bug when processing empty stats reports or stats reports without remote audio tracks.

### Library size report \[#library-size-report-17]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15.3MB            |
| armeabi-v7a | 3.4MB             |
| arm64-v8a   | 3.9MB             |
| x86         | 4.1MB             |
| x86\_64     | 4.2MB             |

### Things to note \[#things-to-note-6]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

## 5.4.1

September 1, 2020

* Programmable Voice Android SDK 5.4.1 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.4.1), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.4.1/docs/)

### Bug fixes \[#bug-fixes-4]

* Fixed a bug when attempting to execute work on the worker thread from a custom audio device.

### Maintenance \[#maintenance-6]

* Upgraded to Android Gradle Plugin 4.0.0 and Gradle 6.1.1
* Starting with Voice Android SDK 5.4.1, the SDK is no longer binary compatible with applications that target Java 7. In order to use this and future releases, developers must upgrade their applications to target Java 8. Follow the snippet below for reference:

```bash
android {
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}
```

### Library size report \[#library-size-report-18]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15.3MB            |
| armeabi-v7a | 3.4MB             |
| arm64-v8a   | 3.9MB             |
| x86         | 4.1MB             |
| x86\_64     | 4.2MB             |

### Things to note \[#things-to-note-7]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

## 5.4.0

July 9, 2020

* Programmable Voice Android SDK 5.4.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.4.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.4.0/docs/)

### API change

* A `CallerInfo` object is introduced to represent information about the caller. Currently, this information is limited to SHAKEN/STIR status of incoming PSTN Calls, but may later be expanded to include CNAM, and other endpoint types. `isVerified` attribute represents whether or not the caller's phone number has been verified by Twilio using SHAKEN/STIR validation. The value of this attribute is `true` if the caller has been validated at 'A' level, `false` if the caller has been verified at any lower level or has failed validation. If SHAKEN/STIR information is unavailable for the caller or stir status value is `null`, the value of this attribute will be `null`.
* `CallInvite` class includes `getCallerInfo(..)` method that returns the `CallerInfo` of the caller.

For details on how Twilio uses SHAKEN/STIR to make trusted calls and protect against unlawful spoofing, please visit [/docs/voice/trusted-calling-using-shakenstir](/docs/voice/trusted-calling-with-shakenstir).

### Bug fixes \[#bug-fixes-5]

* Fixed crash bugs during teardown of a `Call`.

### Library size report \[#library-size-report-19]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15.3MB            |
| armeabi-v7a | 3.4MB             |
| arm64-v8a   | 3.9MB             |
| x86         | 4.1MB             |
| x86\_64     | 4.2MB             |

### Things to note \[#things-to-note-8]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

## 5.3.1

June 23, 2020

* Programmable Voice Android SDK 5.3.1 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.3.1), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.3.1/docs/)

### Bug fixes \[#bug-fixes-6]

* Fixed a bug in `Voice.setRegion(..)` API that disallowed to use non default values.

### Library size report \[#library-size-report-20]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15.2MB            |
| armeabi-v7a | 3.4MB             |
| arm64-v8a   | 3.9MB             |
| x86         | 4.1MB             |
| x86\_64     | 4.1MB             |

### Things to note \[#things-to-note-9]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

## 5.3.0

June 3, 2020

* Programmable Voice Android SDK 5.3.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.3.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.3.0/docs/)

### API changes

* A new `Call.Listener` callback `onCallQualityWarningsChanged()` is introduced.

```java
void onCallQualityWarningsChanged(Call call,
                                  Set<CallQualityWarning> currentWarnings,
                                  Set<CallQualityWarning> previousWarnings);
```

The `Set` that contain the warnings are consisted of `enum` with values of the newly introduced `CallQualityWarning`

```java
public enum CallQualityWarning {
    WARN_HIGH_RTT("high-rtt"),
    WARN_HIGH_JITTER("high-jitter"),
    WARN_HIGH_PACKET_LOSS("high-packet-loss"),
    WARN_LOW_MOS("low-mos"),
    WARN_CONSTANT_AUDIO_IN_LEVEL("constant-audio-input-level"),
}
```

The trigger conditions for the warnings defined in the enumeration are defined as follows:

* `WARN_HIGH_RTT` - Round Trip Time (RTT) > 400 ms for 3 out of last 5 samples.
* `WARN_HIGH_JITTER` - Jitter > 30 ms for 3 out of last 5 samples.
* `WARN_HIGH_PACKET_LOSS` - Raised when average packet loss > 3% in last 7 samples. Cleared when average packet loss \<= 1% in last 7 samples.
* `WARN_LOW_MOS` - Mean Opinion Score (MOS) \< 3.5 for 3 out of last 5 samples.
* `WARN_CONSTANT_AUDIO_IN_LEVEL` - Raised when the standard deviation of audio input levels for last 10 samples is less than or equals 1% of the maximum possible audio input level (32767) i.e. 327.67 and the call is not in the muted state and the call is not on hold. Cleared when the standard deviation of audio input levels for last 10 samples is greater than 3% of the maximum possible audio input level.
* A new method `getCallQualityWarnings()` is added to `Call` to retrieve the present set of call quality related warnings.
* This release also adds the Mean Opinion Score (MOS) measurement `mos` to `RemoteAudioTrackStats`. Use `Call.getStats()` API during a call to retrieve the score. The `mos` is computed once per second. Since the MOS is calculated from network performance measurements, it can be used to indicate the current network condition to the user to provide better usability. See [API Docs](https://sdk.twilio.com/android/voice/releases/5.3.0/docs/com/twilio/voice/RemoteAudioTrackStats.html#mos) for more information.

Example:

```java
call.getStats(new StatsListener() {
    @Override
    public void onStats(@NonNull List<StatsReport> statsReports) {
        for (StatsReport statsReport : statsReports) {
            List<RemoteAudioTrackStats> remoteAudioStatsList = statsReport.getRemoteAudioTrackStats();
            for (RemoteAudioTrackStats remoteAudioStats : remoteAudioStatsList) {
                float mos = remoteAudioStats.mos;
            }
        }
    }
});
```

* This release includes support for the expansion of Twilio's Global Infrastructure via Edge Locations which allows customers to control their connectivity into and out of Twilio's platform. The Voice Android SDK uses these Edges to connect to Twilio's infrastructure via the new property `Voice.edge`. This new property supersedes the now deprecated `Voice.region`. See the [new Edge names](/docs/voice/sdks/javascript/edges) and how they map to the old region names.

Here is an example:

```java
// Connect using global low latency
Voice.setEdge("roaming")
```

Below are the new methods signatures introduced in `Voice` class.

```bash
@NonNull public static String getEdge();
public static void setEdge(@NonNull String edge)
```

The following APIs have been deprecated in favor of the new methods.

```bash
@NonNull public static String getRegion();
public static void setRegion(@NonNull String region)
```

* Added a Boolean property `enableIceGatheringOnAnyAddressPorts` in `CallOptions` that allows gathering of ICE candidates from "any address" ports. This allows applications to work in certain VPN environments.

Reference the following code snippet to enable or disable this feature. Note, `enableIceGatheringOnAnyAddressPorts` is disabled by default.

Configure `enableIceGatheringOnAnyAddressPorts` with `ConnectOptions`

```java
ConnectOptions connectOptions = new ConnectOptions.Builder(accessToken)
        .enableIceGatheringOnAnyAddressPorts(iceGatheringOnAnyAddressPorts)
        .build();
Voice.connect(context, connectOptions, callListener);
```

Configure `enableIceGatheringOnAnyAddressPorts` with `AcceptOptions`

```java
AcceptOptions acceptOptions = new AcceptOptions.Builder()
        .enableIceGatheringOnAnyAddressPorts(iceGatheringOnAnyAddressPorts)
        .build();
callInvite.accept(context, acceptOptions, callListener);
```

* By default ICE gathering is done on all interfaces except some VPN type interfaces. This makes it impossible to connect to Twilio in networks that require the use of VPN. In this release, the new Boolean property `enableIceGatheringOnAnyAddressPorts` in `CallOptions` allows the gathering of ICE candidates from all available interfaces. This should be used in those networks where the default does not work. See [AcceptOptions.Builder.enableIceGatheringOnAnyAddressPorts](https://sdk.twilio.com/android/voice/releases/5.3.0/docs/com/twilio/voice/AcceptOptions.Builder.html#enableIceGatheringOnAnyAddressPorts-boolean-) or [ConnectOptions.Builder.enableIceGatheringOnAnyAddressPorts](https://sdk.twilio.com/android/voice/releases/5.3.0/docs/com/twilio/voice/ConnectOptions.Builder.html#enableIceGatheringOnAnyAddressPorts-boolean-) for more information.

### Library size report \[#library-size-report-21]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15.2MB            |
| armeabi-v7a | 3.4MB             |
| arm64-v8a   | 3.9MB             |
| x86         | 4.1MB             |
| x86\_64     | 4.1MB             |

### Things to note \[#things-to-note-10]

* `Voice.setRegion(..)` API disallows to use non default values.
* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

## 5.2.0

April 27, 2020

* Programmable Voice Android SDK 5.2.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.2.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.2.0/docs/)

### AudioDevice API

The AudioDevice API is an advanced API that can be used to create innovative and sophisticated in-app audio capabilities. For example, enable pre-recorded messages to be played in-call, or apply noise reduction algorithms before playing out the received audio.

An `AudioDevice` is a logical device that is used to capture and render audio. The captured audio is sent to the remote party, and the received audio is rendered locally. By default, the SDK uses [DefaultAudioDevice](https://sdk.twilio.com/android/voice/releases/5.2.0/docs/com/twilio/voice/DefaultAudioDevice.html) which uses the mic for capturing and the local speaker/earpiece/headset for rendering. The `AudioDevice` API allows for the creation of custom audio capturers and renderers. See this [example](https://github.com/twilio/voice-quickstart-android/tree/master/exampleCustomAudioDevice) and [API docs](https://sdk.twilio.com/android/voice/releases/5.2.0/docs/) to learn more about custom audio devices.

### SDK size update \[#sdk-size-update-2]

The `AudioDevice` feature requires additional native APIs that result in a small increase in SDK size. The table below highlights the updated App Size Impact.

| ABI         | App Size Impact 5.1.1 | App Size Impact 5.2.0 |
| ----------- | --------------------- | --------------------- |
| universal   | 14.9MB                | 15.1MB                |
| armeabi-v7a | 3.3MB                 | 3.3MB                 |
| arm64-v8a   | 3.8MB                 | 3.9MB                 |
| x86         | 4MB                   | 4MB                   |
| x86\_64     | 4.1MB                 | 4.1MB                 |

### Things to note \[#things-to-note-11]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

## 5.1.1

March 20th, 2020

* Programmable Voice Android SDK 5.1.1 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.1.1), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.1.1/docs/)

### Bug Fixes \[#bug-fixes-7]

* Fixed data types in event payload for Voice Insights events.
* Fixed Voice Insights data with valid transport id value.

### Things to Note \[#things-to-note-10]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-22]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15 MB             |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.9MB             |
| x86         | 4MB               |
| x86\_64     | 4.1MB             |

## 5.1.0

February 28, 2020

* Programmable Voice Android SDK 5.1.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.1.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.1.0/docs/)

### Enhancements \[#enhancements-8]

* An ongoing call will automatically switch to a more preferred network type if one becomes available. The following are the network types listed in preferred order: ETHERNET, LOOPBACK, WIFI, VPN, and CELLULAR. For example, if a WIFI network becomes available whilst in a call that is using CELLULAR data, the call will automatically switch to using the WIFI network.
* Attempts to re-establish the media connection will be done preemptively if no media flow is detected for 3 seconds.

### Bug fixes \[#bug-fixes-7]

* Fixed data types in event payload for Voice Insights events.

### Things to note \[#things-to-note-12]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-23]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15MB              |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.9MB             |
| x86         | 4MB               |
| x86\_64     | 4.1MB             |

## 5.0.2

December 6, 2019

* Programmable Voice Android SDK 5.0.2 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.0.2), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.0.2/docs/)

### Enhancements \[#enhancements-9]

* The `HttpsURLConnection` thread is now tagged using `Traffic.setThreadStatsTag`. This change prevents warnings and/or crashes when an App is started using `strictMode`.
* Application name, id, version, build number, and min/major sdk version are now published to Insights. This helps with isolating problems if an issue is encountered.

### Things to note \[#things-to-note-13]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-24]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.9MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 4MB               |
| x86\_64     | 4.1MB             |

## 5.0.1

November 19, 2019

* Programmable Voice Android SDK 5.0.1 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.0.1), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.0.1/docs/)

### Enhancements \[#enhancements-10]

* Incoming call handling improvements. Previously, if we encountered network issues before an incoming call was answered or rejected, we disconnected the call. With this release, we will continue to try and establish a connection to Twilio for a maximum of 40 seconds before we disconnect the call.
* We now publish the negotiated codec and its associated parameters to Insights.

| Event Group | Level | Event Name | Description                             |
| ----------- | ----- | ---------- | --------------------------------------- |
| settings    | INFO  | codec      | Raised when the codec has been selected |

### Other improvements

* Improved the way we perform DNS resolution. Previously, some DNS requests could indirectly block the main thread. This is no longer the case.

### Things to note \[#things-to-note-14]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

#### Known Issues

* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-25]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.9MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 4MB               |
| x86\_64     | 4.1MB             |

## 5.0.0

October 28, 2019

* Programmable Voice Android SDK 5.0.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/5.0.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/5.0.0/docs/)

This release introduces an update to the Programmable Voice call model. To upgrade your application please follow the [migration guide](https://github.com/twilio/voice-quickstart-android/blob/master/Docs/migration-guide-4.x-5.x.md).

### Background

Prior to `5.0.0`, when
`Voice.register(...)` is invoked, the Voice SDK registers for two push
notifications: a call and cancel push notification. The call and cancel push notification payloads
could then be passed as arguments to `Voice.handleMessage(...)` and your application would be
provided with a callback via `MessageListener` indicating if the message was a `CallInvite`
or `CancelledCallInvite`.

Starting with 5.0.0, when `Voice.register(...)` is invoked, the Voice SDK will register
for call push notifications and cancelled call invites will be determined via a signaling connection.
`Voice.handleMessage(...)` no longer processes cancel push notification payloads and will return
`false` if provided with a cancel message. As a result, developers must re-register via
`Voice.register(...)` after upgrading their application to `5.0.0` to stop receiving cancel push
notifications.

### CallInvite and CancelledCallInvite updates

A valid call push notification, when passed to `Voice.handleMessage(...)`, will still result in a `CallInvite`
being raised to the provided `MessageListener`. A `CancelledCallInvite` will be raised to
the provided `MessageListener` if any of the following events occur:

* The call is prematurely disconnected by the caller.
* The callee does not accept or reject the call within 30 seconds.
* The Voice SDK is unable to establish a connection to Twilio.

A `CancelledCallInvite` will not be raised if a `CallInvite` is accepted or rejected.

### Insights

To provide observability for incoming call cancellations the following Insights events have been added:

| Event Group  | Level | Event Name                       | Description                                                                                                                            |
| ------------ | ----- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| connection   | INFO  | listen                           | Raised when an attempt to listen for cancellations is made                                                                             |
| connection   | INFO  | listening                        | Raised when an attempt to listen for cancellations has succeeded                                                                       |
| connection   | INFO  | cancel                           | Raised when a cancellation has been reported                                                                                           |
| connection   | ERROR | listening-error                  | Raised when an attempt to listen for cancellation has failed                                                                           |
| registration | ERROR | unsupported-cancel-message-error | Raised when a "cancel" push notification is processed by the SDK. This version of the SDK does not support "cancel" push notifications |

### API updates \[#api-updates-3]

* `MessageListener.onCancelledCallInvite` has been updated to the following signature.

  ```bash
  void onCancelledCallInvite(@NonNull CancelledCallInvite cancelledCallInvite, @Nullable CallException callException)
  ```

  The provided `CallException` will indicate if a call was cancelled as the result of an error. If
  no error occurred, then the `CallException` is `null`.
* Both `Voice.handleMessage(...)` methods require an Android `Context` as the first argument.
* `CallInvite` class includes `isValid(...)` utility method to validate whether the payload is a valid notification sent by Twilio. A valid notification payload will result in a `CallInvite` being raised via `MessageListener.onCallInvite(...)` callback when passed to `Voice.handleMessage(...)`.
* Enabling insights and setting the region are now specified on the `Voice` class. These options were previously accessible on `ConnectOptions` and `AcceptOptions`.

  * Sending stats data to Insights is enabled by default.
  * The default region uses Global Low Latency routing, which establishes a connection with the closest region to the user.

  Below are the new methods signatures introduced in `Voice` class.

  ```bash
  public static boolean isInsightsEnabled();
  public static void enableInsights(boolean enable);
  @NonNull public static String getRegion();
  public static void setRegion(@NonNull String region)
  ```
* Introduced a new error code that gets surfaced when `handleMessage(..)` API is called with push notification bundle with `twilio.voice.cancel` as the `twi_message_type`.

| Error Code | Level | Error Message                    | Description                                                                                                                                                                                                                                                                                             |
| ---------- | ----- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 31302      | Error | Unsupported Cancel Message Error | This version of the SDK no longer supports processing cancel push notification messages. You must register via Voice.register(...) with this version of the SDK to stop receiving cancel push notification messages. Cancellations are now handled internally and reported to you on behalf of the SDK. |

### Enhancements \[#enhancements-11]

* CLIENT-6757 Updated the Android Gradle Plugin to 3.5.0 and Gradle to 5.4.1.

### Known issues

* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.
* Releases prior to 6.6.3 do not support Android 15 with 16k pages.

### Library size report \[#library-size-report-26]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.9MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 4MB               |
| x86\_64     | 4MB               |

***

## 4.5.0

August 20th, 2019

* Programmable Voice Android SDK 4.5.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/4.5.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/4.5.0/docs/)

### Enhancements \[#enhancements-12]

#### Differentiated Services Code Point (DSCP) Tagging API

The Differentiated Services Code Point [(DSCP)](https://tools.ietf.org/html/draft-ietf-tsvwg-rtcweb-qos-18#section-5) Tagging API allows you to mark the audio packets with Expedited Forwarding (EF) for the purposes of improved packet routing. This
behavior is enabled by default. When enabled, supporting networks will prioritize audio packet delivery for improved audio quality.

Reference the following code snippet to control enabling DSCP.

Configure DSCP with `ConnectOptions`

```bash
ConnectOptions connectOptions = new ConnectOptions.Builder(accessToken)
        .enableDscp(enableDscp)
        .build();
Voice.connect(context, connectOptions, callListener);
```

Configure DSCP with `AcceptOptions`

```bash
AcceptOptions acceptOptions = new AcceptOptions.Builder()
        .enableDscp(enableDscp)
        .build();
callInvite.accept(context, acceptOptions, callListener);
```

### Known Issues

* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 4.4.0

August 2nd, 2019

* Programmable Voice Android SDK 4.4.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/4.4.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/4.4.0/docs/)

### Enhancements \[#enhancements-13]

#### Custom Parameters in Canceled Call Notification

You can now retrieve the custom parameters set in your TwiML application from `CancelledCallInvite`. With this addition, you can for example, display a missed call notification with the caller's display name retrieved from the `CancelledCallInvite` `getCustomParamaters()`.

For more information, refer to the [API docs](https://sdk.twilio.com/android/voice/releases/4.4.0/docs/com/twilio/voice/CancelledCallInvite.html#getCustomParameters--)

```java
// Pass custom parameters in TwiML
<?xml version="1.0" encoding="UTF-8"?>
    <Response>
        <Dial answerOnBridge="false" callerId="client:alice">
            <Client>
                <Identity>bob</Identity>
                <Parameter name="caller_first_name" value="alice"  />
                <Parameter name="caller_last_name" value="smith"  />
            </Client>
        </Dial>
    </Response>
```

`cancelledCallInvite.getCustomParameters()` returns a map of key-value pair passed in the TwiML.

```bash
"caller_first_name" -> "alice"
"caller_last_name" -> "smith"
```

* CLIENT-5845 Insights events `ringing` in the `connection` group guarantees to include `CallSid`.

### Known Issues \[#known-issues-2]

* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-2]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.2MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 4.3.0

July 29th, 2019

* Programmable Voice Android SDK 4.3.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/4.3.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/4.3.0/docs/)

### Enhancements \[#enhancements-14]

* CLIENT-6428 The SDK Android Gradle Plugin was updated from 3.3.2 to 3.4.2 and the Gradle version
  was updated from 4.10.3 to 5.1.1.
* CLIENT-6331 [OpenSLES](https://www.khronos.org/opensles/) is now disabled by default for
  both incoming and outgoing calls unless explicitly enabled. To enable OpenSLES, execute the
  following before invoking `Voice.connect(...)` or `CallInvite.accept(...)`:
  `tvo.webrtc.voiceengine.WebRtcAudioManager.setBlacklistDeviceForOpenSLESUsage(false)`.

### Known Issues \[#known-issues-3]

* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-3]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.2MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 4.2.0

July 24th, 2019

* Programmable Voice Android SDK 4.2.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/4.2.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/4.2.0/docs/)

### Enhancements \[#enhancements-15]

* The SDK compileSDKVersion and `targetSDKVersion` SDK was updated to 28 from 27. No changes are required to migrate to this version in an existing application.

### Known Issues \[#known-issues-4]

* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-4]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 4.1.0

July 12th, 2019

* Programmable Voice Android SDK 4.1.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/4.1.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/4.1.0/docs/)

### New Features \[#new-features-2]

#### Max Average Bandwidth API

By default, Opus codec is set up with a bitrate of around 32kbps (40-50kbps on the wire). With this release, you are able to set a custom max average bitrate transmission to better control how much bandwidth your VoIP application should use. See [RFC-7587 7.1](https://tools.ietf.org/html/rfc7587#section-7.1) for information about Max Average Bitrate.

The main purpose of this API is to set a lower max average bitrate to minimize bandwidth usage. This is particularly useful in deployments where bandwidth is a premium. Where bandwidth is not of concern, you do not need to use this API.

Max Average Bitrate can be set to as low as 6,000bps and as high as 51,000bps. Values outside this range are ignored and the default Opus operation mode is used. See [API Docs](https://sdk.twilio.com/android/voice/releases/4.1.0/docs/com/twilio/voice/OpusCodec.html#OpusCodec-int-) for more information.

As would be expected, lowering the max average bitrate impacts audio quality. We don't recommend setting max average bitrate to a value below 8,000bps. On the other hand, setting values over 32,000bps will have negligible audio quality improvements.

For example, to set a new max average bitrate to 16,000bps:

```java
ConnectOptions connectOptions = new ConnectOptions.Builder(accessToken)
                        .params(params)
                        .preferAudioCodecs(Arrays.asList( new OpusCodec(16000)))
                        .build();
Call call = Voice.connect(VoiceActivity.this, connectOptions, callListener);
```

### Other Enhancements

* Programmable Voice Android SDK transmits data for VoIP calls and for [Insights](https://www.twilio.com/en-us/voice/insights). With this release, we have reduced Insights related data consumption by around 25%. This was accomplished by reducing the events reporting interval.
* The SDK now reports `ice-candidate` events to Insights. These events are raised when `OnIceCandidate` is called on the `PeerConnection`.

### Known Issues \[#known-issues-5]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-5]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 4.0.0

June 28th, 2019

* Programmable Voice Android SDK 4.0.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/4.0.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/4.0.0/docs/)

### New Features \[#new-features-3]

#### Reconnecting State API

This release introduces the new `Reconnecting State API`. This API adds a new state `RECONNECTING` to `Call.State` and two new `Call.Listener()` callbacks, `onReconnecting(...)` and `onReconnected(...)`.

Call reconnection capability has been available since SDK 3.0. For example, if a call is established over a Wi-Fi network and the Wi-Fi network becomes unavailable, the SDK will automatically switch the call over to the next available network.

This release adds the reconnection related callbacks. `onReconnecting(...)` indicates when a call is being reconnected due to a network disruption or network switch over and `onReconnected(...)` is called once the call has been re-connected. You can use this information to provide intuitive feedback to your App user when a reconnection is taking place.

### Migration Guide

Please refer to our [migration guide](https://github.com/twilio/voice-quickstart-android/blob/master/Docs/migration-guide-3.x-4.x.md) for more information about migrating from 3.x.

### Known Issues \[#known-issues-6]

* Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-6]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.3.0

June 26th, 2019

* Programmable Voice Android SDK 3.3.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.3.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/3.3.0/docs/)

### Enhancements \[#enhancements-16]

* Insights events `reconnecting` and `reconnected` in the `connection` group are now documented in the Javadoc for the `Call` class.
* CLIENT-6218 Insights events `53001`/`Signaling connection disconnected` and `53405`/`Media connection failed` in the `connection` group that are raised when attempting to reconnect are now raised with Insights level "warning". Previously, they were raised with level "error".
* CLIENT-6257 Added `AddressIncompleteException` to indicate that the number of the callee is malformed.

| Error Code | Error Message      |
| ---------- | ------------------ |
| 31484      | Address Incomplete |

### Bug Fixes \[#bug-fixes-8]

* CLIENT-6205 Fixed an issue where a `31408`/`Request Timeout` would result in a `31005`/`Connection error`

### Known Issues \[#known-issues-7]

* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-7]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.2.0

June 21st, 2019

* Programmable Voice Android SDK 3..2.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.2.0), [\[docs\]](https://sdk.twilio.com/android/voice/releases/3.2.0/docs/)

### Enhancements \[#enhancements-17]

* CLIENT-6282 The SDK can now be compiled alongside the Programmable Video SDK. Please perform the
  following steps to properly upgrade to `3.2.0`
  * Modify the classpath of any java files used from `org.webrtc.*` to `tvo.webrtc.*`. Calling
    APIs to any class in `org.webrtc.*` will have no effect within the Voice SDK.
  * Perform the following modifications to your proguard file when compiling the Voice SDK for a
    release build with obfuscation.
    * Change `-keep class org.webrtc.** { *; }` to `-keep class tvo.webrtc.** { *; }`
    * Change `-dontwarn org.webrtc.**` to `-dontwarn tvo.webrtc.**`

### Known Issues \[#known-issues-8]

* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-8]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.1.2

June 20th, 2019

* Programmable Voice Android SDK 3.1.2 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.1.2), [\[docs\]](https://sdk.twilio.com/android/voice/releases/3.1.2/docs/)

### Bug Fixes \[#bug-fixes-9]

* CLIENT-6246 Fixed bug on API 19 and below where the SDK would incorrectly surface a
  `REGISTRATION_ERROR_CODE/31301` exception for calls to `Voice.register(...)` or
  `Voice.unregister(...)` when a `EXCEPTION_INVALID_ACCESS_TOKEN/20101` actually occurred.

### Known Issues \[#known-issues-9]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event publishing. The crash has only been observed on API 18 devices and results from a thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes have been reported in the popular networking library OkHttp [#1520](https://github.com/square/okhttp/issues/1520) [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications, please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and we will investigate potential fixes.

### Library Size Report \[#library-size-report-9]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.1.1

June 12th, 2019

* Programmable Voice Android SDK 3.1.1 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.1.1), [\[docs\]](https://sdk.twilio.com/android/voice/releases/3.1.1/docs/)

### Enhancements \[#enhancements-18]

* Switched CI provider for build, test, and release pipeline.
* The Twilio CDN will no longer host the Voice Android aar artifacts or Javadocs. All artifacts and javadocs previously hosted on the Twilio CDN will remain.

### Accessing Artifacts

If you are downloading Voice Android SDK artifacts from the Twilio CDN then there are two
options available moving forward.

1. Follow our [Get Started with the Programmable Voice SDKs](/docs/voice/sdks).
2. Download the artifacts [directly from Bintray](https://bintray.com/twilio/releases/voice-android#files/com/twilio/voice-android).

### Viewing Javadocs

All Javadocs back to `3.0.0-preview1` are now hosted on [Github Pages](https://pages.github.com/)
with the following URL scheme. `https://twilio.github.io/twilio-voice-android/docs/{version}`

* To view `3.1.1` Javadocs go to [https://sdk.twilio.com/android/voice/releases/3.1.1/docs/](https://sdk.twilio.com/android/voice/releases/3.1.1/docs/)

### Known Issues \[#known-issues-10]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-10]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.1.0

May 16th, 2019

* Programmable Voice Android SDK 3.1.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.1.0), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.1.0/docs/)

### Enhancements \[#enhancements-19]

#### Improved error codes

We now surface more details about errors encountered during [Voice.register(...)](https://media.twiliocdn.com/sdk/android/voice/releases/3.1.0/docs/com/twilio/voice/Voice.html#register-java.lang.String-com.twilio.voice.Voice.RegistrationChannel-java.lang.String-com.twilio.voice.RegistrationListener-), [Voice.unregister(...)](https://media.twiliocdn.com/sdk/android/voice/releases/3.1.0/docs/com/twilio/voice/Voice.html#unregister-java.lang.String-com.twilio.voice.Voice.RegistrationChannel-java.lang.String-com.twilio.voice.UnregistrationListener-), [Voice.connect(...)](https://media.twiliocdn.com/sdk/android/voice/releases/3.1.0/docs/com/twilio/voice/Voice.html#connect-android.content.Context-com.twilio.voice.ConnectOptions-com.twilio.voice.Call.Listener-), and [CallInvite.accept(...)](https://media.twiliocdn.com/sdk/android/voice/releases/3.1.0/docs/com/twilio/voice/CallInvite.html#accept-android.content.Context-com.twilio.voice.AcceptOptions-com.twilio.voice.Call.Listener-). Previously, these functions reported these errors with the generic error [REGISTRATION\_ERROR\_CODE/31301](https://media.twiliocdn.com/sdk/android/voice/releases/3.1.0/docs/com/twilio/voice/RegistrationException.html#EXCEPTION_REGISTRATION_ERROR) or [EXCEPTION\_CONNECTION\_ERROR/31005](https://media.twiliocdn.com/sdk/android/voice/releases/3.1.0/docs/com/twilio/voice/CallException.html#EXCEPTION_CONNECTION_ERROR).

With the new error codes, you can make more informed decisions about how to remedy the problem. For example, error code `EXCEPTION_BAD_REQUEST` and `EXCEPTION_TOO_MANY_REQUEST` indicate potential programming issues, while `EXCEPTION_ACCESS_TOKEN_REJECTED` indicates an issue with your Access Token.

Please note, you may need to change your code if you have added special handling for [REGISTRATION\_ERROR\_CODE/31301](https://media.twiliocdn.com/sdk/android/voice/releases/3.1.0/docs/com/twilio/voice/RegistrationException.html#EXCEPTION_REGISTRATION_ERROR) or [EXCEPTION\_CONNECTION\_ERROR/31005](https://media.twiliocdn.com/sdk/android/voice/releases/3.1.0/docs/com/twilio/voice/CallException.html#EXCEPTION_CONNECTION_ERROR).

For more information see the [API docs](https://media.twiliocdn.com/sdk/android/voice/releases/3.1.0/docs/index.html)

The following is a summary of the new codes available for `Voice.register(...)` and `Voice.unregister(...)`:

| Error Code | Error Message                                                                                          |
| ---------- | ------------------------------------------------------------------------------------------------------ |
| 31400      | Bad Request                                                                                            |
| 31403      | Forbidden                                                                                              |
| 31404      | Not Found                                                                                              |
| 31408      | Request Timeout                                                                                        |
| 31409      | Conflict                                                                                               |
| 31426      | Upgrade Required. This is most likely related to a TLS version not accepted by Twilio's infrastructure |
| 31429      | Too Many Requests                                                                                      |
| 31500      | Internal Server                                                                                        |
| 31502      | Bad Gateway                                                                                            |
| 31503      | Service Unavailable                                                                                    |
| 31504      | Gateway Timeout                                                                                        |

The following is a summary of the new codes available for `Voice.connect(...)` and `CallInvite.accept(...)`:

| Error Code | Error Message                   |
| ---------- | ------------------------------- |
| 31009      | Transport error                 |
| 31400      | Bad Request                     |
| 31403      | Forbidden                       |
| 31404      | Not Found                       |
| 31408      | Request Timeout                 |
| 31480      | Temporarily Unavailable         |
| 31481      | Call/Transaction Does Not Exist |
| 31486      | Busy Here                       |
| 31487      | Request Terminated              |
| 31500      | Internal Server                 |
| 31502      | Bad Gateway                     |
| 31503      | Service Unavailable             |
| 31504      | Gateway Timeout                 |
| 31530      | DNS Resolution Error            |
| 31600      | Busy Everywhere                 |
| 31603      | Decline                         |
| 31604      | Does Not Exist Anywhere         |

### Bug Fixes \[#bug-fixes-10]

* CLIENT-6077 The SDK reports error events to Insights when exception occurs during registration/unregistration.

### Known Issues \[#known-issues-11]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-11]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.0.0

April 25th, 2019

* Programmable Voice Android SDK 3.0.0 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0/docs/)

We have promoted `3.0.0-beta13` to `3.0.0`. Reference our [migration guide](https://github.com/twilio/voice-quickstart-android/blob/master/Docs/migration-guide-2.x-3.x.md) to upgrade your applications to `3.0.0`.

### Known Issues \[#known-issues-12]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-12]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.0.0-beta13

April 18th, 2019

* Programmable Voice Android SDK 3.0.0-beta13 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta13), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta13/docs/)

### Bug Fixes \[#bug-fixes-11]

* CLIENT-5981 The SDK erroneously raised multiple call quality warnings events to Insights.

### Known Issues \[#known-issues-13]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-13]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.0.0-beta12

April 17th, 2019

* Programmable Voice Android SDK 3.0.0-beta12 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta12), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta12/docs/)

### Enhancements \[#enhancements-20]

* CLIENT-5974 Removed unused error `CallConnectionTimeoutException`, `AudioDeviceErrorException`, `SignalingConnectionErrorCode`, `SignalingConnectionTimeoutErrorCode`, `SignalingIncomingMessageInvalidErrorCode`, `SignalingOutgoingMessageInvalidErrorCode`, `ConfigurationAcquireFailedErrorCode`, `ConfigurationAcquireTurnFailedErrorCode` from the CallException error code class.

### Bug Fixes \[#bug-fixes-12]

* CLIENT-5935 Fixed a bug where constant audio level warning Insights events are reported when the call is muted or on hold.
* CLIENT-5951 Fixed a bug where "packets\_lost" field was missing in the metric event.
* CLIENT-5954 Fixed a bug where the SDK reported integer MOS score with "low-mos" warning event.
* Client 5978 Fixed a bug where the SDK reported double values for `packets_lost_fraction` to Insights instead of integer.

### Known Issues \[#known-issues-14]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-14]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.0.0-beta11

April 12th, 2019

* Programmable Voice Android SDK 3.0.0-beta11 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta11), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta11/docs/)

### Bug Fixes \[#bug-fixes-13]

* CLIENT-5899 Fixed an issue where in rare cases a call got disconnected during call setup due to frequent network changes.

### Known Issues \[#known-issues-15]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-15]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.0.0-beta10

April 4th, 2019

* Programmable Voice Android SDK 3.0.0-beta10 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta10), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta10/docs/)

### Bug Fixes \[#bug-fixes-14]

* CLIENT-5379 Fixed an issue where WiFi to WiFi network handoff was causing one-way audio followed by `Call` disconnect.

### Known Issues \[#known-issues-16]

* CLIENT-5576 LTE to WiFI handover may cause one way audio.
* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-16]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.0.0-beta9

April 2nd, 2019

* Programmable Voice Android SDK 3.0.0-beta9 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta9), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta9/docs/)

### Bug Fixes \[#bug-fixes-15]

* CLIENT-5828, CLIENT-5868 A network change that occurs during a reconnection will now trigger another reconnection attempt ensuring media is restored on the correct network.
* CLIENT-5882 Call metrics insights will always be available when the Call is in `Call.State.CONNECTED` state including after a network handover.

### Known Issues \[#known-issues-17]

* CLIENT-5576 LTE to WiFI handover may cause one way audio.
* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.

### Library Size Report \[#library-size-report-17]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.0.0-beta8

March 27th, 2019

* Programmable Voice Android SDK 3.0.0-beta8 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta8), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta8/docs/)

### API Changes \[#api-changes-2]

* Attempts to connect a call via `Voice.connect(...)` or `CallInvite.accept(...)` that fail prior to reaching the connected state will always raise an `onConnectFailure(...)` with an error code. However, if `Call.disconnect()` is called while an attempt to connect or accept a call is made, the `onDisconnected(...)` will be raised with no error.

### Updates \[#updates-2]

* CLIENT-5808 CLIENT-5809 Updated the API documentation for `CallInvite.accept`.
* CLIENT-5811 Updated the API documentation for `Call`.

### Bug Fixes \[#bug-fixes-16]

* CLIENT-5813 Network loss scenarios that resulted in a call failure now raise the `onConnectFailure(...)` callback. Previously these scenarios erroneously raised `onDisconnected(...)`.
* CLIENT-5754 A call that fails as a result of not establishing a media connection prior to being connected now raises the `onConnectFailure(...)` callback. Previously this scenario erroneously raised `onDisconnected(...)`.
* CLIENT-5821 The `packets_lost_fraction` value reported to Insights is correctly computed and within the expect range of 0 to 100.
* CLIENT-5835 Events were erroneously reported to Insights when the `ConnectOptions.enableInsights` property was set to false.

### Known Issues \[#known-issues-18]

* CLIENT-5576 LTE to WiFI handover may cause one way audio.
* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.
* CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

### Library Size Report \[#library-size-report-18]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.0.0-beta7

March 19th, 2019

* Programmable Voice Android SDK 3.0.0-beta7 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta7), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta7/docs/)

### API Changes \[#api-changes-3]

* The `getFrom()` method from `CallInvite` and `CancelledCallInvite` is now `nullable` in case the value is not available in the call invite message.

### Bug Fixes \[#bug-fixes-17]

* CLIENT-5800: Fixed an issue where an incoming call invite that did not contain a from field was not considered a valid message.

### Known Issues \[#known-issues-19]

* CLIENT-5576 LTE to WiFI handover may cause one way audio.
* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.
* CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

### Library Size Report \[#library-size-report-19]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.0.0-beta6

March 14th, 2019

* Programmable Voice Android SDK 3.0.0-beta6 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta6), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta6/docs/)

### Updates \[#updates-3]

* CLIENT-5742 Removed `context` parameter in `handleMessage(...)` API.
* CLIENT-5353 Built with an audio only variant of WebRTC 67 where `SCTP` is disabled.

### Known Issues \[#known-issues-20]

* CLIENT-5576 LTE to WiFI handover may cause one way audio.
* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.
* CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

### Library Size Report \[#library-size-report-20]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 14.7MB            |
| armeabi-v7a | 3.3MB             |
| arm64-v8a   | 3.8MB             |
| x86         | 3.9MB             |
| x86\_64     | 4MB               |

## 3.0.0-beta5

March 4th, 2019

* Programmable Voice Android SDK 3.0.0-beta5 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta5), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta5/docs/)

### Updates \[#updates-4]

* CLIENT-5534 Added `IceCandidateStats` and `IceCandidatePairStats` to `StatsReport`.

## Improvements

* CLIENT-5516 Reduced connection time by removing a hostname lookup
* CLIENT-5688 Retry failed DNS resolution during reconnect

### Bug Fixes \[#bug-fixes-18]

* CLIENT-5612 Fixed bug where Call may get disconnected when ipv6 WiFi network disappears when LTE connection is on
* CLIENT-5578 CLIENT-5688 Fixed bug where WiFi to WiFi network handover may disconnect the Call while LTE connection is on

### Known Issues \[#known-issues-21]

* CLIENT-5576 LTE to WiFI handover may cause one way audio.
* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.
* CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

### Library Size Report \[#library-size-report-21]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15.4MB            |
| armeabi-v7a | 3.4MB             |
| arm64-v8a   | 4MB               |
| x86         | 4.1MB             |
| x86\_64     | 4.2MB             |

## 3.0.0-beta4

February 12th, 2019

* Programmable Voice Android SDK 3.0.0-beta4 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta4), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta4/docs/)

### Bug Fixes \[#bug-fixes-19]

* CLIENT-5539 Fixed bug in HttpsURLConnection management where input, output, and error streams
  were not closed.

### Known issues \[#known-issues-2]

* CLIENT-5578 WiFi to WiFi handover may disconnect the `Call`.
* CLIENT-5576 LTE to WiFI handover may cause one way audio.
* CLIENT-5612 IPv6 WiFi to IPv4 LTE handover may disconnect the `Call`.
* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.
* CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

### Library Size Report \[#library-size-report-22]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15.4MB            |
| armeabi-v7a | 3.4MB             |
| arm64-v8a   | 4MB               |
| x86         | 4.1MB             |
| x86\_64     | 4.2MB             |

## 3.0.0-beta3

February 7th, 2019

* Programmable Voice Android SDK 3.0.0-beta3 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta3), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta3/docs/)

### Updates \[#updates-5]

* CLIENT-5599 Added `VoiceException.EXCEPTION_ACCESS_TOKEN_REJECTED`. This error is raised when attempting to authenticate with a token that is invalid.
* CLIENT-5587 Removed `Context` argument from `Voice.register(...)` and `Voice.unregister(...)`.

### Enhancements \[#enhancements-21]

* SDK publishes call Insights. Publishing is enabled by default. The preference can be updated by calling `ConnectOptions.Builder.enableInsights(boolean)` and `AcceptOptions.Builder.enableInsights(boolean)`.
* Implemented network handoff. Signaling and media connection renegotiation are now automatically attempted after network changes.
* Added `Call.postFeedback(...)` API. This API posts the feedback collected for this call to Twilio. If no parameters are passed, Twilio will report feedback was not available for this call.
* CLIENT-2985 The SDK can connect to Twilio's Servers in an IPv6 environment.

### Bug Fixes \[#bug-fixes-20]

* CLIENT-5569 Fixed bug where SDK does not explicitly use the application context when required.
  `getApplicationContext` is now invoked internally on context arguments passed to public API methods
  when an application context is required.
* CLIENT-5591 Added `FATAL` definition to `LogLevel` enum.

### Known issues \[#known-issues-3]

* CLIENT-5578 WiFi to WiFi handover may disconnect the `Call`.
* CLIENT-5576 LTE to WiFI handover may cause one way audio.
* CLIENT-5612 IPv6 WiFi to IPv4 LTE handover may disconnect the `Call`.
* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event
  publishing. The crash has only been observed on API 18 devices and results from a
  thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes
  have been reported in the popular networking library OkHttp
  [#1520](https://github.com/square/okhttp/issues/1520)
  [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications,
  please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and
  we will investigate potential fixes.
* CLIENT-5882 Call metrics insights becomes unavailable after a network handover during a call.

### Library Size Report \[#library-size-report-23]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15.3MB            |
| armeabi-v7a | 3.4MB             |
| arm64-v8a   | 4MB               |
| x86         | 4.1MB             |
| x86\_64     | 4.2MB             |

## 3.0.0-beta2

December 12th, 2018

* Programmable Voice Android SDK 3.0.0-beta2 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta2), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta2/docs/)

### Enhancements \[#enhancements-22]

* Added new error code 31008. This error is raised when a CallInvite is accepted after a call has ended.
* `ConnectOptions.Builder.preferAudioCodecs(...)` and `AcceptOptions.Builder.preferAudioCodecs(...)` were added to set preferred audio codecs.

### Bug Fixes \[#bug-fixes-21]

* CLIENT-5398 Unmuting a call on hold causes audio to flow.

### Known issues \[#known-issues-4]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
* CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
* CLIENT-2985 IPv6 is not supported.
* CLIENT-4673 Error codes 20151 report different message and explanation text than Voice 2.0 SDKs
* CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. [#117](https://github.com/twilio/voice-quickstart-objc/issues/117)
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event publishing. The crash has only been observed on API 18 devices and results from a thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes have been reported in the popular networking library OkHttp [#1520](https://github.com/square/okhttp/issues/1520) [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications, please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and we will investigate potential fixes.

### Library Size Report \[#library-size-report-24]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15.3MB            |
| armeabi-v7a | 3.4MB             |
| arm64-v8a   | 3.9MB             |
| x86         | 4.1MB             |
| x86\_64     | 4.1MB             |

## 3.0.0-beta1

November 24th, 2018

* Programmable Voice Android SDK 3.0.0-beta1 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-beta1), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-beta1/docs/)

### Enhancements \[#enhancements-23]

* Documented the default log level `LogLevel.ERROR` in `getLogLevel` and `getLogModuleLevel`
  javadoc.
* Added media and signaling related error codes.

### Known issues \[#known-issues-5]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.=
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
* CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
* CLIENT-2985 IPv6 is not supported.
* CLIENT-4673 Error codes 20151 report different message and explanation text than Voice 2.0 SDKs
* CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. [#117](https://github.com/twilio/voice-quickstart-objc/issues/117)
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event publishing. The crash has only been observed on API 18 devices and results from a thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes have been reported in the popular networking library OkHttp [#1520](https://github.com/square/okhttp/issues/1520) [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications, please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and we will investigate potential fixes.
* CLIENT-5398 Unmuting a call on hold causes audio to flow.

### Library Size Report \[#library-size-report-25]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15.1MB            |
| armeabi-v7a | 3.4MB             |
| arm64-v8a   | 3.9MB             |
| x86         | 4MB               |
| x86\_64     | 4.1MB             |

## 3.0.0-preview6

October 30th, 2018

* Programmable Voice Android SDK 3.0.0-preview6 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-preview6), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-preview6/docs/)

### Enhancements \[#enhancements-24]

* The Android Voice SDK is built with an audio only variant of WebRTC 67. The table below shows the size reduction from compiling with an audio only variant release:

  | ABI         | 3.0.0-preview5 App Size Increase | 3.0.0-preview6 App Size Increase |
  | ----------- | -------------------------------- | -------------------------------- |
  | universal   | 17.8MB                           | 15.1MB                           |
  | armeabi-v7a | 4MB                              | 3.4MB                            |
  | arm64-v8a   | 4.6MB                            | 3.9MB                            |
  | x86         | 4.9MB                            | 4MB                              |
  | x86\_64     | 4.9MB                            | 4.1MB                            |

### Known issues \[#known-issues-6]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-5062 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
* CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
* CLIENT-2985 IPv6 is not supported.
* CLIENT-4673 Error codes 20151 report different message and explanation text than Voice 2.0 SDKs
* CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. [#117](https://github.com/twilio/voice-quickstart-objc/issues/117)
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event publishing. The crash has only been observed on API 18 devices and results from a thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes have been reported in the popular networking library OkHttp [#1520](https://github.com/square/okhttp/issues/1520) [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications, please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and we will investigate potential fixes.

### Library Size Report \[#library-size-report-26]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 15.1MB            |
| armeabi-v7a | 3.4MB             |
| arm64-v8a   | 3.9MB             |
| x86         | 4MB               |
| x86\_64     | 4.1MB             |

## 3.0.0-preview5

October 1st, 2018

* Programmable Voice Android SDK 3.0.0-preview5 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-preview5), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-preview5/docs/)

### Enhancements \[#enhancements-25]

* Added custom parameters to `CallInvite` with a new method called `getCustomParamaters()`.

```java
// Pass custom parameters in TwiML
<?xml version="1.0" encoding="UTF-8"?>
    <Response>
        <Dial answerOnBridge="false" callerId="client:alice">
            <Client>
                <Identity>bob</Identity>
                <Parameter name="caller_first_name" value="alice"  />
                <Parameter name="caller_last_name" value="smith"  />
            </Client>
        </Dial>
    </Response>
```

`callInvite.getCustomParameters()` returns a map of key-value pair passed in the TwiML.

```bash
"caller_first_name" -> "alice"
"caller_last_name" -> "smith"
```

### Known issues \[#known-issues-7]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-5062 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
* CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
* CLIENT-2985 IPv6 is not supported.
* CLIENT-4673 Error codes 20151 report different message and explanation text than Voice 2.0 SDKs
* CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. [#117](https://github.com/twilio/voice-quickstart-objc/issues/117)
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event publishing. The crash has only been observed on API 18 devices and results from a thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes have been reported in the popular networking library OkHttp [#1520](https://github.com/square/okhttp/issues/1520) [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications, please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and we will investigate potential fixes.

### Library Size Report \[#library-size-report-27]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 17.8MB            |
| armeabi-v7a | 4MB               |
| arm64-v8a   | 4.6MB             |
| x86         | 4.9MB             |
| x86\_64     | 4.9MB             |

## 3.0.0-preview4

September 27th, 2018

* Programmable Voice Android SDK 3.0.0-preview4 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-preview4), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-preview4/docs/)

### Enhancements \[#enhancements-26]

* Upgraded to WebRTC 67
* Upgraded to Java 8. Add the following snippet to your `build.gradle` to enable Java 8 features required to build the 3.x Voice Android SDK:

  ```bash
      android {
          compileOptions {
              sourceCompatibility 1.8
              targetCompatibility 1.8
          }
      }
  ```
* Report registration and unregistration events to Twilio Insights.

### Known issues \[#known-issues-8]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-5062 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
* CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
* CLIENT-2985 IPv6 is not supported.
* CLIENT-4672, CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs
* CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. [#117](https://github.com/twilio/voice-quickstart-objc/issues/117)
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event publishing. The crash has only been observed on API 18 devices and results from a thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes have been reported in the popular networking library OkHttp [#1520](https://github.com/square/okhttp/issues/1520) [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications, please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and we will investigate potential fixes.

### Library Size Report \[#library-size-report-28]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 18.1MB            |
| armeabi-v7a | 4.1MB             |
| arm64-v8a   | 4.7MB             |
| x86         | 5MB               |
| x86\_64     | 5MB               |

## 3.0.0-preview3

September 4th, 2018

* Programmable Voice Android SDK 3.0.0-preview3 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-preview3), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-preview3/docs/)

### Enhancements \[#enhancements-27]

#### API Changes

* Nullability annotations have been added. Methods that expect `@NonNull` parameters throw `NullPointerException`. Methods that validate parameters for a specified input throw `IllegalStateException` if invalid.
* Moved `CallState` to `Call.State`
* Provide a stateless mechanism for processing push messages related to call invites and call invite cancellations. This API no longer raises errors when processing invalid messages, instead a `boolean` value is returned when `handleMessage(context, data)` is called. The Boolean value is `true` when the provided data results in a `CallInvite` or `CancelledCallInvite`. If `handleMessage(context, data)` returns `false` it means the data provided was not a Twilio Voice push message. The `CallInvite` has an `accept()` and `reject()` method. While the `CancelledCallInvite` provides the `to`, `from`, and `callSid` fields also available in the `CallInvite`. The method `getCallSid()` can be used to associate a `CallInvite` with a `CancelledCallInvite`.
  * Migrated the API `CallInvite` to `CallInvite` and `CancelledCallInvite`.

```bash
       // Processing push messages in 2.X
       handleMessage(context, data, new MessageListener() {
           @Override
           void onCallInvite(CallInvite callInvite) {
                 // Check state and process invite
                 if (callInvite.getState().equals(PENDING)) {
                     // Show notification to answer or reject call
                 } else if(callInvite.getState().equals(CANCELLED)) {
                     // Hide notification
                 }
           }

           @Override
           void onError(MessageException messageException) {
               // Invalid data was provided
           }
       });

       // Processing push messages in 3.X
       boolean handled = handleMessage(context, data, new MessageListener() {
           @Override
           void onCallInvite(CallInvite callInvite) {
               // Show notification to answer or reject call
           }

           @Override
           void onCancelledCallInvite(CancelledCallInvite callInvite) {
               // Hide notification
           }
       });

       if(!handled) {
           // This message is not a Twilio voice push message
       }
```

* Introduced `call.getStats()` method that returns a list of `StatsReport` with metrics for all the audio tracks in a call.

```bash
    call.getStats(new StatsListener() {
        @Override
        public void onStats(@NonNull List<StatsReport> statsReports) {
            // Process statsReports
        }
    });
```

### Known issues \[#known-issues-9]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-5062 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
* CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
* CLIENT-2985 IPv6 is not supported.
* CLIENT-4698 Params that are passed to your TwiML Application while making calls are not URL encoded
* CLIENT-4547 Insights is not published
* CLIENT-4672, CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs
* CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. [#117](https://github.com/twilio/voice-quickstart-objc/issues/117)
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event publishing. The crash has only been observed on API 18 devices and results from a thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes have been reported in the popular networking library OkHttp [#1520](https://github.com/square/okhttp/issues/1520) [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications, please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and we will investigate potential fixes.

### Library Size Report \[#library-size-report-29]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 20.7MB            |
| armeabi-v7a | 4.5MB             |
| arm64-v8a   | 5.4MB             |
| x86         | 5.8MB             |
| x86\_64     | 5.5MB             |

## 3.0.0-preview2

August 27th, 2018

* Programmable Voice Android SDK 3.0.0-preview2 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-preview2), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-preview2/docs/)

### Enhancements \[#enhancements-28]

#### API Changes: \[#api-changes-2]

* Introduced `CallState.RINGING`
* Introduced a new callback method `Call.Listener.onRinging()`. This callback is emitted once before the `Call.Listener.onConnected()` callback when the callee is being alerted of a `Call`. The behavior of this callback is determined by the `answerOnBridge` flag provided in the `Dial` verb of your TwiML application associated with this client. If the `answerOnBridge` flag is `false`, which is the default, the `Call.Listener.onConnected()` callback will be emitted immediately after `Call.Listener.onRinging()`. If the `answerOnBridge` flag is `true`, this will cause the call to emit the `onConnected` callback only after the call is answered. See [answeronbridge](/docs/voice/twiml/dial#answeronbridge) for more details on how to use it with the `Dial` TwiML verb. If the TwiML response contains a `Say` verb, then the call will emit the `Call.Listener.onConnected` callback immediately after `Call.Listener.onRinging()` is raised, irrespective of the value of `answerOnBridge` being set to `true` or `false`

### Known issues \[#known-issues-10]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-5062 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
* CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
* CLIENT-2985 IPv6 is not supported.
* CLIENT-4698 Params that are passed to your TwiML Application while making calls are not URL encoded
* CLIENT-4547 Insights is not published
* CLIENT-4672, CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs
* CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. [#117](https://github.com/twilio/voice-quickstart-objc/issues/117)
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event publishing. The crash has only been observed on API 18 devices and results from a thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes have been reported in the popular networking library OkHttp [#1520](https://github.com/square/okhttp/issues/1520) [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications, please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and we will investigate potential fixes.

### Library Size Report \[#library-size-report-30]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 20.7MB            |
| armeabi-v7a | 4.5MB             |
| arm64-v8a   | 5.4MB             |
| x86         | 5.8MB             |
| x86\_64     | 5.5MB             |

## 3.0.0-preview1

August 15th, 2018

* Programmable Voice Android SDK 3.0.0-preview1 [\[bintray\]](https://bintray.com/twilio/releases/voice-android/3.0.0-preview1), [\[docs\]](https://media.twiliocdn.com/sdk/android/voice/releases/3.0.0-preview1/docs/)

This is the first WebRTC based release using Chromium WebRTC 57.

This SDK introduces ConnectOptions and AcceptOptions to allow developers to make behavioral changes associated with a Call.

This SDK allows multiple active Calls to be managed by the application.

### Enhancements \[#enhancements-29]

#### API Changes:

* Migrated the enum `PJSIP` in `LogModule` to a more granular set of enums (`CORE`, `PLATFORM`, `SIGNALING` and `WEBRTC`)
* Introduced `ConnectOptions` to allow developers to make behavioral changes associated with the call
* Migrated the API to make a Call from `Voice.call(...)` to `Voice.connect(...)`

```bash
// Making a call in 2.X
 Voice.call(context, accessToken, params, listener);

// Making a call in 3.X
ConnectOptions connectOptions = new ConnectOptions.Builder(accessToken)
            .setParams(params)
                    .build();
Voice.connect(context, connectOptions, listener);

```

* Migrated the API to accept a `CallInvite` using `AcceptOptions`

```bash
// Accepting a call in 2.X
CallInvite.accept(context, listener);

// Accepting a call in 3.X
AcceptOptions acceptOptions = new AcceptOptions.Builder()
            .build();
CallInvite.accept(context, acceptOptions, listener);
```

* Introduced call holding via `Call.hold(boolean)` feature
* Migrated `Voice.setRegion(String)` to `ConnectOptions.Builder.region(String)` and `AcceptOptions.Builder.region(String)`
* Migrated `Voice.getRegion()` to `ConnectOptions.getRegion()` and `AcceptOptions.getRegion()`

### Known issues \[#known-issues-11]

* CLIENT-5075 The SDK cannot be added alongside the Programmable Video SDK.
* CLIENT-5062 Calls made to a client or PSTN number that have a long duration before answering may not get connected.
* CLIENT-4943 Restrictive networks may fail unless ICE servers are provided via `ConnectOptions.Builder.iceOptions(...)` or `AcceptOptions.Builder.iceOptions(...)`. ICE servers can be obtained from [Twilio Network Traversal Service](/docs/stun-turn).
* CLIENT-4805 The SDK size is significantly larger than 2.x. A reduced size will be introduced during the beta period.
* CLIENT-4998 Network handoff, and subsequent connection renegotiation is not supported.
* CLIENT-2985 IPv6 is not supported.
* CLIENT-4698 Params that are passed to your TwiML Application while making calls are not URL encoded
* CLIENT-4547 Insights is not published
* CLIENT-4672, CLIENT-4673 Error codes 20157 and 20151 report different message and explanation text than Voice 2.0 SDKs
* CLIENT-4537 PCMU is the only supported codec. We plan on adding support for Opus moving forward. [#117](https://github.com/twilio/voice-quickstart-objc/issues/117)
* CLIENT-5242 Occasional native crash in `AsyncTask` of registration/unregistration and event publishing. The crash has only been observed on API 18 devices and results from a thread [safety bug in Android](https://issuetracker.google.com/issues/37002161). Similar crashes have been reported in the popular networking library OkHttp [#1520](https://github.com/square/okhttp/issues/1520) [#1338](https://github.com/square/okhttp/issues/1338). If this bug is impacting your applications, please open an issue on [our quickstart](https://github.com/twilio/voice-quickstart-android) and we will investigate potential fixes.

### Library Size Report \[#library-size-report-31]

| ABI         | App Size Increase |
| ----------- | ----------------- |
| universal   | 20.7MB            |
| armeabi-v7a | 4.5MB             |
| arm64-v8a   | 5.4MB             |
| x86         | 5.8MB             |
| x86\_64     | 5.5MB             |

## 2.X

For older changelog entries including 2.x, click [Changelog](/docs/voice/sdks/android/3x-changelog)
