mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-05-19 20:29:02 +00:00
minor refactoring
This commit is contained in:
parent
dd3f4e0da1
commit
d0ad2ccc1c
4 changed files with 40 additions and 33 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue