---
title: presentation (2 of 3)
slug: sdk/android-sdk-api-reference-presentation-2-of-3
createdAt: 2026-11-04T11:40:03.082Z
---

# no.kindly.chatsdk.chat.presentation.components

## KindlyDropdownMenu

`function`

```kotlin
@Composable
fun KindlyDropdownMenu(expanded: Boolean, onDismissRequest: () -> Unit, items: List<String>, onItemClick: (Int) -> Unit, backgroundColor: Color, itemColor: (Int) -> Color, itemTestTag: (Int) -> String = { "menu_item_$it" }, containerTestTag: String = "dropdown_topbar_menu")
```

Anchored dropdown menu that scrolls when its content is taller than the available screen space. Built as a replacement for Material's DropdownMenu, which clamps its height and silently hides items that don't fit.

The popup right-aligns under its anchor (e.g. an overflow-icon button).

## MainChatTopBar

`function`

```kotlin
@Composable
fun MainChatTopBar(title: String, avatarUrl: String?, onBackClick: () -> Unit, actions: @Composable RowScope.() -> Unit = {})
```

Main chat style with avatar and title - for main conversation screen

## SimpleTopBar

`function`

```kotlin
@Composable
fun SimpleTopBar(title: String, onBackClick: () -> Unit, actions: @Composable RowScope.() -> Unit = {})
```

Simplified version with just back button and title - most common use case

## SocketStatusIndicator

`function`

```kotlin
@Composable
fun SocketStatusIndicator(pusherState: ConnectionState?, modifier: Modifier = Modifier)
```

## StatusIndicator

`function`

```kotlin
@Composable
fun StatusIndicator(color: Color, isAnimated: Boolean = false, onTap: () -> Unit? = null, modifier: Modifier = Modifier)
```

Generic status indicator component - displays a colored dot with optional pulsing animation Can be used for socket status, network status, API status, etc.

**Parameters**

- `color`: The color to display
- `isAnimated`: Whether to show pulsing animation (for "in progress" states)
- `onTap`: Optional click handler
- `modifier`: Modifier for customization

# no.kindly.chatsdk.chat.presentation.feedback

## FeedbackBottomSheet

`function`

```kotlin
@Composable
fun FeedbackBottomSheet(emojiSelectionData: EmojiSelectionData, predefinedButtonsData: PredefinedButtonsData, freeFormData: TextInputData, enablePredefinedButtonsStep: Boolean, enableFreeFormStep: Boolean, useSentimentButtons: Boolean, nextButtonTitle: String, backButtonTitle: String, submitButtonTitle: String, exitScreenText: String, onCancel: () -> Unit, onSubmit: (currentStep: FeedbackStep, emojiSelection: EmojiSelection?, buttonSelection: ButtonSelection?, textInput: String?) -> Unit)
```

## FeedbackBottomSheetWrapper

`function`

```kotlin
@Composable
fun FeedbackBottomSheetWrapper()
```

## FeedbackFormView

`function`

```kotlin
@Composable
fun FeedbackFormView(emojiSelectionData: EmojiSelectionData, predefinedButtonsData: PredefinedButtonsData, freeFormData: TextInputData, enablePredefinedButtonsStep: Boolean, enableFreeFormStep: Boolean, useSentimentButtons: Boolean, nextButtonTitle: String, backButtonTitle: String, submitButtonTitle: String, exitScreenText: String, onCancel: () -> Unit, onSubmit: (currentStep: FeedbackStep, emojiSelection: EmojiSelection?, buttonSelection: ButtonSelection?, textInput: String?) -> Unit)
```

## FeedbackStep

`enum`

```kotlin
enum FeedbackStep : Enum<FeedbackStep>
```

| Member            | Declaration                                | Description                                                                                                                                                                                                                                                                                                                |
| ----------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `EmojiSelection`  | `EmojiSelection`                           |                                                                                                                                                                                                                                                                                                                            |
| `ButtonSelection` | `ButtonSelection`                          |                                                                                                                                                                                                                                                                                                                            |
| `TextInput`       | `TextInput`                                |                                                                                                                                                                                                                                                                                                                            |
| `entries`         | `val entries: EnumEntries<FeedbackStep>`   | Returns a representation of an immutable list of all enum entries, in the order they're declared. This method may be used to iterate over the enum entries.                                                                                                                                                                |
| `valueOf`         | `fun valueOf(value: String): FeedbackStep` | Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) **Throws** - `kotlin.IllegalArgumentException`: if this enum type has no constant with the specified name |
| `values`          | `fun values(): Array<FeedbackStep>`        | Returns an array containing the constants of this enum type, in the order they're declared. This method may be used to iterate over the constants.                                                                                                                                                                         |

## fireAPI

`function`

```kotlin
fun fireAPI(currentStep: FeedbackStep?)
```

In iOS you do different requests based on the step Here you can replicate that logic

## updateButtonsSelectionDataBasedOnSentiment

`function`

```kotlin
fun updateButtonsSelectionDataBasedOnSentiment(useSentimentButtons: Boolean, predefinedButtonsData: PredefinedButtonsData, sentiment: String): ButtonsSelectionData?
```

Called to update the button selection data based on sentiment (similar to your iOS logic)

# no.kindly.chatsdk.chat.presentation.feedback.helpers

## ButtonData

`data class`

```kotlin
data class ButtonData(val id: String, val text: String)
```

| Member       | Declaration                             | Description |
| ------------ | --------------------------------------- | ----------- |
| `ButtonData` | `constructor(id: String, text: String)` |             |
| `id`         | `val id: String`                        |             |
| `text`       | `val text: String`                      |             |

## FlowRowWithoutAccompanist

`function`

```kotlin
@Composable
fun FlowRowWithoutAccompanist(modifier: Modifier = Modifier, horizontalGap: Dp = 8.dp, verticalGap: Dp = 8.dp, content: @Composable () -> Unit)
```

## PredefinedButtonsData

`data class`

```kotlin
data class PredefinedButtonsData(val sentiments: Map<SentimentKey, SentimentData>)
```

| Member                  | Declaration                                                 | Description |
| ----------------------- | ----------------------------------------------------------- | ----------- |
| `PredefinedButtonsData` | `constructor(sentiments: Map<SentimentKey, SentimentData>)` |             |
| `sentiments`            | `val sentiments: Map<SentimentKey, SentimentData>`          |             |

## SentimentData

`data class`

```kotlin
data class SentimentData(val title: String, val buttons: List<ButtonData>)
```

| Member          | Declaration                                             | Description |
| --------------- | ------------------------------------------------------- | ----------- |
| `SentimentData` | `constructor(title: String, buttons: List<ButtonData>)` |             |
| `buttons`       | `val buttons: List<ButtonData>`                         |             |
| `title`         | `val title: String`                                     |             |

# no.kindly.chatsdk.chat.presentation.feedback.views

## ButtonSelection

`data class`

```kotlin
data class ButtonSelection(val indices: List<Int>, val titles: List<String>)
```

| Member            | Declaration                                             | Description |
| ----------------- | ------------------------------------------------------- | ----------- |
| `ButtonSelection` | `constructor(indices: List<Int>, titles: List<String>)` |             |
| `indices`         | `val indices: List<Int>`                                |             |
| `titles`          | `val titles: List<String>`                              |             |

## ButtonsSelectionData

`data class`

```kotlin
data class ButtonsSelectionData(val title: String, val buttonTitles: List<String>)
```

| Member                 | Declaration                                              | Description |
| ---------------------- | -------------------------------------------------------- | ----------- |
| `ButtonsSelectionData` | `constructor(title: String, buttonTitles: List<String>)` |             |
| `buttonTitles`         | `val buttonTitles: List<String>`                         |             |
| `title`                | `val title: String`                                      |             |

## ButtonsSelectionView

`function`

```kotlin
@Composable
fun ButtonsSelectionView(data: ButtonsSelectionData, maxSelection: Int? = null, onSelection: (ButtonSelection) -> Unit)
```

## EmojiImage

`function`

```kotlin
@Composable
fun EmojiImage(imageUrl: String, contentDescription: String, alpha: Float)
```

## EmojiItem

`data class`

```kotlin
data class EmojiItem(val imageUrl: String, val text: String, val sentiment: String, val showRating: Boolean)
```

| Member       | Declaration                                                                           | Description |
| ------------ | ------------------------------------------------------------------------------------- | ----------- |
| `EmojiItem`  | `constructor(imageUrl: String, text: String, sentiment: String, showRating: Boolean)` |             |
| `imageUrl`   | `val imageUrl: String`                                                                |             |
| `sentiment`  | `val sentiment: String`                                                               |             |
| `showRating` | `val showRating: Boolean`                                                             |             |
| `text`       | `val text: String`                                                                    |             |

## EmojiSelection

`data class`

```kotlin
data class EmojiSelection(val text: String, val sentiment: String)
```

| Member           | Declaration                                    | Description |
| ---------------- | ---------------------------------------------- | ----------- |
| `EmojiSelection` | `constructor(text: String, sentiment: String)` |             |
| `sentiment`      | `val sentiment: String`                        |             |
| `text`           | `val text: String`                             |             |

## EmojiSelectionData

`data class`

```kotlin
data class EmojiSelectionData(val title: String, val items: List<EmojiItem>, val ratingSystem: Int)
```

| Member               | Declaration                                                             | Description |
| -------------------- | ----------------------------------------------------------------------- | ----------- |
| `EmojiSelectionData` | `constructor(title: String, items: List<EmojiItem>, ratingSystem: Int)` |             |
| `items`              | `val items: List<EmojiItem>`                                            |             |
| `ratingSystem`       | `val ratingSystem: Int`                                                 |             |
| `title`              | `val title: String`                                                     |             |

## EmojiSelectionView

`function`

```kotlin
@Composable
fun EmojiSelectionView(data: EmojiSelectionData, selectedIndex: Int? = null, onSelection: (EmojiItem) -> Unit)
```

## FeedbackExitView

`function`

```kotlin
@Composable
fun FeedbackExitView(data: FeedbackExitViewInputData)
```

## FeedbackExitViewInputData

`data class`

```kotlin
data class FeedbackExitViewInputData(val title: String)
```

| Member                      | Declaration                  | Description |
| --------------------------- | ---------------------------- | ----------- |
| `FeedbackExitViewInputData` | `constructor(title: String)` |             |
| `title`                     | `val title: String`          |             |

## TextInputData

`data class`

```kotlin
data class TextInputData(val title: String)
```

| Member          | Declaration                  | Description |
| --------------- | ---------------------------- | ----------- |
| `TextInputData` | `constructor(title: String)` |             |
| `title`         | `val title: String`          |             |

## TextInputView

`function`

```kotlin
@Composable
fun TextInputView(data: TextInputData, onTextChanged: (String) -> Unit)
```

# no.kindly.chatsdk.chat.presentation.imagedetails

## ImageDetailsScreen

`function`

```kotlin
@Composable
fun ImageDetailsScreen(url: String)
```

# no.kindly.chatsdk.chat.presentation.language

## LanguageScreen

`function`

```kotlin
@Composable
fun LanguageScreen(onNavigate: () -> Unit)
```

UI presentation of the LanguageScreen

## LanguageUIState

`sealed class`

```kotlin
sealed class LanguageUIState
```

Language state for the `LanguageScreen` screen

## LanguageUIState.DefaultState

`object`

```kotlin
object DefaultState : LanguageUIState
```

## LanguageUIState.LanguagesCompleted

`data class`

```kotlin
data class LanguagesCompleted(val list: List<SettingLanguage>?) : LanguageUIState
```

| Member               | Declaration                                 | Description |
| -------------------- | ------------------------------------------- | ----------- |
| `LanguagesCompleted` | `constructor(list: List<SettingLanguage>?)` |             |
| `list`               | `val list: List<SettingLanguage>?`          |             |

# no.kindly.chatsdk.chat.presentation.mainscreen

## MainScreenUIState

`sealed class`

```kotlin
sealed class MainScreenUIState
```

`MainScreenUIState` contains the states of the MainScreen

## MainScreenUIState.ErrorState

`object`

```kotlin
object ErrorState : MainScreenUIState
```

## MainScreenUIState.LoadingState

`object`

```kotlin
object LoadingState : MainScreenUIState
```

## MainScreenUIState.ShowConversationState

`data class`

```kotlin
data class ShowConversationState(val codeLanguage: String? = "en", val title: String?, val botAvatarUrl: String? = null) : MainScreenUIState
```

| Member                  | Declaration                                                                               | Description |
| ----------------------- | ----------------------------------------------------------------------------------------- | ----------- |
| `ShowConversationState` | `constructor(codeLanguage: String? = "en", title: String?, botAvatarUrl: String? = null)` |             |
| `botAvatarUrl`          | `val botAvatarUrl: String?`                                                               |             |
| `codeLanguage`          | `val codeLanguage: String?`                                                               |             |
| `title`                 | `val title: String?`                                                                      |             |

## MaintenanceHeaderView

`function`

```kotlin
@Composable
fun MaintenanceHeaderView(modifier: Modifier = Modifier)
```

• This is a composable function that displays the header view for maintenance items. • It includes a clickable text that opens a URL specified in the language configuration. • • @param modifier The modifier to be applied to the header view.

## SnackBarComponent

`function`

```kotlin
@Composable
fun SnackBarComponent(errorMesag: String, isVisible: MutableState<Boolean>)
```

# no.kindly.chatsdk.chat.presentation.navigation

## MainNavigationCoordinator

`object`

```kotlin
object MainNavigationCoordinator
```

Android equivalent of iOS MainCoordinator Centralized navigation management following iOS pattern

| Member                              | Declaration                                                                                           | Description                                                                        |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| `currentViewController`             | `val currentViewController: String?`                                                                  |                                                                                    |
| `navController`                     | `val navController: NavHostController?`                                                               |                                                                                    |
| `canPopBack`                        | `fun canPopBack(): Boolean`                                                                           | Check if we can go back                                                            |
| `getPreviousDestination`            | `fun getPreviousDestination(): String?`                                                               | Get the previous destination in the stack                                          |
| `initialize`                        | `fun initialize(navController: NavHostController)`                                                    |                                                                                    |
| `isAtRoot`                          | `fun isAtRoot(): Boolean`                                                                             | Check if we're at the root (main conversation screen)                              |
| `isCurrentRoute`                    | `fun isCurrentRoute(route: String): Boolean`                                                          | Check if current route matches given route                                         |
| `popCurrentViewController`          | `fun popCurrentViewController(animated: Boolean = true): Boolean`                                     | Pop current screen (equivalent to iOS popViewController)                           |
| `popToRootViewController`           | `fun popToRootViewController(animated: Boolean = true)`                                               | Pop to root screen (equivalent to iOS popToRootViewController)                     |
| `present`                           | `fun present(route: String, fullScreen: Boolean = false, animated: Boolean = true)`                   | Present a screen modally (for future modal implementations)                        |
| `pushDownloadPreviewViewController` | `fun pushDownloadPreviewViewController(url: String, format: Format, animated: Boolean = true)`        | Navigate to Download Preview screen                                                |
| `pushImageDetailsViewController`    | `fun pushImageDetailsViewController(imageUrl: String, animated: Boolean = true)`                      | Navigate to Image Details screen                                                   |
| `pushLanguageViewController`        | `fun pushLanguageViewController(animated: Boolean = true)`                                            | Navigate to Language selection screen                                              |
| `pushSettingsViewController`        | `fun pushSettingsViewController(animated: Boolean = true)`                                            | Navigate to Settings screen                                                        |
| `pushViewController`                | `fun pushViewController(route: String, animated: Boolean = true, removePreviousVCs: Boolean = false)` | Push a new screen onto the navigation stack (equivalent to iOS pushViewController) |

## NameScreen

`enum`

```kotlin
enum NameScreen : Enum<NameScreen>
```

| Member            | Declaration                              | Description                                                                                                                                                                                                                                                                                                                |
| ----------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MainScreen`      | `MainScreen`                             |                                                                                                                                                                                                                                                                                                                            |
| `Settings`        | `Settings`                               |                                                                                                                                                                                                                                                                                                                            |
| `ImageDetails`    | `ImageDetails`                           |                                                                                                                                                                                                                                                                                                                            |
| `Language`        | `Language`                               |                                                                                                                                                                                                                                                                                                                            |
| `WebView`         | `WebView`                                |                                                                                                                                                                                                                                                                                                                            |
| `DownloadPreview` | `DownloadPreview`                        |                                                                                                                                                                                                                                                                                                                            |
| `FeedbackForm`    | `FeedbackForm`                           |                                                                                                                                                                                                                                                                                                                            |
| `entries`         | `val entries: EnumEntries<NameScreen>`   | Returns a representation of an immutable list of all enum entries, in the order they're declared. This method may be used to iterate over the enum entries.                                                                                                                                                                |
| `valueOf`         | `fun valueOf(value: String): NameScreen` | Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.) **Throws** - `kotlin.IllegalArgumentException`: if this enum type has no constant with the specified name |
| `values`          | `fun values(): Array<NameScreen>`        | Returns an array containing the constants of this enum type, in the order they're declared. This method may be used to iterate over the constants.                                                                                                                                                                         |

## NavigationItem

`sealed class`

```kotlin
sealed class NavigationItem
```

| Member  | Declaration         | Description |
| ------- | ------------------- | ----------- |
| `route` | `val route: String` |             |

## NavigationItem.Conversation

`object`

```kotlin
object Conversation : NavigationItem
```

## NavigationItem.DownloadPreview

`object`

```kotlin
object DownloadPreview : NavigationItem
```

| Member        | Declaration                                            | Description |
| ------------- | ------------------------------------------------------ | ----------- |
| `createRoute` | `fun createRoute(url: String, format: String): String` |             |

## NavigationItem.FeedbackForm

`object`

```kotlin
object FeedbackForm : NavigationItem
```

| Member        | Declaration                                          | Description |
| ------------- | ---------------------------------------------------- | ----------- |
| `createRoute` | `fun createRoute(triggerTypeString: String): String` |             |

## NavigationItem.ImageDetails

`object`

```kotlin
object ImageDetails : NavigationItem
```

| Member        | Declaration                                 | Description |
| ------------- | ------------------------------------------- | ----------- |
| `createRoute` | `fun createRoute(imageUrl: String): String` |             |

## NavigationItem.LanguageScreen

`object`

```kotlin
object LanguageScreen : NavigationItem
```

## NavigationItem.SettingsScreen

`object`

```kotlin
object SettingsScreen : NavigationItem
```

## NavigationItem.WebViewScreen

`object`

```kotlin
object WebViewScreen : NavigationItem
```

# no.kindly.chatsdk.chat.presentation.settings

## SettingsScreen

`function`

```kotlin
@Composable
fun SettingsScreen(onNavigate: (ScreenType) -> Unit)
```

## SettingsUiState

`sealed class`

```kotlin
sealed class SettingsUiState
```

Settings state for the settings screen

## SettingsUiState.CompleteStartOverState

`object`

```kotlin
object CompleteStartOverState : SettingsUiState
```

## SettingsUiState.DefaultState

`object`

```kotlin
object DefaultState : SettingsUiState
```

## SettingsUiState.DeleteChatLogState

`object`

```kotlin
object DeleteChatLogState : SettingsUiState
```

## SettingsUiState.ErrorConnectionState

`object`

```kotlin
object ErrorConnectionState : SettingsUiState
```

## SettingsUiState.LoadingStartOverState

`object`

```kotlin
object LoadingStartOverState : SettingsUiState
```

## SettingsUiState.ServerErrorState

`data class`

```kotlin
data class ServerErrorState(val errorString: String) : SettingsUiState
```

| Member             | Declaration                        | Description |
| ------------------ | ---------------------------------- | ----------- |
| `ServerErrorState` | `constructor(errorString: String)` |             |
| `errorString`      | `val errorString: String`          |             |

# no.kindly.chatsdk.chat.presentation.statusbar

## ConnectionErrorView

`class`

```kotlin
class ConnectionErrorView : StatusBarProtocol
```

| Member                | Declaration                                                 | Description |
| --------------------- | ----------------------------------------------------------- | ----------- |
| `ConnectionErrorView` | `constructor()`                                             |             |
| `identifier`          | `open override val identifier: String`                      |             |
| `isVisible`           | `open override var isVisible: Boolean`                      |             |
| `priority`            | `open override val priority: Int`                           |             |
| `Content`             | `@Composable open override fun Content(modifier: Modifier)` |             |

## HandoverStateView

`class`

```kotlin
class HandoverStateView(handoverState: HandoverState, agentName: String? = null, queuePosition: Int? = null, waitTime: Int? = null, onLeaveHandoverClicked: () -> Unit) : StatusBarProtocol
```

| Member              | Declaration                                                                                                                                                   | Description |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `HandoverStateView` | `constructor(handoverState: HandoverState, agentName: String? = null, queuePosition: Int? = null, waitTime: Int? = null, onLeaveHandoverClicked: () -> Unit)` |             |
| `identifier`        | `open override val identifier: String`                                                                                                                        |             |
| `isVisible`         | `open override var isVisible: Boolean`                                                                                                                        |             |
| `priority`          | `open override val priority: Int`                                                                                                                             |             |
| `Content`           | `@Composable open override fun Content(modifier: Modifier)`                                                                                                   |             |

## MaintenanceModeView

`class`

```kotlin
class MaintenanceModeView : StatusBarProtocol
```

| Member                | Declaration                                                 | Description |
| --------------------- | ----------------------------------------------------------- | ----------- |
| `MaintenanceModeView` | `constructor()`                                             |             |
| `identifier`          | `open override val identifier: String`                      |             |
| `isVisible`           | `open override var isVisible: Boolean`                      |             |
| `priority`            | `open override val priority: Int`                           |             |
| `Content`             | `@Composable open override fun Content(modifier: Modifier)` |             |

## NoInternetView

`class`

```kotlin
class NoInternetView : StatusBarProtocol
```

| Member           | Declaration                                                 | Description |
| ---------------- | ----------------------------------------------------------- | ----------- |
| `NoInternetView` | `constructor()`                                             |             |
| `identifier`     | `open override val identifier: String`                      |             |
| `isVisible`      | `open override var isVisible: Boolean`                      |             |
| `priority`       | `open override val priority: Int`                           |             |
| `Content`        | `@Composable open override fun Content(modifier: Modifier)` |             |

## rememberStatusBarManager

`function`

```kotlin
@Composable
fun rememberStatusBarManager(): StatusBarManager
```
