Use dependency injection for most singletons
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user