{"id":20078094,"url":"https://github.com/quickblox/android-ui-kit","last_synced_at":"2025-05-05T22:31:59.899Z","repository":{"id":166436855,"uuid":"637751718","full_name":"QuickBlox/android-ui-kit","owner":"QuickBlox","description":null,"archived":false,"fork":false,"pushed_at":"2024-10-17T13:12:00.000Z","size":2501,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-10-19T18:21:30.245Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/QuickBlox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-08T10:34:51.000Z","updated_at":"2024-10-17T13:11:57.000Z","dependencies_parsed_at":"2023-07-25T20:17:08.761Z","dependency_job_id":"9d92f81c-83ba-499b-bb86-de8554a0ba54","html_url":"https://github.com/QuickBlox/android-ui-kit","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickBlox%2Fandroid-ui-kit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickBlox%2Fandroid-ui-kit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickBlox%2Fandroid-ui-kit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickBlox%2Fandroid-ui-kit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/QuickBlox","download_url":"https://codeload.github.com/QuickBlox/android-ui-kit/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224470923,"owners_count":17316710,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T15:12:50.235Z","updated_at":"2025-05-05T22:31:59.893Z","avatar_url":"https://github.com/QuickBlox.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\r\n\r\n\u003cp\u003e\r\n\t\t\u003ca href=\"https://discord.com/invite/3cKRunq8ZZ\"\u003e\u003cimg src=\"https://img.shields.io/discord/1042743094833065985?color=5865F2\u0026logo=discord\u0026logoColor=white\u0026label=QuickBlox%20Discord%20server\u0026style=for-the-badge\" alt=\"Discord server\" /\u003e\u003c/a\u003e\r\n\u003c/p\u003e\r\n\r\n\u003c/div\u003e\r\n\r\n# Overview\r\n\r\nThe QuickBlox UIKit for Android is a comprehensive user interface kit specifically designed for building chat applications. It provides a collection of pre-built components, modules, and utilities that simplify the process of creating chat applications.\r\n\r\nThe main goal of the QuickBlox UIKit for Android is to offer developers a streamlined and efficient way to implement chat functionality within their Android applications.\r\n\r\nThe QuickBlox UIKit for Android offers modules that encapsulate complex chat functionalities, such as dialogs and chat management and real-time updates. These modules provide a simplified interface for integrating chat features into applications without the need for extensive knowledge of the underlying protocols or server-side infrastructure.\r\n\r\n# Screenshots\r\n\r\n\u003cimg src=\"screenshots/android-doc.png\" /\u003e\r\n\r\n\r\n# Features\r\n\r\nQuickBlox UIKit for Android provides next functionality:\r\n- List of dialogs\r\n- Create dialog(Private or Group)\r\n- Dialog screen\r\n- Send text, image, video, audio, file messages\r\n- Dialog info screen\r\n- List, invite, remove members\r\n\r\n# Send your first message\r\n\r\nThe QuickBlox UIKit for Android comprises a collection of pre-assembled UI components that enable effortless creation of an in-app chat equipped with all the necessary messaging functionalities. Our development kit encompasses light and dark themes, colors, and various other features. These components can be personalized to fashion an engaging messaging interface that reflects your brand's distinct identity.\r\n\r\nThe QuickBlox UIKit fully supports both private and group dialogs. To initiate the process of sending a message from the ground up using Java or Kotlin, please refer to the instructions provided in the guide below.\r\n\r\n## Requirements\r\n\r\nThe minimum requirements for QuickBlox UIKit for Android are:\r\n- Android 5.0 (API level 21) or higher\r\n- Java 8 or higher\r\n- Android Gradle plugin 4.0.1 or higher\r\n\r\n## Before you begin\r\n\r\nRegister a new account following [this link](https://admin.quickblox.com/signup). Type in your email and password to sign in. You can also sign in with your Google or Github accounts.\r\nCreate the app clicking New app button.\r\nConfigure the app. Type in the information about your organization into corresponding fields and click Add button.\r\nGo to Dashboard =\u003e YOUR_APP =\u003e Overview section and copy your Application ID, Authorization Key, Authorization Secret, and Account Key .\r\n\r\n## Install QuickBlox UIKit\r\n\r\nThere are several ways to install to QuickBlox UIKit from:\r\n- Repository\r\n- Local source\r\n\r\n### Install QuickBlox UIKit from repository\r\nTo install QuickBlox UIKit to your app, import QuickBlox UIKit and QuickBlox SDK dependencies via build.gradle file.\r\nInclude reference to SDK repository in your **project-level build.gradle** file at the root directory or to **settings.gradle** file. Specify the URL of QuickBlox repository where the files are stored. Following this URL, gradle finds SDK artifacts.\r\n\r\n```\r\nrepositories {\r\n    maven {\r\n        url \"https://github.com/QuickBlox/android-ui-kit-releases/raw/master/\"\r\n    }\r\n    maven {\r\n        url \"https://github.com/QuickBlox/quickblox-android-sdk-releases/raw/master/\"\r\n    }\r\n}\r\n```\r\n\r\nThen need to add implementation of QuickBlox UIKit and QuickBlox SDK to dependencies in your module-level(App) **build.gradle** file.\r\n\r\n```\r\ndependencies {\r\n    implementation \"com.quickblox:android-ui-kit:0.10.1\"\r\n\r\n    implementation 'com.quickblox:quickblox-android-sdk-messages:4.2.2'\r\n    implementation 'com.quickblox:quickblox-android-sdk-chat:4.2.2'\r\n    implementation 'com.quickblox:quickblox-android-sdk-content:4.2.2'\r\n}\r\n```\r\n\r\n### Install QuickBlox UIKit from local source\r\nTo connect QuickBlox SDK to your app, import QuickBlox SDK dependencies via build.gradle file.\r\nInclude reference to SDK repository in your **project-level build.gradle** file at the root directory or to **settings.gradle** file. Specify the URL of QuickBlox repository where the files are stored. Following this URL, gradle finds SDK artifacts.\r\n\r\n```\r\nrepositories {\r\n    google()\r\n    mavenCentral()\r\n    maven {\r\n        url \"https://github.com/QuickBlox/quickblox-android-sdk-releases/raw/master/\"\r\n    }\r\n}\r\n```\r\n\r\nThen need to download the QuickBlox UIKit from the GitHub repository at [this link](https://github.com/QuickBlox/android-ui-kit) to include UIKit locally in your project.\r\n\r\nSpecify the path of the UIKit project in **settings.gradle** file.\r\n\r\n```\r\ninclude ':ui-kit'\r\nproject(':ui-kit').projectDir = new File('YourPath/android-ui-kit/ui-kit')\r\n```\r\n\r\nAlso, need to add implementation of UIKit project to dependencies in your module-level(App) **build.gradle** file.\r\n\r\n```\r\ndependencies {\r\n    implementation project(':ui-kit')\r\n}\r\n```\r\n\r\n## Init QuickBlox SDK\r\n\r\nTo init QuickBlox SDK you need to pass Application ID, Authorization Key, Authorization Secret, and Account Key to the init() method.\r\nHow to get credentials is described in the [Before you begin](#before-you-begin) section.\r\n```\r\nprivate const val APPLICATION_ID = \"67895\"\r\nprivate const val AUTH_KEY = \"lkjdueksu7392kj\"\r\nprivate const val AUTH_SECRET = \"BTFsj7Rtt27DAmT\"\r\nprivate const val ACCOUNT_KEY = \"9yvTe17TmjNPqDoYtfqp\"\r\n\r\nQBSDK.init(applicationContext, APPLICATION_ID, AUTH_KEY, AUTH_SECRET, ACCOUNT_KEY)\r\n```\r\n\r\n## Authentication and start QuickBlox UIKit\r\n\r\nBefore sending your first message you need to authenticate users in the QuickBlox system. You can read more about different ways of authentication by [this link](https://docs.quickblox.com/docs/android-authentication). \r\nIn our example we show how to authenticate user with login and password.\r\nAfter successfully sign-in, you need to initialize the QuickBlox UIKit by invoke **init(applicationContext)** method of the **QuickBloxUiKit** and start Dialogs screen by invoke **show()** method of the **DialogActivity**.\r\n\r\n```\r\nval user = QBUser()\r\nuser.login = \"userlogin\"\r\nuser.password = \"userpassword\"\r\n\r\nQBUsers.signIn(user).performAsync(object : QBEntityCallback\u003cQBUser\u003e {\r\n    override fun onSuccess(user: QBUser?, bundle: Bundle?) {\r\n        // init Quickblox UIKit  \r\n        QuickBloxUiKit.init(applicationContext)\r\n        // show Dialogs screen\r\n        DialogsActivity.show(context)  \r\n    }\r\n\r\n    override fun onError(exception: QBResponseException?) {\r\n        // handle exception\r\n    }\r\n})\r\n```\r\n\r\n# Customization\r\n\r\nThe QuickBlox UIKit for Android allows you to create your own unique view of the UIKit.\r\n\r\n## Default themes\r\n\r\nThe QuickBlox UIKit for Android has 2 built in themes: DarkUiKitTheme and LightUiKitTheme.\r\nDefault theme for UIKit is LightUiKitTheme.\r\nTo set theme you need to call QuickBloxUiKit.setTheme() method with chosen theme.\r\nThis method must be called before starting screens.\r\n\r\n```\r\nQuickBloxUiKit.setTheme(DarkUiKitTheme())\r\n```\r\n\r\n## Use your own theme\r\n\r\nThere are two options how you can create your own theme:\r\n- Customize current theme\r\n- Create your own theme\r\n\r\nTo customize the current theme you just need to get it and set the color that you need.\r\n\r\n```\r\nQuickBloxUiKit.getTheme().setMainBackgroundColor(\"#FFFFFF\")\r\n```\r\n\r\nOr you can create your own theme. To do this you need to create a new class that implements the UiKitTheme interface.\r\n\r\n```\r\nclass CustomUiKitTheme : UiKitTheme {\r\n    private var mainBackgroundColor: String = \"#FFFFFF\"\r\n    private var statusBarColor: String = \"#E4E6E8\"\r\n    private var mainElementsColor: String = \"#3978FC\"\r\n    private var secondaryBackgroundColor: String = \"#E7EFFF\"\r\n    private var mainTextColor: String = \"#0B121B\"\r\n    private var disabledElementsColor: String = \"#BCC1C5\"\r\n    private var secondaryTextColor: String = \"#636D78\"\r\n    private var secondaryElementsColor: String = \"#202F3E\"\r\n    private var dividerColor: String = \"#E7EFFF\"\r\n    private var incomingMessageColor: String = \"#E4E6E8\"\r\n    private var outgoingMessageColor: String = \"#E7EFFF\"\r\n    private var inputBackgroundColor: String = \"#E4E6E8\"\r\n    private var tertiaryElementsColor: String = \"#636D78\"\r\n    private var errorColor: String = \"#FF766E\"\r\n​\r\n    override fun getMainBackgroundColor(): Int {\r\n        return parseColorToIntFrom(mainBackgroundColor)\r\n    }\r\n​\r\n    override fun setMainBackgroundColor(colorString: String) {\r\n        mainBackgroundColor = colorString\r\n    }\r\n​\r\n    override fun getStatusBarColor(): Int {\r\n        return parseColorToIntFrom(statusBarColor)\r\n    }\r\n​\r\n    override fun setStatusBarColor(colorString: String) {\r\n        statusBarColor = colorString\r\n    }\r\n​\r\n    override fun getMainElementsColor(): Int {\r\n        return parseColorToIntFrom(mainElementsColor)\r\n    }\r\n​\r\n    override fun setMainElementsColor(colorString: String) {\r\n        mainElementsColor = colorString\r\n    }\r\n​\r\n    override fun getSecondaryBackgroundColor(): Int {\r\n        return parseColorToIntFrom(secondaryBackgroundColor)\r\n    }\r\n​\r\n    override fun setSecondaryBackgroundColor(colorString: String) {\r\n        secondaryBackgroundColor = colorString\r\n    }\r\n​\r\n    override fun setDisabledElementsColor(colorString: String) {\r\n        disabledElementsColor = colorString\r\n    }\r\n​\r\n    override fun getDisabledElementsColor(): Int {\r\n        return parseColorToIntFrom(disabledElementsColor)\r\n    }\r\n​\r\n    override fun getMainTextColor(): Int {\r\n        return parseColorToIntFrom(mainTextColor)\r\n    }\r\n​\r\n    override fun setMainTextColor(colorString: String) {\r\n        mainTextColor = colorString\r\n    }\r\n​\r\n    override fun setSecondaryTextColor(colorString: String) {\r\n        secondaryTextColor = colorString\r\n    }\r\n​\r\n    override fun getSecondaryTextColor(): Int {\r\n        return parseColorToIntFrom(secondaryTextColor)\r\n    }\r\n​\r\n    override fun setSecondaryElementsColor(colorString: String) {\r\n        secondaryElementsColor = colorString\r\n    }\r\n​\r\n    override fun getIncomingMessageColor(): Int {\r\n        return parseColorToIntFrom(incomingMessageColor)\r\n    }\r\n​\r\n    override fun setIncomingMessageColor(colorString: String) {\r\n        incomingMessageColor = colorString\r\n    }\r\n​\r\n    override fun getOutgoingMessageColor(): Int {\r\n        return parseColorToIntFrom(outgoingMessageColor)\r\n    }\r\n​\r\n    override fun setOutgoingMessageColor(colorString: String) {\r\n        outgoingMessageColor = colorString\r\n    }\r\n​\r\n    override fun getDividerColor(): Int {\r\n        return parseColorToIntFrom(dividerColor)\r\n    }\r\n​\r\n    override fun setDividerColor(colorString: String) {\r\n        dividerColor = colorString\r\n    }\r\n​\r\n    override fun getInputBackgroundColor(): Int {\r\n        return parseColorToIntFrom(inputBackgroundColor)\r\n    }\r\n​\r\n    override fun setInputBackgroundColor(colorString: String) {\r\n        inputBackgroundColor = colorString\r\n    }\r\n​\r\n    override fun getTertiaryElementsColor(): Int {\r\n        return parseColorToIntFrom(tertiaryElementsColor)\r\n    }\r\n​\r\n    override fun setTertiaryElementsColor(colorString: String) {\r\n        tertiaryElementsColor = colorString\r\n    }\r\n​\r\n    override fun getSecondaryElementsColor(): Int {\r\n        return parseColorToIntFrom(secondaryElementsColor)\r\n    }\r\n​\r\n    override fun getErrorColor(): Int {\r\n        return parseColorToIntFrom(errorColor)\r\n    }\r\n​\r\n    override fun setErrorColor(colorString: String) {\r\n        errorColor = colorString\r\n    }\r\n​\r\n    override fun parseColorToIntFrom(colorString: String): Int {\r\n        try {\r\n            return Color.parseColor(colorString)\r\n        } catch (exception: IllegalArgumentException) {\r\n            throw Exception(exception.message.toString())\r\n        } catch (exception: NumberFormatException) {\r\n            throw Exception(exception.message.toString())\r\n        }\r\n    }\r\n}\r\n\r\n```\r\n\r\nTo use your own theme you just need to set it. This method must be called before starting screens.\r\n\r\n```\r\nQuickBloxUiKit.setTheme(CustomUiKitTheme())\r\n```\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquickblox%2Fandroid-ui-kit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquickblox%2Fandroid-ui-kit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquickblox%2Fandroid-ui-kit/lists"}