forked from Louvorg/ReaderForSelfoss-multiplatform
Initial Dependency Injection implementation
This commit is contained in:
@ -170,6 +170,9 @@ dependencies {
|
||||
implementation("me.relex:circleindicator:2.1.6")
|
||||
implementation("androidx.viewpager2:viewpager2:1.1.0-beta01")
|
||||
|
||||
//Dependency Injection
|
||||
implementation("org.kodein.di:kodein-di:7.12.0")
|
||||
|
||||
//PhotoView
|
||||
implementation("com.github.chrisbanes:PhotoView:2.3.0")
|
||||
|
||||
|
@ -19,13 +19,10 @@ import bou.amine.apps.readerforselfossv2.android.themes.Toppings
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.Config
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.isBaseUrlValid
|
||||
import com.ftinc.scoop.Scoop
|
||||
import retrofit2.Call
|
||||
import retrofit2.Callback
|
||||
import retrofit2.Response
|
||||
import bou.amine.apps.readerforselfossv2.android.databinding.ActivityAddSourceBinding
|
||||
import bou.amine.apps.readerforselfossv2.android.service.AndroidApiDetailsService
|
||||
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossModel
|
||||
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@ -37,7 +34,7 @@ class AddSourceActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var apiDetailsService: ApiDetailsService
|
||||
private var mSpoutsValue: String? = null
|
||||
private lateinit var api: SelfossApi
|
||||
private lateinit var api: SelfossApiImpl
|
||||
|
||||
private lateinit var appColors: AppColors
|
||||
private lateinit var binding: ActivityAddSourceBinding
|
||||
@ -81,7 +78,7 @@ class AddSourceActivity : AppCompatActivity() {
|
||||
val settings =
|
||||
getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
||||
apiDetailsService = AndroidApiDetailsService(this@AddSourceActivity)
|
||||
api = SelfossApi(
|
||||
api = SelfossApiImpl(
|
||||
// this,
|
||||
// this@AddSourceActivity,
|
||||
// settings.getBoolean("isSelfSignedCert", false),
|
||||
@ -114,7 +111,7 @@ class AddSourceActivity : AppCompatActivity() {
|
||||
|
||||
private fun handleSpoutsSpinner(
|
||||
spoutsSpinner: Spinner,
|
||||
api: SelfossApi?,
|
||||
api: SelfossApiImpl?,
|
||||
mProgress: ProgressBar,
|
||||
formContainer: ConstraintLayout
|
||||
) {
|
||||
@ -182,7 +179,7 @@ class AddSourceActivity : AppCompatActivity() {
|
||||
finish()
|
||||
}
|
||||
|
||||
private fun handleSaveSource(tags: EditText, title: String, url: String, api: SelfossApi) {
|
||||
private fun handleSaveSource(tags: EditText, title: String, url: String, api: SelfossApiImpl) {
|
||||
|
||||
val sourceDetailsUnavailable =
|
||||
title.isEmpty() || url.isEmpty() || mSpoutsValue == null || mSpoutsValue!!.isEmpty()
|
||||
|
@ -54,7 +54,7 @@ import bou.amine.apps.readerforselfossv2.android.utils.persistence.toEntity
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.persistence.toView
|
||||
|
||||
import bou.amine.apps.readerforselfossv2.utils.DateUtils
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossModel
|
||||
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
|
||||
import bou.amine.apps.readerforselfossv2.service.SearchService
|
||||
@ -129,7 +129,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||
private lateinit var tabNewBadge: TextBadgeItem
|
||||
private lateinit var tabArchiveBadge: TextBadgeItem
|
||||
private lateinit var tabStarredBadge: TextBadgeItem
|
||||
private lateinit var api: SelfossApi
|
||||
private lateinit var api: SelfossApiImpl
|
||||
private lateinit var customTabActivityHelper: CustomTabActivityHelper
|
||||
private lateinit var editor: SharedPreferences.Editor
|
||||
private lateinit var sharedPref: SharedPreferences
|
||||
@ -196,7 +196,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||
settings = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
||||
|
||||
apiDetailsService = AndroidApiDetailsService(applicationContext)
|
||||
api = SelfossApi(
|
||||
api = SelfossApiImpl(
|
||||
// this,
|
||||
// this@HomeActivity,
|
||||
// settings.getBoolean("isSelfSignedCert", false),
|
||||
|
@ -15,24 +15,19 @@ import android.view.View
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.widget.TextView
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.work.Logger
|
||||
import bou.amine.apps.readerforselfossv2.android.databinding.ActivityLoginBinding
|
||||
import bou.amine.apps.readerforselfossv2.android.service.AndroidApiDetailsService
|
||||
import bou.amine.apps.readerforselfossv2.android.themes.AppColors
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.Config
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.isBaseUrlValid
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.network.isNetworkAvailable
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
|
||||
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
|
||||
import com.mikepenz.aboutlibraries.LibsBuilder
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import retrofit2.Call
|
||||
import retrofit2.Callback
|
||||
import retrofit2.Response
|
||||
import org.kodein.di.*
|
||||
|
||||
class LoginActivity : AppCompatActivity() {
|
||||
class LoginActivity() : AppCompatActivity(), DIAware {
|
||||
|
||||
private var inValidCount: Int = 0
|
||||
private var isWithSelfSignedCert = false
|
||||
@ -45,6 +40,10 @@ class LoginActivity : AppCompatActivity() {
|
||||
private lateinit var appColors: AppColors
|
||||
private lateinit var binding: ActivityLoginBinding
|
||||
|
||||
override val diContext: DIContext<*> = diContext(this)
|
||||
override val di by lazy { (application as MyApp).di }
|
||||
private val apiDetailsService : ApiDetailsService by instance()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
appColors = AppColors(this@LoginActivity)
|
||||
|
||||
@ -139,7 +138,6 @@ class LoginActivity : AppCompatActivity() {
|
||||
binding.passwordView.error = getString(R.string.wrong_infos)
|
||||
binding.httpLoginView.error = getString(R.string.wrong_infos)
|
||||
binding.httpPasswordView.error = getString(R.string.wrong_infos)
|
||||
showProgress(false)
|
||||
}
|
||||
|
||||
private fun attemptLogin() {
|
||||
@ -219,9 +217,9 @@ class LoginActivity : AppCompatActivity() {
|
||||
editor.putString("httpPassword", httpPassword)
|
||||
editor.putBoolean("isSelfSignedCert", isWithSelfSignedCert)
|
||||
editor.apply()
|
||||
apiDetailsService.refresh()
|
||||
|
||||
val apiDetailsService = AndroidApiDetailsService(this@LoginActivity)
|
||||
val api = SelfossApi(
|
||||
val api = SelfossApiImpl(
|
||||
// this,
|
||||
// this@LoginActivity,
|
||||
// isWithSelfSignedCert,
|
||||
@ -236,15 +234,17 @@ class LoginActivity : AppCompatActivity() {
|
||||
if (result != null && result.isSuccess) {
|
||||
goToMain()
|
||||
} else {
|
||||
preferenceError(Exception("Not success"))
|
||||
CoroutineScope(Dispatchers.Main).launch {
|
||||
preferenceError(Exception("Not success"))
|
||||
}
|
||||
}
|
||||
} catch (cause: Throwable) {
|
||||
Log.e("1", "LOL")
|
||||
Log.e("1", cause.message!!)
|
||||
Log.e("1", cause.stackTraceToString())
|
||||
}
|
||||
}
|
||||
} else {
|
||||
showProgress(false)
|
||||
}
|
||||
showProgress(false)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9,16 +9,26 @@ import android.os.Build
|
||||
import androidx.preference.PreferenceManager
|
||||
import android.widget.ImageView
|
||||
import androidx.multidex.MultiDexApplication
|
||||
import bou.amine.apps.readerforselfossv2.android.service.AndroidApiDetailsService
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.Config
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.glide.loadMaybeBasicAuth
|
||||
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import com.ftinc.scoop.Scoop
|
||||
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
|
||||
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
||||
import org.kodein.di.*
|
||||
import java.util.UUID.randomUUID
|
||||
|
||||
class MyApp : MultiDexApplication() {
|
||||
class MyApp : MultiDexApplication(), DIAware {
|
||||
|
||||
override val di by DI.lazy {
|
||||
bind<Context>() with instance(this@MyApp.applicationContext)
|
||||
|
||||
bind<ApiDetailsService>() with singleton { AndroidApiDetailsService(instance()) }
|
||||
}
|
||||
|
||||
private lateinit var config: Config
|
||||
|
||||
override fun onCreate() {
|
||||
|
@ -25,7 +25,7 @@ import bou.amine.apps.readerforselfossv2.android.themes.AppColors
|
||||
import bou.amine.apps.readerforselfossv2.android.themes.Toppings
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.Config
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.toggleStar
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossModel
|
||||
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
|
||||
import com.ftinc.scoop.Scoop
|
||||
@ -40,7 +40,7 @@ class ReaderActivity : AppCompatActivity() {
|
||||
private lateinit var userIdentifier: String
|
||||
private lateinit var appColors: AppColors
|
||||
|
||||
private lateinit var api: SelfossApi
|
||||
private lateinit var api: SelfossApiImpl
|
||||
|
||||
private lateinit var toolbarMenu: Menu
|
||||
|
||||
@ -101,7 +101,7 @@ class ReaderActivity : AppCompatActivity() {
|
||||
markOnScroll = prefs.getBoolean("mark_on_scroll", false)
|
||||
activeAlignment = prefs.getInt("text_align", JUSTIFY)
|
||||
|
||||
api = SelfossApi(
|
||||
api = SelfossApiImpl(
|
||||
// this,
|
||||
// this@ReaderActivity,
|
||||
// settings.getBoolean("isSelfSignedCert", false),
|
||||
|
@ -15,16 +15,12 @@ import bou.amine.apps.readerforselfossv2.android.themes.AppColors
|
||||
import bou.amine.apps.readerforselfossv2.android.themes.Toppings
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.Config
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.network.isNetworkAvailable
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossModel
|
||||
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
|
||||
import com.ftinc.scoop.Scoop
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import retrofit2.Call
|
||||
import retrofit2.Callback
|
||||
import retrofit2.Response
|
||||
import java.util.ArrayList
|
||||
|
||||
class SourcesActivity : AppCompatActivity() {
|
||||
@ -67,7 +63,7 @@ class SourcesActivity : AppCompatActivity() {
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(this)
|
||||
|
||||
val apiDetailsService = AndroidApiDetailsService(this@SourcesActivity)
|
||||
val api = SelfossApi(
|
||||
val api = SelfossApiImpl(
|
||||
// this,
|
||||
// this@SourcesActivity,
|
||||
// settings.getBoolean("isSelfSignedCert", false),
|
||||
|
@ -17,7 +17,7 @@ import bou.amine.apps.readerforselfossv2.android.utils.customtabs.CustomTabActiv
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.glide.bitmapCenterCrop
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.glide.circularBitmapDrawable
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.network.isNetworkAvailable
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossModel
|
||||
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
|
||||
import bou.amine.apps.readerforselfossv2.service.SearchService
|
||||
@ -32,7 +32,7 @@ import kotlinx.coroutines.launch
|
||||
class ItemCardAdapter(
|
||||
override val app: Activity,
|
||||
override var items: ArrayList<SelfossModel.Item>,
|
||||
override val api: SelfossApi,
|
||||
override val api: SelfossApiImpl,
|
||||
override val apiDetailsService: ApiDetailsService,
|
||||
override val db: AppDatabase,
|
||||
private val helper: CustomTabActivityHelper,
|
||||
|
@ -13,7 +13,7 @@ import bou.amine.apps.readerforselfossv2.android.utils.*
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.customtabs.CustomTabActivityHelper
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.glide.bitmapCenterCrop
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.glide.circularBitmapDrawable
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossModel
|
||||
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
|
||||
import bou.amine.apps.readerforselfossv2.service.SearchService
|
||||
@ -24,7 +24,7 @@ import com.amulyakhare.textdrawable.util.ColorGenerator
|
||||
class ItemListAdapter(
|
||||
override val app: Activity,
|
||||
override var items: ArrayList<SelfossModel.Item>,
|
||||
override val api: SelfossApi,
|
||||
override val api: SelfossApiImpl,
|
||||
override val apiDetailsService: ApiDetailsService,
|
||||
override val db: AppDatabase,
|
||||
private val helper: CustomTabActivityHelper,
|
||||
|
@ -8,7 +8,7 @@ import bou.amine.apps.readerforselfossv2.android.R
|
||||
import bou.amine.apps.readerforselfossv2.android.persistence.database.AppDatabase
|
||||
import bou.amine.apps.readerforselfossv2.android.themes.AppColors
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.Config
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossModel
|
||||
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
|
||||
import bou.amine.apps.readerforselfossv2.service.SearchService
|
||||
@ -19,7 +19,7 @@ import kotlinx.coroutines.launch
|
||||
|
||||
abstract class ItemsAdapter<VH : RecyclerView.ViewHolder?> : RecyclerView.Adapter<VH>() {
|
||||
abstract var items: ArrayList<SelfossModel.Item>
|
||||
abstract val api: SelfossApi
|
||||
abstract val api: SelfossApiImpl
|
||||
abstract val apiDetailsService: ApiDetailsService
|
||||
abstract val db: AppDatabase
|
||||
abstract val userIdentifier: String
|
||||
|
@ -16,7 +16,7 @@ import bou.amine.apps.readerforselfossv2.android.utils.Config
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.glide.circularBitmapDrawable
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.network.isNetworkAvailable
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.toTextDrawableString
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossModel
|
||||
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
|
||||
import com.amulyakhare.textdrawable.TextDrawable
|
||||
@ -28,7 +28,7 @@ import kotlinx.coroutines.launch
|
||||
class SourcesListAdapter(
|
||||
private val app: Activity,
|
||||
private val items: ArrayList<SelfossModel.Source>,
|
||||
private val api: SelfossApi,
|
||||
private val api: SelfossApiImpl,
|
||||
private val apiDetailsService: ApiDetailsService
|
||||
) : RecyclerView.Adapter<SourcesListAdapter.ViewHolder>() {
|
||||
private val c: Context = app.baseContext
|
||||
|
@ -26,7 +26,7 @@ import bou.amine.apps.readerforselfossv2.android.service.AndroidApiDetailsServic
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.Config
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.network.isNetworkAvailable
|
||||
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossModel
|
||||
import bou.amine.apps.readerforselfossv2.service.SearchService
|
||||
import bou.amine.apps.readerforselfossv2.service.SelfossService
|
||||
@ -48,7 +48,7 @@ override fun doWork(): Result {
|
||||
val periodicRefresh = sharedPref.getBoolean("periodic_refresh", false)
|
||||
if (periodicRefresh) {
|
||||
val apiDetailsService = AndroidApiDetailsService(this.context)
|
||||
val api = SelfossApi(
|
||||
val api = SelfossApiImpl(
|
||||
// this.context,
|
||||
// null,
|
||||
// settings.getBoolean("isSelfSignedCert", false),
|
||||
|
@ -40,7 +40,7 @@ import bou.amine.apps.readerforselfossv2.android.utils.customtabs.CustomTabActiv
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.glide.getBitmapInputStream
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.glide.loadMaybeBasicAuth
|
||||
import bou.amine.apps.readerforselfossv2.android.utils.network.isNetworkAvailable
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApi
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossApiImpl
|
||||
import bou.amine.apps.readerforselfossv2.rest.SelfossModel
|
||||
import bou.amine.apps.readerforselfossv2.service.ApiDetailsService
|
||||
import bou.amine.apps.readerforselfossv2.service.SearchService
|
||||
@ -109,7 +109,7 @@ class ArticleFragment : Fragment() {
|
||||
|
||||
dbService = AndroidDeviceDatabaseService(AndroidDeviceDatabase(requireContext()), SearchService(DateUtils(apiDetailsService)))
|
||||
|
||||
service = SelfossService(SelfossApi(apiDetailsService), dbService, SearchService(DateUtils(apiDetailsService)))
|
||||
service = SelfossService(SelfossApiImpl(apiDetailsService), dbService, SearchService(DateUtils(apiDetailsService)))
|
||||
|
||||
val pi: ParecelableItem = requireArguments().getParcelable(ARG_ITEMS)!!
|
||||
|
||||
@ -157,7 +157,7 @@ class ArticleFragment : Fragment() {
|
||||
|
||||
val settings = requireActivity().getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
||||
|
||||
val api = SelfossApi(
|
||||
val api = SelfossApiImpl(
|
||||
// requireContext(),
|
||||
// requireActivity(),
|
||||
// settings.getBoolean("isSelfSignedCert", false),
|
||||
|
@ -19,8 +19,8 @@ class AndroidApiDetailsService(c: Context) : ApiDetailsService {
|
||||
|
||||
override fun getApiVersion(): Int {
|
||||
if (_apiVersion == -1) {
|
||||
_apiVersion = settings.getInt("apiVersionMajor", -1)!!
|
||||
return settings.getInt("apiVersionMajor", -1)!!
|
||||
_apiVersion = settings.getInt("apiVersionMajor", -1)
|
||||
return _apiVersion
|
||||
}
|
||||
return _apiVersion
|
||||
}
|
||||
@ -45,4 +45,12 @@ class AndroidApiDetailsService(c: Context) : ApiDetailsService {
|
||||
}
|
||||
return _password
|
||||
}
|
||||
|
||||
override fun refresh() {
|
||||
_password = settings.getString("password", "")!!
|
||||
_userName = settings.getString("login", "")!!
|
||||
_baseUrl = settings.getString("url", "")!!
|
||||
_baseUrl = settings.getString("url", "")!!
|
||||
_apiVersion = settings.getInt("apiVersionMajor", -1)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user