diff --git a/modules/build.gradle b/modules/build.gradle
index 43b102cc56f64bf731e422239a0e1031e6f5cdcf..48fab303e5f20f4cfabbb545004c2560c7f6dc86 100644
--- a/modules/build.gradle
+++ b/modules/build.gradle
@@ -1,6 +1,27 @@
+/*
+ * Copyright MURENA SAS 2023
+ * Apps Quickly and easily install Android apps onto your device!
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+
plugins {
id 'com.android.library'
id 'org.jetbrains.kotlin.android'
+ id 'kotlin-kapt'
+ id("com.google.dagger.hilt.android")
}
ext {
@@ -8,7 +29,14 @@ ext {
android_target_sdk_version = 33
core_version = '1.10.1'
gson_version = '2.9.0'
- kotlin_reflection = '1.8.10'
+ kotlin_reflection = '1.8.20'
+ retrofit_version = '2.9.0'
+ retrofit_interceptor_version = '5.0.0-alpha.2'
+ kotlin_coroutines_core = '1.7.2'
+ google_play_api = '3.0.1'
+ protobuf_java = '3.19.3'
+ javax_version = '1'
+ dagger_hilt_version = '2.46.1'
}
android {
@@ -43,6 +71,20 @@ dependencies {
implementation "androidx.core:core-ktx:$core_version"
implementation "com.google.code.gson:gson:$gson_version"
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_reflection"
+ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_core")
+
+ implementation("com.squareup.retrofit2:retrofit:$retrofit_version")
+ implementation("com.squareup.retrofit2:converter-gson:$retrofit_version")
+ implementation("com.squareup.retrofit2:converter-scalars:$retrofit_version")
+ implementation("com.squareup.okhttp3:logging-interceptor:$retrofit_interceptor_version")
+
+ implementation("foundation.e:gplayapi:$google_play_api")
+ implementation("com.google.protobuf:protobuf-java:$protobuf_java")
+
+ implementation("javax.inject:javax.inject:$javax_version")
+
+ implementation("com.google.dagger:hilt-android:$dagger_hilt_version")
+ kapt("com.google.dagger:hilt-android-compiler:$dagger_hilt_version")
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
diff --git a/modules/src/main/AndroidManifest.xml b/modules/src/main/AndroidManifest.xml
index a5918e68abcdde7f61ccae4f0ad4885b764573fd..2a7393a691252ba05f021d4d9bc1e7801684d49a 100644
--- a/modules/src/main/AndroidManifest.xml
+++ b/modules/src/main/AndroidManifest.xml
@@ -1,4 +1,6 @@
+
+
\ No newline at end of file
diff --git a/modules/src/main/java/app/lounge/di/NetworkModule.kt b/modules/src/main/java/app/lounge/di/NetworkModule.kt
new file mode 100644
index 0000000000000000000000000000000000000000..e64cde0cf7bd11a77dfe16cd2d7dd843a96e2e1c
--- /dev/null
+++ b/modules/src/main/java/app/lounge/di/NetworkModule.kt
@@ -0,0 +1,76 @@
+/*
+ * Copyright MURENA SAS 2023
+ * Apps Quickly and easily install Android apps onto your device!
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+
+package app.lounge.di
+
+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.gson.GsonConverterFactory
+import java.util.concurrent.TimeUnit
+import javax.inject.Named
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+internal object NetworkModule {
+
+ private const val HTTP_TIMEOUT = 10L
+
+ @Provides
+ @Singleton
+ internal fun providesRetrofit(
+ okHttpClient: OkHttpClient,
+ baseUrl: String
+ ) : Retrofit {
+ return Retrofit.Builder()
+ .baseUrl(baseUrl)
+ .addConverterFactory(GsonConverterFactory.create())
+ .client(okHttpClient)
+ .build()
+ }
+
+ @Provides
+ @Singleton
+ @Named("privateOkHttpClient")
+ internal fun providesOkHttpClient(
+ httpLogger: HttpLoggingInterceptor
+ ): OkHttpClient {
+ return OkHttpClient.Builder()
+ .addNetworkInterceptor(httpLogger)
+ .callTimeout(HTTP_TIMEOUT, TimeUnit.SECONDS)
+ .build()
+ }
+
+ @Provides
+ @Singleton
+ internal fun providesHttpLogger() : HttpLoggingInterceptor {
+ return run {
+ val httpLoggingInterceptor = HttpLoggingInterceptor()
+ httpLoggingInterceptor.apply {
+ httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/modules/src/main/java/app/lounge/networking/RetrofitHandler.kt b/modules/src/main/java/app/lounge/networking/RetrofitHandler.kt
new file mode 100644
index 0000000000000000000000000000000000000000..9138167f7fc7febad7a256ae9935414b7cae4eaf
--- /dev/null
+++ b/modules/src/main/java/app/lounge/networking/RetrofitHandler.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright MURENA SAS 2023
+ * Apps Quickly and easily install Android apps onto your device!
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+
+package app.lounge.networking
+
+import retrofit2.Response
+
+sealed interface NetworkResult {
+ data class Success(val data: T) : NetworkResult
+ data class Error(
+ val exception: Throwable,
+ val code: Int,
+ val errorMessage: String,
+ ) : NetworkResult
+}
+
+suspend fun fetch(call: suspend () -> Response): NetworkResult {
+ try {
+ val response = call()
+ if (response.isSuccessful) {
+ response.body()?.let { result ->
+ return NetworkResult.Success(result)
+ }
+ }
+
+ return NetworkResult.Error(
+ exception = Exception(response.message()),
+ code = response.code(),
+ errorMessage = " ${response.code()} ${response.message()}"
+ )
+ } catch (exception: Exception) {
+ return NetworkResult.Error(
+ exception = exception,
+ code = exception.hashCode(),
+ errorMessage = exception.toString()
+ )
+ }
+}