diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt index 3b74dc3cb..21b796897 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt @@ -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 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt index bc25c8ca7..ef3bb182f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/NotificationsManager.kt @@ -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? + + fun setNotifications(current: List) + fun getNotifications(): Flowable> +} + +class MainNotificationsManager: NotificationsManager { private val displayNotificationSubject = PublishSubject.create() private val seenNotifications: MutableMap - lateinit var apiClient: WeakReference + override var apiClient: WeakReference? = null private val notifications: BehaviorSubject> private var lastNotificationHandling: Date? = null @@ -31,13 +38,12 @@ class NotificationsManager { this.notifications = BehaviorSubject.create() } - fun setNotifications(current: List) { + override fun setNotifications(current: List) { this.notifications.onNext(current) - this.handlePopupNotifications(current) } - fun getNotifications(): Flowable> { + override fun getNotifications(): Flowable> { 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()) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.kt index f8a7335c1..2e7801197 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/ApiModule.kt @@ -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 diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt index 579975aac..c5d47dd86 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt @@ -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() { internal var adapter: SkillsRecyclerViewAdapter? = null @@ -81,18 +81,17 @@ class SkillsFragment : BaseMainFragment() { adapter?.specialItems = user.items?.special Flowable.combineLatest( userRepository.getSkills(user), - userRepository.getSpecialItems(user), - { skills, items -> - val allEntries = mutableListOf() - 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() + 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) {