Reactive Programming for Android

Overview

Agera

Reactive Programming for Android

Build Status Coverage Download

Agera is a set of classes and interfaces to help write functional, asynchronous, and reactive applications for Android.

Requires Android SDK version 9 or higher.

Usage

To add a dependency using Gradle:

  compile 'com.google.android.agera:agera:1.4.0'

Learn about Agera

Experimental Sample Extensions

A few experimental sample extension libraries for Agera are also provided. These are:

  • Content - For android.content interaction, such as BroadcastReceiver and SharedPreferences
  • Database - For SQLiteDatabase interaction
  • Net - For HTTPUrlConnection interaction
  • RVAdapter - For RecyclerView interaction
  • RVDatabinding - For RecyclerView data binding interaction

To add dependencies to these using Gradle:

  compile 'com.google.android.agera:content:1.4.0'
  compile 'com.google.android.agera:database:1.4.0'
  compile 'com.google.android.agera:net:1.4.0'
  compile 'com.google.android.agera:rvadapter:1.4.0'
  compile 'com.google.android.agera:rvdatabinding:1.4.0'

FAQ: What's the relation with RxJava?

See this issue.

Links

(Unofficial) wiki translations

(Unofficial) Extensions

Comments
  • Security Policy violation Binary Artifacts

    Security Policy violation Binary Artifacts

    This issue was automatically created by Allstar.

    Security Policy Violation Project is out of compliance with Binary Artifacts policy: binaries present in source code

    Rule Description Binary Artifacts are an increased security risk in your repository. Binary artifacts cannot be reviewed, allowing the introduction of possibly obsolete or maliciously subverted executables. For more information see the Security Scorecards Documentation for Binary Artifacts.

    Remediation Steps To remediate, remove the generated executable artifacts from the repository.

    Artifacts Found

    • gradle/wrapper/gradle-wrapper.jar
    • samples/BasicSample/gradle/wrapper/gradle-wrapper.jar
    • samples/BasicSampleWithoutCallbacks/gradle/wrapper/gradle-wrapper.jar

    Additional Information This policy is drawn from Security Scorecards, which is a tool that scores a project's adherence to security best practices. You may wish to run a Scorecards scan directly on this repository for more details.


    Allstar has been installed on all Google managed GitHub orgs. Policies are gradually being rolled out and enforced by the GOSST and OSPO teams. Learn more at http://go/allstar

    This issue will auto resolve when the policy is in compliance.

    Issue created by Allstar. See https://github.com/ossf/allstar/ for more information. For questions specific to the repository, please contact the owner or maintainer.

    allstar 
    opened by allstar-app[bot] 41
  • Question: what's the relation to RxJava?

    Question: what's the relation to RxJava?

    This looks like a very interesting proposition.

    My question - it's quite an elephant in the room, I should think - is what's the relation between this library and RxJava?

    Isn't it RxJava reinvented? Is it supposed to be more light-weight? Complementary? Or just inspired?

    Nowhere do your docs seem to even acknowledge RxJava's existence (I'll stand corrected if I overlooked something), even though you're clearly adopting the same paradigm.

    I'd be very grateful if you were willing to shed some light on this (disclaimer: I'm not affiliated with RxJava nor its creators; just another Android dev on the lookout for the new shiny thing).

    opened by Konrad-Morawski 28
  • [Query]: About switch work-thread

    [Query]: About switch work-thread

    Hi guys, I'm coming again.,I'm a young developer,please forgive me for always disturbing you. In Agera,I know switch work-thread used Executor to submit a task to execute to on the target thread(actually is Executor). but I have a confused that how to switch to main-Thread. Of course,if I can provider a main-thread's Executor and then the rest of flows will runing on main-thread. but I don't know how to get/create main-thread's Executor. Could you give some suggestions?

    Thanks Agera's fens

    opened by likai79511 10
  • Fine grained updates for RecyclerView Adapter

    Fine grained updates for RecyclerView Adapter

    Hi!

    Agera RecyclerView Adapter always calls notifyDataSetChanged(), regardless of what changed, which is bad according to RecyclerView guys (you can ask @yigit or his teammates), and I think so too, as it makes the adapter invalidate everything even if just one item was added.

    Fine grained data changes notifications such as notifyItemChanged(int position) or notifyItemRemoved(int position) are better for user experience (can have comprehensible animations following the changed that occurred), and performance.

    I'm not an Agera expert yet, but I would like to get advice, or better, a sample on how such an Adapter could work with Agera and if it could be integrated in the rvadapter official Agera extension.

    Thanks!

    rvadapter 
    opened by LouisCAD 9
  • Why HTTPUrlConnection and not okhttp or even retrofit ?

    Why HTTPUrlConnection and not okhttp or even retrofit ?

    It looks like there are more cutting edge alternatives than HTTPUrlConnection for network.

    It seems to me that it would be more valuable at some point for Google to properly package volley + retrofit support and make it the official network layer of Android than adding one more library not linked with the rest and the best practices on the platform..

    Otherwise, that's an interesting project.

    opened by stephanenicolas 8
  • Eliminated a few layers of observable events

    Eliminated a few layers of observable events

    • Use composite directly from compiled repositories if frequency is 0
    • Flatten composite observable and add (wrapped) updatables to observables directly
    opened by ghost 7
  • demo crash on huawei honor 6.0

    demo crash on huawei honor 6.0

    [ 04-25 10:02:40.358 3009: 3009 E/ ] process stopped due to unexpected signal 13 04-25 10:02:40.358 18767-18767/com.google.android.agera.testapp D/HwCust: Create obj success use class android.widget.HwCustTextViewImpl 04-25 10:02:40.372 18767-18767/com.google.android.agera.testapp I/HwCust: Constructor found for class android.widget.HwCustTextViewImpl 04-25 10:02:40.372 18767-18767/com.google.android.agera.testapp D/HwCust: Create obj success use class android.widget.HwCustTextViewImpl 04-25 10:02:40.400 18767-18793/com.google.android.agera.testapp I/System: core_booster, getBoosterConfig = true 04-25 10:02:40.435 18767-18767/com.google.android.agera.testapp D/StrictMode: StrictMode policy violation; ~duration=7 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=327711 violation=2 at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1275) at libcore.io.BlockGuardOs.access(BlockGuardOs.java:67) at java.io.File.doAccess(File.java:284) at java.io.File.exists(File.java:364) at huawei.android.hwutil.ZipFileCache.openZipFile(ZipFileCache.java:145) at huawei.android.hwutil.ZipFileCache.(ZipFileCache.java:73) at huawei.android.hwutil.ZipFileCache.getAndCheckCachedZipFile(ZipFileCache.java:81) at android.content.res.HwResources.getThemeDrawable(HwResources.java:710) at android.content.res.HwResources.loadDrawable(HwResources.java:652) at android.content.res.TypedArray.getDrawable(TypedArray.java:912) at android.view.View.(View.java:3999) at android.widget.ImageView.(ImageView.java:145) at android.widget.ImageButton.(ImageButton.java:84) at android.widget.ImageButton.(ImageButton.java:80) at android.widget.ActionMenuPresenter$OverflowMenuButton.(ActionMenuPresenter.java:862) at android.widget.ActionMenuPresenter.initForMenu(ActionMenuPresenter.java:170) at com.android.internal.view.menu.MenuBuilder.addMenuPresenter(MenuBuilder.java:229) at android.widget.Toolbar.setMenu(Toolbar.java:404) at com.android.internal.widget.ToolbarWidgetWrapper.setMenu(ToolbarWidgetWrapper.java:391) at com.android.internal.widget.ActionBarOverlayLayout.setMenu(ActionBarOverlayLayout.java:795) at com.android.internal.policy.PhoneWindow.preparePanel(PhoneWindow.java:586) at com.android.internal.policy.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:970) at com.android.internal.policy.PhoneWindow$1.run(PhoneWindow.java:285) at android.os.Handler.handleCallback(Handler.java:743) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:5546) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684) 04-25 10:02:40.436 18767-18767/com.google.android.agera.testapp D/AndroidRuntime: Shutting down VM 04-25 10:02:40.436 18767-18767/com.google.android.agera.testapp E/AndroidRuntime: FATAL EXCEPTION: main Process: com.google.android.agera.testapp, PID: 18767 android.os.StrictMode$StrictModeViolation: policy=327711 violation=2 at android.os.StrictMode.executeDeathPenalty(StrictMode.java:1522) at android.os.StrictMode.access$1300(StrictMode.java:122) at android.os.StrictMode$AndroidBlockGuardPolicy.handleViolation(StrictMode.java:1515) at android.os.StrictMode$AndroidBlockGuardPolicy$1.run(StrictMode.java:1397) at android.os.Handler.handleCallback(Handler.java:743) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:5546) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684) 04-25 10:02:40.749 18767-18767/com.google.android.agera.testapp I/Process: Sending signal. PID: 18767 SIG: 9

    opened by darin-lao 7
  • Could not find dependency

    Could not find dependency "com.google.android.agera:agera:1.4.0"

    Summary:

    I get the following error message while building the project - Could not find dependency "com.google.android.agera:agera:1.4.0. The SDK Manager already has all the updates installed and there are no pending updates. Also, Android Studio is currently running on the latest stable build.

    Steps to reproduce the issue:

    1. Open Android Studio
    2. Add the follwoing dependency to your project. implementation 'com.google.android.agera:agera:1.4.0'
    3. Build the project

    Expected Behavior:

    The project should build without any errors.

    Observed Behavior:

    The project build fails with the following error message - Could not find dependency "com.google.android.agera:agera:1.4.0"

    Android Studio Version:

    Android Studio 3.2.1 Build #AI-181.5540.7.32.5056338, built on October 9, 2018 JRE: 1.8.0_152-release-1136-b06 amd64 JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o Windows 10 10.0

    Screenshot:

    agera-dependency-issue

    opened by AbhilashG97 6
  • Can't use compiled repositories in kotlin

    Can't use compiled repositories in kotlin

    EDIT: Here's the kotlin issue in Youtrack Hi, I tried using complied repositories in kotlin, first manually, by writing the code myself in a new kotlin class, but with no success. I then tried to convert the CalculatorActivityFinal.java file to to kotlin with the IDE option (cmd+option+shift+K) (requires the IntelliJ/Android Studio Kotlin plugin), and the generated code couldn't compile either, displaying the same error. This seems to be related to how kotlin handles generics type safety.

    Here's what I see after converting code to kotlin (all the errors are in onStart()): screen shot 2016-11-09 at 08 26 23 Note that the code above was generated after converting all lambdas to anonymous classes. The main problematic line is the repository compilation:

    mResultRepository = Repositories.repositoryWithInitialValue(Result.absent<String>()).observe(mValue1Repo, mValue2Repo, mOperationSelector).onUpdatesPerLoop().goTo(CalculatorExecutor.EXECUTOR).attemptTransform(Function<com.google.android.agera.Result<kotlin.String>, com.google.android.agera.Result<com.google.android.agera.Result<kotlin.String>>> { input1 -> CalculatorOperations.keepCpuBusy(input1) }).orEnd(Function<kotlin.Throwable, com.google.android.agera.Result<kotlin.String>> { failure -> Result.failure<String>(failure) }).getFrom(mValue1Repo).mergeIn(mValue2Repo, Merger<kotlin.Int, kotlin.Int, android.support.v4.util.Pair<kotlin.Int, kotlin.Int>> { a, b -> Pair.create(a, b) }).attemptMergeIn(mOperationSelector, Merger<android.support.v4.util.Pair<kotlin.Int, kotlin.Int>, com.google.android.agera.Result<kotlin.Int>, com.google.android.agera.Result<kotlin.Int>> { operands, operation -> CalculatorOperations.attemptOperation(operands, operation) }).orEnd(Function<kotlin.Throwable, com.google.android.agera.Result<kotlin.String>> { failure -> Result.failure<String>(failure) }).thenTransform(Function<kotlin.Int, com.google.android.agera.Result<kotlin.String>> { input -> Result.present(input.toString()) }).onConcurrentUpdate(RepositoryConfig.SEND_INTERRUPT).compile()
    

    Before trying with anonymous classes, I tried converting the codes with lambdas, which did not work too as you can see in the following screenshot: screen shot 2016-11-09 at 10 27 54

    I think it's absolutely impossible to compile an agera repository in kotlin with agera 1.1.0 and kotlin 1.0.5, so I'm asking how agera, or kotlin may be edited to support such cases

    opened by LouisCAD 6
  • Added sort and thenSort directives to FunctionCompiler

    Added sort and thenSort directives to FunctionCompiler

    Although can use morph (new SortList<T>()) to achieve the same function, but I think sort is a very common function, should not let each person alone to achieve a SortList Function. So I added the sort and thenSort directives to make it more convenient.

    opened by drakeet 6
  • Fixing squid: S1213 The members of an interface declaration or class should appear in a pre-defined order

    Fixing squid: S1213 The members of an interface declaration or class should appear in a pre-defined order

    This pull request is focused on resolving occurrences of Sonar rule squid:S1213 - “The members of an interface declaration or class should appear in a pre-defined order”. This PR will remove 4h TD from the project. You can find more information about the issue here: https://dev.eclipse.org/sonar/rules/show/squid:S1213 Please let me know if you have any questions. Fevzi Ozgul

    opened by devFozgul 6
  • Deploy the last artifact outside of jcenter

    Deploy the last artifact outside of jcenter

    Hi,

    I just started to integrate content square SDK which is using agera : https://mvnrepository.com/artifact/com.google.android.agera/agera/usages

    So I had to add jcenter as a repository again.

    Would you be able to publish the last artifact on another repository?

    opened by sagix 1
  • Sample doesn't build, is this project dead?

    Sample doesn't build, is this project dead?

    Just picked up this library and started trying out the codelabs at https://codelabs.developers.google.com/codelabs/android-agera/#13

    The project does not build in (nearly) current Android Studio 3.2.1 with gradle warnings, such as:

    WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
    It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html
    

    and build failures such as

    Execution failed for task ':app:processDebugResources'.
    > Android resource linking failed
      Output:  W/ResourceType(11468): For resource 0x0101053d, entry index(1341) is beyond type entryCount(1320)
      W/ResourceType(11468): For resource 0x0101053e, entry index(1342) is beyond type entryCount(1320)
      W/ResourceType(11468): For resource 0x0101053b, entry index(1339) is beyond type entryCount(1320)
      W/ResourceType(11468): For resource 0x0101053c, entry index(1340) is beyond type entryCount(1320)
      D:\src\samples\android-agera\app\src\main\res\layout\step2.xml:18: error: attribute orientation (aka com.example.android.codelabs.agera:orientation) not found.
    

    Just want to make sure there is some life here before devoting my time to reviving that is only mostly dead.

    opened by kenstir 7
  • [Question] Usages of non main thread to register an Updatable to a BaseObservable?

    [Question] Usages of non main thread to register an Updatable to a BaseObservable?

    Hi, I know BaseObservable checks for the calling thread to be a Looper thread, but I'm wondering if there are real use cases where this thread would not be the main one since using a Looper Thread properly outside an IntentService is not trivial, and using IntentServices with Agera doesn't seem obvious to me.

    If anyone using BaseObservable outside of the main thread, please reply here, and explain why.

    Thanks!

    opened by LouisCAD 5
  • Add

    Add "thenCheck()" to CompiledRepository.

    "thenCheck()" can be used after another 'then' directive, which normally generates the new value of the repository. Using a "thenCheck()" directive, the would-have-been new value becomes a mere "candidate new value", and can be vetoed by the check -- the clause that follows "thenCheck()" can skip the update, end with another value, or even have the flow continue onwards.

    The test cases use two demo-style repositories that perform a typical task of requesting a keyed item from the in-memory cache, then disk cache, then network, showcasing the real-life use of this new directive.

    core 
    opened by maxtroy 1
Releases(v1.4.0)
  • v1.4.0(Feb 27, 2018)

    Agera core

    • Added resultAsList/itemAsList/resultAsList converters to Functions
    • Added asList to Result, returning a singleton list if present, or an empty list if not
    • Added nullBinder and nullReceiver singletons that does nothing to Binders/Receivers

    Rvadapter sample extension

    • Added forItem to the RepositoryPresenterCompiler, creating a RepositoryPresenter for a Repository of a single item
    • Added LayoutPresenter, and a layout presenter builder, for the new RepositoryAdapter methods addItem and addLayout, allowing to add static items or layouts inside a RecyclerView controlled by a RepositoryAdapter
    • Added static stableId to the RepositoryPresenterCompiler
    • Added forCollection to the RepositoryPresenterCompiler, allowing to present a Repository of any type as a list of items, and bind to to the collection and list items individually
    • Added fine-grained events support to RepositoryPresenter

    Rvdatabinding sample extension

    • Added forItem (from rvadapter)
    • Added recycle configuration to allow to send null to data binding variables when a view is recycled
    • Added static stableId to the DataBindingRepositoryPresenterCompiler
    • Added collectionId to the DataBindingRepositoryPresenterCompiler, allowing to present a Repository of any type as a list of items, and bind to to the collection and list items individually
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0-alpha4(Apr 24, 2017)

  • v1.4.0-alpha2(Mar 23, 2017)

    Rvadapter sample extension

    • Added static stableId to the RepositoryPresenterCompiler
    • Added forCollection to the RepositoryPresenterCompiler, allowing to present a Repository of any type as a list of items, and bind to to the collection and list items individually

    Rvdatabinding sample extension

    • Added static stableId to the DataBindingRepositoryPresenterCompiler
    • Added collectionId to the DataBindingRepositoryPresenterCompiler, allowing to present a Repository of any type as a list of items, and bind to to the collection and list items individually
    Source code(tar.gz)
    Source code(zip)
  • v1.4.0-alpha1(Mar 13, 2017)

    Agera core

    • Updated support library to 25.2.0
    • Added resultAsList/itemAsList/resultAsList converters to Functions
    • Added asList to Result, returning a singleton list if present, or an empty list if not
    • Added nullBinder and nullReceiver singletons that does nothing to Binders/Receivers

    Rvadapter sample extension

    • Added forItem to the RepositoryPresenterCompiler, creating a RepositoryPresenter for a Repository of a single item
    • Added LayoutPresenter, and a layout presenter builder, for the new RepositoryAdapter methods addItem and addLayout, allowing to add static items or layouts inside a RecyclerView controlled by a RepositoryAdapter

    Rvdatabinding sample extension

    • Added forItem (from rvadapter)
    • Added recycle configuration to allow to send null to data binding variables when a view is recycled
    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Mar 1, 2017)

    Agera core

    • Added contains(value) to Result that checks if it is present with the given value

    Rvadapter sample extension

    • Added recycleWith(Receiver) to the RepositoryPresenterCompiler, and recycle to the RepositoryPresenter

    Rvdatabinding sample extension

    • Removed incorrect layout annotation from data binding methods
    Source code(tar.gz)
    Source code(zip)
  • v1.3.0-alpha3(Mar 1, 2017)

  • v1.3.0-alpha2(Jan 22, 2017)

  • v.1.3.0-alpha1(Dec 20, 2016)

    Agera core

    • Added contains(value) to Result that checks if it is present with the given value

    Rvadapter sample extension

    • Added recycleWith(Receiver) to the RepositoryPresenterCompiler, and recycle to the RepositoryPresenter
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Nov 28, 2016)

    Agera core

    • Added an orContinue directive to the repository compiler, allowing for the rest of the processing flow to only be used if the thenAttempt failed
    • Added a sendDiscardedValuesTo directive to the repository compiler, allowing to specify a disposer Receiver to handle any intermediate values discarded from the data processing flow

    Database sample extension

    • Ability to use any column value type

    Rvadapter sample extension

    • Support for stable IDs in the RepositoryPresenterCompiler
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0-beta3(Nov 4, 2016)

  • v1.2.0-beta2(Aug 16, 2016)

    Agera core

    • Added an orContinue directive to the repository compiler, allowing for the rest of the processing flow to only be used if the thenAttempt failed
    • Added a sendDiscardedValuesTo directive to the repository compiler, allowing to specify a disposer Receiver to handle any intermediate values discarded from the data processing flow

    Database sample extension

    • Ability to use any column value type

    1.2.0-beta1 DOA and never tagged

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Jul 4, 2016)

    Agera core

    • Adds sort/thenSort to FunctionCompiler
    • Better exception message when trying to add/remove null updatable
    • Adds .ifFailed(Non)AbsentSendTo to Result
    • Adds to bind to failures to Result
    • Adds a Function that wraps a Throwable in a Result
    • Improved yielding / auto back pressure for better UI performance / FPS
    • Allows for updatables to be used with different life cycles for different observables
    • Fixes a racing condition occurring when quickly adding/removing updatables to cancellable compiled repositories
    • Result now returns absent() if created with failure(e) when e is the absent() Throwable
    • Remove the confusing stack trace in the absent() and default failure() Throwables in Result

    Database sample extension

    • Ability to set sqlite conflict algorithms

    Rvadapter sample extension

    • Ability to let the RepositoryAdapter life cycle automatically follow the life cycle of an activity (target api 14 only)
    • Basic support to compile aRecyclerView RepositoryPresenters

    Rvdatabinding sample extension (new)

    • Basic support to compile a RecyclerView RepositoryPresenterfor use with the data binding library
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0-beta2(Jun 5, 2016)

    Agera core

    • Result now returns absent() if created with failure(e) when e is the absent() Throwable (needed to make the new beta1 Function that wraps a Throwable in a Result to propagate absent correctly)
    • Changed the new beta1 sort method in FunctionCompiler to not mutate input Lists
    • Fixed a problem in beta1 causing low pass filtering to fail
    • Remove the confusing stack trace in the absent() and default failure() Throwables in Result
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0-beta1(Jun 3, 2016)

    Agera core

    • Adds sort/thenSort to FunctionCompiler
    • Better exception message when trying to add/remove null updatable
    • Adds .ifFailed(Non)AbsentSendTo to Result
    • Adds to bind to failures to Result
    • Adds a Function that wraps a Throwable in a Result
    • Improved yielding / auto back pressure for better UI performance / FPS
    • Allows for updatables to be used with different life cycles for different observables
    • Fixes a racing condition occurring when quickly adding/removing updatables to cancellable compiled repositories
    • dex method count now at 464

    Database sample extension

    • Ability to set sqlite conflict algorithms

    Rvadapter sample extension

    • Ability to let the RepositoryAdapter life cycle automatically follow the life cycle of an activity (target api 14 only)
    • Basic support to compile aRecyclerView RepositoryPresenters

    Rvdatabinding sample extension (new)

    • Basic support to compile a RecyclerView RepositoryPresenterfor use with the data binding library
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-rc2(Apr 24, 2016)

    • Reduced updates to max 1 per looper loop, vastly improving the performance
    • Changed net experimental sample extension to use UTF-8 as the default charset
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-RC1(Apr 24, 2016)

Owner
Google
Google ❤️ Open Source
Google
Immutable in-memory R-tree and R*-tree implementations in Java with reactive api

rtree In-memory immutable 2D R-tree implementation in java using RxJava Observables for reactive processing of search results. Status: released to Mav

Dave Moten 999 Dec 20, 2022
RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.

RxJava: Reactive Extensions for the JVM RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-base

ReactiveX 46.7k Dec 30, 2022
Zero-dependency Reactive Streams publishers library

⚡️ Mutiny Zero: a zero-dependency Reactive Streams publishers library for Java Mutiny Zero is a minimal API for creating reactive-streams compliant pu

SmallRye 14 Dec 14, 2022
Competitive Programming.

ℹ️ 30 Days Of Code : Coding journey! ℹ️ Ressources : ?? playlist to watch Days Solutions Challenges Points Day00 : Question Solution Hello, World. 30

Abdessamad Laamimi 16 Mar 23, 2021
Benchmarks different programming languages

Benchmarker Runs a prime finding algorithm on 5 different languages to determine their performance. Installation Run $ git clone https://github.com/as

Jonathan Asplund 2 Mar 22, 2022
A modern I/O library for Android, Kotlin, and Java.

Okio See the project website for documentation and APIs. Okio is a library that complements java.io and java.nio to make it much easier to access, sto

Square 8.2k Dec 31, 2022
gRPC and protocol buffers for Android, Kotlin, and Java.

Wire “A man got to have a code!” - Omar Little See the project website for documentation and APIs. As our teams and programs grow, the variety and vol

Square 3.9k Jan 5, 2023
Reactive Programming for Android

Reactive Programming for Android Agera is a set of classes and interfaces to help write functional, asynchronous, and reactive applications for Androi

Google 7.3k Jan 5, 2023
Reactive Streams Utilities - Future standard utilities library for Reactive Streams.

Reactive Streams Utilities This is an exploration of what a utilities library for Reactive Streams in the JDK might look like. Glossary: A short gloss

Lightbend 61 May 27, 2021
SpringBoot show case application for reactive-pulsar library (Reactive Streams adapter for Apache Pulsar Java Client)

Reactive Pulsar Client show case application Prerequisites Cloning reactive-pulsar Running this application requires cloning https://github.com/lhotar

Lari Hotari 9 Nov 10, 2022
Functional Reactive Programming (FRP) for JavaFX

ReduxFX Functional Reactive Programming (FRP) for JavaFX ReduxFX in 1 minute ReduxFX is a set of libraries that enable you to use functional reactive

Michael Heinrichs 108 Oct 16, 2022
Android Auto Apps Downloader (AAAD) is an app for Android Phones that downloads popular Android Auto 3rd party apps and installs them in the correct way to have them in Android Auto.

Android Auto Apps Downloader (AAAD) is an app for Android Phones that downloads popular Android Auto 3rd party apps and installs them in the correct way to have them in Android Auto.

Gabriele Rizzo 865 Jan 2, 2023
Programming Services and Processes - 04 Secure Programming Techniques

Programación de Servicios y Procesos - 04 Técnicas de Programación Segura Tema 04. Técnicas de Programación segura. Curso 2021/2022. Contenidos Introd

José Luis González Sánchez 5 Dec 27, 2022
Java-Programs---For-Practice is one of the Java Programming Practice Series By Shaikh Minhaj ( minhaj-313 ). This Series will help you to level up your Programming Skills. This Java Programs are very much helpful for Beginners.

Java-Programs---For-Practice is one of the Java Programming Practice Series By Shaikh Minhaj ( minhaj-313 ). This Series will help you to level up your Programming Skills. This Java Programs are very much helpful for Beginners. If You Have any doubt or query you can ask me here or you can also ask me on My LinkedIn Profile

Shaikh Minhaj 3 Nov 8, 2022
An open source, modular alternative of sketchware. Create your own app in android using block programming like scratch!

OpenBlocks An open source, modular alternative of sketchware. Create your own app in android using block programming like scratch! What is OpenBlocks?

OpenBlocks 30 Dec 16, 2022
A reactive Java framework for building fault-tolerant distributed systems

Atomix Website | Javadoc | Slack | Google Group A reactive Java framework for building fault-tolerant distributed systems Please see the website for f

Atomix 2.3k Dec 29, 2022
LINE 4.1k Jan 2, 2023