diff --git a/acronyms/src/androidTest/java/dev/carlos/acronyms/ExampleInstrumentedTest.kt b/acronyms/src/androidTest/java/dev/carlos/acronyms/ExampleInstrumentedTest.kt deleted file mode 100644 index b73d727..0000000 --- a/acronyms/src/androidTest/java/dev/carlos/acronyms/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package dev.carlos.acronyms - -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("dev.carlos.acronyms", appContext.packageName) - } -} \ No newline at end of file diff --git a/acronyms/src/main/AndroidManifest.xml b/acronyms/src/main/AndroidManifest.xml deleted file mode 100644 index 7fd5b30..0000000 --- a/acronyms/src/main/AndroidManifest.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/acronyms/src/main/res/drawable-v24/ic_launcher_foreground.xml b/acronyms/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 1448aba..0000000 --- a/acronyms/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/acronyms/src/main/res/drawable/ic_launcher_background.xml b/acronyms/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 445d0d5..0000000 --- a/acronyms/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/acronyms/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/acronyms/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 03eed25..0000000 --- a/acronyms/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/acronyms/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/acronyms/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 03eed25..0000000 --- a/acronyms/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/acronyms/src/main/res/mipmap-hdpi/ic_launcher.png b/acronyms/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a571e60..0000000 Binary files a/acronyms/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/acronyms/src/main/res/mipmap-hdpi/ic_launcher_round.png b/acronyms/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 61da551..0000000 Binary files a/acronyms/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/acronyms/src/main/res/mipmap-mdpi/ic_launcher.png b/acronyms/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c41dd28..0000000 Binary files a/acronyms/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/acronyms/src/main/res/mipmap-mdpi/ic_launcher_round.png b/acronyms/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index db5080a..0000000 Binary files a/acronyms/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/acronyms/src/main/res/mipmap-xhdpi/ic_launcher.png b/acronyms/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 6dba46d..0000000 Binary files a/acronyms/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/acronyms/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/acronyms/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index da31a87..0000000 Binary files a/acronyms/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/acronyms/src/main/res/mipmap-xxhdpi/ic_launcher.png b/acronyms/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 15ac681..0000000 Binary files a/acronyms/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/acronyms/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/acronyms/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index b216f2d..0000000 Binary files a/acronyms/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/acronyms/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/acronyms/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index f25a419..0000000 Binary files a/acronyms/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/acronyms/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/acronyms/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index e96783c..0000000 Binary files a/acronyms/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/acronyms/src/test/java/dev/carlos/acronyms/ExampleUnitTest.kt b/acronyms/src/test/java/dev/carlos/acronyms/ExampleUnitTest.kt deleted file mode 100644 index f8091ea..0000000 --- a/acronyms/src/test/java/dev/carlos/acronyms/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package dev.carlos.acronyms - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 0924a2f..c808dd7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ apply from: '../versions.gradle' apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' +apply plugin: 'kotlin-parcelize' android { compileSdkVersion build_versions.target_sdk @@ -15,7 +16,7 @@ android { versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - buildConfigField "String", "BASE_ENDPOINT", '"http://www.nactem.ac.uk/software/acromine/"' + buildConfigField "String", "BASE_ENDPOINT", '"http://www.nactem.ac.uk"' } buildTypes { @@ -57,5 +58,5 @@ android { dependencies { implementation project(":core") - implementation project(":acronyms") + implementation project(':shortform') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b2d252b..e4ecfed 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,7 +6,7 @@ diff --git a/app/src/main/java/dev/carlos/acronyms/MainApplication.kt b/app/src/main/java/dev/carlos/acronyms/MainApplication.kt index ea7d95c..7f3734d 100644 --- a/app/src/main/java/dev/carlos/acronyms/MainApplication.kt +++ b/app/src/main/java/dev/carlos/acronyms/MainApplication.kt @@ -1,6 +1,7 @@ package dev.carlos.acronyms import android.app.Application +import dev.carlos.shortform.di.acronymsModule import dev.carlos.acronyms.di.appModules import org.koin.android.ext.koin.androidContext import org.koin.core.context.startKoin @@ -24,7 +25,8 @@ class MainApplication : Application() { modules( listOf( - appModules + appModules, + acronymsModule ) ) } diff --git a/app/src/main/java/dev/carlos/acronyms/views/MainActivity.kt b/app/src/main/java/dev/carlos/acronyms/views/MainActivity.kt index 8d5b26b..415fd1c 100644 --- a/app/src/main/java/dev/carlos/acronyms/views/MainActivity.kt +++ b/app/src/main/java/dev/carlos/acronyms/views/MainActivity.kt @@ -5,15 +5,11 @@ import androidx.appcompat.app.AppCompatActivity import androidx.navigation.findNavController import androidx.navigation.ui.NavigationUI import dev.carlos.acronyms.R -import dev.carlos.acronyms.di.appModules import dev.carlos.acronyms.viewmodel.NavigationViewmodel -import dev.carlos.core.extensions.findNavHostFragment import dev.carlos.core.extensions.observeNonNull import dev.carlos.core.navigation.NavigationRouter import org.koin.android.ext.android.inject -import org.koin.android.ext.koin.androidContext import org.koin.androidx.viewmodel.ext.android.viewModel -import org.koin.core.context.startKoin class MainActivity : AppCompatActivity() { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a21b3e1..f35bcca 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,7 +5,8 @@ android:layout_height="match_parent" > - + + + + www.nactem.ac.uk + + \ No newline at end of file diff --git a/base.gradle b/base.gradle index 6b9694a..3ace927 100644 --- a/base.gradle +++ b/base.gradle @@ -2,6 +2,7 @@ apply from: '../versions.gradle' apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' +apply plugin: 'kotlin-parcelize' android { compileSdkVersion build_versions.target_sdk diff --git a/core/build.gradle b/core/build.gradle index 6372e2c..f47fd63 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -3,6 +3,7 @@ apply from: '../base.gradle' apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' +apply plugin: 'kotlin-parcelize' dependencies { api deps.google.kotlin.std_lib @@ -15,6 +16,7 @@ dependencies { api deps.google.androidx.navigation_fragment api deps.google.androidx.navigation_ui api deps.google.material.core + api deps.google.gson.core api deps.core.okhttp.logging_interceptor api deps.core.retrofit.runtime api deps.core.retrofit.gson diff --git a/core/src/main/java/dev/carlos/core/domain/network/RequestState.kt b/core/src/main/java/dev/carlos/core/domain/network/RequestState.kt new file mode 100644 index 0000000..956f293 --- /dev/null +++ b/core/src/main/java/dev/carlos/core/domain/network/RequestState.kt @@ -0,0 +1,7 @@ +package dev.carlos.core.domain.network + +sealed class RequestState { + class Success(val data: T) : RequestState() + object Loading : RequestState() + class Error(val throwable: Throwable) : RequestState() +} diff --git a/core/src/main/java/dev/carlos/core/domain/network/RequestStatus.kt b/core/src/main/java/dev/carlos/core/domain/network/RequestStatus.kt deleted file mode 100644 index 1c8cafc..0000000 --- a/core/src/main/java/dev/carlos/core/domain/network/RequestStatus.kt +++ /dev/null @@ -1,8 +0,0 @@ -package dev.carlos.core.domain.network - -sealed class RequestStatus { - object Ready : RequestStatus() - object Loading : RequestStatus() - object Errored : RequestStatus() - object Empty : RequestStatus() -} diff --git a/core/src/main/java/dev/carlos/core/extensions/NumbersExtensions.kt b/core/src/main/java/dev/carlos/core/extensions/NumbersExtensions.kt new file mode 100644 index 0000000..3a428da --- /dev/null +++ b/core/src/main/java/dev/carlos/core/extensions/NumbersExtensions.kt @@ -0,0 +1,3 @@ +package dev.carlos.core.extensions + +fun Int.notEmpty() = this > 0 diff --git a/core/src/main/java/dev/carlos/core/extensions/SchedulerExtensions.kt b/core/src/main/java/dev/carlos/core/extensions/SchedulerExtensions.kt new file mode 100644 index 0000000..7ac530c --- /dev/null +++ b/core/src/main/java/dev/carlos/core/extensions/SchedulerExtensions.kt @@ -0,0 +1,19 @@ +package dev.carlos.core.extensions + +import dev.carlos.core.scheduler.Scheduler +import io.reactivex.Completable +import io.reactivex.Flowable +import io.reactivex.Observable +import io.reactivex.Single + +fun Observable.runOnIo(scheduler: Scheduler): Observable = + subscribeOn(scheduler.io()).observeOn(scheduler.ui()) + +fun Single.runOnIo(scheduler: Scheduler): Single = + subscribeOn(scheduler.io()).observeOn(scheduler.ui()) + +fun Flowable.runOnIo(scheduler: Scheduler): Flowable = + subscribeOn(scheduler.io()).observeOn(scheduler.ui()) + +fun Completable.runOnIo(scheduler: Scheduler): Completable = + subscribeOn(scheduler.io()).observeOn(scheduler.ui()) diff --git a/core/src/main/java/dev/carlos/core/scheduler/Scheduler.kt b/core/src/main/java/dev/carlos/core/scheduler/Scheduler.kt new file mode 100644 index 0000000..9a57637 --- /dev/null +++ b/core/src/main/java/dev/carlos/core/scheduler/Scheduler.kt @@ -0,0 +1,10 @@ +package dev.carlos.core.scheduler + +import io.reactivex.Scheduler + +interface Scheduler { + fun io(): Scheduler + fun computation(): Scheduler + fun newThread(): Scheduler + fun ui(): Scheduler +} diff --git a/core/src/main/java/dev/carlos/core/scheduler/SchedulerProvider.kt b/core/src/main/java/dev/carlos/core/scheduler/SchedulerProvider.kt new file mode 100644 index 0000000..f04fb75 --- /dev/null +++ b/core/src/main/java/dev/carlos/core/scheduler/SchedulerProvider.kt @@ -0,0 +1,15 @@ +package dev.carlos.core.scheduler + +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers + +class SchedulerProvider : Scheduler { + + override fun io() = Schedulers.io() + + override fun computation() = Schedulers.computation() + + override fun newThread() = Schedulers.newThread() + + override fun ui(): io.reactivex.Scheduler = AndroidSchedulers.mainThread() +} diff --git a/core/src/main/res/drawable-v24/ic_launcher_foreground.xml b/core/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 1448aba..0000000 --- a/core/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/core/src/main/res/drawable/ic_launcher_background.xml b/core/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 445d0d5..0000000 --- a/core/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 03eed25..0000000 --- a/core/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/core/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 03eed25..0000000 --- a/core/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher.png b/core/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a571e60..0000000 Binary files a/core/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/core/src/main/res/mipmap-hdpi/ic_launcher_round.png b/core/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 61da551..0000000 Binary files a/core/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/core/src/main/res/mipmap-mdpi/ic_launcher.png b/core/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c41dd28..0000000 Binary files a/core/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/core/src/main/res/mipmap-mdpi/ic_launcher_round.png b/core/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index db5080a..0000000 Binary files a/core/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher.png b/core/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 6dba46d..0000000 Binary files a/core/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/core/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/core/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index da31a87..0000000 Binary files a/core/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/core/src/main/res/mipmap-xxhdpi/ic_launcher.png b/core/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 15ac681..0000000 Binary files a/core/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/core/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/core/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index b216f2d..0000000 Binary files a/core/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/core/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/core/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index f25a419..0000000 Binary files a/core/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/core/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/core/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index e96783c..0000000 Binary files a/core/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/settings.gradle b/settings.gradle index ed5015c..51e8e82 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ rootProject.name = "Acronyms" -include ':app', ':core', ':acronyms' +include ':app', ':core', ':shortform' diff --git a/acronyms/.gitignore b/shortform/.gitignore similarity index 100% rename from acronyms/.gitignore rename to shortform/.gitignore diff --git a/acronyms/build.gradle b/shortform/build.gradle similarity index 62% rename from acronyms/build.gradle rename to shortform/build.gradle index d8bda80..92d439c 100644 --- a/acronyms/build.gradle +++ b/shortform/build.gradle @@ -3,6 +3,13 @@ apply from: '../base.gradle' apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' +apply plugin: 'kotlin-parcelize' + +android { + defaultConfig { + buildConfigField "String", "DB_NAME", '"acronyms.db"' + } +} dependencies { implementation project(':core') diff --git a/acronyms/proguard-rules.pro b/shortform/proguard-rules.pro similarity index 100% rename from acronyms/proguard-rules.pro rename to shortform/proguard-rules.pro diff --git a/shortform/src/main/AndroidManifest.xml b/shortform/src/main/AndroidManifest.xml new file mode 100644 index 0000000..7b5a50f --- /dev/null +++ b/shortform/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/shortform/src/main/java/dev/carlos/shortform/data/AcronymsDataRepository.kt b/shortform/src/main/java/dev/carlos/shortform/data/AcronymsDataRepository.kt new file mode 100644 index 0000000..30f4b85 --- /dev/null +++ b/shortform/src/main/java/dev/carlos/shortform/data/AcronymsDataRepository.kt @@ -0,0 +1,16 @@ +package dev.carlos.shortform.data + +import dev.carlos.shortform.data.cloud.AcronymsRemoteSource +import dev.carlos.shortform.data.models.ShortformModel +import dev.carlos.shortform.data.models.toShortformModel +import dev.carlos.shortform.domain.AcronymsRepository +import io.reactivex.Single + +class AcronymsDataRepository( + private val remoteDatasource: AcronymsRemoteSource +) : AcronymsRepository { + + override fun getAcronymDefinition(acronym: String): Single { + return remoteDatasource.getAcronymDefinition(acronym).map { it.single()?.toShortformModel() } + } +} diff --git a/shortform/src/main/java/dev/carlos/shortform/data/cloud/AcronymsRemoteSource.kt b/shortform/src/main/java/dev/carlos/shortform/data/cloud/AcronymsRemoteSource.kt new file mode 100644 index 0000000..315eb7c --- /dev/null +++ b/shortform/src/main/java/dev/carlos/shortform/data/cloud/AcronymsRemoteSource.kt @@ -0,0 +1,8 @@ +package dev.carlos.shortform.data.cloud + +import dev.carlos.shortform.data.cloud.model.ShortformRemote +import io.reactivex.Single + +interface AcronymsRemoteSource { + fun getAcronymDefinition(acronym: String): Single> +} diff --git a/shortform/src/main/java/dev/carlos/shortform/data/cloud/model/ShortformRemote.kt b/shortform/src/main/java/dev/carlos/shortform/data/cloud/model/ShortformRemote.kt new file mode 100644 index 0000000..6fb68c8 --- /dev/null +++ b/shortform/src/main/java/dev/carlos/shortform/data/cloud/model/ShortformRemote.kt @@ -0,0 +1,18 @@ +package dev.carlos.shortform.data.cloud.model + +import android.os.Parcelable +import com.google.gson.annotations.SerializedName +import kotlinx.parcelize.Parcelize + +@Parcelize +data class ShortformRemote( + @SerializedName("sf") val value: String, + @SerializedName("lfs") val results: List +) : Parcelable { + @Parcelize + data class LongformRemote( + @SerializedName("lf") val value: String, + @SerializedName("freq") val corpusFrequency: Int, + @SerializedName("since") val since: Int + ) : Parcelable +} diff --git a/shortform/src/main/java/dev/carlos/shortform/data/cloud/retrofit/AcronymsRemoteDatasource.kt b/shortform/src/main/java/dev/carlos/shortform/data/cloud/retrofit/AcronymsRemoteDatasource.kt new file mode 100644 index 0000000..c02c65d --- /dev/null +++ b/shortform/src/main/java/dev/carlos/shortform/data/cloud/retrofit/AcronymsRemoteDatasource.kt @@ -0,0 +1,11 @@ +package dev.carlos.shortform.data.cloud.retrofit + +import dev.carlos.shortform.data.cloud.AcronymsRemoteSource +import dev.carlos.shortform.data.cloud.model.ShortformRemote +import io.reactivex.Single + +class AcronymsRemoteDatasource(private val acronymsService: AcronymsService) : AcronymsRemoteSource { + override fun getAcronymDefinition(acronym: String): Single> { + return acronymsService.getAcronymDefinition(acronym) + } +} diff --git a/shortform/src/main/java/dev/carlos/shortform/data/cloud/retrofit/AcronymsService.kt b/shortform/src/main/java/dev/carlos/shortform/data/cloud/retrofit/AcronymsService.kt new file mode 100644 index 0000000..d44843c --- /dev/null +++ b/shortform/src/main/java/dev/carlos/shortform/data/cloud/retrofit/AcronymsService.kt @@ -0,0 +1,11 @@ +package dev.carlos.shortform.data.cloud.retrofit + +import dev.carlos.shortform.data.cloud.model.ShortformRemote +import io.reactivex.Single +import retrofit2.http.GET +import retrofit2.http.Query + +interface AcronymsService { + @GET("/software/acromine/dictionary.py") + fun getAcronymDefinition(@Query("sf") acronym: String): Single> +} diff --git a/shortform/src/main/java/dev/carlos/shortform/data/models/Mappers.kt b/shortform/src/main/java/dev/carlos/shortform/data/models/Mappers.kt new file mode 100644 index 0000000..6031961 --- /dev/null +++ b/shortform/src/main/java/dev/carlos/shortform/data/models/Mappers.kt @@ -0,0 +1,7 @@ +package dev.carlos.shortform.data.models + +import dev.carlos.shortform.data.cloud.model.ShortformRemote + +fun ShortformRemote.toShortformModel() = ShortformModel(this.value, this.results.map { + ShortformModel.LongformModel(it.value, it.corpusFrequency, it.since) +}) diff --git a/shortform/src/main/java/dev/carlos/shortform/data/models/ShortformModel.kt b/shortform/src/main/java/dev/carlos/shortform/data/models/ShortformModel.kt new file mode 100644 index 0000000..e36aa13 --- /dev/null +++ b/shortform/src/main/java/dev/carlos/shortform/data/models/ShortformModel.kt @@ -0,0 +1,12 @@ +package dev.carlos.shortform.data.models + +data class ShortformModel( + val value: String, + val results: List +) { + data class LongformModel( + val value: String, + val corpusFrequency: Int, + val since: Int + ) +} diff --git a/shortform/src/main/java/dev/carlos/shortform/di/AcronymsModule.kt b/shortform/src/main/java/dev/carlos/shortform/di/AcronymsModule.kt new file mode 100644 index 0000000..2324c20 --- /dev/null +++ b/shortform/src/main/java/dev/carlos/shortform/di/AcronymsModule.kt @@ -0,0 +1,25 @@ +package dev.carlos.shortform.di + +import dev.carlos.core.domain.network.RemoteClient +import dev.carlos.core.scheduler.Scheduler +import dev.carlos.core.scheduler.SchedulerProvider +import dev.carlos.shortform.data.AcronymsDataRepository +import dev.carlos.shortform.data.cloud.AcronymsRemoteSource +import dev.carlos.shortform.data.cloud.retrofit.AcronymsRemoteDatasource +import dev.carlos.shortform.data.cloud.retrofit.AcronymsService +import dev.carlos.shortform.domain.AcronymsRepository +import dev.carlos.shortform.domain.GetAcronymDefinition +import org.koin.dsl.module + +val acronymsModule = module { + single { SchedulerProvider() } + + single { + get().getClient(AcronymsService::class.java) + } + + factory { AcronymsRemoteDatasource(get()) } + factory { AcronymsDataRepository(get()) } + + factory { GetAcronymDefinition(get(), get()) } +} diff --git a/shortform/src/main/java/dev/carlos/shortform/domain/AcronymsRepository.kt b/shortform/src/main/java/dev/carlos/shortform/domain/AcronymsRepository.kt new file mode 100644 index 0000000..64ce4e5 --- /dev/null +++ b/shortform/src/main/java/dev/carlos/shortform/domain/AcronymsRepository.kt @@ -0,0 +1,9 @@ +package dev.carlos.shortform.domain + +import dev.carlos.shortform.data.models.ShortformModel +import io.reactivex.Flowable +import io.reactivex.Single + +interface AcronymsRepository { + fun getAcronymDefinition(acronym: String): Single +} diff --git a/shortform/src/main/java/dev/carlos/shortform/domain/GetAcronymDefinition.kt b/shortform/src/main/java/dev/carlos/shortform/domain/GetAcronymDefinition.kt new file mode 100644 index 0000000..2eaf816 --- /dev/null +++ b/shortform/src/main/java/dev/carlos/shortform/domain/GetAcronymDefinition.kt @@ -0,0 +1,15 @@ +package dev.carlos.shortform.domain + +import dev.carlos.shortform.data.models.ShortformModel +import dev.carlos.core.extensions.runOnIo +import dev.carlos.core.scheduler.Scheduler +import io.reactivex.Single + +class GetAcronymDefinition( + private val acronymsRepository: AcronymsRepository, + private val scheduler: Scheduler +) { + fun getAcronymDefinition(acronym: String): Single { + return acronymsRepository.getAcronymDefinition(acronym).runOnIo(scheduler) + } +} diff --git a/acronyms/src/main/res/values-night/themes.xml b/shortform/src/main/res/values-night/themes.xml similarity index 100% rename from acronyms/src/main/res/values-night/themes.xml rename to shortform/src/main/res/values-night/themes.xml diff --git a/acronyms/src/main/res/values/colors.xml b/shortform/src/main/res/values/colors.xml similarity index 100% rename from acronyms/src/main/res/values/colors.xml rename to shortform/src/main/res/values/colors.xml diff --git a/acronyms/src/main/res/values/strings.xml b/shortform/src/main/res/values/strings.xml similarity index 100% rename from acronyms/src/main/res/values/strings.xml rename to shortform/src/main/res/values/strings.xml diff --git a/acronyms/src/main/res/values/themes.xml b/shortform/src/main/res/values/themes.xml similarity index 100% rename from acronyms/src/main/res/values/themes.xml rename to shortform/src/main/res/values/themes.xml diff --git a/versions.gradle b/versions.gradle index 9aab55f..ed5da03 100644 --- a/versions.gradle +++ b/versions.gradle @@ -11,6 +11,7 @@ versions.androidx_lifecycle = "2.2.0" versions.androidx_recycler_view = "1.2.0" versions.androidx_navigation = "2.3.5" versions.material_core = "1.3.0" +versions.gson = "2.8.7" versions.okhttp_interceptor = "4.9.1" versions.retrofit = "2.9.0" versions.timber = "4.7.1" @@ -53,8 +54,12 @@ androidx.navigation_ui = "androidx.navigation:navigation-ui-ktx:$versions.androi def material = [:] material.core = "com.google.android.material:material:$versions.material_core" +def gson = [:] +gson.core = "com.google.code.gson:gson:$versions.gson" + def google = [:] google.kotlin = kotlin +google.gson = gson google.androidx = androidx google.material = material deps.google = google