diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 218986fc34..fe20c4709a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,6 +4,7 @@ plugins { kotlin("kapt") id("com.google.gms.google-services") id("com.google.firebase.crashlytics") + id("com.google.dagger.hilt.android") } android { @@ -95,6 +96,7 @@ android { resources.excludes += "lib/x86_64/darwin/libscrypt.dylib" resources.excludes += "lib/x86_64/freebsd/libscrypt.so" resources.excludes += "lib/x86_64/linux/libscrypt.so" + resources.excludes += "META-INF/gradle/incremental.annotation.processors" } } @@ -138,6 +140,10 @@ dependencies { implementation(Tangem.cardCore) implementation(Tangem.cardAndroid) + /** DI */ + implementation(Library.hilt) + implementation(Library.hiltKapt) + /** Other libraries */ implementation(Library.materialComponent) implementation(Library.googlePlayCore) diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index c0d6e566b4..56e6a36cd4 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -33,6 +33,7 @@ import com.tangem.tap.network.NetworkConnectivity import com.tangem.tap.persistence.PreferencesStorage import com.tangem.wallet.BuildConfig import com.zendesk.logger.Logger +import dagger.hilt.android.HiltAndroidApp import org.rekotlin.Store import timber.log.Timber import zendesk.chat.Chat @@ -50,6 +51,7 @@ lateinit var shopService: TangemShopService lateinit var assetReader: AssetReader lateinit var userTokensRepository: UserTokensRepository +@HiltAndroidApp class TapApplication : Application(), ImageLoaderFactory { override fun onCreate() { diff --git a/build.gradle.kts b/build.gradle.kts index 0cc8e9c419..75b1a4e453 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,6 +14,10 @@ buildscript { } } +plugins { + id("com.google.dagger.hilt.android") version "2.44" apply false +} + allprojects { repositories { google() diff --git a/buildSrc/src/main/java/Dependency.kt b/buildSrc/src/main/java/Dependency.kt index 25c0e3787a..bd91e1bdaa 100644 --- a/buildSrc/src/main/java/Dependency.kt +++ b/buildSrc/src/main/java/Dependency.kt @@ -40,6 +40,8 @@ object Library { const val googlePlayCoreKtx = "com.google.android.play:core-ktx:" + Versions.googlePlayCoreKtx const val googlePlayServicesWallet = "com.google.android.gms:play-services-wallet:" + Versions.googlePlayServicesWallet + const val hilt = "com.google.dagger:hilt-android:" + Versions.hilt + const val hiltKapt = "com.google.dagger:hilt-compiler:" + Versions.hilt const val kotsonGsonExt = "com.github.salomonbrys.kotson:kotson:" + Versions.kotsonGsonExt const val lottie = "com.airbnb.android:lottie:" + Versions.lottie const val materialComponent = "com.google.android.material:material:" + Versions.googleMaterialComponent diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index d7d89a1fcd..56e26ff54e 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -35,6 +35,7 @@ object Versions { const val googlePlayCore = "1.10.3" const val googlePlayCoreKtx = "1.8.1" const val googlePlayServicesWallet = "19.1.0" + const val hilt = "2.44" const val kotsonGsonExt = "2.5.0" const val lottie = "3.4.0" const val moshi = "1.12.0" diff --git a/core/datasource/.gitignore b/core/datasource/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/core/datasource/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/datasource/build.gradle.kts b/core/datasource/build.gradle.kts new file mode 100644 index 0000000000..2d5eb60c3e --- /dev/null +++ b/core/datasource/build.gradle.kts @@ -0,0 +1,46 @@ +plugins { + id("com.android.library") + kotlin("android") + kotlin("kapt") + id("com.google.dagger.hilt.android") +} + +android { + + defaultConfig { + compileSdk = AppConfig.compileSdkVersion + minSdk = AppConfig.minSdkVersion + targetSdk = AppConfig.targetSdkVersion + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + isCoreLibraryDesugaringEnabled = false + } +} + +dependencies { + + /** DI */ + implementation(Library.hilt) + implementation(Library.hiltKapt) + + /** Coroutines */ + implementation(Library.coroutine) + + /** Logging */ + implementation(Library.timber) + + /** Network */ + implementation(Library.retrofit) + implementation(Library.retrofitMoshiConverter) + implementation(Library.moshi) + implementation(Library.moshiKotlin) + implementation(Library.okHttp) + implementation(Library.okHttpLogging) +} \ No newline at end of file diff --git a/core/datasource/src/main/AndroidManifest.xml b/core/datasource/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..d6401c6174 --- /dev/null +++ b/core/datasource/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/referral/ReferralApi.kt b/core/datasource/src/main/java/com/tangem/datasource/api/referral/ReferralApi.kt new file mode 100644 index 0000000000..ccaa203e9c --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/api/referral/ReferralApi.kt @@ -0,0 +1,7 @@ +package com.tangem.datasource.api.referral + +/** + * Api for referral functionality + */ +interface ReferralApi { +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt new file mode 100644 index 0000000000..823d3e63d8 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt @@ -0,0 +1,44 @@ +package com.tangem.datasource.di + +import com.tangem.datasource.api.referral.ReferralApi +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.converter.moshi.MoshiConverterFactory +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +class NetworkModule { + + @Provides + @Singleton + fun provideReferralApi(okHttpClient: OkHttpClient): ReferralApi { + return Retrofit.Builder() + .addConverterFactory( + MoshiConverterFactory.create(), + ) + .baseUrl(PROD_REFERRAL_BASE_URL) + .client(okHttpClient) + .build() + .create(ReferralApi::class.java) + } + + @Provides + @Singleton + fun provideOkHttpClient(): OkHttpClient { + return OkHttpClient.Builder() + .addInterceptor( + HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC), + ) + .build() + } + + private companion object { + const val PROD_REFERRAL_BASE_URL = "" + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 5e820bbbfc..658531b8f2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,5 @@ include(":app") include(":domain") include(":network") -include(":common") \ No newline at end of file +include(":common") +include(":core:datasource") \ No newline at end of file