> For the complete documentation index, see [llms.txt](https://popin.gitbook.io/popin-developer-hub/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://popin.gitbook.io/popin-developer-hub/integrating-popinandroidsdk-for-video-calls.md).

# Integrating PopinAndroidSDK for Video Calls

This guide explains how to integrate and use the **PopinAndroidSDK** library to enable **video calling** features in your Android application. The SDK is lightweight, easy to integrate, and provides pre-built classes such as `PopinConnectingDialog` for managing connection states.

***

### ✅ Prerequisites

* Android Studio installed
* Minimum SDK version supported by PopinAndroidSDK
* A valid Popin token

***

### Step 1: Add PopinAndroidSDK to Your Project

#### 1.1 Add JitPack to `settings.gradle`

Open your project’s `settings.gradle` file and add the JitPack repository:

```groovy
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}
```

#### 1.2 Add SDK Dependency in `build.gradle`

In your `app/build.gradle` file, add the Popin SDK dependency:

```groovy
dependencies {
    implementation 'com.github.Springr-Creatives:PopinAndroidSDK:1.5.9'
}
```

#### 1.3 Update `AndroidManifest.xml`

Insert the following into your `AndroidManifest.xml`:

```xml
<meta-data
    android:name="to.popin.androidsdk.POPIN_TOKEN"
    android:value="<your_token_here>" />

<activity
    android:name="to.popin.androidsdk.call.CallActivity"
    android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboardHidden"
    android:excludeFromRecents="true"
    android:exported="true"
    android:launchMode="singleTask"
    android:showWhenLocked="true"
    android:supportsPictureInPicture="true" />
```

Replace `<your_token_here>` with your actual Popin token.

***

### Step 2: Initialize Popin in Your App

Initialize Popin SDK in your main activity, typically inside the `onCreate()` method:

```java
Popin.init(MainActivity.this, "test_user", "9876543210");
```

This prepares the SDK to handle video call connections.

***

### Step 3: Add a Call Button in XML

Define a button in your layout file (`activity_main.xml`) to trigger the video call:

```xml
<Button
    android:id="@+id/buttonCall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Start Call"/>
```

***

### Step 4: Implement Button Click to Start Call

In your `MainActivity.java`, add the logic to initiate a call when the button is clicked:

```java
Button buttonCall = findViewById(R.id.buttonCall);
buttonCall.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // Show connecting dialog
        PopinConnectingDialog cdd = new PopinConnectingDialog(MainActivity.this);
        cdd.show();

        // Start the video call
        Popin.getInstance().startCall(new PopinEventsListener() {
            @Override
            public void onCallStart() {
                // Call is starting to connect
            }

            @Override
            public void onQueuePositionChanged(int i) {
                // Update UI if the user is in a queue
            }

            @Override
            public void onAllExpertsBusy() {
                // All experts are busy, dismiss the dialog
                cdd.dismiss();
            }

            @Override
            public void onCallConnected() {
                // Call successfully connected
                cdd.dismiss();
            }

            @Override
            public void onCallFailed() {
                // Call failed to connect
                cdd.dismiss();
            }

            @Override
            public void onCallDisconnected() {
                // Handle call disconnection
            }
        });
    }
});
```

***

### Step 5: Understanding Call Events

Here’s a breakdown of the available `PopinEventsListener` callbacks:

| Callback                        | Description                                                             |
| ------------------------------- | ----------------------------------------------------------------------- |
| `onCallStart()`                 | Called when the connection process begins.                              |
| `onQueuePositionChanged(int i)` | Invoked if the call is in a queue; use it to update the user interface. |
| `onAllExpertsBusy()`            | Called when all experts are currently unavailable.                      |
| `onCallConnected()`             | Triggered once the call is successfully connected.                      |
| `onCallFailed()`                | Triggered if the call could not be connected.                           |
| `onCallDisconnected()`          | Called when the call ends or is disconnected.                           |

***

### Step 6: Using `PopinConnectingDialog`

`PopinConnectingDialog` is a built-in dialog that shows a "Connecting..." message during the call initialization process.

To show the dialog:

```java
PopinConnectingDialog cdd = new PopinConnectingDialog(MainActivity.this);
cdd.show();
```

You can customize the appearance by modifying its layout or message as needed.

***

### 🔚 Conclusion

You’ve now successfully integrated **PopinAndroidSDK** into your Android application for enabling video calls. This setup handles user initiation, UI feedback during connection, and real-time event handling via listener callbacks.
