Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d40f8cde authored by Sayantan Roychowdhury's avatar Sayantan Roychowdhury
Browse files

App lounge: (issue_4427) add fdroid related interfaces in DIs, Retrofit, Room.

parent 43dcc5c8
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ package foundation.e.apps.api.cleanapk

import android.os.Build
import android.util.Log
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import dagger.Module
@@ -27,6 +29,7 @@ import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import foundation.e.apps.api.exodus.ExodusTrackerApi
import foundation.e.apps.api.fdroid.FdroidApiInterface
import okhttp3.Cache
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaTypeOrNull
@@ -35,8 +38,10 @@ import okhttp3.Protocol
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import retrofit2.Retrofit
import retrofit2.converter.jackson.JacksonConverterFactory
import retrofit2.converter.moshi.MoshiConverterFactory
import java.net.ConnectException
import javax.inject.Named
import javax.inject.Singleton

@Module
@@ -69,6 +74,25 @@ object RetrofitModule {
            .create(ExodusTrackerApi::class.java)
    }

    /**
     * The fdroid api returns results in .yaml format.
     * Hence we need a yaml convertor.
     * Convertor is being provided by [getYamlFactory].
     */
    @Singleton
    @Provides
    fun provideFdroidApi(
        okHttpClient: OkHttpClient,
        @Named("yamlFactory") yamlFactory: JacksonConverterFactory
    ): FdroidApiInterface {
        return Retrofit.Builder()
            .baseUrl(FdroidApiInterface.BASE_URL)
            .client(okHttpClient)
            .addConverterFactory(yamlFactory)
            .build()
            .create(FdroidApiInterface::class.java)
    }

    @Singleton
    @Provides
    fun getMoshi(): Moshi {
@@ -77,6 +101,17 @@ object RetrofitModule {
            .build()
    }

    /**
     * Used in above [provideFdroidApi].
     * Reference: https://stackoverflow.com/a/69859687
     */
    @Singleton
    @Provides
    @Named("yamlFactory")
    fun getYamlFactory(): JacksonConverterFactory {
        return JacksonConverterFactory.create(ObjectMapper(YAMLFactory()))
    }

    @Singleton
    @Provides
    fun provideInterceptor(): Interceptor {
+4 −1
Original line number Diff line number Diff line
@@ -6,14 +6,17 @@ import androidx.room.Room
import androidx.room.RoomDatabase
import foundation.e.apps.api.exodus.Tracker
import foundation.e.apps.api.exodus.TrackerDao
import foundation.e.apps.api.fdroid.FdroidDao
import foundation.e.apps.api.fdroid.models.FdroidEntity

@Database(
    entities = [Tracker::class],
    entities = [Tracker::class, FdroidEntity::class],
    version = 1,
    exportSchema = false
)
abstract class AppDatabase : RoomDatabase() {
    abstract fun trackerDao(): TrackerDao
    abstract fun fdroidDao(): FdroidDao

    companion object {
        private lateinit var INSTANCE: AppDatabase
+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ import retrofit2.http.Path

/**
 * Interface for retrofit calls.
 * Created from [foundation.e.apps.api.cleanapk.RetrofitModule.provideFdroidApi].
 */
interface FdroidApiInterface {

+1 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ import foundation.e.apps.api.fdroid.models.FdroidEntity

/**
 * Dao interface for storing Fdroid info in DB.
 * Created from [foundation.e.apps.di.DaoModule.getFdroidDao]
 */
@Dao
interface FdroidDao {
+6 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import foundation.e.apps.api.database.AppDatabase
import foundation.e.apps.api.exodus.TrackerDao
import foundation.e.apps.api.fdroid.FdroidDao

@InstallIn(SingletonComponent::class)
@Module
@@ -16,4 +17,9 @@ object DaoModule {
    fun getTrackerDao(@ApplicationContext context: Context): TrackerDao {
        return AppDatabase.getInstance(context).trackerDao()
    }

    @Provides
    fun getFdroidDao(@ApplicationContext context: Context): FdroidDao {
        return AppDatabase.getInstance(context).fdroidDao()
    }
}