# Android listeners

## OnRegisterForPushListener {id=on-register-for-push-listener}

#### onRegisterForPushRequired(PushRegistrationOrigin origin) {id=on-register-for-push-listener-on-register-for-push-required-with-origin}
This method is called when Synerise needs registration for push notifications.
  
See [Configuring push notifications](/developers/mobile-sdk/configuring-push-notifications/android) for more details.


<div class="content-tabs code-tabs" data-tab-group="tabgrp-622">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-622-0" data-tab-group="tabgrp-622" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-622-1" data-tab-group="tabgrp-622">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-622-0" data-tab-group="tabgrp-622" data-tab-active="true">

```Java
- void onRegisterForPushRequired(PushRegistrationOrigin origin);
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-622-1" data-tab-group="tabgrp-622">

```Kotlin
fun onRegisterForPushRequired(origin: PushRegistrationOrigin)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **origin** | [PushRegistrationOrigin](/developers/mobile-sdk/class-reference/android/campaigns#pushregistrationorigin) | Information about the cause of the registration |

---
---

#### onRegisterForPushRequired() {id=on-register-for-push-listener-on-register-for-push-required}
This method is called when Synerise needs registration for push notifications.
  
See [Configuring push notifications](/developers/mobile-sdk/configuring-push-notifications/android) for more details.


<div class="content-tabs code-tabs" data-tab-group="tabgrp-623">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-623-0" data-tab-group="tabgrp-623" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-623-1" data-tab-group="tabgrp-623">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-623-0" data-tab-group="tabgrp-623" data-tab-active="true">

```Java
- void onRegisterForPushRequired();
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-623-1" data-tab-group="tabgrp-623">

```Kotlin
fun onRegisterForPushRequired()
```

</div>
</div>


---
---

## OnNotificationListener {id=on-notification-listener}
A listener to handle events from Synerise notifications.
  
See [Configuring push notifications](/developers/mobile-sdk/configuring-push-notifications/android#callback-methods) for more details.


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

**OnNotificationListener** is available from 4.9.0 SDK version.

</div></div></div>


#### onNotificationReceived(NotificationInfo notificationInfo) {id=on-notification-listener-on-notification-receive}

This method is called when a Synerise notification is received.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-624">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-624-0" data-tab-group="tabgrp-624" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-624-1" data-tab-group="tabgrp-624">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-624-0" data-tab-group="tabgrp-624" data-tab-active="true">

```Java
- public void onNotificationReceived(NotificationInfo notificationInfo)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-624-1" data-tab-group="tabgrp-624">

```Kotlin
fun onNotificationReceived(notificationInfo: NotificationInfo)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **notificationInfo** | [NotificationInfo](/developers/mobile-sdk/class-reference/android/campaigns#notificationinfo) | Object providing info about the notification. |

#### onNotificationDismissed(NotificationInfo notificationInfo) {id=on-notification-listener-on-notification-dismissed}

This method is called when a Synerise notification is dismissed.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-625">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-625-0" data-tab-group="tabgrp-625" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-625-1" data-tab-group="tabgrp-625">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-625-0" data-tab-group="tabgrp-625" data-tab-active="true">

```Java
- public void onNotificationDismissed(NotificationInfo notificationInfo)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-625-1" data-tab-group="tabgrp-625">

```Kotlin
fun onNotificationDismissed(notificationInfo: NotificationInfo)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **notificationInfo** | [NotificationInfo](/developers/mobile-sdk/class-reference/android/campaigns#notificationinfo) | Object providing info about the notification. |

#### onNotificationClicked(NotificationInfo notificationInfo) {id=on-notification-listener-on-notification-clicked}

This method is called when a Synerise notification is clicked.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-626">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-626-0" data-tab-group="tabgrp-626" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-626-1" data-tab-group="tabgrp-626">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-626-0" data-tab-group="tabgrp-626" data-tab-active="true">

```Java
- public void onNotificationClicked(NotificationInfo notificationInfo)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-626-1" data-tab-group="tabgrp-626">

```Kotlin
fun onNotificationClicked(notificationInfo: NotificationInfo)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **notificationInfo** | [NotificationInfo](/developers/mobile-sdk/class-reference/android/campaigns#notificationinfo) | Object providing information about the notification. |

#### onActionButtonClicked(NotificationInfo notificationInfo, String actionButton) {id=on-notification-listener-on-action-button-clicked}

This method is called when an action button is clicked in a Synerise notification.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-627">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-627-0" data-tab-group="tabgrp-627" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-627-1" data-tab-group="tabgrp-627">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-627-0" data-tab-group="tabgrp-627" data-tab-active="true">

```Java
- public void onActionButtonClicked(NotificationInfo notificationInfo, String actionButton)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-627-1" data-tab-group="tabgrp-627">

```Kotlin
fun onActionButtonClicked(notificationInfo: NotificationInfo, actionButton: String)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **notificationInfo** | [NotificationInfo](/developers/mobile-sdk/class-reference/android/campaigns#notificationinfo) | Object providing information about the notification. |
| **actionButton** | String | Text on the clicked action button. |

---
---

## OnClientStateChangeListener {id=on-client-state-change-listener}
A listener to handle customer's sign-in state changes.
  
To set your object with listener methods, you must use [this method](/developers/mobile-sdk/method-reference/android/client-authentication#set-client-state-change-listener).

#### onClientSignedIn() {id=on-client-state-change-listener-on-client-signed-in}

This method is called when the customer signs in.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-628">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-628-0" data-tab-group="tabgrp-628" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-628-1" data-tab-group="tabgrp-628">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-628-0" data-tab-group="tabgrp-628" data-tab-active="true">

```Java
- public void onClientSignedIn()
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-628-1" data-tab-group="tabgrp-628">

```Kotlin
fun onClientSignedIn()
```

</div>
</div>


#### onClientSignedOut(ClientSessionEndReason reason) {id=on-client-state-change-listener-on-client-signed-out}

This method is called when the customer signs out.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-629">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-629-0" data-tab-group="tabgrp-629" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-629-1" data-tab-group="tabgrp-629">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-629-0" data-tab-group="tabgrp-629" data-tab-active="true">

```Java
- public void onClientSignedOut(ClientSessionEndReason reason)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-629-1" data-tab-group="tabgrp-629">

```Kotlin
fun onClientSignedOut(reason:ClientSessionEndReason)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **reason** | [ClientSessionEndReason](/developers/mobile-sdk/class-reference/android/client#clientsessionendreason) | Specifies the reason for signing out. |

---
---

## OnInjectorListener {id=on-injector-listener}

#### onOpenUrl(SyneriseSource source, String url) {id=on-injector-listener-on-open-url}

A listener to handle events from [campaigns](/developers/mobile-sdk/campaigns).

Fired when a customer interacts with the URL action.  
This method returns `true` if activity is closed after executing an action; in other case, it returns `false`.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-630">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-630-0" data-tab-group="tabgrp-630" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-630-1" data-tab-group="tabgrp-630">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-630-0" data-tab-group="tabgrp-630" data-tab-active="true">

```Java
- boolean onOpenUrl(SyneriseSource source, String url)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-630-1" data-tab-group="tabgrp-630">

```Kotlin
fun onOpenUrl(source:SyneriseSource, url:String):Boolean
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **source** | SyneriseSource | Interaction source |
| **url** | String | URL value from the action of the activity |

#### onOpenUrl(InjectorSource source, String url) {id=on-injector-listener-on-open-url-deprecated}

A listener to handle events from [campaigns](/developers/mobile-sdk/campaigns).

Fired when a customer interacts with the URL action.  
This method returns `true` if activity is closed after executing an action; in other case, it returns `false`.


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

This method was deprecated in SDK version 6.0.0.

</div></div></div>



<div class="content-tabs code-tabs" data-tab-group="tabgrp-631">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-631-0" data-tab-group="tabgrp-631" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-631-1" data-tab-group="tabgrp-631">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-631-0" data-tab-group="tabgrp-631" data-tab-active="true">

```Java
- boolean onOpenUrl(InjectorSource source, String url)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-631-1" data-tab-group="tabgrp-631">

```Kotlin
fun onOpenUrl(source:InjectorSource, url:String):Boolean
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **source** | InjectorSource | Interaction source |
| **url** | String | URL value from the action of the activity |

#### onDeepLink(SyneriseSource source, String deepLink) {id=on-injector-listener-on-deeplink}

Fired when a customer interacts with the DEEP_LINKING action.  
The method returns `true` if activity is closed after executing the action; in other case, it returns `false`.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-632">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-632-0" data-tab-group="tabgrp-632" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-632-1" data-tab-group="tabgrp-632">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-632-0" data-tab-group="tabgrp-632" data-tab-active="true">

```Java
- boolean onDeepLink(SyneriseSource source, String deepLink)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-632-1" data-tab-group="tabgrp-632">

```Kotlin
fun onDeepLink(source:SyneriseSource, deepLink:String):Boolean
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **source** | SyneriseSource | Interaction source |
| **deepLink** | String | Deep link value from the action of the activity |

#### onDeepLink(InjectorSource source, String deepLink) {id=on-injector-listener-on-deeplink}

Fired when a customer interacts with the DEEP_LINKING action.  
The method returns `true` if activity is closed after executing the action; in other case, it returns `false`.


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

This method was deprecated in SDK version 6.0.0.

</div></div></div>



<div class="content-tabs code-tabs" data-tab-group="tabgrp-633">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-633-0" data-tab-group="tabgrp-633" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-633-1" data-tab-group="tabgrp-633">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-633-0" data-tab-group="tabgrp-633" data-tab-active="true">

```Java
- boolean onDeepLink(InjectorSource source, String deepLink)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-633-1" data-tab-group="tabgrp-633">

```Kotlin
fun onDeepLink(source:InjectorSource, deepLink:String):Boolean
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **source** | InjectorSource | Interaction source |
| **deepLink** | String | Deep link value from the action of the activity |

---
---

## OnInAppListener {id=on-in-app-listener}
A listener to handle the states of [in-app message](/developers/mobile-sdk/campaigns/in-app-message).


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

**OnInAppListener** is available from 4.7.0 SDK version.

</div></div></div>

  
To set your object with listener methods, you must use [this method](/developers/mobile-sdk/method-reference/android/campaigns#set-in-app-listener).

#### shouldShow(InAppMessageData inAppMessageData) {id=on-in-app-listener-should-show}

This method is called after an in-app message is loaded and Synerise SDK asks for permission to show it.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-634">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-634-0" data-tab-group="tabgrp-634" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-634-1" data-tab-group="tabgrp-634">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-634-0" data-tab-group="tabgrp-634" data-tab-active="true">

```Java
boolean shouldShow(InAppMessageData inAppMessageData)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-634-1" data-tab-group="tabgrp-634">

```Kotlin
shouldShow(inAppMessageData: InAppMessageData): boolean
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onShown(InAppMessageData inAppMessageData) {id=on-in-app-listener-on-shown}

This method is called after an in-app message appears.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-635">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-635-0" data-tab-group="tabgrp-635" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-635-1" data-tab-group="tabgrp-635">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-635-0" data-tab-group="tabgrp-635" data-tab-active="true">

```Java
void onShown(InAppMessageData inAppMessageData)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-635-1" data-tab-group="tabgrp-635">

```Kotlin
onShown(inAppMessageData: InAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onDismissed(InAppMessageData inAppMessageData) {id=on-in-app-listener-on-dismissed}

This method is called after an in-app message disappears.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-636">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-636-0" data-tab-group="tabgrp-636" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-636-1" data-tab-group="tabgrp-636">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-636-0" data-tab-group="tabgrp-636" data-tab-active="true">

```Java
void onDismissed(InAppMessageData inAppMessageData)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-636-1" data-tab-group="tabgrp-636">

```Kotlin
onDismissed(inAppMessageData: InAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onContextFromAppRequired(InAppMessageData inAppMessageData) {id=on-in-app-listener-on-context-from-app-required}

This method is called when an individual context (for example a profile ID, an item SKU) for an in-app message is needed.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-637">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-637-0" data-tab-group="tabgrp-637" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-637-1" data-tab-group="tabgrp-637">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-637-0" data-tab-group="tabgrp-637" data-tab-active="true">

```Java
HashMap<String, Object> onContextFromAppRequired(InAppMessageData inAppMessageData)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-637-1" data-tab-group="tabgrp-637">

```Kotlin
onContextFromAppRequired(inAppMessageData: InAppMessageData): HashMap<String, Object>
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onHandledOpenUrl(InAppMessageData inAppMessageData) {id=on-in-app-listener-on-handled-open-url}

This method is called when the [`SRInApp.openUrl(url)` method](/docs/campaign/in-app-messages/creating-inapp-templates/creating-inapp-template#open-url) is used in an in-app message.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-638">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-638-0" data-tab-group="tabgrp-638" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-638-1" data-tab-group="tabgrp-638">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-638-0" data-tab-group="tabgrp-638" data-tab-active="true">

```Java
void onHandledOpenUrl(InAppMessageData inAppMessageData)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-638-1" data-tab-group="tabgrp-638">

```Kotlin
onHandledOpenUrl(inAppMessageData: InAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onHandledOpenDeepLink(InAppMessageData inAppMessageData) {id=on-in-app-listener-on-handled-open-deeplink}

This method is called when the [`SRInApp.openDeeplink(url)` method](/docs/campaign/in-app-messages/creating-inapp-templates/creating-inapp-template#open-deeplink) is used in an in-app message.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-639">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-639-0" data-tab-group="tabgrp-639" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-639-1" data-tab-group="tabgrp-639">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-639-0" data-tab-group="tabgrp-639" data-tab-active="true">

```Java
void onHandledOpenDeepLink(InAppMessageData inAppMessageData)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-639-1" data-tab-group="tabgrp-639">

```Kotlin
onHandledOpenDeepLink(inAppMessageData: InAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |

#### onCustomAction(String identifier, HashMap<String, Object> params, InAppMessageData inAppMessageData) {id=on-in-app-listener-on-custom-action}

This method is called when the [`SRInApp.handleCustomAction(name, params)` method](/docs/campaign/in-app-messages/creating-inapp-templates/creating-inapp-template#trigger-a-custom-action) is used in an in-app message.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-640">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-640-0" data-tab-group="tabgrp-640" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-640-1" data-tab-group="tabgrp-640">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-640-0" data-tab-group="tabgrp-640" data-tab-active="true">

```Java
void onCustomAction(String identifier, HashMap<String, Object> params, InAppMessageData inAppMessageData)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-640-1" data-tab-group="tabgrp-640">

```Kotlin
onCustomAction(identifier: String, params: HashMap<String, Object> , inAppMessageData: InAppMessageData)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **inAppMessageData** | [InAppMessageData](/developers/mobile-sdk/class-reference/android/campaigns#inappmessagedata) | In-app message data. |
| **identifier** | String | Identifier of the custom action. |
| **params** | HashMap<String, Object> | Custom action parameters. |

---
---

## OnLocationUpdateListener {id=on-location-update-listener}
A listener to handle events about location.

#### onLocationUpdateRequired() {id=on-location-update-listener-on-location-update-required}

This method is called when the Tracker module requests a location update.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-641">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-641-0" data-tab-group="tabgrp-641" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-641-1" data-tab-group="tabgrp-641">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-641-0" data-tab-group="tabgrp-641" data-tab-active="true">

```Java
- void onLocationUpdateRequired()
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-641-1" data-tab-group="tabgrp-641">

```Kotlin
fun onLocationUpdateRequired()
```

</div>
</div>


---
---

## OnContentWidgetListener {id=on-content-widget-listener}
A listener to handle [Content Widget](/developers/mobile-sdk/displaying-recommendations/content-widget) actions.

#### onLoad(ContentWidget contentWidget) {id=on-content-widget-listener-on-load}

This method is called after a widget is loaded.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-642">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-642-0" data-tab-group="tabgrp-642" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-642-1" data-tab-group="tabgrp-642">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-642-0" data-tab-group="tabgrp-642" data-tab-active="true">

```Java
- void onLoad(ContentWidget contentWidget)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-642-1" data-tab-group="tabgrp-642">

```Kotlin
fun onLoad(contentWidget:ContentWidget)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **contentWidget` | [ContentWidget](/developers/mobile-sdk/class-reference/android/content-widget#contentwidget) | The widget instance that called the listener method |

#### onLoadingError(ContentWidget contentWidget, ApiError apiError) {id=on-content-widget-listener-on-loading-error}

This method is called when an error occurs while loading a widget.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-643">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-643-0" data-tab-group="tabgrp-643" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-643-1" data-tab-group="tabgrp-643">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-643-0" data-tab-group="tabgrp-643" data-tab-active="true">

```Java
- void onLoadingError(ContentWidget contentWidget, ApiError apiError)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-643-1" data-tab-group="tabgrp-643">

```Kotlin
fun onLoadingError(contentWidget:ContentWidget, apiError:ApiError)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **contentWidget** | [ContentWidget](/developers/mobile-sdk/class-reference/android/content-widget#contentwidget) | The widget instance that called the listener method |
| **apiError** | [ApiError](/developers/mobile-sdk/class-reference/android/miscellaneous#apierror) | The error that occurred |

#### onClickActionReceive(ContentWidget contentWidget, BaseModel model) {id=on-content-widget-listener-on-click-action-receive}

This method is called when the customer clicks a widget’s item.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-644">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-644-0" data-tab-group="tabgrp-644" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-644-1" data-tab-group="tabgrp-644">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-644-0" data-tab-group="tabgrp-644" data-tab-active="true">

```Java
- void onClickActionReceive(ContentWidget contentWidget, BaseModel model)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-644-1" data-tab-group="tabgrp-644">

```Kotlin
fun onClickActionReceive(contentWidget:ContentWidget, model:BaseModel)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **contentWidget** | [ContentWidget](/developers/mobile-sdk/class-reference/android/content-widget#contentwidget) | The widget instance that called the listener method |
| **model** | BaseModel | The model's object that was clicked |

#### onLoading(ContentWidget contentWidget, boolean isLoading) {id=on-content-widget-listener-on-loading}

This method is called when the widget’s loading state changes.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-645">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-645-0" data-tab-group="tabgrp-645" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-645-1" data-tab-group="tabgrp-645">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-645-0" data-tab-group="tabgrp-645" data-tab-active="true">

```Java
- void onLoading(ContentWidget contentWidget, boolean isLoading)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-645-1" data-tab-group="tabgrp-645">

```Kotlin
fun onLoading(contentWidget:ContentWidget, isLoading:Boolean)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **contentWidget** | [ContentWidget](/developers/mobile-sdk/class-reference/android/content-widget#contentwidget) | The widget instance that called the listener method |
| **isLoading** | Boolean | Widget's loading state |

#### onSizeChange(ContentWidget contentWidget, ViewGroup.LayoutParams size) {id=on-content-widget-listener-on-size-change}

This method is called when the widget’s size changes.

<div class="content-tabs code-tabs" data-tab-group="tabgrp-646">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-646-0" data-tab-group="tabgrp-646" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-646-1" data-tab-group="tabgrp-646">Kotlin</button></div>

<div class="tab-panel" data-tab-id="tabgrp-646-0" data-tab-group="tabgrp-646" data-tab-active="true">

```Java
- void onSizeChange(ContentWidget contentWidget, ViewGroup.LayoutParams size)
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-646-1" data-tab-group="tabgrp-646">

```Kotlin
fun onSizeChange(contentWidget:ContentWidget, size:ViewGroup.LayoutParams)
```

</div>
</div>


| Parameter | Type | Description |
| --- | --- | --- |
| **contentWidget** | [ContentWidget](/developers/mobile-sdk/class-reference/android/content-widget#contentwidget) | The widget instance that called the listener method |
| **size** | ViewGroup.LayoutParams | Widget's new size |

