Embeddable custom voice assistant for Android applications

Overview

Aimybox voice assistant

Open source voice assistant built on top of Aimybox SDK

Twitter Follow Travis CI Build Bintray artifact

iOS version is available here

Key Features

  • Provides ready to use UI components for fast building of your voice assistant app
  • Modular and independent from speech-to-text, text-to-speech and NLU vendors
  • Provides ready to use speech-to-text and text-to-speech implementations like Android platform speechkit, Google Cloud speechkit, Houndify or Snowboy wake word trigger
  • Works with any NLU providers like Aimylogic, Rasa or Dialogflow
  • Fully customizable and extendable, you can connect any other speech-to-text, text-to-speech and NLU services
  • Open source under Apache 2.0, written in pure Kotlin
  • Embeddable into any application or device running Android
  • Voice skills logic and complexity is not limited by any restrictions
  • Can interact with any local device services and local networks

How to start using

Just clone this repository and try to build and run the app module πŸ˜‰

If you want some details - there is how to do the same with your hands.

  1. Create a new Android project with next dependencies in the build.gradle file
    android {
        compileOptions {
            sourceCompatibility = JavaVersion.VERSION_1_8
            targetCompatibility = JavaVersion.VERSION_1_8
        }
    }

    repositories {
        jcenter()
    }
    
    dependencies {
        implementation("com.justai.aimybox:core:0.15.0")
        implementation("com.justai.aimybox:components:0.1.10")
    }
  1. Add one or more dependencies of third party speech-to-text and text-to-speech libraries. For example
implementation("com.justai.aimybox:google-platform-speechkit:0.15.0")
  1. Create a new project in Aimybox console, enable some voice skills and copy your project's API key.

  2. Instantiate Aimybox in your Application class like that

class AimyboxApplication : Application(), AimyboxProvider {

    companion object {
        private const val AIMYBOX_API_KEY = "your Aimybox project key"
    }

    override val aimybox by lazy { createAimybox(this) }

    private fun createAimybox(context: Context): Aimybox {
        val unitId = UUID.randomUUID().toString()

        val textToSpeech = GooglePlatformTextToSpeech(context)
        val speechToText = GooglePlatformSpeechToText(context)

        val dialogApi = AimyboxDialogApi(AIMYBOX_API_KEY, unitId)

        return Aimybox(Config.create(speechToText, textToSpeech, dialogApi))
    }
}
  1. Add FrameLayout to your application's layout like this
<FrameLayout
    android:id="@+id/assistant_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  1. Add AimyboxAssistantFragment in your activity that uses this layout (like here)
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.layout_activity_main)

    supportFragmentManager.beginTransaction().apply {
        replace(R.id.assistant_container, AimyboxAssistantFragment())
        commit()
    }
}
  1. Make sure your app's theme contains Aimybox's styles:
<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <!-- Customize Assistant components here -->
        <item name="aimybox_assistantButtonTheme">@style/CustomAssistantButtonTheme</item>
        <item name="aimybox_recognitionTheme">@style/CustomRecognitionWidgetTheme</item>
        <item name="aimybox_responseTheme">@style/CustomResponseWidgetTheme</item>
        <item name="aimybox_imageReplyTheme">@style/CustomImageReplyWidgetTheme</item>
        <item name="aimybox_buttonReplyTheme">@style/CustomButtonReplyWidgetTheme</item>
    </style>

    <style name="CustomAssistantButtonTheme" parent="DefaultAssistantTheme.AssistantButton">
    </style>

    <style name="CustomRecognitionWidgetTheme" parent="DefaultAssistantTheme.Widget.Recognition">
    </style>

    <style name="CustomResponseWidgetTheme" parent="DefaultAssistantTheme.Widget.Response">
    </style>

    <style name="CustomButtonReplyWidgetTheme" parent="DefaultAssistantTheme.Widget.ButtonReply">
    </style>

    <style name="CustomImageReplyWidgetTheme" parent="DefaultAssistantTheme.Widget.ImageReply">
    </style>

</resources>

Now you can run your application and tap a small microphone button in bottom right corner of the screen. Try to say some phrase that corresponds to any of enabled voice skills in your Aimybox project.

Your assistant will handle all job regarding speech recognition, processing, displaying and synthesising of the response.

More details

Please refer to the demo app to see how to use Aimybox library in your own project.

Documentation

There is a full Aimybox documentation available here. It's better to start with our Quick Start to make first steps with Aimybox.

Comments
  • InflateException

    InflateException

    When I click on mic button my app is crashing with error: InflateException

    : Binary XML file line #2: Binary XML file line #2: You must supply a layout_width attribute. Caused by: java.lang.UnsupportedOperationException: Bin ary XML file line #2: You must supply a layout_width attribute.

    image

    opened by krauzee 10
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ io.grpc grpc-protobuf-lite 1.35.0

    ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ io.grpc grpc-protobuf-lite 1.35.0

    Π’ своСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈ firebase, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ com.google.firebase:firebase-perf-ktx тянСт com.google.protobuf:protobuf-javalite:3.14.0. Π­Ρ‚Π° вСрсия ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΠ΅Ρ‚ с com.google.protobuf:protobuf-lite:3.0.1, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ подтягиваСт Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° com.justai.aimybox:yandex-speechkit. Duplicate class com.google.protobuf.AbstractMessageLite found in modules jetified-protobuf-javalite-3.14.0 (com.google.protobuf:protobuf-javalite:3.14.0) and jetified-protobuf-lite-3.0.1 (com.google.protobuf:protobuf-lite:3.0.1)

    ΠžΡ‚ использования Π½ΠΎΠ²ΠΎΠΉ вСрсии firebase ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ зависимостСй Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² com.justai.aimybox:yandex-speechkit ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ io.grpc » grpc-protobuf-lite Π΄ΠΎ вСрсии 1.35.0

    ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ этой вСрсии происходит ΠΊΡ€Π°Ρˆ:

    2021-02-20 10:25:05.750 10628-10839/ru.alfabank.mobile.android.feature W/System.err: java.lang.ExceptionInInitializerError
    2021-02-20 10:25:05.750 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at yandex.cloud.ai.stt.v2.SttServiceOuterClass$StreamingRecognitionRequest.getDefaultInstance(SttServiceOuterClass.java:467)
    2021-02-20 10:25:05.751 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at yandex.cloud.ai.stt.v2.SttServiceGrpc.getStreamingRecognizeMethod(SttServiceGrpc.java:50)
    2021-02-20 10:25:05.751 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at yandex.cloud.ai.stt.v2.SttServiceGrpc$SttServiceStub.streamingRecognize(SttServiceGrpc.java:130)
    2021-02-20 10:25:05.751 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at com.justai.aimybox.speechkit.yandex.cloud.YandexRecognitionApi.openStream$yandex_speechkit_release(YandexRecognitionApi.kt:53)
    2021-02-20 10:25:05.752 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at com.justai.aimybox.speechkit.yandex.cloud.YandexRecognitionApi$openStream$1.invokeSuspend(Unknown Source:12)
    2021-02-20 10:25:05.752 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    2021-02-20 10:25:05.752 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56)
    2021-02-20 10:25:05.752 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    2021-02-20 10:25:05.753 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:738)
    2021-02-20 10:25:05.753 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    2021-02-20 10:25:05.754 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
    2021-02-20 10:25:05.755 10628-10839/ru.alfabank.mobile.android.feature W/System.err: Caused by: java.lang.RuntimeException: Unable to get message info for yandex.cloud.ai.stt.v2.SttServiceOuterClass$StreamingRecognitionRequest
    2021-02-20 10:25:05.755 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at com.google.protobuf.GeneratedMessageInfoFactory.messageInfoFor(GeneratedMessageInfoFactory.java:62)
    2021-02-20 10:25:05.755 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at com.google.protobuf.ManifestSchemaFactory$CompositeMessageInfoFactory.messageInfoFor(ManifestSchemaFactory.java:143)
    2021-02-20 10:25:05.755 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at com.google.protobuf.ManifestSchemaFactory.createSchema(ManifestSchemaFactory.java:55)
    2021-02-20 10:25:05.756 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at com.google.protobuf.Protobuf.schemaFor(Protobuf.java:90)
    2021-02-20 10:25:05.756 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at com.google.protobuf.Protobuf.schemaFor(Protobuf.java:104)
    2021-02-20 10:25:05.756 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at com.google.protobuf.GeneratedMessageLite.makeImmutable(GeneratedMessageLite.java:175)
    2021-02-20 10:25:05.756 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at yandex.cloud.ai.stt.v2.SttServiceOuterClass$StreamingRecognitionRequest.<clinit>(SttServiceOuterClass.java:463)
    2021-02-20 10:25:05.756 10628-10839/ru.alfabank.mobile.android.feature W/System.err: 	... 11 more
    2021-02-20 10:25:05.757 10628-10839/ru.alfabank.mobile.android.feature W/System.err: Caused by: java.lang.UnsupportedOperationException
    2021-02-20 10:25:05.757 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at yandex.cloud.ai.stt.v2.SttServiceOuterClass$StreamingRecognitionRequest.dynamicMethod(SttServiceOuterClass.java:455)
    2021-02-20 10:25:05.758 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at com.google.protobuf.GeneratedMessageLite.dynamicMethod(GeneratedMessageLite.java:256)
    2021-02-20 10:25:05.758 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at com.google.protobuf.GeneratedMessageLite.buildMessageInfo(GeneratedMessageLite.java:284)
    2021-02-20 10:25:05.758 10628-10839/ru.alfabank.mobile.android.feature W/System.err:     at com.google.protobuf.GeneratedMessageInfoFactory.messageInfoFor(GeneratedMessageInfoFactory.java:60)
    2021-02-20 10:25:05.758 10628-10839/ru.alfabank.mobile.android.feature W/System.err: 	... 17 more```
    
    
    
    opened by svetlana-e-petrova 3
  • No reply after sending my first speech !! (D/OkHttp: <-- HTTP FAILED: java.net.SocketTimeoutException...)

    No reply after sending my first speech !! (D/OkHttp: <-- HTTP FAILED: java.net.SocketTimeoutException...)

    Hi,

    When i run the app demo in my device, i send my first speech ("what time is it"), but no reply !! it gives me the error below (in andoird studio) :

    com.justai.aimybox.core.ApiRequestTimeoutException: Request timeout: AimyboxRequest(query=what time is it, apiKey=Ldf0j7WZi3KwNah2aNeXVIACz0lb9qMH, unitId=8d456677-94d9-4a9a-afd4-fecb599b4545, data={}). Server didn't respond within 10000 ms. at com.justai.aimybox.api.DialogApi$send$3.invokeSuspend(DialogApi.kt:69) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.ResumeModeKt.resumeUninterceptedWithExceptionMode(ResumeMode.kt:56) at kotlinx.coroutines.TimeoutCoroutine.afterCompletionInternal(Timeout.kt:98) at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:310) at kotlinx.coroutines.JobSupport.tryFinalizeFinishingState(JobSupport.kt:236) at kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath(JobSupport.kt:849) at kotlinx.coroutines.JobSupport.tryMakeCompleting(JobSupport.kt:811) at kotlinx.coroutines.JobSupport.makeCompletingOnce$kotlinx_coroutines_core(JobSupport.kt:787) at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:111) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:334) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594) at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:740) D/OkHttp: <-- HTTP FAILED: java.net.SocketTimeoutException: failed to connect to api.aimybox.com/63.34.12.130 (port 443) from /10.0.8.1 (port 40158) after 10000ms

    opened by mellahysf 3
  • The mic button dosen't work !!

    The mic button dosen't work !!

    Hi, I want to run the demo, but both in a device and emulator (in android studio), when I click on the mic button, it doesn't work !! When I click on the mic button, it cancels quickly and I can't send the speech.

    Thank you for your help !

    Below the trace given to me in the android studio :

    I/Aimybox(Aimybox-Components): [main] STANDBY I/Aimybox(STT): [DefaultDispatcher-worker-4] Begin recognition I/Aimybox(Aimybox-Components): [main] LISTENING E/Aimybox(STT): [DefaultDispatcher-worker-3] Failed to get recognition result com.justai.aimybox.speechkit.google.platform.GooglePlatformSpeechToTextException: Exception [3]: Audio recording error. at com.justai.aimybox.speechkit.google.platform.GooglePlatformSpeechToText$createRecognitionListener$1.onError(GooglePlatformSpeechToText.kt:77) at android.speech.SpeechRecognizer$InternalListener$1.handleMessage(SpeechRecognizer.java:450) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) E/Aimybox(Aimybox-Components): [main] com.justai.aimybox.speechkit.google.platform.GooglePlatformSpeechToTextException: Exception [3]: Audio recording error. at com.justai.aimybox.speechkit.google.platform.GooglePlatformSpeechToText$createRecognitionListener$1.onError(GooglePlatformSpeechToText.kt:77) at android.speech.SpeechRecognizer$InternalListener$1.handleMessage(SpeechRecognizer.java:450) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) I/Aimybox(Aimybox-Components): [main] STANDBY

    opened by mellahysf 2
  • Ability to send async messages to fragment

    Ability to send async messages to fragment

    I'm currently working on modifying this demo app to make it a Tasker plugin. I can send the messages the app hears now to Tasker, but I don't see any way to get the message back to the app and update the message in the UI fragment.

    I'm not very familiar with kotlin, so any help is appreciated!

    opened by sriramsv 1
  • fix #46 Speech Recognition not working on Android Studio Emulator

    fix #46 Speech Recognition not working on Android Studio Emulator

    fix #46 Speech Recognition not working on Android Studio Emulator

    needs RECORD_AUDIO

    https://stackoverflow.com/questions/35248075/android-speech-recognition-insufficient-permission-error-code-9

    opened by achernin 1
  • Questions on input type/method

    Questions on input type/method

    I'm new to android and a newbie qn. Along with voice, how can I add a text so users can type too? In your example/demo code what should I change? I want to have both voice and text... I'm using rasa nlu stack....

    opened by kvbulusu 1
  • fix #46 Speech Recognition not working on Android Studio Emulator

    fix #46 Speech Recognition not working on Android Studio Emulator

    needs RECORD_AUDIO permission for google.SpeechRecognizer working

    this https://stackoverflow.com/questions/35248075/android-speech-recognition-insufficient-permission-error-code-9

    opened by achernin 0
  • Show AimyboxFragment on recognition starting

    Show AimyboxFragment on recognition starting

    Aimybox startRecognition could be invoked from everywhere of the application. Not only by clicking on the mic button, but also through the voice trigger event or any other trigger (camera, sensors, etc). Thus AimyboxFragment should appear once a recognition event is fired.

    opened by morfeusys 0
  • Can't build demo app to android phone

    Can't build demo app to android phone

    Followed building demo app to phone on Samsung Galaxy S10E and was unable to get it to run. The following is the error message:

    The application could not be installed: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

    List of apks: [0] '/Users/daniyalmohammed/AndroidStudioProjects/aimybox-android-assistant/app/build/intermediates/apk/debug/app-debug.apk' Installation failed due to: 'Failed to commit install session 472356883 with command package install-commit 472356883. Error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: Failed parse during installPackageLI: /data/app/vmdl472356883.tmp/base.apk (at Binary XML file line #63): leakcanary.internal.activity.LeakLauncherActivity: Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present' Retry Failed to launch an application on all devices

    opened by daniyalmohammed 1
  • bind to recognition service failed

    bind to recognition service failed

    Hello, I'm running the code in master branch but it failed. Here is the error in logs: image Is it because of the region that I can't use Google's services?(I'm in China)

    opened by Di-Zayn 1
  • How to extend Aimybox Assistant to different Activities?

    How to extend Aimybox Assistant to different Activities?

    Hi,

    I'm working in a new project where I need a custom voice assistant in my android app. I tried this example Project and everything works perfectly, however, if I go from MainActivity to another activity and I try to load the assistant on this new activity, tts, stt and wake word doesn't work, I press the floating button and the assitant does its animation, but thats all, my question is, How can I implement something like the example project but extending the assistant in all the activities?

    Thank you very much in advance.

    opened by Tedcas 5
  • UI Customization

    UI Customization

    I wanna custom ui. I wanna see messages from user on right and I ovveride "gravity" attribute, but its not works:( Any help is appreciated.

    image

    photo_2020-12-01_13-34-25 1

    opened by krauzee 8
Owner
Just AI
Natural language processing tools and SDKs
Just AI
Sample project that shows an approach for designing a multi-module architecture for Jetpack Compose Android applications.

Compose Multi-Module Architecture Sample Sample project that shows an approach for designing a multi-module architecture for Jetpack Compose Android a

Pavlo Stavytskyi 77 Jan 3, 2023
String obfuscator for Android applications

Paranoid String obfuscator for Android applications. Usage In order to make Para

Joom 7 Sep 10, 2022
Kotlin Multiplatform is an SDK for cross-platform mobile development, which enables teams to use the same business logic in both Android and iOS client applications.

Kotlin Multiplatform is an SDK for cross-platform mobile development, which enables teams to use the same business logic in both Android and iOS client applications.

Chris Russell 1 Feb 11, 2022
πŸš€Optimizer for mobile applications

Overview | ζ¦‚θ§ˆ Booster is an easy-to-use, lightweight, powerful and extensible quality optimization toolkit designed specially for mobile applications.

DiDi 4.3k Dec 29, 2022
A declarative, Kotlin-idiomatic API for writing dynamic command line applications.

A declarative, Kotlin-idiomatic API for writing dynamic command line applications.

Varabyte 349 Jan 9, 2023
A Template for a Github Actions Pipeline for building and publishing Gradle-JVM Applications

github-actions-cd-template-jvm A Template for a Github Actions Pipeline for building and publishing Gradle-JVM Applications It build a executable shad

Raphael Panic 0 Dec 5, 2021
Framework for quickly creating connected applications in Kotlin with minimal effort

Ktor is an asynchronous framework for creating microservices, web applications and more. Written in Kotlin from the ground up. import io.ktor.server.n

ktor.io 10.7k Jan 9, 2023
A pair of applications provide a direct means of integrating with one another via application programming interfaces (APIs)

What is a native integration? It's when a pair of applications provide a direct means of integrating with one another via application programming interfaces (APIs). Once integrated, data can flow between the apps and become more readily available to your employees.

Behruz Hurramov 2 Jan 17, 2022
Link-converter - A web service that converts links between web url and deeplink for mobile and web applications

Deep Link Converter Linkleri, mobil ve web uygulamaları için web url ile deeplin

Muhammed Eren DURSUN 2 Apr 9, 2022
Com.hhvvg.anytext - An application provides features to modify any TextView in any other applications

AnyText What's this This application provides features to modify any TextView in

null 6 Dec 2, 2022
A Kotlin library providing a simple, high-performance way to use off-heap native memory in JVM applications.

native_memory_allocator A library which uses sun.misc.Unsafe to allocate off-heap native memory. Motivation The goal of this project is to provide a s

Target 5 Dec 8, 2022
Custom Sneaker view for Android.

SneakerView How to install ? You can add the library to your project using jitpack.io. Add the code below to your project's settings.gradle file. all

Osman GΓΌl 3 Aug 26, 2022
Carousel Recyclerview let's you create carousel layout with the power of recyclerview by creating custom layout manager.

Carousel Recyclerview Create carousel effect in recyclerview with the CarouselRecyclerview in a simple way. Including in your project Gradle Add below

Jack and phantom 514 Jan 8, 2023
Custom ViewPager that allows to block left or right swipe gestures.

SwipeDirectionViewPager Introduction Custom ViewPager that allows to block swiping right or left where the ViewPager child fragments set the scroll di

Jan Rabe 10 Nov 9, 2021
Some fancy custom views for kotlin

CoolCustomViews 1. Neruromorphic ProgressBar Resources Documentaion and Other So

Siddharth sharma 16 Dec 16, 2022
This is a Kotlin multiplatform template project used to generate and deploy a natively compiled AWS lambda function using the custom runtime.

Overview This is a Kotlin multiplatform template project used to generate and deploy a natively compiled AWS Lambda function using a custom runtime. U

Greg Steckman 5 Jun 25, 2022
This sample Kotlin app shows a list of custom shoes added by the users

Shoe-store This sample Kotlin app shows a list of custom shoes added by the users. The app displays the content with RecyclerView and uses a tradition

Ana Stanescu 2 Aug 27, 2022
A custom Stepper for jetpack compose πŸš€

Compose-Stepper Compose-Stepper library provides a custom stepper in the modern android toolkit Jetpack compose which can be easily added in to your c

maryam memarzadeh 13 Dec 22, 2022
Custom partitioner for Spring Batch

Custom partitioner for Spring Batch Who is it for? For cases in which you have multiple files to process as part of the batch, Spring Batch offers the

Lorenzo Milicia 2 Nov 12, 2022