# Enable Chat Features

### Add Permissions

Some of TapTalk.io's chat feature may require permissions to be added to your app. To do so, open **AndroidManifest.xml** file in your project and add the following permissions under the `<manifest>` tag if they are not yet present:

{% code title="AndroidManifest.xml" %}

```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.package.name">

    <!--Permission for contact sync-->
    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <!--Permission for media messages-->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <!--Permission for location messages-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!--Permission for voice messages-->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />
    
    ...
    
</manifest>
```

{% endcode %}

### Setup FileProvider in your application

To enable file transfer through chat messages, you need to define FileProvider in your application's **AndroidManifest.xml** file, under the `<application>` tag.

{% code title="AndroidManifest.xml" %}

```xml
<application
    android:name=".YourApplication"
    ...>

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>

</application>
```

{% endcode %}

If your project already has defined paths, make sure the following paths exist in your paths xml file:

{% code title="your\_file\_paths.xml" %}

```xml
<paths>
    <files-path name="YourFilesPath" path="." />
    <external-path name="YourExternalPath" path="." />
    <cache-path name="YourCachePath" path="."/>
    <external-files-path name="YourExternalFilesPath" path="."/>
    <external-cache-path name="YourExternalCachePath" path="."/>
</paths>
```

{% endcode %}

### Initialize Google Places API Key (Optional)

To enable location search result preview while sending location message, a Google Places API Key is required. To obtain the API key for your application, you can check [the documentation](https://developers.google.com/places/web-service/get-api-key) provided by Google. To initialize, insert your obtained key using the `initializeGooglePlacesApiKey()` method.

{% tabs %}
{% tab title="Java" %}

```java
import io.taptalk.TapTalk.Helper.TapTalk;

TapTalk.initializeGooglePlacesApiKey(GOOGLE_PLACES_API_KEY);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
import io.taptalk.TapTalk.Helper.TapTalk

TapTalk.initializeGooglePlacesApiKey(GOOGLE_PLACES_API_KEY)
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Starting from version **2.16.0**, chat room location attachment will be enabled by default even when Google Places API Key is not provided, but location search will be hidden.\
To disable location attachment, you may call:

```java
TapUI.getInstance().setLocationAttachmentEnabled(false);
```

{% endhint %}

Your key also needs to be defined in your application's **AndroidManifest.xml** file, under the `<application>` tag.

{% code title="AndroidManifest.xml" %}

```xml
<application
    android:name=".YourApplication"
    ...>

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="GOOGLE_PLACES_API_KEY" />

</application>
```

{% endcode %}

{% hint style="info" %}
**Parameters**\
**GOOGLE\_PLACES\_API\_KEY**: (String) Google Places API Key
{% endhint %}

### Enable Cleartext Traffic

To enable some network features, such as sending link preview in messages, please enable `usesCleartextTraffic` in **AndroidManifest.xml** file.

{% code title="AndroidManifest.xml" %}

```xml
<application
    android:name=".YourApplication"
    ...
    android:usesCleartextTraffic="true">

    ...

</application>
```

{% endcode %}
