Android library. Flexible components for chat UI implementation with flexible possibilities for styling, customizing and data management. Made by Stfalcon

Overview

ChatKit for Android

ChatKit is a library designed to simplify the development of UI for such a trivial task as chat. It has flexible possibilities for styling, customizing and data management

Features

  • Ready-to-use already styled solution for quick implementation;
  • Default and custom media messages;
  • Fully customizable layouts - setting styles out of the box (use your own colors, text appearances, drawables, selectors and sizes) or even create your own custom markup or/and holders for unique behaviour;
  • List of dialogs, including tete-a-tete and group chats, markers for unread messages and last user message view;
  • List of messages (incoming and outcoming) with history pagination and already calculated dates headers;
  • Different avatars with no specific realization of image loading - you can use any library you want;
  • Selection mode for interacting with messages;
  • Links highlighting
  • Easy dates formatting;
  • Your own models for dialogs and messages - there is no converting needed;
  • Ready to use message input view;
  • Custom animations (according to RecyclerView usage).

Who we are

Need iOS and Android apps, MVP development or prototyping? Contact us via [email protected]. We develop software since 2009, and we're known experts in this field. Check out our portfolio and see more libraries from stfalcon-studio.

Demo Application

Get it on Google Play

How to use

To implement all of the features above you can use the following components:

Download

  1. Add jitpack to the root build.gradle file of your project at the end of repositories.
allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}
  1. Add the dependency
dependencies {
  ...
  implementation 'com.github.stfalcon-studio:Chatkit:[last_version]'
}  

AndroidX

To use with AndroidX you have to set targetSdkVersion for your project to 28 and add following 2 lines in gradle.properties file.

android.useAndroidX=true
android.enableJetifier=true

Proguard

If you are using ProGuard you might need to add rules:

-keep class * extends com.stfalcon.chatkit.messages.MessageHolders$OutcomingTextMessageViewHolder {
     public <init>(android.view.View, java.lang.Object);
     public <init>(android.view.View);
 }
-keep class * extends com.stfalcon.chatkit.messages.MessageHolders$IncomingTextMessageViewHolder {
     public <init>(android.view.View, java.lang.Object);
     public <init>(android.view.View);
 }
-keep class * extends com.stfalcon.chatkit.messages.MessageHolders$IncomingImageMessageViewHolder {
     public <init>(android.view.View, java.lang.Object);
     public <init>(android.view.View);
 }
-keep class * extends com.stfalcon.chatkit.messages.MessageHolders$OutcomingImageMessageViewHolder {
     public <init>(android.view.View, java.lang.Object);
     public <init>(android.view.View);
 }

Try it

Check out the sample project to try it yourself! 😉

Changelog

See the changelog to be aware of latest improvements and fixes.

Gratitude

We were inspired by JSQMessagesViewController library for iOS. In our plans to improve functionality to give Android developers wide opportunities to create fast and good-looking UI for chats in their applications.

Please, contact us via [email protected] if you are using this library, just to let us know :) Thank you!

License

Copyright (C) 2017 stfalcon.com

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

https://github.com/stfalcon-studio/ChatKit/blob/master/LICENSE

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Comments
  • NullPointerException

    NullPointerException

    java.lang.NullPointerException: Attempt to write to field 'int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null object reference
    

    Code:

            MessagesListAdapter<Message> adapter = new MessagesListAdapter<>(fromId, (imageView, url) -> Glide.with(ConversationActivity.this)
                    .load(url)
                    .into(imageView));
            messagesList.setAdapter(adapter);
    
            adapter.addToEnd(convert(list), false);
    
    
        private List<Message> convert(List<AVIMMessage> list) {
            List<Message> messages = new ArrayList<>();
    
            Log.d(TAG, "convert: " + list.size());
            for (AVIMMessage m : list) {
                if (m instanceof AVIMTextMessage) {
                    AVIMTextMessage text = (AVIMTextMessage) m;
                    Message message = new Message();
                    message.setText(text.getText());
                    message.setCreatedAt(new Date(m.getTimestamp()));
                    message.setId(m.getMessageId());
                    User u = new User(Integer.parseInt(text.getFrom()));
                    message.setAuthor(new Author(u));
                    Log.d(TAG, "convert: add message");
                    messages.add(message);
                }
            }
    
            return messages;
        }
    
    opened by DanteAndroid 20
  • I manage to add Location, Video to this chatKit

    I manage to add Location, Video to this chatKit

    For those who suffer to using this chakKit :

    I am a developer who using stfalcon Chatkit to develop my Chatting interface,

    and i manage to play-around with this chatkit and add-on new feature, example like: add Video, add Location. all you need to do is: read these file:

    item_custom_incoming_voice_message.xml (layout, change your own layout, example, you want video, then put a imageview with play button infront )
    item_custom_outcoming_voice_message.xml(same) IncomingVoiceMessageViewHolder OutcomingVoiceMessageViewHolder

    in your chat layout main file, link above together with contenttype, example like below(what i done in my project) : private void initAdapter() {

        MessageHolders holdersConfig = new MessageHolders()
                .registerContentType(
                        CONTENT_TYPE_VOICE,
                        IncomingVideoMessageViewHolder.class,
                        R.layout.item_custom_incoming_video_message,
                        OutcomingVideoMessageViewHolder.class,
                        R.layout.item_custom_outcoming_video_message,
                        this)
                .registerContentType(
                        CONTENT_TYPE_LOCATION,
                        IncomingLocationMessageViewHolder.class,
                        R.layout.item_custom_incoming_location_message,
                        OutcomingLocationMessageViewHolder.class,
                        R.layout.item_custom_outcoming_location_message,
                        this)
                .setIncomingTextLayout(R.layout.item_custom_incoming_text_message)
                .setOutcomingTextLayout(R.layout.item_custom_outcoming_text_message)
                .setIncomingImageLayout(R.layout.item_custom_incoming_image_message)
                .setOutcomingImageLayout(R.layout.item_custom_outcoming_image_message);
    
        super.messagesAdapter = new MessagesListAdapter<>(super.senderId, holdersConfig, super.imageLoader);
        super.messagesAdapter.setOnMessageLongClickListener(this);
        super.messagesAdapter.setOnMessageViewClickListener(this);
        //super.messagesAdapter.setLoadMoreListener(this);
        super.messagesAdapter.setOnMessageClickListener(this);
        //super.messagesAdapter.enableSelectionMode(this); if enable it will cause the copy function not working
        messagesList.setAdapter(super.messagesAdapter);
    
    }
    

    on message click in the chat activity :

    @Override public void onMessageViewClick(View view, Message message){ if (message.getLocationurl() != null){ Intent intent = new Intent(android.content.Intent.ACTION_VIEW); intent.setData(Uri.parse(message.getLocationurl())); startActivity(intent); }

    if (message.getVideourl() != null ) { Intent intent = new Intent(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(message.getVideourl()), "video/*"); startActivity(Intent.createChooser(intent, "Play video...")); } }

    i am suffered for few days and managed to get it done:

    photo_2017-12-04_11-09-09

    opened by ChiHwe 15
  • Set user avatar from Resources

    Set user avatar from Resources

    Hi, I started to use this library and I'm no able to find how to do this.

    I'm following the sample that you provide and change something to fit in how I want. The problem is that I want to show a default avatar image that I have in my drawable or mipmap folders, but the IUser class uses a String avatar.

    Any clue how to achieve what I want?

    Thanks

    opened by adriamt 14
  • Is it possible to have more than 2 participants in a conversation?

    Is it possible to have more than 2 participants in a conversation?

    Does the MessageAdapter have support for more than 2 participants? It asks for one user ID to be able to differentiate between the sender/receiver. What if a third party is to be added to the conversation?

    opened by asknask 10
  • Send data from custom MessageHolder to MessageActivity.

    Send data from custom MessageHolder to MessageActivity.

    So I have a custom MessageHolder classes for both texts and Images, from which I make MessageHolders variable which goes to MessagesListAdapter.

    From an action inside MessageHolderImage class, I need to call messageListAdapter.notifyDataSetChanged(), but as per the structure I dont have any use of MessageHolderImage class's constructor, please let me know how to approach this.

    MessageActivity.class

    messageHolders = MessageHolders()
                .setIncomingTextConfig(MessageHolderText::class.java, R.layout.other_user_message_item)
                .setOutcomingTextConfig(MessageHolderText::class.java, R.layout.my_user_message_item)
                .setIncomingImageConfig(MessagesHolderImage::class.java, R.layout.other_user_message_item_image)
                .setOutcomingImageConfig(MessagesHolderImage::class.java, R.layout.my_user_message_item_image)
    
    messagesAdapter = MessagesListAdapter(pref.chatIdentity, messageHolders, ImageLoader { _, _ -> })
    

    MessageHolderImage.class and MessageHolderText.class (Same classes except image and text difference ofcourse)

    class MessagesHolderImage(itemView: View) : MessageHolders.BaseMessageViewHolder<MessageItem>(itemView), AnkoLogger{
    
        private var glide = Glide.with(itemView)
            .setDefaultRequestOptions(RequestOptions().placeholder(R.drawable.default))
        private val time: TextView = itemView.findViewById(R.id.user_message_time)
        private val name: TextView = itemView.findViewById(R.id.user_name)
    
        override fun onBind(messageItem: MessageItem?) {
    
            time.text = Utils.chatDateFormatterHour(messageItem?.createdAt.toString())
            name.text = messageItem?.user?.name
    
            if (messageItem?.user?.name?.contains(App.getPreferences().fname)!!)
                glideProfile.asBitmap()
                        .load(byteArray())
                        .into(profileImage)
    
           //how to go from here to messageActivity, as I dont have constructor which allows an 
           //interface callback which transfers data from here to messageActivity
        }
    }
    

    Please tell me if I have a wrong approach or something can be modified here, Thanks in advance.

    opened by aalap03 10
  • Message Long Click Context Menu possible?

    Message Long Click Context Menu possible?

    Hi I tried to make a "floating context menu" (See: https://developer.android.com/guide/topics/ui/menus#FloatingContextMenu ) but cant find a way to add it to the Messages. Any ideas?

    opened by MTRNord 10
  • incoming vs outcoming

    incoming vs outcoming

    Ok I must be missing something in the instructions/sample.

    How do you set whether a message is incoming vs outcoming before adding it to the adapter?

    Thanks!

    opened by op27no2 9
  • addToStart Func not working

    addToStart Func not working

    Hi all

    I can add new message by using addToStart only in my first time init MessagesList Activity After I close it and reopen the activity again, addToStart is no longer function.

    Any hints?

    Best Regards

    opened by takawww 8
  • get View of dialog List item

    get View of dialog List item

    Hi, I want to show popup menu when a user longClick on any dialog list item, to show popup menu I need the view of that list item, how can I get that? kindly help.

    opened by mubtadasyed 8
  • Chat Layout

    Chat Layout

    Currently when I use the library, the chat appears starts from bottom to top. Could anyone help me in re configuring the chat layout to start from top to bottom like whatsapp?

    opened by uaeuae 8
  • Get Message Position?

    Get Message Position?

    Hi, I would like to check if I currently have the newest message in view (means I am at the bottom) to be able in that case to scroll to new messages. If I am not at the bottom I dont want to scroll to new messages.

    Is there a way to check where the User currently is?

    opened by MTRNord 7
  • MessageInput Error: Application Crashes on launching DefaultMessageActivity on setcontentview method

    MessageInput Error: Application Crashes on launching DefaultMessageActivity on setcontentview method

    Caused by: android.view.InflateException: Binary XML file line #35 in com.creative.astrostar:layout/activity_default_messages: Binary XML file line #35 in com.creative.astrostar:layout/activity_default_messages: Error inflating class com.stfalcon.chatkit.messages.MessageInput Caused by: android.view.InflateException: Binary XML file line #35 in com.creative.astrostar:layout/activity_default_messages: Error inflating class com.stfalcon.chatkit.messages.MessageInput Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at android.view.LayoutInflater.createView(LayoutInflater.java:876) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1064) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1019) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1181) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1142) at android.view.LayoutInflater.inflate(LayoutInflater.java:701) at android.view.LayoutInflater.inflate(LayoutInflater.java:553) at android.view.LayoutInflater.inflate(LayoutInflater.java:500) at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:710) at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:195) at com.creative.astrostar.view.activity.chat.DefaultMessagesActivity.onCreate(DefaultMessagesActivity.java:173) at android.app.Activity.performCreate(Activity.java:8369) at android.app.Activity.performCreate(Activity.java:8347) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1379) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3912) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4096) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2441) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:233) at android.os.Looper.loop(Looper.java:334) at android.app.ActivityThread.main(ActivityThread.java:8396) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582) 2022-09-14 22:27:50.025 3007-3007/com.creative.astrostar E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1065) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at com.stfalcon.chatkit.messages.MessageInput.init(MessageInput.java:252) at com.stfalcon.chatkit.messages.MessageInput.init(MessageInput.java:191) at com.stfalcon.chatkit.messages.MessageInput.(MessageInput.java:76)

    I tried changeing "MessageInput" Id as well but not working

    opened by nyadav1992 0
  • Strange behavior with Custom Voice ViewHolder

    Strange behavior with Custom Voice ViewHolder

    Hi how are you? i have an issue just in the CustomIncomingVoiceMessageViewHolder. The CustomOutcomingVoiceMessageViewHolder works fine! .Any idea? Thanks

    java.lang.UnsupportedOperationException: Somehow we couldn't create the ViewHolder for message. Please, report this issue on GitHub with full stacktrace in description. at com.stfalcon.chatkit.messages.MessageHolders.getHolder(MessageHolders.java:636) at com.stfalcon.chatkit.messages.MessageHolders.getHolder(MessageHolders.java:611) at com.stfalcon.chatkit.messages.MessageHolders.getHolder(MessageHolders.java:557) at com.stfalcon.chatkit.messages.MessagesListAdapter.onCreateViewHolder(MessagesListAdapter.java:100) at com.stfalcon.chatkit.messages.MessagesListAdapter.onCreateViewHolder(MessagesListAdapter.java:48) at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:7295) at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6416) at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6300) at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6296) at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2330) at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1631) at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1591) at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:643) at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4309) at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4012) at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4578) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1873) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1873) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1873) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at androidx.coordinatorlayout.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1213) at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:899) at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:919) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at androidx.viewpager.widget.ViewPager.onLayout(ViewPager.java:1775) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1873) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635) 2022-04-23 09:52:29.304 26096-26096/com.iyr.fewtouchs E/AndroidRuntime: at android.widget.LinearLayout.onLayout(LinearLayout.java:1544) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635) at android.widget.LinearLayout.onLayout(LinearLayout.java:1544) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) at android.widget.FrameLayout.onLayout(FrameLayout.java:261) at com.android.internal.policy.DecorView.onLayout(DecorView.java:944) at android.view.View.layout(View.java:20836) at android.view.ViewGroup.layout(ViewGroup.java:6401) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2907) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2594) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1738) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7745) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911) at android.view.Choreographer.doCallbacks(Choreographer.java:723) at android.view.Choreographer.doFrame(Choreographer.java:658) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) at android.os.Handler.handleCallback(Handler.java:789) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6938) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) Caused by: java.lang.NoSuchMethodException: [class android.view.View] at java.lang.Class.getConstructor0(Class.java:2320) at java.lang.Class.getDeclaredConstructor(Class.java:2166) at com.stfalcon.chatkit.messages.MessageHolders.getHolder(MessageHolders.java:627) ... 83 more

    opened by romancanoniero 1
  •  Could not resolve com.github.stfalcon-studio:Chatkit:v0.4.1.

    Could not resolve com.github.stfalcon-studio:Chatkit:v0.4.1.

    Hi, i tried to follow all steps here but am still getting this beautiful error.

    Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve com.github.stfalcon-studio:Chatkit:v0.4.1.

    opened by Frontpage656 4
  • Can we display sender name on chat message bubble ?

    Can we display sender name on chat message bubble ?

    How Can we display sender name on chat message bubble? if we are using chat bubbles from group chat , then displaying images are not enough. We need to display the name also like whatsapp does.

    Is there a way to achieve this ?

    opened by vasuthakker 0
Releases(v0.4.1)
Owner
Stfalcon LLC
We specialize in the development of large and medium-sized projects, mobile and web applications, portals with a complex and rich functionality.
Stfalcon LLC
Android Country Picker is a Kotlin-first, flexible and powerful Android library that allows to integrate Country Picker with just a few lines.

1. Add dependency dependencies { implementation 'com.hbb20:android-country-picker:X.Y.Z' } For latest version, 2. Decide your use-case

Harsh B. Bhakta 65 Dec 6, 2022
AndroidPhotoFilters aims to provide fast, powerful and flexible image processing instrument for creating awesome effects on any image media.

PhotoFiltersSDK PhotoFiltersSDK aims to provide fast, powerful and flexible image processing instrument for creating awesome effects on any image medi

Zomato 2.5k Dec 23, 2022
An easy, flexible way to add a shimmering effect to any view in an Android app.

Shimmer for Android Shimmer is an Android library that provides an easy way to add a shimmer effect to any view in your Android app. It is useful as a

Facebook 5.1k Dec 26, 2022
With MVVM Architecture pattern using Android Architecture Components This is a sample app demonstrating Youtube player animation using constraint layout

Youtube UI/UX Animation This is a sample app demonstrating Youtube UX/UI animation using ConstraintLayout.It implements the Keyframe Animation feature

Burhanuddin Rashid 866 Dec 29, 2022
Add Animatable Material Components in Android Jetpack Compose. Create jetpack compose animations painless.

AnimatableCompose Add Animatable Material Components in Android Jetpack Compose. Create jetpack compose animation painless. What you can create from M

Emir Demirli 12 Jan 2, 2023
PassCode is the Android app made by using Jetpack Compose. Created for the test task submission.

PassCode PassCode is the Android app made by using the Jetpack Compose. Created for the test task submission. Showcase Dark Theme Light Theme ACs The

Basil Miller 1 May 25, 2022
Implementation of Ripple effect from Material Design for Android API 9+

RippleEffect ExpandableLayout provides an easy way to create a view called header with an expandable view. Both view are external layout to allow a ma

Robin Chutaux 4.9k Dec 30, 2022
Material image loading implementation

MaterialImageLoading Material image loading implementation Sample And have a look on a sample Youtube Video : Youtube Link [] (https://www.youtube.com

Florent CHAMPIGNY 392 Nov 17, 2022
A sample implementation Compose BottomSheet with animation different states

Compose Animated BottomSheet A sample implementation Compose BottomSheet with animation different states Medium post: https://proandroiddev.com/how-to

Yahor 40 Jan 6, 2023
Android GraphView is used to display data in graph structures.

GraphView Android GraphView is used to display data in graph structures. Overview The library is designed to support different graph layouts and curre

null 991 Dec 30, 2022
Smoothen rx value streams for e.g. sensor data using kalman filter.

KalmanRx Introduction Removes the noise from float streams using Kalman Filter. Useful to smoothen sensory data e.g.: gps location, or Accelerometer.

Jan Rabe 98 Nov 23, 2022
Android StackBlur is a library that can perform a blurry effect on a Bitmap based on a gradient or radius, and return the result. The library is based on the code of Mario Klingemann.

Android StackBlur Android StackBlur is a library that can perform a blurry effect on a Bitmap based on a gradient or radius, and return the result. Th

Enrique López Mañas 3.6k Dec 29, 2022
Postman is a reactive One-tap SMS verification library. This library allows the usage of RxJava with The SMS User Consent API

What is Postman? Postman is a reactive One-tap SMS verification library. This library allows the usage of RxJava with The SMS User Consent API Usage P

Cafer Mert Ceyhan 129 Dec 24, 2022
Chandrasekar Kuppusamy 799 Nov 14, 2022
FilePicker is a small and fast file selector library that is constantly evolving with the goal of rapid integration, high customization, and configurability~

Android File Picker ??️ 中文简体 Well, it doesn't have a name like Rocky, Cosmos or Fish. Android File Picker, like its name, is a local file selector fra

null 786 Jan 6, 2023
Android library to animate Floating Action Button to Bottom Sheet Dialog and vice-versa

FabulousFilter Show some ❤️ and star the repo to support the project This library is the implementation of filter-concept posted on MaterialUp.com. It

Krupen Ghetiya 2.6k Jan 3, 2023
FPSAnimator is very easy animation library for Android TextureView and SurfaceView.

FPSAnimator A simple but powerful Tween / SpriteSheet / ParabolicMotion / animation library for Android TextureView and SurfaceView. Features The cont

Masayuki Suda 756 Dec 30, 2022
Continuous speech recognition library for Android with options to use GoogleVoiceIme dialog and offline mode.

Android Speech Recognition This library lets you perform continuous voice recognition in your android app with options to either use Google Voice Ime

Maxwell Obi 75 May 21, 2022
An Android library to build form and form validations easily.

FormBuilder An Android library to build form and form validations easily. Example COMING SOON Requirements Android 4.3+ Installation Add edit your bui

Dario Pellegrini 48 Jun 30, 2022