Use dependency injection for most singletons

This commit is contained in:
MM20
2021-10-10 12:15:54 +02:00
parent 023bb2cbb1
commit 087d4fd455
144 changed files with 1789 additions and 1277 deletions
@@ -52,15 +52,6 @@ class Wikipedia(
return intent.intent
}
override fun serialize(): String {
val json = JSONObject()
json.put("label", label)
json.put("text", text)
json.put("id", id)
json.put("image", image)
return json.toString()
}
companion object {
fun search(context: Context, query: String, client: OkHttpClient): Wikipedia? {
@@ -121,15 +112,5 @@ class Wikipedia(
.optJSONObject("thumbnail")
?.getString("source")
}
fun deserialize(serialized: String): Wikipedia {
val json = JSONObject(serialized)
return Wikipedia(
label = json.getString("label"),
text = json.getString("text"),
id = json.getLong("id"),
image = json.optString("image")
)
}
}
}
@@ -0,0 +1,10 @@
package de.mm20.launcher2.wikipedia
import org.koin.android.ext.koin.androidContext
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module
val wikipediaModule = module {
single { WikipediaRepository(androidContext()) }
viewModel { WikipediaViewModel(get()) }
}
@@ -1,7 +1,6 @@
package de.mm20.launcher2.wikipedia
import android.content.Context
import androidx.core.text.HtmlCompat
import androidx.lifecycle.MutableLiveData
import de.mm20.launcher2.crashreporter.CrashReporter
import de.mm20.launcher2.preferences.LauncherPreferences
@@ -10,11 +9,9 @@ import de.mm20.launcher2.search.data.Wikipedia
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.io.IOException
import java.util.concurrent.TimeUnit
import kotlin.math.min
class WikipediaRepository private constructor(val context: Context) : BaseSearchableRepository() {
class WikipediaRepository(val context: Context) : BaseSearchableRepository() {
val wikipedia = MutableLiveData<Wikipedia?>()
@@ -85,14 +82,4 @@ class WikipediaRepository private constructor(val context: Context) : BaseSearch
wikipedia.value = wiki
}
companion object {
private lateinit var instance: WikipediaRepository
fun getInstance(context: Context): WikipediaRepository {
if (!::instance.isInitialized) instance =
WikipediaRepository(context.applicationContext)
return instance
}
}
}
@@ -0,0 +1,34 @@
package de.mm20.launcher2.wikipedia
import de.mm20.launcher2.search.SearchableDeserializer
import de.mm20.launcher2.search.SearchableSerializer
import de.mm20.launcher2.search.data.Searchable
import de.mm20.launcher2.search.data.Wikipedia
import org.json.JSONObject
class WikipediaSerializer : SearchableSerializer {
override fun serialize(searchable: Searchable): String {
searchable as Wikipedia
val json = JSONObject()
json.put("label", searchable.label)
json.put("text", searchable.text)
json.put("id", searchable.id)
json.put("image", searchable.image)
return json.toString()
}
override val typePrefix: String
get() = "wikipedia"
}
class WikipediaDeserializer : SearchableDeserializer {
override fun deserialize(serialized: String): Searchable? {
val json = JSONObject(serialized)
return Wikipedia(
label = json.getString("label"),
text = json.getString("text"),
id = json.getLong("id"),
image = json.optString("image")
)
}
}
@@ -1,10 +1,11 @@
package de.mm20.launcher2.wikipedia
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import de.mm20.launcher2.search.data.Wikipedia
class WikipediaViewModel(val app: Application): AndroidViewModel(app) {
val wikipedia: LiveData<Wikipedia?> = WikipediaRepository.getInstance(app).wikipedia
class WikipediaViewModel(
wikipediaRepository: WikipediaRepository
): ViewModel() {
val wikipedia: LiveData<Wikipedia?> = wikipediaRepository.wikipedia
}