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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,5 +1,6 @@
package com.habitrpg.android.habitica package com.habitrpg.android.habitica
import android.app.Application
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
@ -11,7 +12,6 @@ import android.database.sqlite.SQLiteDatabase
import android.util.Log import android.util.Log
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.edit import androidx.core.content.edit
import androidx.multidex.MultiDexApplication
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.amplitude.api.Amplitude import com.amplitude.api.Amplitude
import com.amplitude.api.Identify 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.activities.LoginActivity
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser import com.habitrpg.android.habitica.ui.helpers.MarkdownParser
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper 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.Realm
import io.realm.RealmConfiguration import io.realm.RealmConfiguration
import org.solovyev.android.checkout.Billing import org.solovyev.android.checkout.Billing
@ -44,8 +42,7 @@ import org.solovyev.android.checkout.PurchaseVerifier
import javax.inject.Inject import javax.inject.Inject
//contains all HabiticaApplicationLogic except dagger componentInitialisation //contains all HabiticaApplicationLogic except dagger componentInitialisation
abstract class HabiticaBaseApplication : MultiDexApplication() { abstract class HabiticaBaseApplication : Application() {
var refWatcher: RefWatcher? = null
@Inject @Inject
internal lateinit var lazyApiHelper: ApiClient internal lateinit var lazyApiHelper: ApiClient
@Inject @Inject
@ -69,16 +66,10 @@ abstract class HabiticaBaseApplication : MultiDexApplication() {
override fun onCreate() { override fun onCreate() {
super.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() setupRealm()
setupDagger() setupDagger()
setupRemoteConfig() setupRemoteConfig()
setupNotifications() setupNotifications()
refWatcher = LeakCanary.install(this)
createBillingAndCheckout() createBillingAndCheckout()
HabiticaIconsHelper.init(this) HabiticaIconsHelper.init(this)
MarkdownParser.setup(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.Items
import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import retrofit2.http.* import retrofit2.http.*
@JvmSuppressWildcards @JvmSuppressWildcards

View file

@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.api;
import com.habitrpg.android.habitica.models.responses.MaintenanceResponse; import com.habitrpg.android.habitica.models.responses.MaintenanceResponse;
import io.reactivex.Flowable; import io.reactivex.rxjava3.core.Flowable;
import retrofit2.http.GET; import retrofit2.http.GET;
public interface MaintenanceApiService { 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.Items
import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.FlowableTransformer import io.reactivex.rxjava3.core.FlowableTransformer
import retrofit2.HttpException import retrofit2.HttpException
@ -54,17 +54,17 @@ interface ApiClient {
fun buyItem(itemKey: String, purchaseQuantity: Int): Flowable<BuyResponse> 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 purchaseQuest(key: String): Flowable<Void>
fun purchaseSpecialSpell(key: String): Flowable<Any> fun purchaseSpecialSpell(key: String): Flowable<Void>
fun validateSubscription(request: SubscriptionValidationRequest): Flowable<Any> fun validateSubscription(request: SubscriptionValidationRequest): Flowable<Any>
fun validateNoRenewSubscription(request: PurchaseValidationRequest): Flowable<Any> fun validateNoRenewSubscription(request: PurchaseValidationRequest): Flowable<Any>
fun cancelSubscription(): Flowable<Any> fun cancelSubscription(): Flowable<Void>
fun sellItem(itemType: String, itemKey: String): Flowable<User> fun sellItem(itemType: String, itemKey: String): Flowable<User>
@ -214,9 +214,9 @@ interface ApiClient {
fun debugAddTenGems(): Flowable<Void> fun debugAddTenGems(): Flowable<Void>
// Notifications // Notifications
fun readNotification(notificationId: String): Flowable<List<*>> fun readNotification(notificationId: String): Flowable<List<Any>>
fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
fun getErrorResponse(throwable: HttpException): ErrorResponse 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.social.ChallengeMembership
import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.models.tasks.TaskList import com.habitrpg.android.habitica.models.tasks.TaskList
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
interface ChallengeRepository : BaseRepository { 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.ContentResult
import com.habitrpg.android.habitica.models.WorldState import com.habitrpg.android.habitica.models.WorldState
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
interface ContentRepository { interface ContentRepository {

View file

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

View file

@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data
import com.habitrpg.android.habitica.models.FAQArticle import com.habitrpg.android.habitica.models.FAQArticle
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
interface FAQRepository : BaseRepository { 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.Shop
import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.models.user.* import com.habitrpg.android.habitica.models.user.*
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
@ -65,14 +65,14 @@ interface InventoryRepository : BaseRepository {
fun retrieveShopInventory(identifier: String): Flowable<Shop> fun retrieveShopInventory(identifier: String): Flowable<Shop>
fun retrieveMarketGear(): 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 purchaseQuest(key: String): Flowable<Void>
fun purchaseSpecialSpell(key: String): Flowable<Any> 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 togglePinnedItem(item: ShopItem): Flowable<List<ShopItem>>
fun getItems(itemClass: Class<out Item>, keys: Array<String>): Flowable<out RealmResults<out Item>> 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.responses.PostChatMessageResult
import com.habitrpg.android.habitica.models.social.* import com.habitrpg.android.habitica.models.social.*
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.Single import io.reactivex.rxjava3.core.Single
import io.realm.RealmResults import io.realm.RealmResults
import java.util.* import java.util.*

View file

@ -2,8 +2,8 @@ package com.habitrpg.android.habitica.data
import com.habitrpg.android.habitica.models.Tag import com.habitrpg.android.habitica.models.Tag
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.Single import io.reactivex.rxjava3.core.Single
import io.realm.RealmResults import io.realm.RealmResults
interface TagRepository : BaseRepository { 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.TaskList
import com.habitrpg.android.habitica.models.tasks.TasksOrder import com.habitrpg.android.habitica.models.tasks.TasksOrder
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.Maybe import io.reactivex.rxjava3.core.Maybe
import io.reactivex.Single import io.reactivex.rxjava3.core.Single
import io.realm.Realm import io.realm.Realm
import io.realm.RealmResults import io.realm.RealmResults
import java.util.* import java.util.*

View file

@ -1,7 +1,7 @@
package com.habitrpg.android.habitica.data package com.habitrpg.android.habitica.data
import com.habitrpg.android.habitica.models.TutorialStep import com.habitrpg.android.habitica.models.TutorialStep
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
interface TutorialRepository : BaseRepository { 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.tasks.Task
import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.Maybe import io.reactivex.rxjava3.core.Maybe
import io.realm.RealmResults import io.realm.RealmResults
interface UserRepository : BaseRepository { interface UserRepository : BaseRepository {
@ -52,9 +52,9 @@ interface UserRepository : BaseRepository {
fun runCron(tasks: MutableList<Task>) fun runCron(tasks: MutableList<Task>)
fun runCron() fun runCron()
fun readNotification(id: String): Flowable<List<*>> fun readNotification(id: String): Flowable<List<Any>>
fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
fun changeCustomDayStart(dayStartTime: Int): Flowable<User> 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.Stats
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.proxy.CrashlyticsProxy import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.FlowableTransformer import io.reactivex.rxjava3.core.FlowableTransformer
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer import io.reactivex.rxjava3.functions.Consumer
import io.reactivex.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import okhttp3.Cache import okhttp3.Cache
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
@ -44,7 +44,7 @@ import okhttp3.logging.HttpLoggingInterceptor
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import retrofit2.HttpException import retrofit2.HttpException
import retrofit2.Retrofit import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.gson.GsonConverterFactory
import java.io.IOException import java.io.IOException
import java.net.SocketException import java.net.SocketException
@ -125,9 +125,9 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
if (BuildConfig.STAGING_KEY.isNotEmpty()) { if (BuildConfig.STAGING_KEY.isNotEmpty()) {
builder = builder.header("Authorization", "Basic " + BuildConfig.STAGING_KEY) 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() .build()
lastAPICallURL = original.url().toString() lastAPICallURL = original.url.toString()
chain.proceed(request) chain.proceed(request)
} }
.readTimeout(2400, TimeUnit.SECONDS) .readTimeout(2400, TimeUnit.SECONDS)
@ -138,7 +138,7 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
retrofitAdapter = Retrofit.Builder() retrofitAdapter = Retrofit.Builder()
.client(client) .client(client)
.baseUrl(server.toString()) .baseUrl(server.toString())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.addConverterFactory(gsonConverter) .addConverterFactory(gsonConverter)
.build() .build()
@ -193,12 +193,12 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
this.showConnectionProblemDialog(R.string.internal_error_api) this.showConnectionProblemDialog(R.string.internal_error_api)
} else if (throwableClass == SocketTimeoutException::class.java || UnknownHostException::class.java == throwableClass) { } else if (throwableClass == SocketTimeoutException::class.java || UnknownHostException::class.java == throwableClass) {
this.showConnectionProblemDialog(R.string.network_error_no_network_body) 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 error = throwable as HttpException
val res = getErrorResponse(error) val res = getErrorResponse(error)
val status = error.code() 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 //workaround for an error that sometimes displays that the user already has this push device
return return
} }
@ -337,7 +337,7 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
return apiService.blockMember(userID).compose(configureApiCallObserver()) 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()) 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()) 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()) 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()) 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()) 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()) return apiService.purchaseSpecialSpell(key).compose(configureApiCallObserver())
} }
@ -690,15 +690,15 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
return apiService.debugAddTenGems().compose(configureApiCallObserver()) 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()) 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()) 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()) 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.Task
import com.habitrpg.android.habitica.models.tasks.TaskList import com.habitrpg.android.habitica.models.tasks.TaskList
import com.habitrpg.android.habitica.models.tasks.TasksOrder import com.habitrpg.android.habitica.models.tasks.TasksOrder
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults 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.ContentResult
import com.habitrpg.android.habitica.models.WorldState import com.habitrpg.android.habitica.models.WorldState
import com.habitrpg.android.habitica.models.inventory.SpecialItem import com.habitrpg.android.habitica.models.inventory.SpecialItem
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmList import io.realm.RealmList
import java.util.* 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.data.local.CustomizationLocalRepository
import com.habitrpg.android.habitica.models.inventory.Customization import com.habitrpg.android.habitica.models.inventory.Customization
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
class CustomizationRepositoryImpl(localRepository: CustomizationLocalRepository, apiClient: ApiClient, userID: String) : BaseRepositoryImpl<CustomizationLocalRepository>(localRepository, apiClient, userID), CustomizationRepository { 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.data.local.FAQLocalRepository
import com.habitrpg.android.habitica.models.FAQArticle import com.habitrpg.android.habitica.models.FAQArticle
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults 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.Shop
import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.models.user.* import com.habitrpg.android.habitica.models.user.*
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
class InventoryRepositoryImpl(localRepository: InventoryLocalRepository, apiClient: ApiClient, userID: String, var appConfigManager: AppConfigManager) : BaseRepositoryImpl<InventoryLocalRepository>(localRepository, apiClient, userID), InventoryRepository { 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() return apiClient.retrieveMarketGear()
} }
override fun purchaseMysterySet(categoryIdentifier: String): Flowable<Any> { override fun purchaseMysterySet(categoryIdentifier: String): Flowable<Void> {
return apiClient.purchaseMysterySet(categoryIdentifier) 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) return apiClient.purchaseHourglassItem(purchaseType, key)
} }
override fun purchaseQuest(key: String): Flowable<Any> { override fun purchaseQuest(key: String): Flowable<Void> {
return apiClient.purchaseQuest(key) return apiClient.purchaseQuest(key)
} }
override fun purchaseSpecialSpell(key: String): Flowable<Any> { override fun purchaseSpecialSpell(key: String): Flowable<Void> {
return apiClient.purchaseSpecialSpell(key) 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) 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.responses.PostChatMessageResult
import com.habitrpg.android.habitica.models.social.* import com.habitrpg.android.habitica.models.social.*
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.Single import io.reactivex.rxjava3.core.Single
import io.realm.RealmResults import io.realm.RealmResults
import java.util.* import java.util.*
import kotlin.collections.HashMap 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.TagRepository
import com.habitrpg.android.habitica.data.local.TagLocalRepository import com.habitrpg.android.habitica.data.local.TagLocalRepository
import com.habitrpg.android.habitica.models.Tag import com.habitrpg.android.habitica.models.Tag
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.Single import io.reactivex.rxjava3.core.Single
import io.realm.RealmResults 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.tasks.*
import com.habitrpg.android.habitica.models.user.OwnedItem import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.Maybe import io.reactivex.rxjava3.core.Maybe
import io.reactivex.Single import io.reactivex.rxjava3.core.Single
import io.realm.Realm import io.realm.Realm
import io.realm.RealmResults import io.realm.RealmResults
import java.text.SimpleDateFormat 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.TutorialRepository
import com.habitrpg.android.habitica.data.local.TutorialLocalRepository import com.habitrpg.android.habitica.data.local.TutorialLocalRepository
import com.habitrpg.android.habitica.models.TutorialStep import com.habitrpg.android.habitica.models.TutorialStep
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults 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.tasks.Task
import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.Maybe import io.reactivex.rxjava3.core.Maybe
import io.realm.RealmResults import io.realm.RealmResults
import java.util.* import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@ -171,15 +171,15 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
runCron(ArrayList()) 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> { override fun getUserQuestStatus(): Flowable<UserQuestStatus> {
return localRepository.getUserQuestStatus(userID) 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) 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) apiClient.seeNotifications(notificationIds)
override fun changeCustomDayStart(dayStartTime: Int): Flowable<User> { 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.social.ChallengeMembership
import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.models.tasks.Task
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
interface ChallengeLocalRepository : BaseLocalRepository { 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 com.habitrpg.android.habitica.models.inventory.Customization
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
interface CustomizationLocalRepository : ContentLocalRepository { interface CustomizationLocalRepository : ContentLocalRepository {

View file

@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data.local
import com.habitrpg.android.habitica.models.FAQArticle import com.habitrpg.android.habitica.models.FAQArticle
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
interface FAQLocalRepository : ContentLocalRepository { 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.OwnedMount
import com.habitrpg.android.habitica.models.user.OwnedPet import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
interface InventoryLocalRepository : ContentLocalRepository { 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.GroupMembership
import com.habitrpg.android.habitica.models.social.InboxConversation import com.habitrpg.android.habitica.models.social.InboxConversation
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
interface SocialLocalRepository : BaseLocalRepository { interface SocialLocalRepository : BaseLocalRepository {

View file

@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data.local
import com.habitrpg.android.habitica.models.Tag import com.habitrpg.android.habitica.models.Tag
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
interface TagLocalRepository : BaseLocalRepository { 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.TaskList
import com.habitrpg.android.habitica.models.tasks.TasksOrder import com.habitrpg.android.habitica.models.tasks.TasksOrder
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.Maybe import io.reactivex.rxjava3.core.Maybe
import io.realm.RealmResults import io.realm.RealmResults
interface TaskLocalRepository : BaseLocalRepository { interface TaskLocalRepository : BaseLocalRepository {

View file

@ -1,7 +1,7 @@
package com.habitrpg.android.habitica.data.local package com.habitrpg.android.habitica.data.local
import com.habitrpg.android.habitica.models.TutorialStep import com.habitrpg.android.habitica.models.TutorialStep
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
interface TutorialLocalRepository : BaseLocalRepository { 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.TutorialStep
import com.habitrpg.android.habitica.models.social.ChatMessage import com.habitrpg.android.habitica.models.social.ChatMessage
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.realm.RealmResults import io.realm.RealmResults
enum class UserQuestStatus { 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.Challenge
import com.habitrpg.android.habitica.models.social.ChallengeMembership import com.habitrpg.android.habitica.models.social.ChallengeMembership
import com.habitrpg.android.habitica.models.tasks.Task 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.Realm
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.Sort import io.realm.Sort
@ -12,60 +13,58 @@ import java.util.*
class RealmChallengeLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), ChallengeLocalRepository { 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("userID", userID)
.equalTo("challengeID", challengeID) .equalTo("challengeID", challengeID)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded }).map { it.count() > 0 }
.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("userID", userId)
.equalTo("challengeID", id) .equalTo("challengeID", id)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded }).map { it.first() }
.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) .equalTo("userID", userId)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
override fun getChallenge(id: String): Flowable<Challenge> { override fun getChallenge(id: String): Flowable<Challenge> {
return realm.where(Challenge::class.java) return RxJavaBridge.toV3Flowable(realm.where(Challenge::class.java)
.equalTo("id", id) .equalTo("id", id)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { realmObject -> realmObject.isLoaded && realmObject.isNotEmpty() } .filter { realmObject -> realmObject.isLoaded && realmObject.isNotEmpty() }
.map { it.first() } .map { it.first() })
} }
override fun getTasks(challengeID: String): Flowable<RealmResults<Task>> { 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) .equalTo("userId", challengeID)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { realmObject -> realmObject.isLoaded } .filter { realmObject -> realmObject.isLoaded })
} }
override val challenges: Flowable<RealmResults<Challenge>> override val challenges: Flowable<RealmResults<Challenge>>
get() = realm.where(Challenge::class.java) get() = RxJavaBridge.toV3Flowable(realm.where(Challenge::class.java)
.isNotNull("name") .isNotNull("name")
.sort("official", Sort.DESCENDING, "createdAt", Sort.DESCENDING) .sort("official", Sort.DESCENDING, "createdAt", Sort.DESCENDING)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
override fun getUserChallenges(userId: String): Flowable<RealmResults<Challenge>> { 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) .equalTo("userID", userId)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
.flatMap { .flatMap {
val ids = it.map { val ids = it.map {
return@map it.challengeID return@map it.challengeID
}.toTypedArray() }.toTypedArray()
@ -80,7 +79,7 @@ class RealmChallengeLocalRepository(realm: Realm) : RealmBaseLocalRepository(rea
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded }
} }
} }
override fun setParticipating(userID: String, challengeID: String, isParticipating: Boolean) { 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.data.local.CustomizationLocalRepository
import com.habitrpg.android.habitica.models.inventory.Customization 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.Realm
import io.realm.RealmResults import io.realm.RealmResults
import java.util.* import java.util.*
@ -29,10 +30,10 @@ class RealmCustomizationLocalRepository(realm: Realm) : RealmContentLocalReposit
.endGroup() .endGroup()
.endGroup() .endGroup()
} }
return query return RxJavaBridge.toV3Flowable(query
.sort("customizationSetName") .sort("customizationSetName")
.findAll() .findAll()
.asFlowable() .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.data.local.FAQLocalRepository
import com.habitrpg.android.habitica.models.FAQArticle 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.Realm
import io.realm.RealmResults import io.realm.RealmResults
class RealmFAQLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), FAQLocalRepository { class RealmFAQLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), FAQLocalRepository {
override fun getArticle(position: Int): Flowable<FAQArticle> { override fun getArticle(position: Int): Flowable<FAQArticle> {
return realm.where(FAQArticle::class.java) return RxJavaBridge.toV3Flowable(realm.where(FAQArticle::class.java)
.equalTo("position", position) .equalTo("position", position)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter{ it.isLoaded && it.count() > 0 } .filter{ it.isLoaded && it.count() > 0 }
.map { it.first() } .map { it.first() })
} }
override val articles: Flowable<RealmResults<FAQArticle>> override val articles: Flowable<RealmResults<FAQArticle>>
get() = realm.where(FAQArticle::class.java) get() = RxJavaBridge.toV3Flowable(realm.where(FAQArticle::class.java)
.findAll() .findAll()
.asFlowable() .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.OwnedMount
import com.habitrpg.android.habitica.models.user.OwnedPet import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.models.user.User 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.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults import io.realm.RealmResults
@ -17,27 +18,27 @@ import io.realm.Sort
class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), InventoryLocalRepository { class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), InventoryLocalRepository {
override fun getQuestContent(keys: List<String>): Flowable<RealmResults<QuestContent>> { 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()) .`in`("key", keys.toTypedArray())
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getQuestContent(key: String): Flowable<QuestContent> { 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() .findAll()
.asFlowable() .asFlowable()
.filter { content -> content.isLoaded && content.isValid && !content.isEmpty() } .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>> { 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()) .`in`("key", searchedKeys.toTypedArray())
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getArmoireRemainingCount(): Long { override fun getArmoireRemainingCount(): Long {
@ -52,29 +53,29 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
} }
override fun getOwnedEquipment(type: String): Flowable<RealmResults<Equipment>> { 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("type", type)
.equalTo("owned", true) .equalTo("owned", true)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getOwnedEquipment(): Flowable<RealmResults<Equipment>> { override fun getOwnedEquipment(): Flowable<RealmResults<Equipment>> {
return realm.where(Equipment::class.java) return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
.equalTo("owned", true) .equalTo("owned", true)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getEquipmentType(type: String, set: String): Flowable<RealmResults<Equipment>> { 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("type", type)
.equalTo("gearSet", set) .equalTo("gearSet", set)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getOwnedItems(itemType: String, userID: String, includeZero: Boolean): Flowable<RealmResults<OwnedItem>> { override fun getOwnedItems(itemType: String, userID: String, includeZero: Boolean): Flowable<RealmResults<OwnedItem>> {
@ -82,22 +83,22 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
if (!includeZero) { if (!includeZero) {
query = query.greaterThan("numberOwned", 0) query = query.greaterThan("numberOwned", 0)
} }
return query.equalTo("itemType", itemType) return RxJavaBridge.toV3Flowable(query.equalTo("itemType", itemType)
.equalTo("userID", userID) .equalTo("userID", userID)
.sort("key") .sort("key")
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getItems(itemClass: Class<out Item>, keys: Array<String>): Flowable<out RealmResults<out Item>> { override fun getItems(itemClass: Class<out Item>, keys: Array<String>): Flowable<out RealmResults<out Item>> {
return realm.where(itemClass).`in`("key", keys).findAll().asFlowable() return RxJavaBridge.toV3Flowable(realm.where(itemClass).`in`("key", keys).findAll().asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getItems(itemClass: Class<out Item>): Flowable<out RealmResults<out Item>> { override fun getItems(itemClass: Class<out Item>): Flowable<out RealmResults<out Item>> {
return realm.where(itemClass).findAll().asFlowable() return RxJavaBridge.toV3Flowable(realm.where(itemClass).findAll().asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getOwnedItems(userID: String, includeZero: Boolean): Flowable<Map<String, OwnedItem>> { override fun getOwnedItems(userID: String, includeZero: Boolean): Flowable<Map<String, OwnedItem>> {
@ -105,7 +106,7 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
if (!includeZero) { if (!includeZero) {
query = query.greaterThan("numberOwned", 0) query = query.greaterThan("numberOwned", 0)
} }
return query.equalTo("userID", userID) return RxJavaBridge.toV3Flowable(query.equalTo("userID", userID)
.findAll() .findAll()
.asFlowable() .asFlowable()
.map { .map {
@ -114,25 +115,25 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
items[item.key + "-" + item.itemType] = item items[item.key + "-" + item.itemType] = item
} }
items items
} })
} }
override fun getEquipment(key: String): Flowable<Equipment> { override fun getEquipment(key: String): Flowable<Equipment> {
return realm.where(Equipment::class.java) return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
.sort("text") .sort("text")
.equalTo("key", key) .equalTo("key", key)
.findFirstAsync() .findFirstAsync()
.asFlowable<RealmObject>() .asFlowable<RealmObject>()
.filter { realmObject -> realmObject.isLoaded } .filter { realmObject -> realmObject.isLoaded }
.cast(Equipment::class.java) .cast(Equipment::class.java))
} }
override fun getMounts(): Flowable<RealmResults<Mount>> { 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) .sort("type", Sort.ASCENDING, "animal", Sort.ASCENDING)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getMounts(type: String?, group: String?, color: String?): Flowable<RealmResults<Mount>> { override fun getMounts(type: String?, group: String?, color: String?): Flowable<RealmResults<Mount>> {
@ -147,26 +148,26 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
if (color != null) { if (color != null) {
query = query.equalTo("color", color) query = query.equalTo("color", color)
} }
return query.findAll() return RxJavaBridge.toV3Flowable(query.findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getOwnedMounts(userID: String): Flowable<RealmResults<OwnedMount>> { 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("owned", true)
.equalTo("userID", userID) .equalTo("userID", userID)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getPets(): Flowable<RealmResults<Pet>> { 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) .sort("type", Sort.ASCENDING, "animal", Sort.ASCENDING)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getPets(type: String?, group: String?, color: String?): Flowable<RealmResults<Pet>> { override fun getPets(type: String?, group: String?, color: String?): Flowable<RealmResults<Pet>> {
@ -181,18 +182,18 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
if (color != null) { if (color != null) {
query = query.equalTo("color", color) query = query.equalTo("color", color)
} }
return query.findAll() return RxJavaBridge.toV3Flowable(query.findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getOwnedPets(userID: String): Flowable<RealmResults<OwnedPet>> { 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) .greaterThan("trained", 0)
.equalTo("userID", userID) .equalTo("userID", userID)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun updateOwnedEquipment(user: User) { override fun updateOwnedEquipment(user: User) {
@ -217,9 +218,9 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
if (!includeZero) { if (!includeZero) {
query = query.greaterThan("numberOwned", 0) query = query.greaterThan("numberOwned", 0)
} }
return query.findFirstAsync() return RxJavaBridge.toV3Flowable(query.findFirstAsync()
.asFlowable<OwnedItem>() .asFlowable<OwnedItem>()
.filter { realmObject -> realmObject.isLoaded } .filter { realmObject -> realmObject.isLoaded })
} }
override fun getItem(type: String, key: String): Flowable<Item> { override fun getItem(type: String, key: String): Flowable<Item> {
@ -230,9 +231,9 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
"quests" -> QuestContent::class.java "quests" -> QuestContent::class.java
else -> Egg::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 } .filter { realmObject -> realmObject.isLoaded }
.cast(Item::class.java) .cast(Item::class.java))
} }
override fun decrementMysteryItemCount(user: User?) { override fun decrementMysteryItemCount(user: User?) {
@ -251,10 +252,10 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
} }
override fun getInAppRewards(): Flowable<RealmResults<ShopItem>> { override fun getInAppRewards(): Flowable<RealmResults<ShopItem>> {
return realm.where(ShopItem::class.java) return RxJavaBridge.toV3Flowable(realm.where(ShopItem::class.java)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun saveInAppRewards(onlineItems: List<ShopItem>) { override fun saveInAppRewards(onlineItems: List<ShopItem>) {
@ -340,12 +341,12 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
} }
override fun getLatestMysteryItem(): Flowable<Equipment> { override fun getLatestMysteryItem(): Flowable<Equipment> {
return realm.where(Equipment::class.java) return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
.contains("key", "mystery_2") .contains("key", "mystery_2")
.sort("mystery", Sort.DESCENDING) .sort("mystery", Sort.DESCENDING)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded && it.size > 0} .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.social.*
import com.habitrpg.android.habitica.models.user.ContributorInfo import com.habitrpg.android.habitica.models.user.ContributorInfo
import com.habitrpg.android.habitica.models.user.User 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.Realm
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.Sort import io.realm.Sort
@ -13,26 +14,26 @@ import java.util.*
class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), SocialLocalRepository { 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) .equalTo("id", messageID)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded && it.isNotEmpty() } .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("userID", userId)
.equalTo("groupID", id) .equalTo("groupID", id)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded && it.isNotEmpty() } .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) .equalTo("userID", userId)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
override fun updateMembership(userId: String, id: String, isMember: Boolean) { override fun updateMembership(userId: String, id: String, isMember: Boolean) {
if (isMember) { 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("type", "guild")
.equalTo("privacy", "public") .equalTo("privacy", "public")
.notEqualTo("id", Group.TAVERN_ID) .notEqualTo("id", Group.TAVERN_ID)
.sort("memberCount", Sort.DESCENDING) .sort("memberCount", Sort.DESCENDING)
.findAll() .findAll()
.asFlowable() .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) .equalTo("userID", userID)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
.flatMap {memberships -> .flatMap {memberships ->
realm.where(Group::class.java) RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
.equalTo("type", type ?: "guild") .equalTo("type", type ?: "guild")
.notEqualTo("id", Group.TAVERN_ID) .notEqualTo("id", Group.TAVERN_ID)
.`in`("id", memberships.map { .`in`("id", memberships.map {
@ -121,48 +122,48 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
.sort("memberCount", Sort.DESCENDING) .sort("memberCount", Sort.DESCENDING)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getGroups(type: String): Flowable<RealmResults<Group>> { 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) .equalTo("type", type)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getGroup(id: String): Flowable<Group> { override fun getGroup(id: String): Flowable<Group> {
return realm.where(Group::class.java) return RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
.equalTo("id", id) .equalTo("id", id)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { group -> group.isLoaded && group.isValid && !group.isEmpty() } .filter { group -> group.isLoaded && group.isValid && !group.isEmpty() }
.map { groups -> groups.first() } .map { groups -> groups.first() })
} }
override fun getGroupChat(groupId: String): Flowable<RealmResults<ChatMessage>> { 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) .equalTo("groupId", groupId)
.sort("timestamp", Sort.DESCENDING) .sort("timestamp", Sort.DESCENDING)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun deleteMessage(id: String) { override fun deleteMessage(id: String) {
getMessage(id).firstElement().subscribe { chatMessage -> executeTransaction { chatMessage.deleteFromRealm() } } getMessage(id).firstElement().subscribe { chatMessage -> executeTransaction { chatMessage.deleteFromRealm() } }
} }
override fun getGroupMembers(partyId: String): Flowable<RealmResults<Member>> { 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) .equalTo("party.id", partyId)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun updateRSVPNeeded(user: User?, newValue: Boolean) { override fun updateRSVPNeeded(user: User?, newValue: Boolean) {
executeTransaction { user?.party?.quest?.RSVPNeeded = newValue } executeTransaction { user?.party?.quest?.RSVPNeeded = newValue }
@ -242,11 +243,11 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
private fun getMessage(id: String): Flowable<ChatMessage> { 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() .findAll()
.asFlowable() .asFlowable()
.filter { messages -> messages.isLoaded && messages.isValid && !messages.isEmpty() } .filter { messages -> messages.isLoaded && messages.isValid && !messages.isEmpty() }
.map { messages -> messages.first() } .map { messages -> messages.first() })
} }
override fun doesGroupExist(id: String): Boolean { 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>> { 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("isInboxMessage", true)
.equalTo("uuid", replyToUserID) .equalTo("uuid", replyToUserID)
.equalTo("userID", userId) .equalTo("userID", userId)
.sort("timestamp", Sort.DESCENDING) .sort("timestamp", Sort.DESCENDING)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getInboxConversation(userId: String): Flowable<RealmResults<InboxConversation>> { 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) .equalTo("userID", userId)
.sort("timestamp", Sort.DESCENDING) .sort("timestamp", Sort.DESCENDING)
.findAll() .findAll()
.asFlowable() .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.data.local.TagLocalRepository
import com.habitrpg.android.habitica.models.Tag 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.Realm
import io.realm.RealmResults import io.realm.RealmResults
@ -14,7 +15,7 @@ class RealmTagLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), T
} }
override fun getTags(userId: String): Flowable<RealmResults<Tag>> { 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) { 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.data.local.TaskLocalRepository
import com.habitrpg.android.habitica.models.tasks.* import com.habitrpg.android.habitica.models.tasks.*
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.Flowable import hu.akarnokd.rxjava3.bridge.RxJavaBridge
import io.reactivex.Maybe import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.core.Maybe
import io.realm.Realm import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmResults import io.realm.RealmResults
@ -16,26 +17,25 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
if (realm.isClosed) { if (realm.isClosed) {
return Flowable.empty() return Flowable.empty()
} }
return realm.where(Task::class.java) return RxJavaBridge.toV3Flowable(realm.where(Task::class.java)
.equalTo("type", taskType) .equalTo("type", taskType)
.equalTo("userId", userID) .equalTo("userId", userID)
.sort("position", Sort.ASCENDING, "dateCreated", Sort.DESCENDING) .sort("position", Sort.ASCENDING, "dateCreated", Sort.DESCENDING)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded }).retry(1)
.retry(1)
} }
override fun getTasks(userId: String): Flowable<RealmResults<Task>> { override fun getTasks(userId: String): Flowable<RealmResults<Task>> {
if (realm.isClosed) { if (realm.isClosed) {
return Flowable.empty() 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) .sort("position", Sort.ASCENDING, "dateCreated", Sort.DESCENDING)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun saveTasks(userId: String, tasksOrder: TasksOrder, tasks: TaskList) { override fun saveTasks(userId: String, tasksOrder: TasksOrder, tasks: TaskList) {
val sortedTasks = ArrayList<Task>() val sortedTasks = ArrayList<Task>()
@ -155,9 +155,9 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
if (realm.isClosed) { if (realm.isClosed) {
return Flowable.empty() 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 } .filter { realmObject -> realmObject.isLoaded }
.cast(Task::class.java) .cast(Task::class.java))
} }
override fun getTaskCopy(taskId: String): Flowable<Task> { 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> { 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 } .filter { realmObject -> realmObject.isLoaded }
.cast(Task::class.java) .cast(Task::class.java))
} }
override fun updateIsdue(daily: TaskList): Maybe<TaskList> { 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>> { 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("userId", userID)
.equalTo("hasErrored", true) .equalTo("hasErrored", true)
.sort("position") .sort("position")
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded }).retry(1)
.retry(1)
} }
override fun getUser(userID: String): Flowable<User> { override fun getUser(userID: String): Flowable<User> {
return realm.where(User::class.java) return RxJavaBridge.toV3Flowable(realm.where(User::class.java)
.equalTo("id", userID) .equalTo("id", userID)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { realmObject -> realmObject.isLoaded && realmObject.isValid && !realmObject.isEmpty() } .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>> { 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("challengeID", challengeID)
.equalTo("userId", userID) .equalTo("userId", userID)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
.retry(1) .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.data.local.TutorialLocalRepository
import com.habitrpg.android.habitica.models.TutorialStep 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.Realm
import io.realm.RealmResults import io.realm.RealmResults
@ -11,7 +12,7 @@ class RealmTutorialLocalRepository(realm: Realm) : RealmBaseLocalRepository(real
override fun getTutorialStep(key: String): Flowable<TutorialStep> { override fun getTutorialStep(key: String): Flowable<TutorialStep> {
if (realm.isClosed) return Flowable.empty() 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() .findAll()
.asFlowable() .asFlowable()
.filter { realmObject -> realmObject.isLoaded && realmObject.isValid && realmObject.isNotEmpty() } .filter { realmObject -> realmObject.isLoaded && realmObject.isValid && realmObject.isNotEmpty() }
@ -27,15 +28,15 @@ class RealmTutorialLocalRepository(realm: Realm) : RealmBaseLocalRepository(real
} }
} }
.map { steps -> steps.first() } .map { steps -> steps.first() }
.cast(TutorialStep::class.java) .cast(TutorialStep::class.java))
} }
override fun getTutorialSteps(keys: List<String>): Flowable<RealmResults<TutorialStep>> { override fun getTutorialSteps(keys: List<String>): Flowable<RealmResults<TutorialStep>> {
if (realm.isClosed) return Flowable.empty() if (realm.isClosed) return Flowable.empty()
return realm.where(TutorialStep::class.java) return RxJavaBridge.toV3Flowable(realm.where(TutorialStep::class.java)
.`in`("identifier", keys.toTypedArray()) .`in`("identifier", keys.toTypedArray())
.findAll() .findAll()
.asFlowable() .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.OwnedMount
import com.habitrpg.android.habitica.models.user.OwnedPet import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.models.user.User 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.Realm
import io.realm.RealmResults import io.realm.RealmResults
@ -19,15 +20,15 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
.map { it.party?.id ?: "" } .map { it.party?.id ?: "" }
.filter { it.isNotBlank() } .filter { it.isNotBlank() }
.flatMap { .flatMap {
realm.where(Group::class.java) RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
.equalTo("id", it) .equalTo("id", it)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { groups -> groups.size > 0 } .filter { groups -> groups.size > 0 }
.map { groups -> groups.first() } .map { groups -> groups.first() })
} }
.map { when { .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?.collect?.isNotEmpty() ?: false -> UserQuestStatus.QUEST_COLLECT
it.quest?.progress?.hp ?: 0.0 > 0.0 -> UserQuestStatus.QUEST_BOSS it.quest?.progress?.hp ?: 0.0 > 0.0 -> UserQuestStatus.QUEST_BOSS
else -> UserQuestStatus.QUEST_UNKNOWN else -> UserQuestStatus.QUEST_UNKNOWN
@ -35,32 +36,31 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
} }
override fun getAchievements(): Flowable<RealmResults<Achievement>> { override fun getAchievements(): Flowable<RealmResults<Achievement>> {
return realm.where(Achievement::class.java) return RxJavaBridge.toV3Flowable(realm.where(Achievement::class.java)
.sort("index") .sort("index")
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getQuestAchievements(userID: String): Flowable<RealmResults<QuestAchievement>> { 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) .equalTo("userID", userID)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getTutorialSteps(): Flowable<RealmResults<TutorialStep>> = realm.where(TutorialStep::class.java).findAll().asFlowable() override fun getTutorialSteps(): Flowable<RealmResults<TutorialStep>> = RxJavaBridge.toV3Flowable(realm.where(TutorialStep::class.java).findAll().asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
override fun getUser(userID: String): Flowable<User> {
override fun getUser(userID: String): Flowable<User> {
if (realm.isClosed) return Flowable.empty() if (realm.isClosed) return Flowable.empty()
return realm.where(User::class.java) return RxJavaBridge.toV3Flowable(realm.where(User::class.java)
.equalTo("id", userID) .equalTo("id", userID)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { realmObject -> realmObject.isLoaded && realmObject.isValid && !realmObject.isEmpty() } .filter { realmObject -> realmObject.isLoaded && realmObject.isValid && !realmObject.isEmpty() }
.map { users -> users.first() } .map { users -> users.first() })
} }
override fun saveUser(user: User) { override fun saveUser(user: User) {
@ -136,12 +136,12 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
override fun getSkills(user: User): Flowable<RealmResults<Skill>> { override fun getSkills(user: User): Flowable<RealmResults<Skill>> {
val habitClass = if (user.preferences?.disableClasses == true) "none" else user.stats?.habitClass 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) .equalTo("habitClass", habitClass)
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
override fun getSpecialItems(user: User): Flowable<RealmResults<Skill>> { override fun getSpecialItems(user: User): Flowable<RealmResults<Skill>> {
val specialItems = user.items?.special val specialItems = user.items?.special
@ -163,10 +163,10 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
if (ownedItems.size == 0) { if (ownedItems.size == 0) {
ownedItems.add("") ownedItems.add("")
} }
return realm.where(Skill::class.java) return RxJavaBridge.toV3Flowable(realm.where(Skill::class.java)
.`in`("key", ownedItems.toTypedArray()) .`in`("key", ownedItems.toTypedArray())
.findAll() .findAll()
.asFlowable() .asFlowable()
.filter { it.isLoaded } .filter { it.isLoaded })
} }
} }

View file

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

View file

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

View file

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

View file

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

View file

@ -1,9 +1,9 @@
package com.habitrpg.android.habitica.extensions package com.habitrpg.android.habitica.extensions
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.Maybe import io.reactivex.rxjava3.core.Maybe
import io.reactivex.Observable import io.reactivex.rxjava3.core.Observable
import io.reactivex.Single import io.reactivex.rxjava3.core.Single
fun <S, T : Optional<S>> Flowable<T>.filterOptionalDoOnEmpty(function: () -> Unit): Flowable<S> { 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> { 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 } .filter { !it.isEmpty }
.map { it.value } .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> { 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 } .filter { !it.isEmpty }
.map { it.value } .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.notifications.LoginIncentiveData
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Completable import io.reactivex.rxjava3.core.Completable
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.BehaviorSubject import io.reactivex.rxjava3.subjects.BehaviorSubject
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import java.util.* import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@ -42,8 +42,7 @@ class NotificationsManager (private val context: Context) {
} }
fun getNotifications(): Flowable<List<Notification>> { fun getNotifications(): Flowable<List<Notification>> {
return this.notifications return this.notifications.startWithArray(emptyList())
.startWith(emptyList<Notification>())
.toFlowable(BackpressureStrategy.LATEST) .toFlowable(BackpressureStrategy.LATEST)
} }

View file

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

View file

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

View file

@ -1,8 +1,8 @@
package com.habitrpg.android.habitica.helpers package com.habitrpg.android.habitica.helpers
import com.habitrpg.android.habitica.HabiticaBaseApplication import com.habitrpg.android.habitica.HabiticaBaseApplication
import io.reactivex.Maybe import io.reactivex.rxjava3.core.Maybe
import io.reactivex.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import javax.inject.Inject import javax.inject.Inject
class SoundManager { 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.android.habitica.receivers.TaskReceiver
import com.habitrpg.shared.habitica.HLogger import com.habitrpg.shared.habitica.HLogger
import com.habitrpg.shared.habitica.LogLevel import com.habitrpg.shared.habitica.LogLevel
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import java.util.* import java.util.*
class TaskAlarmManager(private var context: Context, private var taskRepository: TaskRepository, private var userId: String) { 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 javax.inject.Inject
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
class BuyRewardUseCase @Inject class BuyRewardUseCase @Inject
constructor(private val taskRepository: TaskRepository, private val soundManager: SoundManager, 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 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 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.helpers.SoundManager
import com.habitrpg.android.habitica.models.responses.TaskScoringResult import com.habitrpg.android.habitica.models.responses.TaskScoringResult
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import java.lang.StringBuilder import java.lang.StringBuilder
import javax.inject.Inject 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.AvatarView
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog 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 org.greenrobot.eventbus.EventBus
import javax.inject.Inject 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.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import javax.inject.Inject import javax.inject.Inject
import kotlin.math.abs 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.PostExecutionThread;
import com.habitrpg.android.habitica.executors.ThreadExecutor; 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> { public abstract class UseCase<Q extends UseCase.RequestValues, T> {

View file

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

View file

@ -17,7 +17,7 @@ import javax.inject.Singleton;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
import retrofit2.Retrofit; import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.converter.gson.GsonConverterFactory;
@Module @Module
@ -50,7 +50,7 @@ public class ApiModule {
public MaintenanceApiService providesMaintenanceApiService(GsonConverterFactory gsonConverter, HostConfig hostConfig) { public MaintenanceApiService providesMaintenanceApiService(GsonConverterFactory gsonConverter, HostConfig hostConfig) {
Retrofit adapter = new Retrofit.Builder() Retrofit adapter = new Retrofit.Builder()
.baseUrl("https://habitica-assets.s3.amazonaws.com/mobileApp/endpoint/") .baseUrl("https://habitica-assets.s3.amazonaws.com/mobileApp/endpoint/")
.addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.addConverterFactory(gsonConverter) .addConverterFactory(gsonConverter)
.build(); .build();
return adapter.create(MaintenanceApiService.class); 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.tasks.Task
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.activities.MainActivity import com.habitrpg.android.habitica.ui.activities.MainActivity
import io.reactivex.functions.BiFunction import io.reactivex.rxjava3.functions.BiFunction
import io.realm.RealmResults import io.realm.RealmResults
import java.util.* import java.util.*
import javax.inject.Inject 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.android.habitica.ui.activities.MainActivity
import com.habitrpg.shared.habitica.HLogger import com.habitrpg.shared.habitica.HLogger
import com.habitrpg.shared.habitica.LogLevel import com.habitrpg.shared.habitica.LogLevel
import io.reactivex.functions.Consumer import io.reactivex.rxjava3.functions.Consumer
import java.util.* import java.util.*
import javax.inject.Inject 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.helpers.AppConfigManager
import com.habitrpg.android.habitica.models.Avatar import com.habitrpg.android.habitica.models.Avatar
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils 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.*
import java.util.concurrent.atomic.AtomicInteger 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.Stats
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper 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 org.greenrobot.eventbus.Subscribe
import java.util.* import java.util.*
import kotlin.math.floor 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.helpers.LanguageHelper
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog 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.EventBus
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
import java.util.* import java.util.*
@ -35,6 +35,7 @@ abstract class BaseActivity : AppCompatActivity() {
private var currentTheme: String? = null private var currentTheme: String? = null
private var isNightMode: Boolean = false private var isNightMode: Boolean = false
internal var forcedTheme: String? = null internal var forcedTheme: String? = null
internal var forcedIsNight: Boolean? = null
private var destroyed: Boolean = false private var destroyed: Boolean = false
open var overrideModernHeader: Boolean? = null open var overrideModernHeader: Boolean? = null
@ -105,7 +106,7 @@ abstract class BaseActivity : AppCompatActivity() {
val theme = forcedTheme ?: sharedPreferences.getString("theme_name", "purple") val theme = forcedTheme ?: sharedPreferences.getString("theme_name", "purple")
val modernHeaderStyle = overrideModernHeader ?: sharedPreferences.getBoolean("modern_header_style", true) val modernHeaderStyle = overrideModernHeader ?: sharedPreferences.getBoolean("modern_header_style", true)
if (theme != currentTheme || forced) { if (theme != currentTheme || forced) {
if (isNightMode) { if (forcedIsNight ?: isNightMode) {
setTheme(when (theme) { setTheme(when (theme) {
"maroon" -> R.style.MainAppTheme_Maroon_Dark "maroon" -> R.style.MainAppTheme_Maroon_Dark
"red" -> R.style.MainAppTheme_Red_Dark "red" -> R.style.MainAppTheme_Red_Dark
@ -131,12 +132,12 @@ abstract class BaseActivity : AppCompatActivity() {
} }
} }
if (isNightMode) { window.navigationBarColor = if (forcedIsNight ?: isNightMode) {
window.navigationBarColor = ContextCompat.getColor(this, R.color.system_bars) ContextCompat.getColor(this, R.color.system_bars)
} else { } 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) window.updateStatusBarColor(getThemeColor(R.attr.headerBackgroundColor), true)
} else { } else {
window.updateStatusBarColor(getThemeColor(R.attr.statusBarBackground), false) 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.helpers.ToolbarColorHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxkotlin.zipWith
import java.lang.NumberFormatException import java.lang.NumberFormatException
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@ -332,7 +331,7 @@ class ChallengeFormActivity : BaseActivity() {
return@flatMap Flowable.empty<Group>() return@flatMap Flowable.empty<Group>()
} }
socialRepository.retrieveGroup(it) socialRepository.retrieveGroup(it)
}) }, { user, groups -> Pair(user, groups) })
.subscribe({ groups -> .subscribe({ groups ->
val mutableGroups = groups.first.toMutableList() val mutableGroups = groups.first.toMutableList()
if (groups.first.firstOrNull { it.id == "00000000-0000-4000-A000-000000000000" } == null) { 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.models.user.*
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.functions.Consumer import io.reactivex.rxjava3.functions.Consumer
import javax.inject.Inject import javax.inject.Inject
class ClassSelectionActivity : BaseActivity(), Consumer<User> { class ClassSelectionActivity : BaseActivity(), Consumer<User> {

View file

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

View file

@ -30,10 +30,10 @@ class GuidelinesActivity: BaseActivity() {
@Throws(IOException::class) @Throws(IOException::class)
override fun onResponse(call: Call, response: Response) { override fun onResponse(call: Call, response: Response) {
val `in` = response.body()?.byteStream() val `in` = response.body?.byteStream()
val reader = BufferedReader(InputStreamReader(`in`)) val reader = BufferedReader(InputStreamReader(`in`))
val text = reader.readText() val text = reader.readText()
response.body()?.close() response.body?.close()
findViewById<TextView>(R.id.text_view).post { findViewById<TextView>(R.id.text_view).post {
findViewById<TextView>(R.id.text_view).setMarkdown(text) 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.helpers.dismissKeyboard
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.willowtreeapps.signinwithapplebutton.SignInWithAppleConfiguration import com.willowtreeapps.signinwithapplebutton.SignInWithAppleConfiguration
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.exceptions.Exceptions import io.reactivex.rxjava3.exceptions.Exceptions
import io.reactivex.functions.Consumer import io.reactivex.rxjava3.functions.Consumer
import io.reactivex.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import java.io.IOException import java.io.IOException
import javax.inject.Inject 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.DailiesWidgetProvider
import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider
import com.habitrpg.android.habitica.widget.TodoListWidgetProvider import com.habitrpg.android.habitica.widget.TodoListWidgetProvider
import io.reactivex.Completable import io.reactivex.rxjava3.core.Completable
import io.reactivex.Observable import io.reactivex.rxjava3.core.Observable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer import io.reactivex.rxjava3.functions.Consumer
import io.reactivex.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import io.realm.kotlin.isValid import io.realm.kotlin.isValid
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe 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 petWrapper = View.inflate(this, R.layout.pet_imageview, null) as? FrameLayout
val petImageView = petWrapper?.findViewById(R.id.pet_imageview) as? SimpleDraweeView 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 potionName = potion.text
val eggName = egg.text val eggName = egg.text
val dialog = HabiticaAlertDialog(this) 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.databinding.ActivityMaintenanceBinding
import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.ui.helpers.setMarkdown import com.habitrpg.android.habitica.ui.helpers.setMarkdown
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import javax.inject.Inject import javax.inject.Inject
class MaintenanceActivity : BaseActivity() { 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.TaskSetupFragment
import com.habitrpg.android.habitica.ui.fragments.setup.WelcomeFragment import com.habitrpg.android.habitica.ui.fragments.setup.WelcomeFragment
import com.viewpagerindicator.IconPagerAdapter import com.viewpagerindicator.IconPagerAdapter
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject

View file

@ -103,6 +103,7 @@ class TaskFormActivity : BaseActivity() {
val bundle = intent.extras ?: return val bundle = intent.extras ?: return
val taskId = bundle.getString(TASK_ID_KEY) val taskId = bundle.getString(TASK_ID_KEY)
forcedIsNight = false
forcedTheme = if (taskId != null) { forcedTheme = if (taskId != null) {
val taskValue = bundle.getDouble(TASK_VALUE_KEY) val taskValue = bundle.getDouble(TASK_VALUE_KEY)
when { when {
@ -131,7 +132,7 @@ class TaskFormActivity : BaseActivity() {
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
tintColor = getThemeColor(R.attr.taskFormTint) 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)) supportActionBar?.setBackgroundDrawable(ColorDrawable(upperTintColor))
binding.upperTextWrapper.setBackgroundColor(upperTintColor) binding.upperTextWrapper.setBackgroundColor(upperTintColor)
@ -212,7 +213,7 @@ class TaskFormActivity : BaseActivity() {
override fun loadTheme(sharedPreferences: SharedPreferences, forced: Boolean) { override fun loadTheme(sharedPreferences: SharedPreferences, forced: Boolean) {
super.loadTheme(sharedPreferences, forced) 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 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.helpers.RxErrorHandler
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import javax.inject.Inject 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.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import java.util.* import java.util.*
class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() { 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.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import java.util.* import java.util.*
class CustomizationRecyclerViewAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() { 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.PromoMenuViewHolder
import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoView import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoView
import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoViewHolder import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoViewHolder
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int): RecyclerView.Adapter<RecyclerView.ViewHolder>() { 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.R
import com.habitrpg.android.habitica.databinding.SkillTaskItemCardBinding import com.habitrpg.android.habitica.databinding.SkillTaskItemCardBinding
import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.models.tasks.Task
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.OrderedRealmCollection import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter import io.realm.RealmRecyclerViewAdapter
import java.util.* 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.models.user.SpecialItems
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
class SkillsRecyclerViewAdapter : RecyclerView.Adapter<SkillsRecyclerViewAdapter.SkillViewHolder>() { 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.models.inventory.Equipment
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper 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.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter 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.BottomSheetMenu
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem
import com.habitrpg.android.habitica.ui.views.dialogs.DetailDialog import com.habitrpg.android.habitica.ui.views.dialogs.DetailDialog
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.OrderedRealmCollection import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter import io.realm.RealmRecyclerViewAdapter
import io.realm.RealmResults 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.models.user.OwnedMount
import com.habitrpg.android.habitica.ui.viewHolders.MountViewHolder import com.habitrpg.android.habitica.ui.viewHolders.MountViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
class MountDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() { class MountDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {
private var ownedMounts: Map<String, OwnedMount>? = null 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.models.user.OwnedPet
import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.RealmResults import io.realm.RealmResults
class PetDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() { 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.MountViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
class StableRecyclerAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() { 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.extensions.setTintWith
import com.habitrpg.android.habitica.models.SetupCustomization import com.habitrpg.android.habitica.models.SetupCustomization
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
internal class CustomizationSetupAdapter : RecyclerView.Adapter<CustomizationSetupAdapter.CustomizationViewHolder>() { 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.models.social.ChallengeMembership
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeFilterOptions import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeFilterOptions
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.OrderedRealmCollection import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter import io.realm.RealmRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.helpers.EmojiParser 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.social.ChatMessage
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerMessageViewHolder import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerMessageViewHolder
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.OrderedRealmCollection import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter 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.ChatRecyclerViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerIntroViewHolder import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerIntroViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerMessageViewHolder import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerMessageViewHolder
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import com.habitrpg.android.habitica.models.members.Member import com.habitrpg.android.habitica.models.members.Member
class InboxAdapter(private var user: User?, private var replyToUser : Member) : PagedListAdapter<ChatMessage, ChatRecyclerViewHolder>(DIFF_CALLBACK) { 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.extensions.inflate
import com.habitrpg.android.habitica.models.members.Member import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.ui.viewHolders.GroupMemberViewHolder import com.habitrpg.android.habitica.ui.viewHolders.GroupMemberViewHolder
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import io.realm.OrderedRealmCollection import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter 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.adapter.tasks.BaseTasksRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
import com.habitrpg.android.habitica.ui.viewHolders.tasks.* import com.habitrpg.android.habitica.ui.viewHolders.tasks.*
import io.reactivex.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
class ChallengeTasksRecyclerViewAdapter(taskFilterHelper: TaskFilterHelper?, layoutResource: Int, class ChallengeTasksRecyclerViewAdapter(taskFilterHelper: TaskFilterHelper?, layoutResource: Int,
newContext: Context, userID: String, 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.models.tasks.Task
import com.habitrpg.android.habitica.proxy.CrashlyticsProxy import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
import io.reactivex.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject

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