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