Update dependencies

This commit is contained in:
Phillip Thelen 2020-10-06 09:29:45 +02:00
parent da3cb9d93d
commit e80389cffb
156 changed files with 625 additions and 609 deletions

View file

@ -42,20 +42,20 @@ repositories {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
//Networking
implementation 'com.squareup.okhttp3:okhttp:3.14.6'
implementation 'com.squareup.okhttp3:logging-interceptor:3.14.6'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'
//REST API handling
implementation('com.squareup.retrofit2:retrofit:2.7.1') {
implementation('com.squareup.retrofit2:retrofit:2.9.0') {
exclude module: 'okhttp'
}
implementation 'com.squareup.retrofit2:converter-gson:2.7.1'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.7.1'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
//Crash Logging
implementation 'com.google.firebase:firebase-crashlytics:17.2.1'
implementation 'com.google.firebase:firebase-crashlytics:17.2.2'
//Dependency Injection
implementation 'com.google.dagger:dagger:2.27'
kapt 'com.google.dagger:dagger-compiler:2.25.4'
implementation 'com.google.dagger:dagger:2.29.1'
kapt 'com.google.dagger:dagger-compiler:2.29.1'
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
compileOnly 'com.github.pengrad:jdk9-deps:1.0'
//App Compatibility and Material Design
@ -64,36 +64,34 @@ dependencies {
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
// Markdown
implementation "io.noties.markwon:core:4.2.0"
implementation "io.noties.markwon:ext-strikethrough:4.2.0"
implementation "io.noties.markwon:image:4.2.0"
implementation "io.noties.markwon:recycler:4.2.0"
implementation "io.noties.markwon:html:4.2.0"
// About View for all dependent Libraries, we are using
implementation('com.mikepenz:aboutlibraries:5.9.4@aar') {
transitive = true
}
implementation "io.noties.markwon:core:4.6.0"
implementation "io.noties.markwon:ext-strikethrough:4.6.0"
implementation "io.noties.markwon:image:4.6.0"
implementation "io.noties.markwon:recycler:4.6.0"
implementation "io.noties.markwon:html:4.6.0"
//Eventbus
implementation 'org.greenrobot:eventbus:3.1.1'
implementation 'org.greenrobot:eventbus:3.2.0'
// IAP Handling / Verification
implementation 'org.solovyev.android:checkout:1.2.1'
implementation 'org.solovyev.android:checkout:1.2.2'
//Facebook
implementation('com.facebook.android:facebook-android-sdk:4.40.0') {
implementation('com.facebook.android:facebook-android-sdk:7.1.0') {
transitive = true
}
implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1@aar'
//RxJava
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.17'
implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.6'
implementation 'io.reactivex.rxjava3:rxkotlin:3.0.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.19'
implementation "com.github.akarnokd:rxjava3-bridge:3.0.0"
//Analytics
implementation 'com.amplitude:android-sdk:2.23.2'
implementation 'com.amplitude:android-sdk:2.25.2'
// Fresco Image Management Library
implementation('com.facebook.fresco:fresco:2.0.0') {
implementation('com.facebook.fresco:fresco:2.3.0') {
exclude module: 'bolts-android'
}
implementation('com.facebook.fresco:animated-gif:2.0.0') {
implementation('com.facebook.fresco:animated-gif:2.3.0') {
exclude module: 'bolts-android'
}
//Tests
@ -110,20 +108,18 @@ dependencies {
testImplementation 'org.powermock:powermock-module-junit4-rule:1.7.0'
testImplementation 'org.powermock:powermock-module-junit4:1.7.0'
//Leak Detection
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2'
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5'
//Push Notifications
implementation 'com.google.firebase:firebase-core:17.5.0'
implementation 'com.google.firebase:firebase-messaging:20.2.4'
implementation 'com.google.firebase:firebase-messaging:20.3.0'
implementation 'com.google.firebase:firebase-config:19.2.0'
implementation 'com.google.firebase:firebase-perf:19.0.8'
implementation 'com.google.firebase:firebase-perf:19.0.9'
implementation 'com.google.android.gms:play-services-auth:18.1.0'
implementation 'io.realm:android-adapters:3.1.0'
implementation 'io.realm:android-adapters:4.0.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'com.nex3z:flow-layout:1.2.2'
implementation 'androidx.core:core-ktx:1.3.1'
implementation 'androidx.core:core-ktx:1.3.2'
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
implementation "androidx.lifecycle:lifecycle-common-java8:2.2.0"
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
@ -153,15 +149,14 @@ android {
vectorDrawables.useSupportLibrary = true
buildConfigField "String", "STORE", "\"google\""
buildConfigField "String", "TESTING_LEVEL", "\"production\""
multiDexEnabled true
resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW"
versionCode 2571
versionName "3.0.1"
versionCode 2587
versionName "3.1"
}
viewBinding {
enabled = true
buildFeatures {
viewBinding true
}
lintOptions {
@ -177,7 +172,6 @@ android {
debug {
applicationIdSuffix ".debug"
debuggable true
multiDexEnabled true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// Disable fabric build ID generation for debug builds
@ -189,7 +183,6 @@ android {
release {
signingConfig signingConfigs.release
debuggable false
multiDexEnabled true
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

View file

@ -1,14 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorContentBackground"
android:foreground="?selectableItemBackground"
android:orientation="vertical">
android:foreground="?selectableItemBackground">
<FrameLayout
<LinearLayout
android:id="@+id/main_task_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -16,11 +14,8 @@
android:layout_marginVertical="@dimen/task_spacing_vertical"
android:background="@drawable/task_background"
android:clipChildren="true"
android:minHeight="@dimen/task_min_height">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:minHeight="@dimen/task_min_height"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -73,6 +68,5 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</LinearLayout>
</FrameLayout>

View file

@ -59,7 +59,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Body2"
android:textColor="@color/black_50_alpha"
android:textColor="@color/text_secondary"
tools:text="These are the notes"
android:gravity="center"/>
</merge>

View file

@ -83,7 +83,7 @@
android:gravity="center"
android:minWidth="20dp"
android:paddingTop="0dp"
android:textColor="@color/text_inverted"
android:textColor="@color/white"
android:textSize="12sp"
android:visibility="gone"
tools:text="1"
@ -116,7 +116,7 @@
android:gravity="center"
android:minWidth="20dp"
android:paddingTop="0dp"
android:textColor="#FFF"
android:textColor="@color/white"
android:textSize="12sp"
android:visibility="gone"
tools:text="1"

View file

@ -11,9 +11,8 @@
android:layout_height="wrap_content"
android:padding="0dp"
android:src="@drawable/ic_close_purple_300_36dp"
android:tint="?colorPrimary"
android:tintMode="src_atop"
style="@style/Base.Widget.AppCompat.Button.Borderless"/>
android:tint="@color/color_accent"
android:background="@color/transparent"/>
<EditText
android:id="@+id/edit_text"
android:layout_width="0dp"

View file

@ -9,8 +9,8 @@
android:layout_gravity="center_vertical"
android:paddingTop="@dimen/task_top_bottom_padding"
android:paddingBottom="@dimen/task_top_bottom_padding"
android:paddingEnd="@dimen/task_text_padding"
android:paddingStart="@dimen/task_text_padding">
android:layout_marginEnd="@dimen/task_text_padding"
android:layout_marginStart="@dimen/task_text_padding">
<com.habitrpg.android.habitica.ui.views.EllipsisTextView
android:id="@+id/checkedTextView"
style="@style/Subheader3"
@ -32,6 +32,7 @@
android:ellipsize="end"
android:textSize="13sp"
tools:text="Notes"
android:layout_marginTop="1dp"
android:layout_marginBottom="7dp"/>
<Button

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
@ -7,7 +7,7 @@
android:foreground="?selectableItemBackground"
android:orientation="vertical">
<FrameLayout
<LinearLayout
android:id="@+id/main_task_wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -15,12 +15,8 @@
android:layout_marginVertical="@dimen/task_spacing_vertical"
android:background="@drawable/task_background"
android:clipChildren="true"
android:minHeight="@dimen/task_min_height">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:minHeight="@dimen/task_min_height"
android:orientation="vertical">
<LinearLayout
android:id="@+id/card_view"
android:layout_width="match_parent"
@ -76,6 +72,5 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</LinearLayout>
</FrameLayout>

View file

@ -1,5 +1,6 @@
package com.habitrpg.android.habitica
import android.app.Application
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
@ -11,7 +12,6 @@ import android.database.sqlite.SQLiteDatabase
import android.util.Log
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.edit
import androidx.multidex.MultiDexApplication
import androidx.preference.PreferenceManager
import com.amplitude.api.Amplitude
import com.amplitude.api.Identify
@ -33,8 +33,6 @@ import com.habitrpg.android.habitica.ui.activities.IntroActivity
import com.habitrpg.android.habitica.ui.activities.LoginActivity
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.squareup.leakcanary.LeakCanary
import com.squareup.leakcanary.RefWatcher
import io.realm.Realm
import io.realm.RealmConfiguration
import org.solovyev.android.checkout.Billing
@ -44,8 +42,7 @@ import org.solovyev.android.checkout.PurchaseVerifier
import javax.inject.Inject
//contains all HabiticaApplicationLogic except dagger componentInitialisation
abstract class HabiticaBaseApplication : MultiDexApplication() {
var refWatcher: RefWatcher? = null
abstract class HabiticaBaseApplication : Application() {
@Inject
internal lateinit var lazyApiHelper: ApiClient
@Inject
@ -69,16 +66,10 @@ abstract class HabiticaBaseApplication : MultiDexApplication() {
override fun onCreate() {
super.onCreate()
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return
}
setupRealm()
setupDagger()
setupRemoteConfig()
setupNotifications()
refWatcher = LeakCanary.install(this)
createBillingAndCheckout()
HabiticaIconsHelper.init(this)
MarkdownParser.setup(this)

View file

@ -17,7 +17,7 @@ import com.habitrpg.android.habitica.models.tasks.TaskList
import com.habitrpg.android.habitica.models.user.Items
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import retrofit2.http.*
@JvmSuppressWildcards

View file

@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.api;
import com.habitrpg.android.habitica.models.responses.MaintenanceResponse;
import io.reactivex.Flowable;
import io.reactivex.rxjava3.core.Flowable;
import retrofit2.http.GET;
public interface MaintenanceApiService {

View file

@ -15,8 +15,8 @@ import com.habitrpg.android.habitica.models.tasks.TaskList
import com.habitrpg.android.habitica.models.user.Items
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.FlowableTransformer
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.FlowableTransformer
import retrofit2.HttpException
@ -54,17 +54,17 @@ interface ApiClient {
fun buyItem(itemKey: String, purchaseQuantity: Int): Flowable<BuyResponse>
fun purchaseItem(type: String, itemKey: String, purchaseQuantity: Int): Flowable<Any>
fun purchaseItem(type: String, itemKey: String, purchaseQuantity: Int): Flowable<Void>
fun purchaseHourglassItem(type: String, itemKey: String): Flowable<Any>
fun purchaseHourglassItem(type: String, itemKey: String): Flowable<Void>
fun purchaseMysterySet(itemKey: String): Flowable<Any>
fun purchaseMysterySet(itemKey: String): Flowable<Void>
fun purchaseQuest(key: String): Flowable<Any>
fun purchaseSpecialSpell(key: String): Flowable<Any>
fun purchaseQuest(key: String): Flowable<Void>
fun purchaseSpecialSpell(key: String): Flowable<Void>
fun validateSubscription(request: SubscriptionValidationRequest): Flowable<Any>
fun validateNoRenewSubscription(request: PurchaseValidationRequest): Flowable<Any>
fun cancelSubscription(): Flowable<Any>
fun cancelSubscription(): Flowable<Void>
fun sellItem(itemType: String, itemKey: String): Flowable<User>
@ -214,9 +214,9 @@ interface ApiClient {
fun debugAddTenGems(): Flowable<Void>
// Notifications
fun readNotification(notificationId: String): Flowable<List<*>>
fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>>
fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>>
fun readNotification(notificationId: String): Flowable<List<Any>>
fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
fun getErrorResponse(throwable: HttpException): ErrorResponse

View file

@ -4,7 +4,7 @@ import com.habitrpg.android.habitica.models.social.Challenge
import com.habitrpg.android.habitica.models.social.ChallengeMembership
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.tasks.TaskList
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
interface ChallengeRepository : BaseRepository {

View file

@ -4,7 +4,7 @@ import android.content.Context
import com.habitrpg.android.habitica.models.ContentResult
import com.habitrpg.android.habitica.models.WorldState
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
interface ContentRepository {

View file

@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data
import com.habitrpg.android.habitica.models.inventory.Customization
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
interface CustomizationRepository : BaseRepository {

View file

@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data
import com.habitrpg.android.habitica.models.FAQArticle
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
interface FAQRepository : BaseRepository {

View file

@ -6,7 +6,7 @@ import com.habitrpg.android.habitica.models.responses.FeedResponse
import com.habitrpg.android.habitica.models.shops.Shop
import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.models.user.*
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
@ -65,14 +65,14 @@ interface InventoryRepository : BaseRepository {
fun retrieveShopInventory(identifier: String): Flowable<Shop>
fun retrieveMarketGear(): Flowable<Shop>
fun purchaseMysterySet(categoryIdentifier: String): Flowable<Any>
fun purchaseMysterySet(categoryIdentifier: String): Flowable<Void>
fun purchaseHourglassItem(purchaseType: String, key: String): Flowable<Any>
fun purchaseHourglassItem(purchaseType: String, key: String): Flowable<Void>
fun purchaseQuest(key: String): Flowable<Any>
fun purchaseSpecialSpell(key: String): Flowable<Any>
fun purchaseQuest(key: String): Flowable<Void>
fun purchaseSpecialSpell(key: String): Flowable<Void>
fun purchaseItem(purchaseType: String, key: String, purchaseQuantity: Int): Flowable<Any>
fun purchaseItem(purchaseType: String, key: String, purchaseQuantity: Int): Flowable<Void>
fun togglePinnedItem(item: ShopItem): Flowable<List<ShopItem>>
fun getItems(itemClass: Class<out Item>, keys: Array<String>): Flowable<out RealmResults<out Item>>

View file

@ -6,8 +6,8 @@ import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult
import com.habitrpg.android.habitica.models.social.*
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.Single
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Single
import io.realm.RealmResults
import java.util.*

View file

@ -2,8 +2,8 @@ package com.habitrpg.android.habitica.data
import com.habitrpg.android.habitica.models.Tag
import io.reactivex.Flowable
import io.reactivex.Single
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Single
import io.realm.RealmResults
interface TagRepository : BaseRepository {

View file

@ -6,9 +6,9 @@ import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.tasks.TaskList
import com.habitrpg.android.habitica.models.tasks.TasksOrder
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.Maybe
import io.reactivex.Single
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.core.Single
import io.realm.Realm
import io.realm.RealmResults
import java.util.*

View file

@ -1,7 +1,7 @@
package com.habitrpg.android.habitica.data
import com.habitrpg.android.habitica.models.TutorialStep
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
interface TutorialRepository : BaseRepository {

View file

@ -12,8 +12,8 @@ import com.habitrpg.android.habitica.models.responses.VerifyUsernameResponse
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.Maybe
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Maybe
import io.realm.RealmResults
interface UserRepository : BaseRepository {
@ -52,9 +52,9 @@ interface UserRepository : BaseRepository {
fun runCron(tasks: MutableList<Task>)
fun runCron()
fun readNotification(id: String): Flowable<List<*>>
fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>>
fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>>
fun readNotification(id: String): Flowable<List<Any>>
fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
fun changeCustomDayStart(dayStartTime: Int): Flowable<User>

View file

@ -32,11 +32,11 @@ import com.habitrpg.android.habitica.models.user.Items
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
import io.reactivex.Flowable
import io.reactivex.FlowableTransformer
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.FlowableTransformer
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.functions.Consumer
import io.reactivex.rxjava3.schedulers.Schedulers
import okhttp3.Cache
import okhttp3.OkHttpClient
import okhttp3.Request
@ -44,7 +44,7 @@ import okhttp3.logging.HttpLoggingInterceptor
import org.greenrobot.eventbus.EventBus
import retrofit2.HttpException
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
import java.io.IOException
import java.net.SocketException
@ -125,9 +125,9 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
if (BuildConfig.STAGING_KEY.isNotEmpty()) {
builder = builder.header("Authorization", "Basic " + BuildConfig.STAGING_KEY)
}
val request = builder.method(original.method(), original.body())
val request = builder.method(original.method, original.body)
.build()
lastAPICallURL = original.url().toString()
lastAPICallURL = original.url.toString()
chain.proceed(request)
}
.readTimeout(2400, TimeUnit.SECONDS)
@ -138,7 +138,7 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
retrofitAdapter = Retrofit.Builder()
.client(client)
.baseUrl(server.toString())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.addConverterFactory(gsonConverter)
.build()
@ -193,12 +193,12 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
this.showConnectionProblemDialog(R.string.internal_error_api)
} else if (throwableClass == SocketTimeoutException::class.java || UnknownHostException::class.java == throwableClass) {
this.showConnectionProblemDialog(R.string.network_error_no_network_body)
} else if (throwableClass == retrofit2.adapter.rxjava2.HttpException::class.java) {
} else if (throwableClass == retrofit2.adapter.rxjava3.HttpException::class.java) {
val error = throwable as HttpException
val res = getErrorResponse(error)
val status = error.code()
if (status == 404 || error.response()?.raw()?.request()?.url()?.toString()?.endsWith("/user/push-devices") == true) {
if (status == 404 || error.response()?.raw()?.request?.url?.toString()?.endsWith("/user/push-devices") == true) {
//workaround for an error that sometimes displays that the user already has this push device
return
}
@ -337,7 +337,7 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
return apiService.blockMember(userID).compose(configureApiCallObserver())
}
override fun purchaseItem(type: String, itemKey: String, purchaseQuantity: Int): Flowable<Any> {
override fun purchaseItem(type: String, itemKey: String, purchaseQuantity: Int): Flowable<Void> {
return apiService.purchaseItem(type, itemKey, mapOf(Pair("quantity", purchaseQuantity))).compose(configureApiCallObserver())
}
@ -359,23 +359,23 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
}
}
override fun cancelSubscription(): Flowable<Any> {
override fun cancelSubscription(): Flowable<Void> {
return apiService.cancelSubscription().compose(configureApiCallObserver())
}
override fun purchaseHourglassItem(type: String, itemKey: String): Flowable<Any> {
override fun purchaseHourglassItem(type: String, itemKey: String): Flowable<Void> {
return apiService.purchaseHourglassItem(type, itemKey).compose(configureApiCallObserver())
}
override fun purchaseMysterySet(itemKey: String): Flowable<Any> {
override fun purchaseMysterySet(itemKey: String): Flowable<Void> {
return apiService.purchaseMysterySet(itemKey).compose(configureApiCallObserver())
}
override fun purchaseQuest(key: String): Flowable<Any> {
override fun purchaseQuest(key: String): Flowable<Void> {
return apiService.purchaseQuest(key).compose(configureApiCallObserver())
}
override fun purchaseSpecialSpell(key: String): Flowable<Any> {
override fun purchaseSpecialSpell(key: String): Flowable<Void> {
return apiService.purchaseSpecialSpell(key).compose(configureApiCallObserver())
}
@ -690,15 +690,15 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
return apiService.debugAddTenGems().compose(configureApiCallObserver())
}
override fun readNotification(notificationId: String): Flowable<List<*>> {
override fun readNotification(notificationId: String): Flowable<List<Any>> {
return apiService.readNotification(notificationId).compose(configureApiCallObserver())
}
override fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> {
override fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>> {
return apiService.readNotifications(notificationIds).compose(configureApiCallObserver())
}
override fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> {
override fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>> {
return apiService.seeNotifications(notificationIds).compose(configureApiCallObserver())
}

View file

@ -9,7 +9,7 @@ import com.habitrpg.android.habitica.models.social.ChallengeMembership
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.tasks.TaskList
import com.habitrpg.android.habitica.models.tasks.TasksOrder
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults

View file

@ -8,7 +8,7 @@ import com.habitrpg.android.habitica.data.local.ContentLocalRepository
import com.habitrpg.android.habitica.models.ContentResult
import com.habitrpg.android.habitica.models.WorldState
import com.habitrpg.android.habitica.models.inventory.SpecialItem
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmList
import java.util.*

View file

@ -5,7 +5,7 @@ import com.habitrpg.android.habitica.data.CustomizationRepository
import com.habitrpg.android.habitica.data.local.CustomizationLocalRepository
import com.habitrpg.android.habitica.models.inventory.Customization
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
class CustomizationRepositoryImpl(localRepository: CustomizationLocalRepository, apiClient: ApiClient, userID: String) : BaseRepositoryImpl<CustomizationLocalRepository>(localRepository, apiClient, userID), CustomizationRepository {

View file

@ -5,7 +5,7 @@ import com.habitrpg.android.habitica.data.FAQRepository
import com.habitrpg.android.habitica.data.local.FAQLocalRepository
import com.habitrpg.android.habitica.models.FAQArticle
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults

View file

@ -10,7 +10,7 @@ import com.habitrpg.android.habitica.models.responses.FeedResponse
import com.habitrpg.android.habitica.models.shops.Shop
import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.models.user.*
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
class InventoryRepositoryImpl(localRepository: InventoryLocalRepository, apiClient: ApiClient, userID: String, var appConfigManager: AppConfigManager) : BaseRepositoryImpl<InventoryLocalRepository>(localRepository, apiClient, userID), InventoryRepository {
@ -276,23 +276,23 @@ class InventoryRepositoryImpl(localRepository: InventoryLocalRepository, apiClie
return apiClient.retrieveMarketGear()
}
override fun purchaseMysterySet(categoryIdentifier: String): Flowable<Any> {
override fun purchaseMysterySet(categoryIdentifier: String): Flowable<Void> {
return apiClient.purchaseMysterySet(categoryIdentifier)
}
override fun purchaseHourglassItem(purchaseType: String, key: String): Flowable<Any> {
override fun purchaseHourglassItem(purchaseType: String, key: String): Flowable<Void> {
return apiClient.purchaseHourglassItem(purchaseType, key)
}
override fun purchaseQuest(key: String): Flowable<Any> {
override fun purchaseQuest(key: String): Flowable<Void> {
return apiClient.purchaseQuest(key)
}
override fun purchaseSpecialSpell(key: String): Flowable<Any> {
override fun purchaseSpecialSpell(key: String): Flowable<Void> {
return apiClient.purchaseSpecialSpell(key)
}
override fun purchaseItem(purchaseType: String, key: String, purchaseQuantity: Int): Flowable<Any> {
override fun purchaseItem(purchaseType: String, key: String, purchaseQuantity: Int): Flowable<Void> {
return apiClient.purchaseItem(purchaseType, key, purchaseQuantity)
}

View file

@ -11,8 +11,8 @@ import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult
import com.habitrpg.android.habitica.models.social.*
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.Single
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Single
import io.realm.RealmResults
import java.util.*
import kotlin.collections.HashMap

View file

@ -4,8 +4,8 @@ import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.data.TagRepository
import com.habitrpg.android.habitica.data.local.TagLocalRepository
import com.habitrpg.android.habitica.models.Tag
import io.reactivex.Flowable
import io.reactivex.Single
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Single
import io.realm.RealmResults

View file

@ -12,9 +12,9 @@ import com.habitrpg.android.habitica.models.responses.TaskScoringResult
import com.habitrpg.android.habitica.models.tasks.*
import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.Maybe
import io.reactivex.Single
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.core.Single
import io.realm.Realm
import io.realm.RealmResults
import java.text.SimpleDateFormat

View file

@ -4,7 +4,7 @@ import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.data.TutorialRepository
import com.habitrpg.android.habitica.data.local.TutorialLocalRepository
import com.habitrpg.android.habitica.models.TutorialStep
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults

View file

@ -18,8 +18,8 @@ import com.habitrpg.android.habitica.models.responses.VerifyUsernameResponse
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.Maybe
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Maybe
import io.realm.RealmResults
import java.util.*
import java.util.concurrent.TimeUnit
@ -171,15 +171,15 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
runCron(ArrayList())
}
override fun readNotification(id: String): Flowable<List<*>> = apiClient.readNotification(id)
override fun readNotification(id: String): Flowable<List<Any>> = apiClient.readNotification(id)
override fun getUserQuestStatus(): Flowable<UserQuestStatus> {
return localRepository.getUserQuestStatus(userID)
}
override fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> =
override fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>> =
apiClient.readNotifications(notificationIds)
override fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> =
override fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>> =
apiClient.seeNotifications(notificationIds)
override fun changeCustomDayStart(dayStartTime: Int): Flowable<User> {

View file

@ -5,7 +5,7 @@ import com.habitrpg.android.habitica.models.social.Challenge
import com.habitrpg.android.habitica.models.social.ChallengeMembership
import com.habitrpg.android.habitica.models.tasks.Task
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
interface ChallengeLocalRepository : BaseLocalRepository {

View file

@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data.local
import com.habitrpg.android.habitica.models.inventory.Customization
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
interface CustomizationLocalRepository : ContentLocalRepository {

View file

@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data.local
import com.habitrpg.android.habitica.models.FAQArticle
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
interface FAQLocalRepository : ContentLocalRepository {

View file

@ -6,7 +6,7 @@ import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.OwnedMount
import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
interface InventoryLocalRepository : ContentLocalRepository {

View file

@ -6,7 +6,7 @@ import com.habitrpg.android.habitica.models.social.Group
import com.habitrpg.android.habitica.models.social.GroupMembership
import com.habitrpg.android.habitica.models.social.InboxConversation
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
interface SocialLocalRepository : BaseLocalRepository {

View file

@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data.local
import com.habitrpg.android.habitica.models.Tag
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
interface TagLocalRepository : BaseLocalRepository {

View file

@ -5,8 +5,8 @@ import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.tasks.TaskList
import com.habitrpg.android.habitica.models.tasks.TasksOrder
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.Maybe
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Maybe
import io.realm.RealmResults
interface TaskLocalRepository : BaseLocalRepository {

View file

@ -1,7 +1,7 @@
package com.habitrpg.android.habitica.data.local
import com.habitrpg.android.habitica.models.TutorialStep
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
interface TutorialLocalRepository : BaseLocalRepository {

View file

@ -6,7 +6,7 @@ import com.habitrpg.android.habitica.models.Skill
import com.habitrpg.android.habitica.models.TutorialStep
import com.habitrpg.android.habitica.models.social.ChatMessage
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
enum class UserQuestStatus {

View file

@ -4,7 +4,8 @@ import com.habitrpg.android.habitica.data.local.ChallengeLocalRepository
import com.habitrpg.android.habitica.models.social.Challenge
import com.habitrpg.android.habitica.models.social.ChallengeMembership
import com.habitrpg.android.habitica.models.tasks.Task
import io.reactivex.Flowable
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
import io.reactivex.rxjava3.core.Flowable
import io.realm.Realm
import io.realm.RealmResults
import io.realm.Sort
@ -12,60 +13,58 @@ import java.util.*
class RealmChallengeLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), ChallengeLocalRepository {
override fun isChallengeMember(userID: String, challengeID: String): Flowable<Boolean> = realm.where(ChallengeMembership::class.java)
override fun isChallengeMember(userID: String, challengeID: String): Flowable<Boolean> = RxJavaBridge.toV3Flowable(realm.where(ChallengeMembership::class.java)
.equalTo("userID", userID)
.equalTo("challengeID", challengeID)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.map { it.count() > 0 }
.filter { it.isLoaded }).map { it.count() > 0 }
override fun getChallengeMembership(userId: String, id: String): Flowable<ChallengeMembership> = realm.where(ChallengeMembership::class.java)
override fun getChallengeMembership(userId: String, id: String): Flowable<ChallengeMembership> = RxJavaBridge.toV3Flowable(realm.where(ChallengeMembership::class.java)
.equalTo("userID", userId)
.equalTo("challengeID", id)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.map { it.first() }
.filter { it.isLoaded }).map { it.first() }
override fun getChallengeMemberships(userId: String): Flowable<RealmResults<ChallengeMembership>> = realm.where(ChallengeMembership::class.java)
override fun getChallengeMemberships(userId: String): Flowable<RealmResults<ChallengeMembership>> = RxJavaBridge.toV3Flowable(realm.where(ChallengeMembership::class.java)
.equalTo("userID", userId)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
override fun getChallenge(id: String): Flowable<Challenge> {
return realm.where(Challenge::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Challenge::class.java)
.equalTo("id", id)
.findAll()
.asFlowable()
.filter { realmObject -> realmObject.isLoaded && realmObject.isNotEmpty() }
.map { it.first() }
.map { it.first() })
}
override fun getTasks(challengeID: String): Flowable<RealmResults<Task>> {
return realm.where(Task::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java)
.equalTo("userId", challengeID)
.findAll()
.asFlowable()
.filter { realmObject -> realmObject.isLoaded }
.filter { realmObject -> realmObject.isLoaded })
}
override val challenges: Flowable<RealmResults<Challenge>>
get() = realm.where(Challenge::class.java)
get() = RxJavaBridge.toV3Flowable(realm.where(Challenge::class.java)
.isNotNull("name")
.sort("official", Sort.DESCENDING, "createdAt", Sort.DESCENDING)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
override fun getUserChallenges(userId: String): Flowable<RealmResults<Challenge>> {
return realm.where(ChallengeMembership::class.java)
return RxJavaBridge.toV3Flowable(realm.where(ChallengeMembership::class.java)
.equalTo("userID", userId)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.flatMap {
.filter { it.isLoaded })
.flatMap {
val ids = it.map {
return@map it.challengeID
}.toTypedArray()
@ -80,7 +79,7 @@ class RealmChallengeLocalRepository(realm: Realm) : RealmBaseLocalRepository(rea
.findAll()
.asFlowable()
.filter { it.isLoaded }
}
}
}
override fun setParticipating(userID: String, challengeID: String, isParticipating: Boolean) {

View file

@ -2,7 +2,8 @@ package com.habitrpg.android.habitica.data.local.implementation
import com.habitrpg.android.habitica.data.local.CustomizationLocalRepository
import com.habitrpg.android.habitica.models.inventory.Customization
import io.reactivex.Flowable
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
import io.reactivex.rxjava3.core.Flowable
import io.realm.Realm
import io.realm.RealmResults
import java.util.*
@ -29,10 +30,10 @@ class RealmCustomizationLocalRepository(realm: Realm) : RealmContentLocalReposit
.endGroup()
.endGroup()
}
return query
return RxJavaBridge.toV3Flowable(query
.sort("customizationSetName")
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
}

View file

@ -2,23 +2,24 @@ package com.habitrpg.android.habitica.data.local.implementation
import com.habitrpg.android.habitica.data.local.FAQLocalRepository
import com.habitrpg.android.habitica.models.FAQArticle
import io.reactivex.Flowable
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
import io.reactivex.rxjava3.core.Flowable
import io.realm.Realm
import io.realm.RealmResults
class RealmFAQLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), FAQLocalRepository {
override fun getArticle(position: Int): Flowable<FAQArticle> {
return realm.where(FAQArticle::class.java)
return RxJavaBridge.toV3Flowable(realm.where(FAQArticle::class.java)
.equalTo("position", position)
.findAll()
.asFlowable()
.filter{ it.isLoaded && it.count() > 0 }
.map { it.first() }
.map { it.first() })
}
override val articles: Flowable<RealmResults<FAQArticle>>
get() = realm.where(FAQArticle::class.java)
get() = RxJavaBridge.toV3Flowable(realm.where(FAQArticle::class.java)
.findAll()
.asFlowable()
.filter{ it.isLoaded }
.filter{ it.isLoaded })
}

View file

@ -8,7 +8,8 @@ import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.OwnedMount
import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
import io.reactivex.rxjava3.core.Flowable
import io.realm.Realm
import io.realm.RealmObject
import io.realm.RealmResults
@ -17,27 +18,27 @@ import io.realm.Sort
class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), InventoryLocalRepository {
override fun getQuestContent(keys: List<String>): Flowable<RealmResults<QuestContent>> {
return realm.where(QuestContent::class.java)
return RxJavaBridge.toV3Flowable(realm.where(QuestContent::class.java)
.`in`("key", keys.toTypedArray())
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getQuestContent(key: String): Flowable<QuestContent> {
return realm.where(QuestContent::class.java).equalTo("key", key)
return RxJavaBridge.toV3Flowable(realm.where(QuestContent::class.java).equalTo("key", key)
.findAll()
.asFlowable()
.filter { content -> content.isLoaded && content.isValid && !content.isEmpty() }
.map { content -> content.first() }
.map { content -> content.first() })
}
override fun getEquipment(searchedKeys: List<String>): Flowable<RealmResults<Equipment>> {
return realm.where(Equipment::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
.`in`("key", searchedKeys.toTypedArray())
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getArmoireRemainingCount(): Long {
@ -52,29 +53,29 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
}
override fun getOwnedEquipment(type: String): Flowable<RealmResults<Equipment>> {
return realm.where(Equipment::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
.equalTo("type", type)
.equalTo("owned", true)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getOwnedEquipment(): Flowable<RealmResults<Equipment>> {
return realm.where(Equipment::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
.equalTo("owned", true)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getEquipmentType(type: String, set: String): Flowable<RealmResults<Equipment>> {
return realm.where(Equipment::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
.equalTo("type", type)
.equalTo("gearSet", set)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getOwnedItems(itemType: String, userID: String, includeZero: Boolean): Flowable<RealmResults<OwnedItem>> {
@ -82,22 +83,22 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
if (!includeZero) {
query = query.greaterThan("numberOwned", 0)
}
return query.equalTo("itemType", itemType)
return RxJavaBridge.toV3Flowable(query.equalTo("itemType", itemType)
.equalTo("userID", userID)
.sort("key")
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getItems(itemClass: Class<out Item>, keys: Array<String>): Flowable<out RealmResults<out Item>> {
return realm.where(itemClass).`in`("key", keys).findAll().asFlowable()
.filter { it.isLoaded }
return RxJavaBridge.toV3Flowable(realm.where(itemClass).`in`("key", keys).findAll().asFlowable()
.filter { it.isLoaded })
}
override fun getItems(itemClass: Class<out Item>): Flowable<out RealmResults<out Item>> {
return realm.where(itemClass).findAll().asFlowable()
.filter { it.isLoaded }
return RxJavaBridge.toV3Flowable(realm.where(itemClass).findAll().asFlowable()
.filter { it.isLoaded })
}
override fun getOwnedItems(userID: String, includeZero: Boolean): Flowable<Map<String, OwnedItem>> {
@ -105,7 +106,7 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
if (!includeZero) {
query = query.greaterThan("numberOwned", 0)
}
return query.equalTo("userID", userID)
return RxJavaBridge.toV3Flowable(query.equalTo("userID", userID)
.findAll()
.asFlowable()
.map {
@ -114,25 +115,25 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
items[item.key + "-" + item.itemType] = item
}
items
}
})
}
override fun getEquipment(key: String): Flowable<Equipment> {
return realm.where(Equipment::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
.sort("text")
.equalTo("key", key)
.findFirstAsync()
.asFlowable<RealmObject>()
.filter { realmObject -> realmObject.isLoaded }
.cast(Equipment::class.java)
.cast(Equipment::class.java))
}
override fun getMounts(): Flowable<RealmResults<Mount>> {
return realm.where(Mount::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Mount::class.java)
.sort("type", Sort.ASCENDING, "animal", Sort.ASCENDING)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getMounts(type: String?, group: String?, color: String?): Flowable<RealmResults<Mount>> {
@ -147,26 +148,26 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
if (color != null) {
query = query.equalTo("color", color)
}
return query.findAll()
return RxJavaBridge.toV3Flowable(query.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getOwnedMounts(userID: String): Flowable<RealmResults<OwnedMount>> {
return realm.where(OwnedMount::class.java)
return RxJavaBridge.toV3Flowable(realm.where(OwnedMount::class.java)
.equalTo("owned", true)
.equalTo("userID", userID)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getPets(): Flowable<RealmResults<Pet>> {
return realm.where(Pet::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Pet::class.java)
.sort("type", Sort.ASCENDING, "animal", Sort.ASCENDING)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getPets(type: String?, group: String?, color: String?): Flowable<RealmResults<Pet>> {
@ -181,18 +182,18 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
if (color != null) {
query = query.equalTo("color", color)
}
return query.findAll()
return RxJavaBridge.toV3Flowable(query.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getOwnedPets(userID: String): Flowable<RealmResults<OwnedPet>> {
return realm.where(OwnedPet::class.java)
return RxJavaBridge.toV3Flowable(realm.where(OwnedPet::class.java)
.greaterThan("trained", 0)
.equalTo("userID", userID)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun updateOwnedEquipment(user: User) {
@ -217,9 +218,9 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
if (!includeZero) {
query = query.greaterThan("numberOwned", 0)
}
return query.findFirstAsync()
return RxJavaBridge.toV3Flowable(query.findFirstAsync()
.asFlowable<OwnedItem>()
.filter { realmObject -> realmObject.isLoaded }
.filter { realmObject -> realmObject.isLoaded })
}
override fun getItem(type: String, key: String): Flowable<Item> {
@ -230,9 +231,9 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
"quests" -> QuestContent::class.java
else -> Egg::class.java
}
return realm.where(itemClass).equalTo("key", key).findFirstAsync().asFlowable<RealmObject>()
return RxJavaBridge.toV3Flowable(realm.where(itemClass).equalTo("key", key).findFirstAsync().asFlowable<RealmObject>()
.filter { realmObject -> realmObject.isLoaded }
.cast(Item::class.java)
.cast(Item::class.java))
}
override fun decrementMysteryItemCount(user: User?) {
@ -251,10 +252,10 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
}
override fun getInAppRewards(): Flowable<RealmResults<ShopItem>> {
return realm.where(ShopItem::class.java)
return RxJavaBridge.toV3Flowable(realm.where(ShopItem::class.java)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun saveInAppRewards(onlineItems: List<ShopItem>) {
@ -340,12 +341,12 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
}
override fun getLatestMysteryItem(): Flowable<Equipment> {
return realm.where(Equipment::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
.contains("key", "mystery_2")
.sort("mystery", Sort.DESCENDING)
.findAll()
.asFlowable()
.filter { it.isLoaded && it.size > 0}
.map { it.first() }
.map { it.first() })
}
}

View file

@ -5,7 +5,8 @@ import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.models.social.*
import com.habitrpg.android.habitica.models.user.ContributorInfo
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
import io.reactivex.rxjava3.core.Flowable
import io.realm.Realm
import io.realm.RealmResults
import io.realm.Sort
@ -13,26 +14,26 @@ import java.util.*
class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), SocialLocalRepository {
override fun getChatMessage(messageID: String): Flowable<ChatMessage> = realm.where(ChatMessage::class.java)
override fun getChatMessage(messageID: String): Flowable<ChatMessage> = RxJavaBridge.toV3Flowable(realm.where(ChatMessage::class.java)
.equalTo("id", messageID)
.findAll()
.asFlowable()
.filter { it.isLoaded && it.isNotEmpty() }
.map { it.first() }
.map { it.first() })
override fun getGroupMembership(userId: String, id: String): Flowable<GroupMembership> = realm.where(GroupMembership::class.java)
override fun getGroupMembership(userId: String, id: String): Flowable<GroupMembership> = RxJavaBridge.toV3Flowable(realm.where(GroupMembership::class.java)
.equalTo("userID", userId)
.equalTo("groupID", id)
.findAll()
.asFlowable()
.filter { it.isLoaded && it.isNotEmpty() }
.map { it.first() }
.map { it.first() })
override fun getGroupMemberships(userId: String): Flowable<RealmResults<GroupMembership>> = realm.where(GroupMembership::class.java)
override fun getGroupMemberships(userId: String): Flowable<RealmResults<GroupMembership>> = RxJavaBridge.toV3Flowable(realm.where(GroupMembership::class.java)
.equalTo("userID", userId)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
override fun updateMembership(userId: String, id: String, isMember: Boolean) {
if (isMember) {
@ -97,22 +98,22 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
}
}
override fun getPublicGuilds(): Flowable<RealmResults<Group>> = realm.where(Group::class.java)
override fun getPublicGuilds(): Flowable<RealmResults<Group>> = RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
.equalTo("type", "guild")
.equalTo("privacy", "public")
.notEqualTo("id", Group.TAVERN_ID)
.sort("memberCount", Sort.DESCENDING)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
override fun getUserGroups(userID: String, type: String?): Flowable<RealmResults<Group>> = realm.where(GroupMembership::class.java)
override fun getUserGroups(userID: String, type: String?): Flowable<RealmResults<Group>> = RxJavaBridge.toV3Flowable(realm.where(GroupMembership::class.java)
.equalTo("userID", userID)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.flatMap {memberships ->
realm.where(Group::class.java)
.filter { it.isLoaded })
.flatMap {memberships ->
RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
.equalTo("type", type ?: "guild")
.notEqualTo("id", Group.TAVERN_ID)
.`in`("id", memberships.map {
@ -121,48 +122,48 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
.sort("memberCount", Sort.DESCENDING)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getGroups(type: String): Flowable<RealmResults<Group>> {
return realm.where(Group::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
.equalTo("type", type)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getGroup(id: String): Flowable<Group> {
return realm.where(Group::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
.equalTo("id", id)
.findAll()
.asFlowable()
.filter { group -> group.isLoaded && group.isValid && !group.isEmpty() }
.map { groups -> groups.first() }
.map { groups -> groups.first() })
}
override fun getGroupChat(groupId: String): Flowable<RealmResults<ChatMessage>> {
return realm.where(ChatMessage::class.java)
return RxJavaBridge.toV3Flowable(realm.where(ChatMessage::class.java)
.equalTo("groupId", groupId)
.sort("timestamp", Sort.DESCENDING)
.findAll()
.asFlowable()
.filter { it.isLoaded }
}
.filter { it.isLoaded })
}
override fun deleteMessage(id: String) {
getMessage(id).firstElement().subscribe { chatMessage -> executeTransaction { chatMessage.deleteFromRealm() } }
}
override fun getGroupMembers(partyId: String): Flowable<RealmResults<Member>> {
return realm.where(Member::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Member::class.java)
.equalTo("party.id", partyId)
.findAll()
.asFlowable()
.filter { it.isLoaded }
}
.filter { it.isLoaded })
}
override fun updateRSVPNeeded(user: User?, newValue: Boolean) {
executeTransaction { user?.party?.quest?.RSVPNeeded = newValue }
@ -242,11 +243,11 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
private fun getMessage(id: String): Flowable<ChatMessage> {
return realm.where(ChatMessage::class.java).equalTo("id", id)
return RxJavaBridge.toV3Flowable(realm.where(ChatMessage::class.java).equalTo("id", id)
.findAll()
.asFlowable()
.filter { messages -> messages.isLoaded && messages.isValid && !messages.isEmpty() }
.map { messages -> messages.first() }
.map { messages -> messages.first() })
}
override fun doesGroupExist(id: String): Boolean {
@ -255,22 +256,22 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
}
override fun getInboxMessages(userId: String, replyToUserID: String?): Flowable<RealmResults<ChatMessage>> {
return realm.where(ChatMessage::class.java)
return RxJavaBridge.toV3Flowable(realm.where(ChatMessage::class.java)
.equalTo("isInboxMessage", true)
.equalTo("uuid", replyToUserID)
.equalTo("userID", userId)
.sort("timestamp", Sort.DESCENDING)
.findAll()
.asFlowable()
.filter { it.isLoaded }
}
.filter { it.isLoaded })
}
override fun getInboxConversation(userId: String): Flowable<RealmResults<InboxConversation>> {
return realm.where(InboxConversation::class.java)
return RxJavaBridge.toV3Flowable(realm.where(InboxConversation::class.java)
.equalTo("userID", userId)
.sort("timestamp", Sort.DESCENDING)
.findAll()
.asFlowable()
.filter { it.isLoaded }
}
.filter { it.isLoaded })
}
}

View file

@ -2,7 +2,8 @@ package com.habitrpg.android.habitica.data.local.implementation
import com.habitrpg.android.habitica.data.local.TagLocalRepository
import com.habitrpg.android.habitica.models.Tag
import io.reactivex.Flowable
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
import io.reactivex.rxjava3.core.Flowable
import io.realm.Realm
import io.realm.RealmResults
@ -14,7 +15,7 @@ class RealmTagLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), T
}
override fun getTags(userId: String): Flowable<RealmResults<Tag>> {
return realm.where(Tag::class.java).equalTo("userId", userId).findAll().asFlowable()
return RxJavaBridge.toV3Flowable(realm.where(Tag::class.java).equalTo("userId", userId).findAll().asFlowable())
}
override fun removeOldTags(onlineTags: List<Tag>, userID: String) {

View file

@ -3,8 +3,9 @@ package com.habitrpg.android.habitica.data.local.implementation
import com.habitrpg.android.habitica.data.local.TaskLocalRepository
import com.habitrpg.android.habitica.models.tasks.*
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import io.reactivex.Maybe
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Maybe
import io.realm.Realm
import io.realm.RealmObject
import io.realm.RealmResults
@ -16,26 +17,25 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
if (realm.isClosed) {
return Flowable.empty()
}
return realm.where(Task::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java)
.equalTo("type", taskType)
.equalTo("userId", userID)
.sort("position", Sort.ASCENDING, "dateCreated", Sort.DESCENDING)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.retry(1)
.filter { it.isLoaded }).retry(1)
}
override fun getTasks(userId: String): Flowable<RealmResults<Task>> {
if (realm.isClosed) {
return Flowable.empty()
}
return realm.where(Task::class.java).equalTo("userId", userId)
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java).equalTo("userId", userId)
.sort("position", Sort.ASCENDING, "dateCreated", Sort.DESCENDING)
.findAll()
.asFlowable()
.filter { it.isLoaded }
}
.filter { it.isLoaded })
}
override fun saveTasks(userId: String, tasksOrder: TasksOrder, tasks: TaskList) {
val sortedTasks = ArrayList<Task>()
@ -155,9 +155,9 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
if (realm.isClosed) {
return Flowable.empty()
}
return realm.where(Task::class.java).equalTo("id", taskId).findFirstAsync().asFlowable<RealmObject>()
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java).equalTo("id", taskId).findFirstAsync().asFlowable<RealmObject>()
.filter { realmObject -> realmObject.isLoaded }
.cast(Task::class.java)
.cast(Task::class.java))
}
override fun getTaskCopy(taskId: String): Flowable<Task> {
@ -192,9 +192,9 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
}
override fun getTaskAtPosition(taskType: String, position: Int): Flowable<Task> {
return realm.where(Task::class.java).equalTo("type", taskType).equalTo("position", position).findFirstAsync().asFlowable<RealmObject>()
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java).equalTo("type", taskType).equalTo("position", position).findFirstAsync().asFlowable<RealmObject>()
.filter { realmObject -> realmObject.isLoaded }
.cast(Task::class.java)
.cast(Task::class.java))
}
override fun updateIsdue(daily: TaskList): Maybe<TaskList> {
@ -218,32 +218,31 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
}
override fun getErroredTasks(userID: String): Flowable<RealmResults<Task>> {
return realm.where(Task::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java)
.equalTo("userId", userID)
.equalTo("hasErrored", true)
.sort("position")
.findAll()
.asFlowable()
.filter { it.isLoaded }
.retry(1)
.filter { it.isLoaded }).retry(1)
}
override fun getUser(userID: String): Flowable<User> {
return realm.where(User::class.java)
return RxJavaBridge.toV3Flowable(realm.where(User::class.java)
.equalTo("id", userID)
.findAll()
.asFlowable()
.filter { realmObject -> realmObject.isLoaded && realmObject.isValid && !realmObject.isEmpty() }
.map { users -> users.first() }
.map { users -> users.first() })
}
override fun getTasksForChallenge(challengeID: String?, userID: String?): Flowable<RealmResults<Task>> {
return realm.where(Task::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java)
.equalTo("challengeID", challengeID)
.equalTo("userId", userID)
.findAll()
.asFlowable()
.filter { it.isLoaded }
.retry(1)
.filter { it.isLoaded })
.retry(1)
}
}

View file

@ -2,7 +2,8 @@ package com.habitrpg.android.habitica.data.local.implementation
import com.habitrpg.android.habitica.data.local.TutorialLocalRepository
import com.habitrpg.android.habitica.models.TutorialStep
import io.reactivex.Flowable
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
import io.reactivex.rxjava3.core.Flowable
import io.realm.Realm
import io.realm.RealmResults
@ -11,7 +12,7 @@ class RealmTutorialLocalRepository(realm: Realm) : RealmBaseLocalRepository(real
override fun getTutorialStep(key: String): Flowable<TutorialStep> {
if (realm.isClosed) return Flowable.empty()
return realm.where(TutorialStep::class.java).equalTo("identifier", key)
return RxJavaBridge.toV3Flowable(realm.where(TutorialStep::class.java).equalTo("identifier", key)
.findAll()
.asFlowable()
.filter { realmObject -> realmObject.isLoaded && realmObject.isValid && realmObject.isNotEmpty() }
@ -27,15 +28,15 @@ class RealmTutorialLocalRepository(realm: Realm) : RealmBaseLocalRepository(real
}
}
.map { steps -> steps.first() }
.cast(TutorialStep::class.java)
.cast(TutorialStep::class.java))
}
override fun getTutorialSteps(keys: List<String>): Flowable<RealmResults<TutorialStep>> {
if (realm.isClosed) return Flowable.empty()
return realm.where(TutorialStep::class.java)
return RxJavaBridge.toV3Flowable(realm.where(TutorialStep::class.java)
.`in`("identifier", keys.toTypedArray())
.findAll()
.asFlowable()
.filter { it.isLoaded }
}
.filter { it.isLoaded })
}
}

View file

@ -9,7 +9,8 @@ import com.habitrpg.android.habitica.models.social.Group
import com.habitrpg.android.habitica.models.user.OwnedMount
import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
import io.reactivex.rxjava3.core.Flowable
import io.realm.Realm
import io.realm.RealmResults
@ -19,15 +20,15 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
.map { it.party?.id ?: "" }
.filter { it.isNotBlank() }
.flatMap {
realm.where(Group::class.java)
RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
.equalTo("id", it)
.findAll()
.asFlowable()
.filter { groups -> groups.size > 0 }
.map { groups -> groups.first() }
.map { groups -> groups.first() })
}
.map { when {
it.quest?.members?.find { questMember -> questMember.key == userID } === null -> UserQuestStatus.NO_QUEST
it?.quest?.members?.find { questMember -> questMember.key == userID } === null -> UserQuestStatus.NO_QUEST
it.quest?.progress?.collect?.isNotEmpty() ?: false -> UserQuestStatus.QUEST_COLLECT
it.quest?.progress?.hp ?: 0.0 > 0.0 -> UserQuestStatus.QUEST_BOSS
else -> UserQuestStatus.QUEST_UNKNOWN
@ -35,32 +36,31 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
}
override fun getAchievements(): Flowable<RealmResults<Achievement>> {
return realm.where(Achievement::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Achievement::class.java)
.sort("index")
.findAll()
.asFlowable()
.filter { it.isLoaded }
.filter { it.isLoaded })
}
override fun getQuestAchievements(userID: String): Flowable<RealmResults<QuestAchievement>> {
return realm.where(QuestAchievement::class.java)
return RxJavaBridge.toV3Flowable(realm.where(QuestAchievement::class.java)
.equalTo("userID", userID)
.findAll()
.asFlowable()
.filter { it.isLoaded }
}
.filter { it.isLoaded })
}
override fun getTutorialSteps(): Flowable<RealmResults<TutorialStep>> = realm.where(TutorialStep::class.java).findAll().asFlowable()
.filter { it.isLoaded }
override fun getUser(userID: String): Flowable<User> {
override fun getTutorialSteps(): Flowable<RealmResults<TutorialStep>> = RxJavaBridge.toV3Flowable(realm.where(TutorialStep::class.java).findAll().asFlowable()
.filter { it.isLoaded })
override fun getUser(userID: String): Flowable<User> {
if (realm.isClosed) return Flowable.empty()
return realm.where(User::class.java)
return RxJavaBridge.toV3Flowable(realm.where(User::class.java)
.equalTo("id", userID)
.findAll()
.asFlowable()
.filter { realmObject -> realmObject.isLoaded && realmObject.isValid && !realmObject.isEmpty() }
.map { users -> users.first() }
.map { users -> users.first() })
}
override fun saveUser(user: User) {
@ -136,12 +136,12 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
override fun getSkills(user: User): Flowable<RealmResults<Skill>> {
val habitClass = if (user.preferences?.disableClasses == true) "none" else user.stats?.habitClass
return realm.where(Skill::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Skill::class.java)
.equalTo("habitClass", habitClass)
.findAll()
.asFlowable()
.filter { it.isLoaded }
}
.filter { it.isLoaded })
}
override fun getSpecialItems(user: User): Flowable<RealmResults<Skill>> {
val specialItems = user.items?.special
@ -163,10 +163,10 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
if (ownedItems.size == 0) {
ownedItems.add("")
}
return realm.where(Skill::class.java)
return RxJavaBridge.toV3Flowable(realm.where(Skill::class.java)
.`in`("key", ownedItems.toTypedArray())
.findAll()
.asFlowable()
.filter { it.isLoaded }
}
.filter { it.isLoaded })
}
}

View file

@ -1,7 +1,7 @@
package com.habitrpg.android.habitica.executors;
import io.reactivex.Scheduler;
import io.reactivex.rxjava3.core.Scheduler;
public interface PostExecutionThread {
Scheduler getScheduler();

View file

@ -3,8 +3,8 @@ package com.habitrpg.android.habitica.executors;
import javax.inject.Inject;
import javax.inject.Singleton;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Scheduler;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
@Singleton
public class UIThread implements PostExecutionThread {

View file

@ -1,6 +1,6 @@
package com.habitrpg.android.habitica.extensions
import io.reactivex.Completable
import io.reactivex.rxjava3.core.Completable
import java.util.concurrent.TimeUnit
/**

View file

@ -1,9 +1,9 @@
package com.habitrpg.android.habitica.extensions
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import io.reactivex.Flowable
import io.reactivex.disposables.Disposable
import io.reactivex.functions.Consumer
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.disposables.Disposable
import io.reactivex.rxjava3.functions.Consumer
fun <T> Flowable<T>.subscribeWithErrorHandler(function: Consumer<T>): Disposable {
return subscribe(function, RxErrorHandler.handleEmptyError())

View file

@ -1,9 +1,9 @@
package com.habitrpg.android.habitica.extensions
import io.reactivex.Flowable
import io.reactivex.Maybe
import io.reactivex.Observable
import io.reactivex.Single
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.core.Single
fun <S, T : Optional<S>> Flowable<T>.filterOptionalDoOnEmpty(function: () -> Unit): Flowable<S> {
@ -29,7 +29,7 @@ fun <S, T : Optional<S>> Observable<T>.filterMapEmpty(): Observable<S> {
}
fun <S, T : Optional<S>> Single<T>.filterOptionalDoOnEmpty(function: () -> Unit): Maybe<S> {
return this.doAfterSuccess { if (it.isEmpty) function() }
return this.doOnSuccess { if (it.isEmpty) function() }
.filter { !it.isEmpty }
.map { it.value }
}
@ -40,7 +40,7 @@ fun <S, T : Optional<S>> Single<T>.filterMapEmpty(): Maybe<S> {
}
fun <S, T : Optional<S>> Maybe<T>.filterOptionalDoOnEmpty(function: () -> Unit): Maybe<S> {
return this.doAfterSuccess { if (it.isEmpty) function() }
return this.doOnSuccess { if (it.isEmpty) function() }
.filter { !it.isEmpty }
.map { it.value }
}

View file

@ -14,10 +14,10 @@ import com.habitrpg.android.habitica.models.notifications.FirstDropData
import com.habitrpg.android.habitica.models.notifications.LoginIncentiveData
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import io.reactivex.BackpressureStrategy
import io.reactivex.Completable
import io.reactivex.Flowable
import io.reactivex.subjects.BehaviorSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Completable
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.BehaviorSubject
import org.greenrobot.eventbus.EventBus
import java.util.*
import java.util.concurrent.TimeUnit
@ -42,8 +42,7 @@ class NotificationsManager (private val context: Context) {
}
fun getNotifications(): Flowable<List<Notification>> {
return this.notifications
.startWith(emptyList<Notification>())
return this.notifications.startWithArray(emptyList())
.toFlowable(BackpressureStrategy.LATEST)
}

View file

@ -3,7 +3,7 @@ package com.habitrpg.android.habitica.helpers
import android.util.Log
import com.habitrpg.android.habitica.BuildConfig
import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
import io.reactivex.functions.Consumer
import io.reactivex.rxjava3.functions.Consumer
import okhttp3.internal.http2.ConnectionShutdownException
import retrofit2.HttpException
import java.io.EOFException

View file

@ -4,13 +4,14 @@ import android.annotation.SuppressLint
import android.content.Context
import android.os.Environment
import com.habitrpg.android.habitica.HabiticaBaseApplication
import io.reactivex.Observable
import io.reactivex.Single
import io.reactivex.schedulers.Schedulers
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.core.Single
import io.reactivex.rxjava3.schedulers.Schedulers
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import okio.Okio
import okio.buffer
import okio.sink
import java.io.File
import java.io.IOException
@ -52,8 +53,8 @@ class SoundFileLoader(private val context: Context) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
try {
val sink = Okio.buffer(Okio.sink(file))
sink.writeAll(response.body()!!.source())
val sink = file.sink().buffer()
sink.writeAll(response.body!!.source())
sink.flush()
sink.close()
} catch (io: IOException) {

View file

@ -1,8 +1,8 @@
package com.habitrpg.android.habitica.helpers
import com.habitrpg.android.habitica.HabiticaBaseApplication
import io.reactivex.Maybe
import io.reactivex.schedulers.Schedulers
import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.schedulers.Schedulers
import javax.inject.Inject
class SoundManager {

View file

@ -14,7 +14,7 @@ import com.habitrpg.android.habitica.receivers.NotificationPublisher
import com.habitrpg.android.habitica.receivers.TaskReceiver
import com.habitrpg.shared.habitica.HLogger
import com.habitrpg.shared.habitica.LogLevel
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import java.util.*
class TaskAlarmManager(private var context: Context, private var taskRepository: TaskRepository, private var userId: String) {

View file

@ -10,7 +10,7 @@ import com.habitrpg.android.habitica.models.user.User
import javax.inject.Inject
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
class BuyRewardUseCase @Inject
constructor(private val taskRepository: TaskRepository, private val soundManager: SoundManager,

View file

@ -11,7 +11,7 @@ import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity
import javax.inject.Inject
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import com.habitrpg.android.habitica.ui.activities.MainActivity.Companion.SELECT_CLASS_RESULT

View file

@ -11,7 +11,7 @@ import com.habitrpg.android.habitica.executors.ThreadExecutor
import com.habitrpg.android.habitica.helpers.SoundManager
import com.habitrpg.android.habitica.models.responses.TaskScoringResult
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import java.lang.StringBuilder
import javax.inject.Inject

View file

@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.AvatarView
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import org.greenrobot.eventbus.EventBus
import javax.inject.Inject

View file

@ -22,7 +22,7 @@ import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import javax.inject.Inject
import kotlin.math.abs

View file

@ -3,7 +3,7 @@ package com.habitrpg.android.habitica.interactors;
import com.habitrpg.android.habitica.executors.PostExecutionThread;
import com.habitrpg.android.habitica.executors.ThreadExecutor;
import io.reactivex.Flowable;
import io.reactivex.rxjava3.core.Flowable;
public abstract class UseCase<Q extends UseCase.RequestValues, T> {

View file

@ -156,10 +156,10 @@ open class Task : RealmObject, Parcelable {
}
val isDisplayedActive: Boolean
get() = isDue == true && !completed
get() = ((isDue == true && type == Task.TYPE_DAILY) || type == TYPE_TODO) && !completed
val isChecklistDisplayActive: Boolean
get() = this.isDisplayedActive && this.checklist?.size != this.completedChecklistCount
get() = this.checklist?.size != this.completedChecklistCount
val isGroupTask: Boolean
get() = group?.approvalApproved == true
@ -211,10 +211,10 @@ open class Task : RealmObject, Parcelable {
return this.parsedText ?: ""
}
MarkdownParser.parseMarkdownAsync(this.text, { parsedText ->
MarkdownParser.parseMarkdownAsync(this.text) { parsedText ->
this.parsedText = parsedText
callback(parsedText)
})
}
return this.text
}
@ -225,10 +225,10 @@ open class Task : RealmObject, Parcelable {
}
if (notes?.isNotEmpty() == true) {
MarkdownParser.parseMarkdownAsync(notes, { parsedText ->
MarkdownParser.parseMarkdownAsync(notes) { parsedText ->
parsedNotes = parsedText
callback(parsedText)
})
}
}
return notes
}

View file

@ -17,7 +17,7 @@ import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
@Module
@ -50,7 +50,7 @@ public class ApiModule {
public MaintenanceApiService providesMaintenanceApiService(GsonConverterFactory gsonConverter, HostConfig hostConfig) {
Retrofit adapter = new Retrofit.Builder()
.baseUrl("https://habitica-assets.s3.amazonaws.com/mobileApp/endpoint/")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.addConverterFactory(gsonConverter)
.build();
return adapter.create(MaintenanceApiService.class);

View file

@ -21,7 +21,7 @@ import com.habitrpg.android.habitica.helpers.TaskAlarmManager
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.activities.MainActivity
import io.reactivex.functions.BiFunction
import io.reactivex.rxjava3.functions.BiFunction
import io.realm.RealmResults
import java.util.*
import javax.inject.Inject

View file

@ -17,7 +17,7 @@ import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.shared.habitica.HLogger
import com.habitrpg.shared.habitica.LogLevel
import io.reactivex.functions.Consumer
import io.reactivex.rxjava3.functions.Consumer
import java.util.*
import javax.inject.Inject

View file

@ -20,7 +20,7 @@ import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.models.Avatar
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import io.reactivex.functions.Consumer
import io.reactivex.rxjava3.functions.Consumer
import java.util.*
import java.util.concurrent.atomic.AtomicInteger

View file

@ -18,7 +18,7 @@ import com.habitrpg.android.habitica.models.Avatar
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.disposables.Disposable
import io.reactivex.rxjava3.disposables.Disposable
import org.greenrobot.eventbus.Subscribe
import java.util.*
import kotlin.math.floor

View file

@ -24,7 +24,7 @@ import com.habitrpg.android.habitica.extensions.updateStatusBarColor
import com.habitrpg.android.habitica.helpers.LanguageHelper
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.rxjava3.disposables.CompositeDisposable
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import java.util.*
@ -35,6 +35,7 @@ abstract class BaseActivity : AppCompatActivity() {
private var currentTheme: String? = null
private var isNightMode: Boolean = false
internal var forcedTheme: String? = null
internal var forcedIsNight: Boolean? = null
private var destroyed: Boolean = false
open var overrideModernHeader: Boolean? = null
@ -105,7 +106,7 @@ abstract class BaseActivity : AppCompatActivity() {
val theme = forcedTheme ?: sharedPreferences.getString("theme_name", "purple")
val modernHeaderStyle = overrideModernHeader ?: sharedPreferences.getBoolean("modern_header_style", true)
if (theme != currentTheme || forced) {
if (isNightMode) {
if (forcedIsNight ?: isNightMode) {
setTheme(when (theme) {
"maroon" -> R.style.MainAppTheme_Maroon_Dark
"red" -> R.style.MainAppTheme_Red_Dark
@ -131,12 +132,12 @@ abstract class BaseActivity : AppCompatActivity() {
}
}
if (isNightMode) {
window.navigationBarColor = ContextCompat.getColor(this, R.color.system_bars)
window.navigationBarColor = if (forcedIsNight ?: isNightMode) {
ContextCompat.getColor(this, R.color.system_bars)
} else {
window.navigationBarColor = getThemeColor(R.attr.colorPrimaryDark)
getThemeColor(R.attr.colorPrimaryDark)
}
if (!isNightMode && modernHeaderStyle) {
if (!(forcedIsNight ?: isNightMode) && modernHeaderStyle) {
window.updateStatusBarColor(getThemeColor(R.attr.headerBackgroundColor), true)
} else {
window.updateStatusBarColor(getThemeColor(R.attr.statusBarBackground), false)

View file

@ -30,8 +30,7 @@ import com.habitrpg.android.habitica.ui.adapter.social.challenges.ChallengeTasks
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.Flowable
import io.reactivex.rxkotlin.zipWith
import io.reactivex.rxjava3.core.Flowable
import java.lang.NumberFormatException
import java.util.*
import javax.inject.Inject
@ -332,7 +331,7 @@ class ChallengeFormActivity : BaseActivity() {
return@flatMap Flowable.empty<Group>()
}
socialRepository.retrieveGroup(it)
})
}, { user, groups -> Pair(user, groups) })
.subscribe({ groups ->
val mutableGroups = groups.first.toMutableList()
if (groups.first.firstOrNull { it.id == "00000000-0000-4000-A000-000000000000" } == null) {

View file

@ -18,7 +18,7 @@ import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.user.*
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.functions.Consumer
import io.reactivex.rxjava3.functions.Consumer
import javax.inject.Inject
class ClassSelectionActivity : BaseActivity(), Consumer<User> {

View file

@ -9,7 +9,6 @@ import android.widget.TableLayout
import android.widget.TableRow
import android.widget.TextView
import androidx.appcompat.widget.AppCompatEditText
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat
import androidx.core.os.bundleOf
import com.facebook.drawee.backends.pipeline.Fresco
@ -36,14 +35,13 @@ import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.ui.AvatarView
import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel
import com.habitrpg.android.habitica.ui.adapter.social.AchievementProfileAdapter
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.helpers.setMarkdown
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.Flowable
import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults
import java.text.SimpleDateFormat
import java.util.*

View file

@ -30,10 +30,10 @@ class GuidelinesActivity: BaseActivity() {
@Throws(IOException::class)
override fun onResponse(call: Call, response: Response) {
val `in` = response.body()?.byteStream()
val `in` = response.body?.byteStream()
val reader = BufferedReader(InputStreamReader(`in`))
val text = reader.readText()
response.body()?.close()
response.body?.close()
findViewById<TextView>(R.id.text_view).post {
findViewById<TextView>(R.id.text_view).setMarkdown(text)

View file

@ -52,10 +52,10 @@ import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.willowtreeapps.signinwithapplebutton.SignInWithAppleConfiguration
import io.reactivex.Flowable
import io.reactivex.exceptions.Exceptions
import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.exceptions.Exceptions
import io.reactivex.rxjava3.functions.Consumer
import io.reactivex.rxjava3.schedulers.Schedulers
import java.io.IOException
import javax.inject.Inject

View file

@ -73,11 +73,11 @@ import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider
import com.habitrpg.android.habitica.widget.DailiesWidgetProvider
import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider
import com.habitrpg.android.habitica.widget.TodoListWidgetProvider
import io.reactivex.Completable
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers
import io.reactivex.rxjava3.core.Completable
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.functions.Consumer
import io.reactivex.rxjava3.schedulers.Schedulers
import io.realm.kotlin.isValid
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
@ -836,7 +836,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
val petWrapper = View.inflate(this, R.layout.pet_imageview, null) as? FrameLayout
val petImageView = petWrapper?.findViewById(R.id.pet_imageview) as? SimpleDraweeView
DataBindingUtils.loadImage(petImageView, "social_Pet-" + egg.key + "-" + potion.key)
DataBindingUtils.loadImage(petImageView, "stable_Pet-" + egg.key + "-" + potion.key)
val potionName = potion.text
val eggName = egg.text
val dialog = HabiticaAlertDialog(this)

View file

@ -12,8 +12,8 @@ import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.databinding.ActivityMaintenanceBinding
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.ui.helpers.setMarkdown
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
import javax.inject.Inject
class MaintenanceActivity : BaseActivity() {

View file

@ -31,7 +31,7 @@ import com.habitrpg.android.habitica.ui.fragments.setup.AvatarSetupFragment
import com.habitrpg.android.habitica.ui.fragments.setup.TaskSetupFragment
import com.habitrpg.android.habitica.ui.fragments.setup.WelcomeFragment
import com.viewpagerindicator.IconPagerAdapter
import io.reactivex.BackpressureStrategy
import io.reactivex.rxjava3.core.BackpressureStrategy
import java.util.*
import javax.inject.Inject

View file

@ -103,6 +103,7 @@ class TaskFormActivity : BaseActivity() {
val bundle = intent.extras ?: return
val taskId = bundle.getString(TASK_ID_KEY)
forcedIsNight = false
forcedTheme = if (taskId != null) {
val taskValue = bundle.getDouble(TASK_VALUE_KEY)
when {
@ -131,7 +132,7 @@ class TaskFormActivity : BaseActivity() {
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
tintColor = getThemeColor(R.attr.taskFormTint)
val upperTintColor = if (forcedTheme == "purple") getThemeColor(R.attr.taskFormTint) else getThemeColor(R.attr.colorAccent)
val upperTintColor = if (forcedTheme == "taskform") getThemeColor(R.attr.taskFormTint) else getThemeColor(R.attr.colorAccent)
supportActionBar?.setBackgroundDrawable(ColorDrawable(upperTintColor))
binding.upperTextWrapper.setBackgroundColor(upperTintColor)
@ -212,7 +213,7 @@ class TaskFormActivity : BaseActivity() {
override fun loadTheme(sharedPreferences: SharedPreferences, forced: Boolean) {
super.loadTheme(sharedPreferences, forced)
val upperTintColor = if (forcedTheme == "purple") getThemeColor(R.attr.taskFormTint) else getThemeColor(R.attr.colorAccent)
val upperTintColor = if (forcedTheme == "taskform") getThemeColor(R.attr.taskFormTint) else getThemeColor(R.attr.colorAccent)
window.statusBarColor = upperTintColor
}

View file

@ -15,9 +15,9 @@ import com.habitrpg.android.habitica.extensions.runDelayed
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
import java.util.concurrent.TimeUnit
import javax.inject.Inject

View file

@ -17,9 +17,9 @@ import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
import java.util.*
class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {

View file

@ -20,9 +20,9 @@ import com.habitrpg.android.habitica.models.inventory.CustomizationSet
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
import java.util.*
class CustomizationRecyclerViewAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {

View file

@ -16,9 +16,9 @@ import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuViewHolder
import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoView
import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoViewHolder
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int): RecyclerView.Adapter<RecyclerView.ViewHolder>() {

View file

@ -7,9 +7,9 @@ import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.SkillTaskItemCardBinding
import com.habitrpg.android.habitica.models.tasks.Task
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter
import java.util.*

View file

@ -15,9 +15,9 @@ import com.habitrpg.android.habitica.models.Skill
import com.habitrpg.android.habitica.models.user.SpecialItems
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
class SkillsRecyclerViewAdapter : RecyclerView.Adapter<SkillsRecyclerViewAdapter.SkillViewHolder>() {

View file

@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.databinding.GearListItemBinding
import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter

View file

@ -17,9 +17,9 @@ import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem
import com.habitrpg.android.habitica.ui.views.dialogs.DetailDialog
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter
import io.realm.RealmResults

View file

@ -6,9 +6,9 @@ import com.habitrpg.android.habitica.models.inventory.StableSection
import com.habitrpg.android.habitica.models.user.OwnedMount
import com.habitrpg.android.habitica.ui.viewHolders.MountViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
class MountDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {
private var ownedMounts: Map<String, OwnedMount>? = null

View file

@ -7,9 +7,9 @@ import com.habitrpg.android.habitica.models.user.OwnedMount
import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.RealmResults
class PetDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {

View file

@ -18,9 +18,9 @@ import com.habitrpg.android.habitica.ui.helpers.loadImage
import com.habitrpg.android.habitica.ui.viewHolders.MountViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
class StableRecyclerAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

View file

@ -12,9 +12,9 @@ import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.extensions.setTintWith
import com.habitrpg.android.habitica.models.SetupCustomization
import com.habitrpg.android.habitica.models.user.User
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
internal class CustomizationSetupAdapter : RecyclerView.Adapter<CustomizationSetupAdapter.CustomizationViewHolder>() {

View file

@ -10,9 +10,9 @@ import com.habitrpg.android.habitica.models.social.Challenge
import com.habitrpg.android.habitica.models.social.ChallengeMembership
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeFilterOptions
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.helpers.EmojiParser

View file

@ -9,9 +9,9 @@ import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.models.social.ChatMessage
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerMessageViewHolder
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter

View file

@ -10,9 +10,9 @@ import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerIntroViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerMessageViewHolder
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
import com.habitrpg.android.habitica.models.members.Member
class InboxAdapter(private var user: User?, private var replyToUser : Member) : PagedListAdapter<ChatMessage, ChatRecyclerViewHolder>(DIFF_CALLBACK) {

View file

@ -5,9 +5,9 @@ import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.ui.viewHolders.GroupMemberViewHolder
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter

View file

@ -12,9 +12,9 @@ import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.ui.adapter.tasks.BaseTasksRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.tasks.*
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.subjects.PublishSubject
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject
class ChallengeTasksRecyclerViewAdapter(taskFilterHelper: TaskFilterHelper?, layoutResource: Int,
newContext: Context, userID: String,

View file

@ -13,9 +13,9 @@ import com.habitrpg.android.habitica.helpers.TaskFilterHelper
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
import io.reactivex.Flowable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
import java.util.*
import javax.inject.Inject

Some files were not shown because too many files have changed in this diff Show more