minor refactoring

This commit is contained in:
Phillip Thelen 2022-05-17 13:34:25 +02:00
parent dd3f4e0da1
commit d0ad2ccc1c
4 changed files with 40 additions and 33 deletions

View file

@ -57,6 +57,15 @@ import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.FlowableTransformer
import io.reactivex.rxjava3.functions.Consumer
import io.reactivex.rxjava3.schedulers.Schedulers
import okhttp3.Cache
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Converter
import retrofit2.HttpException
import retrofit2.Retrofit
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
import java.io.File
import java.io.IOException
import java.net.SocketException
@ -65,17 +74,9 @@ import java.net.UnknownHostException
import java.util.GregorianCalendar
import java.util.concurrent.TimeUnit
import javax.net.ssl.SSLException
import okhttp3.Cache
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.HttpException
import retrofit2.Retrofit
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
class ApiClientImpl(
private val gsonConverter: GsonConverterFactory,
private val converter: Converter.Factory,
override val hostConfig: HostConfig,
private val analyticsManager: AnalyticsManager,
private val notificationsManager: NotificationsManager,
@ -161,7 +162,7 @@ class ApiClientImpl(
.client(client)
.baseUrl(server.toString())
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.addConverterFactory(gsonConverter)
.addConverterFactory(converter)
.build()
this.apiService = retrofitAdapter.create(ApiService::class.java)
@ -257,7 +258,7 @@ class ApiClientImpl(
override fun getErrorResponse(throwable: HttpException): ErrorResponse {
val errorResponse = throwable.response()?.errorBody() ?: return ErrorResponse()
val errorConverter = gsonConverter
val errorConverter = converter
.responseBodyConverter(ErrorResponse::class.java, arrayOfNulls(0), retrofitAdapter)
return try {
errorConverter?.convert(errorResponse) as ErrorResponse

View file

@ -10,13 +10,20 @@ import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.BehaviorSubject
import io.reactivex.rxjava3.subjects.PublishSubject
import java.lang.ref.WeakReference
import java.util.*
import java.util.Date
class NotificationsManager {
interface NotificationsManager {
var apiClient: WeakReference<ApiClient>?
fun setNotifications(current: List<Notification>)
fun getNotifications(): Flowable<List<Notification>>
}
class MainNotificationsManager: NotificationsManager {
private val displayNotificationSubject = PublishSubject.create<Notification>()
private val seenNotifications: MutableMap<String, Boolean>
lateinit var apiClient: WeakReference<ApiClient>
override var apiClient: WeakReference<ApiClient>? = null
private val notifications: BehaviorSubject<List<Notification>>
private var lastNotificationHandling: Date? = null
@ -31,13 +38,12 @@ class NotificationsManager {
this.notifications = BehaviorSubject.create()
}
fun setNotifications(current: List<Notification>) {
override fun setNotifications(current: List<Notification>) {
this.notifications.onNext(current)
this.handlePopupNotifications(current)
}
fun getNotifications(): Flowable<List<Notification>> {
override fun getNotifications(): Flowable<List<Notification>> {
return this.notifications.startWithArray(emptyList())
.toFlowable(BackpressureStrategy.LATEST)
}
@ -110,7 +116,7 @@ class NotificationsManager {
}
private fun readNotification(notification: Notification) {
apiClient.get()?.readNotification(notification.id)
apiClient?.get()?.readNotification(notification.id)
?.subscribe({ }, RxErrorHandler.handleEmptyError())
}
}

View file

@ -8,15 +8,16 @@ import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.data.implementation.ApiClientImpl
import com.habitrpg.android.habitica.data.implementation.ApiClientImpl.Companion.createGsonFactory
import com.habitrpg.android.habitica.helpers.KeyHelper
import com.habitrpg.android.habitica.helpers.MainNotificationsManager
import com.habitrpg.android.habitica.helpers.NotificationsManager
import com.habitrpg.android.habitica.proxy.AnalyticsManager
import dagger.Module
import dagger.Provides
import java.lang.ref.WeakReference
import javax.inject.Singleton
import retrofit2.Retrofit
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
import java.lang.ref.WeakReference
import javax.inject.Singleton
@Module
open class ApiModule {
@ -38,7 +39,7 @@ open class ApiModule {
@Provides
@Singleton
fun providesPopupNotificationsManager(): NotificationsManager {
return NotificationsManager()
return MainNotificationsManager()
}
@Provides

View file

@ -28,9 +28,9 @@ import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar
import io.reactivex.rxjava3.core.Flowable
import javax.inject.Inject
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import javax.inject.Inject
class SkillsFragment : BaseMainFragment<FragmentSkillsBinding>() {
internal var adapter: SkillsRecyclerViewAdapter? = null
@ -81,18 +81,17 @@ class SkillsFragment : BaseMainFragment<FragmentSkillsBinding>() {
adapter?.specialItems = user.items?.special
Flowable.combineLatest(
userRepository.getSkills(user),
userRepository.getSpecialItems(user),
{ skills, items ->
val allEntries = mutableListOf<Skill>()
for (skill in skills) {
allEntries.add(skill)
}
for (item in items) {
allEntries.add(item)
}
return@combineLatest allEntries
userRepository.getSpecialItems(user)
) { skills, items ->
val allEntries = mutableListOf<Skill>()
for (skill in skills) {
allEntries.add(skill)
}
).subscribe({ skills -> adapter?.setSkillList(skills) }, RxErrorHandler.handleEmptyError())
for (item in items) {
allEntries.add(item)
}
return@combineLatest allEntries
}.subscribe({ skills -> adapter?.setSkillList(skills) }, RxErrorHandler.handleEmptyError())
}
private fun onSkillSelected(skill: Skill) {