All Projects → LouisCAD → Splitties

LouisCAD / Splitties

Licence: apache-2.0
A collection of hand-crafted extensions for your Kotlin projects.

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to Splitties

devtools-library
Multiplatform, pluggable, extensible, and dynamic config library which supports YAML and JSON as a source.
Stars: ✭ 15 (-99.23%)
Mutual labels:  ios-library, kotlin-native, kotlin-multiplatform
moko-errors
Automated exceptions handler for mobile (android & ios) Kotlin Multiplatform development.
Stars: ✭ 45 (-97.69%)
Mutual labels:  coroutines, kotlin-native, kotlin-multiplatform
moko-network
Network components with codegeneration of rest api for mobile (android & ios) Kotlin Multiplatform development
Stars: ✭ 107 (-94.5%)
Mutual labels:  coroutines, kotlin-native, kotlin-multiplatform
koru
Simple coroutine wrappers for Kotlin Native. Generated from annotations. Compatible with RxSwift, Combine etc.
Stars: ✭ 141 (-92.75%)
Mutual labels:  coroutines, kotlin-native, kotlin-multiplatform
mqtt
Kotlin cross-platform, coroutine based, reflectionless MQTT 3.1.1 & 5.0 client & server
Stars: ✭ 31 (-98.41%)
Mutual labels:  coroutines, kotlin-coroutines, kotlin-native
kinsight-multiplatform
Kotlin Multiplatform Concept - iOS, MacOS, WatchOS (SwiftUI), Android (phone and Wear OS), JVM Web Server - Alpha Capture
Stars: ✭ 38 (-98.05%)
Mutual labels:  watchos, kotlin-native, kotlin-multiplatform
Kroto Plus
gRPC Kotlin Coroutines, Protobuf DSL, Scripting for Protoc
Stars: ✭ 400 (-79.43%)
Mutual labels:  coroutines, kotlin-coroutines
Uniflow Kt
Uniflow 🦄 - Simple Unidirectional Data Flow for Android & Kotlin, using Kotlin coroutines and open to functional programming
Stars: ✭ 414 (-78.71%)
Mutual labels:  coroutines, kotlin-coroutines
Coil
Image loading for Android backed by Kotlin Coroutines.
Stars: ✭ 7,469 (+284.01%)
Mutual labels:  coroutines, kotlin-coroutines
Marvelheroes
❤️ A sample Marvel heroes application based on MVVM (ViewModel, Coroutines, LiveData, Room, Repository, Koin) architecture.
Stars: ✭ 826 (-57.53%)
Mutual labels:  coroutines, material-design
Coroutineworker
Kotlin Coroutine-based workers for native
Stars: ✭ 282 (-85.5%)
Mutual labels:  coroutines, kotlin-coroutines
Korge
KorGE Game Engine. Multiplatform Kotlin Game Engine
Stars: ✭ 780 (-59.9%)
Mutual labels:  coroutines, kotlin-coroutines
Myweatherkotlinflow
Android app that shows weather at your current location or any custom location you specify. Uses Kotlin Flow for data streaming and coroutines for asynchronous work. Also leverages Room, navigation component, Viewmodel and Livedata Jetpack components with MVVM presentation layer architecture. Dagger 2 with Dagger android for dependency injection
Stars: ✭ 23 (-98.82%)
Mutual labels:  coroutines, kotlin-coroutines
Corbind
Kotlin Coroutines binding APIs for Android UI widgets from the platform and support libraries
Stars: ✭ 357 (-81.65%)
Mutual labels:  coroutines, kotlin-coroutines
Expenso
📊 A Minimal Expense Tracker App built to demonstrate the use of modern android architecture component with MVVM Architecture
Stars: ✭ 325 (-83.29%)
Mutual labels:  kotlin-coroutines, material-design
Kotlin Coroutines Android Examples
Learn Kotlin Coroutines for Android by Examples. Learn how to use Kotlin Coroutines for Android App Development.
Stars: ✭ 572 (-70.59%)
Mutual labels:  coroutines, kotlin-coroutines
Korio
Korio: Kotlin cORoutines I/O : Virtual File System + Async/Sync Streams + Async TCP Client/Server + WebSockets for Multiplatform Kotlin 1.3
Stars: ✭ 282 (-85.5%)
Mutual labels:  coroutines, kotlin-coroutines
Kotlin Coroutines Retrofit
Kotlin Coroutines await() extension for Retrofit Call
Stars: ✭ 812 (-58.25%)
Mutual labels:  coroutines, kotlin-coroutines
Paperplane
📚 PaperPlane - An Android reading app, including articles from Zhihu Daily, Guokr Handpick and Douban Moment.
Stars: ✭ 1,147 (-41.03%)
Mutual labels:  coroutines, kotlin-coroutines
Eyepetizer
🔥基于 Kotlin 语言仿写「开眼 Eyepetizer」的一个短视频 Android 客户端项目,采用 Jetpack + 协程实现的 MVVM 架构。
Stars: ✭ 988 (-49.2%)
Mutual labels:  coroutines, kotlin-coroutines

Splitties

Splitties is a collection of small Kotlin multiplatform libraries (with Android as first target).

These libraries are intended to reduce the amount of code you have to write, freeing code reading and writing time, so you can focus more on what you want to build for your users (even if you're the only one), or have more time to have fun.

This project is named "Splitties" because it is split in small modules, distributed as independent libraries, so you can add only the ones you need to your project/module, helping reduce the size of the final binary that users devices will need to download and keep in the limited storage (BTW, everything is limited).

Some Android targeting modules have a content similar to what Anko offers. See a short comparison of Splitties with Anko here.

Each module has been designed to have a small footprint and be as efficient as possible.

A few examples

Splitties is all about simplifying your code. Here are a few examples:

Kotlin:

startActivity(Intent(this, DemoActivity::class.java))

Kotlin with Splitties Activities:

start<DemoActivity>()

Kotlin:

Snackbar.make(root, R.string.refresh_successful, Snackbar.LENGTH_SHORT)
    .show()

Kotlin with Splitties Snackbar:

root.snack(R.string.refresh_successful)

Racing coroutines: (raceOf(…) comes from the Coroutines module)

suspend fun awaitUserChoice(ui: SomeUi, choices: List<Stuff>): Stuff? = raceOf({
    ui.awaitSomeUserAction(choices)
}, {
    ui.awaitDismissal()
    null
}, {
    ui.showSomethingInRealtimeUntilCancelled() // Returns Nothing, will run, but never "win".
})

Kotlin:

Snackbar.make(root, getString(R.string.deleted_x_items, deletedCount), Snackbar.LENGTH_LONG)
    .setAction(android.R.string.cancel) {
        deleteOperation.requestRollback()
    }
    .setActionTextColor(ContextCompat.getColor(this, R.color.fancy_color))
    .show()

Kotlin with Splitties Snackbar:

root.longSnack(str(R.string.deleted_x_items, deletedCount)) {
    action(android.R.string.cancel, textColor = color(R.color.fancy_color)) {
        deleteOperation.requestRollback()
    }
}

Overview

System interaction (Android only):

  • App Context: Always have your application Context at hand with appCtx.
  • System Services: No more context.getSystemService(NAME_OF_SERVICE) as NameOfManager.

User input and user interface related splits:

Small messages (Android only)

Dialogs (Android only)

System UI (Android only)

Extensions for Views (Android only)

Creating View based UIs with the power of Kotlin (Android only)

Various UI utilities (Android only)

Material Design helpers (Android only)

Inter and cross app communication: Activities, Fragments, Intents, and Bundles

  • Activities: Start activities with minimal boilerplate.
  • Intents: Transform companion objects into powerful typesafe intent specs, and create PendingIntents the clean and easy way.
  • Fragments: Start activities from fragments and do transactions with minimal boilerplate.
  • Fragment Args: Fragment arguments without ceremony thanks to delegated properties.
  • Bundle: BundleSpec to use Bundle with property syntax for Intent extras and more.

Concurrency (Multiplatform)

Data persistence (Multiplatform)

  • Preferences: Property syntax for Android's SharedPreferences/DataStore and macOS/iOS/watchOS NSUserDefaults.
  • Arch Room: Room helpers to instantiate your DB and perform transactions in Kotlin.

Utilities (Multiplatform)

  • Bit Flags: hasFlag, withFlag and minusFlag extensions on Long, Int, Short, Byte, and their unsigned counterparts.
  • Collections: forEach for Lists without Iterator allocation.

Debugging (Android only)

Legacy (Android only)

  • Exceptions: unexpectedValue(…), unsupportedAction(…) and similar functions that return Nothing.
  • Arch Lifecycle: Extensions to get ViewModels, use LiveData and observe Lifecycles.

Download

Gradle instructions

Make sure you have mavenCentral() in the repositories defined in your project's (root) build.gradle file (default for new Android Studio projects).

To make it easier to take advantage of the contents of Splitties for your Android projects, there are grouping artifacts that include most splits.

Android base

Adding with refreshVersions: Splitties.pack.androidBase or Splitties.pack.androidBaseWithViewsDsl.

These 2 packs don't include AppCompat and are suitable for WearOS apps.

Includes the following modules:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-base:3.0.0")

There's also a version with Views DSL. It additionally includes the following modules:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-base-with-views-dsl:3.0.0")

Android AppCompat

Adding with refreshVersions: Splitties.pack.appCompat or Splitties.pack.appCompatWithViewsDsl.

These 2 packs include the Android base pack, and the following modules:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-appcompat:3.0.0")

There's also a version with Views DSL. It additionally includes the Views DSL version of the Android base pack and the following module:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-appcompat-with-views-dsl:3.0.0")

Android Material Components

Adding with refreshVersions: Splitties.pack.androidMdc or Splitties.pack.androidMdcWithViewsDsl.

These 2 packs include the Android AppCompat pack, and the following modules:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-material-components:3.0.0")

There's also a version with Views DSL. It additionally includes the Views DSL version of the Android AppCompat pack and the following modules:

Gradle dependency:

implementation("com.louiscad.splitties:splitties-fun-pack-android-material-components-with-views-dsl:3.0.0")

All the artifacts (47)

Since you might use multiple artifacts, to not repeat yourself, we recommend you to put the version in a central place, so it's little effort to upgrade to newer versions.

The best way to do this is to use refreshVersions, it has built-in dependency notations for Splitties, and also many other popular and qualitative libraries, like kotlinx, AndroidX, libraries from Square/CashApp and libraries from Google.

Most importantly, with it, running the refreshVersions task will show you the available updates in a matter of seconds, for all of your dependencies, right into the versions.properties, in a way that makes upgrading effortless, even with just the keyboard.

FYI, the current latest release of Splitties is the version 3.0.0

Here are the maven coordinates of all the artifacts of this library, for reference. (Click to expand)
com.louiscad.splitties:splitties-activities
com.louiscad.splitties:splitties-alertdialog
com.louiscad.splitties:splitties-alertdialog-appcompat
com.louiscad.splitties:splitties-alertdialog-appcompat-coroutines
com.louiscad.splitties:splitties-appctx
com.louiscad.splitties:splitties-arch-lifecycle
com.louiscad.splitties:splitties-arch-room
com.louiscad.splitties:splitties-bitflags
com.louiscad.splitties:splitties-bundle
com.louiscad.splitties:splitties-checkedlazy
com.louiscad.splitties:splitties-collections
com.louiscad.splitties:splitties-coroutines
com.louiscad.splitties:splitties-dimensions
com.louiscad.splitties:splitties-exceptions
com.louiscad.splitties:splitties-fragments
com.louiscad.splitties:splitties-fragmentargs
com.louiscad.splitties:splitties-intents
com.louiscad.splitties:splitties-lifecycle-coroutines
com.louiscad.splitties:splitties-mainhandler
com.louiscad.splitties:splitties-mainthread
com.louiscad.splitties:splitties-material-colors
com.louiscad.splitties:splitties-material-lists
com.louiscad.splitties:splitties-permissions
com.louiscad.splitties:splitties-preferences
com.louiscad.splitties:splitties-resources
com.louiscad.splitties:splitties-snackbar
com.louiscad.splitties:splitties-stetho-init
com.louiscad.splitties:splitties-systemservices
com.louiscad.splitties:splitties-toast
com.louiscad.splitties:splitties-typesaferecyclerview
com.louiscad.splitties:splitties-views
com.louiscad.splitties:splitties-views-appcompat
com.louiscad.splitties:splitties-views-cardview
com.louiscad.splitties:splitties-views-coroutines
com.louiscad.splitties:splitties-views-coroutines-material
com.louiscad.splitties:splitties-views-dsl
com.louiscad.splitties:splitties-views-dsl-appcompat
com.louiscad.splitties:splitties-views-dsl-constraintlayout
com.louiscad.splitties:splitties-views-dsl-coordinatorlayout
com.louiscad.splitties:splitties-views-dsl-ide-preview
com.louiscad.splitties:splitties-views-dsl-material
com.louiscad.splitties:splitties-views-dsl-recyclerview
com.louiscad.splitties:splitties-views-material
com.louiscad.splitties:splitties-views-recyclerview
com.louiscad.splitties:splitties-views-selectable
com.louiscad.splitties:splitties-views-selectable-appcompat
com.louiscad.splitties:splitties-views-selectable-constraintlayout

Snapshots

Let's say you need to try a new feature or a fix that did not make it to a release yet:

You can grab it in the snapshot version by adding the corresponding repository as shown below, and changing the library version to the latest snapshot, 3.0.0-SNAPSHOT:

allProjects {
    repositories {
        mavenCentral()
        google() // Add sonatype snapshots repo below
        maven(url = "https://oss.sonatype.org/content/repositories/snapshots")
    }
}

New versions notifications

Releases are announced on GitHub, you can subscribe by clicking on "Watch", then "Releases only".

However, if you use refreshVersions, you'll also learn about updates when you run the refreshVersions task right in the versions.properties file.

Improve this library

If you want this library to have a new feature or an improvement in a new or in an existing module, please, open an issue or vote/comment a similar one first, so it can be discussed.

Documentation contributions are also welcome. For typos or other small improvements, feel free to submit a PR (pull request) directly. For more significant doc contributions, please open an issue first, so it can be discussed.

If you find a bug, please open an issue with all the important details. If you know a simple fix that is not API breaking and that does not have side effects that need to be considered, you may also directly submit a PR.

You can also join the discussion on Kotlin's Slack in the #splitties channel (you can get an invitation here).

What is a split

A "split" is a module of the Splitties library that you can add as a dependency. It only includes the required transitive dependencies. This allows you to only add what you need in your app or library module, so the final apk/ipa/app is as small as possible and doesn't include stuff not used by your app.

Let's say you're building a Wear OS app using the Views DSL. Wear OS apps don't need AppCompat. Including it would be a waste of bandwidth and storage. The Views DSL core module relies on the Android SDK but not on AppCompat, so you don't bloat your wrist app with AppCompat by using Views DSL. However, if you are building a phone, tablet or computer Android app, there's a Views DSL AppCompat split with a few extensions for you to use.

Credits

Special thanks to Jovche Mitrejchevski for helping in taking decisions for this project.

Thanks to JetBrains and the contributors for Anko, which was a great source of inspiration, especially for Views DSL, and of course thanks for the excellent Kotlin programming language that makes this project possible.

Thanks to Doug Stevenson for his articles "Kotlin & Android: A Brass Tacks Experiment". It is fair to say that Views DSL has its root in this experiment.

License

This library is published under Apache License version 2.0 which you can see here.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].