Skip to content

Instantly share code, notes, and snippets.

@abos3d
abos3d / build_module.gradle
Last active June 22, 2021 08:15
Android Clean Architect, Kotlin Flow, Hilt Simplest way
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = "1.5.10"
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:4.2.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
@abos3d
abos3d / build.gradle
Created June 22, 2021 08:20
gradle of module
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
package com.cleanarchitectkotlinflowhiltsimplestway.utils
import com.cleanarchitectkotlinflowhiltsimplestway.domain.AuthenticationException
import com.cleanarchitectkotlinflowhiltsimplestway.domain.NetworkErrorException
import com.cleanarchitectkotlinflowhiltsimplestway.domain.State
import retrofit2.HttpException
import java.net.ConnectException
import java.net.SocketTimeoutException
import java.net.UnknownHostException
@abos3d
abos3d / DI.kt
Last active June 22, 2021 08:46
Hilt impl
package com.cleanarchitectkotlinflowhiltsimplestway.utils
import android.content.Context
import com.cleanarchitectkotlinflowhiltsimplestway.data.APIs
import com.cleanarchitectkotlinflowhiltsimplestway.presentation.App
import com.google.gson.GsonBuilder
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
package com.cleanarchitectkotlinflowhiltsimplestway.data
import com.google.gson.JsonObject
import retrofit2.http.GET
interface APIs {
@GET("api/users")
suspend fun sampleGet(): JsonObject
}
package com.cleanarchitectkotlinflowhiltsimplestway.domain
import com.google.gson.JsonObject
import com.cleanarchitectkotlinflowhiltsimplestway.data.APIs
import javax.inject.Inject
class SampleUseCase @Inject constructor(
private val apIs: APIs
) {
suspend operator fun invoke(): JsonObject {
package com.cleanarchitectkotlinflowhiltsimplestway.presentation
sealed class State<out T> {
object LoadingState : State<Nothing>()
data class ErrorState(var exception: Throwable) : State<Nothing>()
data class DataState<T>(var data: T) : State<T>()
}
package com.cleanarchitectkotlinflowhiltsimplestway.presentation
import org.json.JSONObject
import retrofit2.HttpException
open class NetworkErrorException(
val errorCode: Int = -1,
val errorMessage: String,
val response: String = ""
) : Exception() {
package com.cleanarchitectkotlinflowhiltsimplestway.presentation
import android.app.Application
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class App : Application() {
override fun onCreate() {
super.onCreate()