affogato_img

Affogato

Affogato is a multipurpose library for Jetpack Compose, Android and Kotlin.

Core-ktx

Core-ktx is a Kotlin library that provides a set of Kotlin extensions. Like collections, operations, string, math, random, date time, color, block scope and try-catch functions. Also, TimeAgo is my favorite extension for times 😄.

TimeAgo.format(now()) // a moment ago
now().timeAgo(locale = TimeAgo.Locale.EN) // a moment ago

Coroutines

Coroutines module contains suspended try-catch from Core-ktx and DispatchersProvider for handling coroutines context in main and test source.

// Normal way
suspend fun foo() = withContext(Dispatchers.Default) {
return try {
// do something return value
} catch (_: Exception) {
null
}
}

// Affogato way
suspend fun foo() = suspendedTryCatchNull {
// do something return value
}

Logger

Logger module contains a simple logger for Android. It's a wrapper for Log andLogger with some extensions.

// Setup
Logger.tag = "MyApp"

Logger.isDebug = BuildConfig.DEBUG // if debug mode false onRelease will be called.
Logger.onRealease = { tag, message, throwable ->
// do something
}

// Extension
logcat { "Hello Affogato" }
logcat(tag = "TAG") { "Hello Affogato" }
logcat(LogLevel.INFO) { "Hello Affogato" }
try {
// do something
} catch (e: Exception) {
logcat(throwable = e) { "Hello Affogato" }
}

Metrica-ktx

This module adds Yandex Metrica to your project. You can use it for crashlytics and reporting events and push notifications.

yandexMetrica("api-key") {
// configuration
}

@Serializable
data class Foo(val bar: String)
YandexMetricaX.reportEvent("event_name", Foo("bar"))

Okhttp

Okhttp builder is part of this module. You can use it for building okhttp client with a simple syntax. Also, you can track download and upload progress with DownloadStreamResponseBody and UploadStreamRequestBody.

val client = okHttp {
addInterceptor(HttpLoggingInterceptor())
cache(Cache(cacheDir, cacheSize))
}

Structure

This module contains useful structure class like DataState and EntityMapper. Also, it contains SingletonHolder for creating singleton classes or ObjectPool for creating heavy objects to save time. You can use checker class for validate phone, email and password.

class SharedPref private constructor(private val context: Context) {
// ...
companion object : SingletonHolder<SharedPref, Context>(::SharedPref)
}

StringPool["key"] = "token"
StringPool["key"] // token

Phone("09123456789").isValid() // true
Phone("09123456789").format("IR") // +98 912 345 6789

Compose Unit Size

The unit is one of the Jetpack Compose modules of this library, which can support relative screen sizes in sdp, ssp and custom create with @Dimen. Also, we can use rememberWindowSize() to know in which device we are (Compact, Medium, Expanded) or use postureState to build adaptive and responsive UIs in Foldables.

@Dimen(type = "dp", values = ["320:70", "480:80", "600:180", "720:180"])
val icon = 80.dp

dimen.icon // 80.dp in device with width 480.dp

Links

Affogato is currently available for maven/gradle builds at Jitpack ( read Getting started).

Download

Gradle Setup

Step 1. Add the JitPack repository to your build.gradle file

allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}

Step 2. Add the dependency

dependencies {
implementation 'com.github.ghasemdev.affogato:AFFOGATO_MODULE:AFFOGATO_VERSION'
}

Maven Setup

Step 1. Add the JitPack repository to your build.gradle file

<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>

Step 2. Add the dependency

<dependency>
<groupId>com.github.ghasemdev.affogato</groupId>
<artifactId>AFFOGATO_MODULE</artifactId>
<version>AFFOGATO_VERSION</version>
</dependency>

License

The MIT License (MIT)

Copyright (c) 2022 ghasemdev

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial
portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

All modules:

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard