mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Update dependencies
This commit is contained in:
parent
da3cb9d93d
commit
e80389cffb
156 changed files with 625 additions and 609 deletions
|
|
@ -42,20 +42,20 @@ repositories {
|
|||
dependencies {
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
//Networking
|
||||
implementation 'com.squareup.okhttp3:okhttp:3.14.6'
|
||||
implementation 'com.squareup.okhttp3:logging-interceptor:3.14.6'
|
||||
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
|
||||
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'
|
||||
//REST API handling
|
||||
implementation('com.squareup.retrofit2:retrofit:2.7.1') {
|
||||
implementation('com.squareup.retrofit2:retrofit:2.9.0') {
|
||||
exclude module: 'okhttp'
|
||||
}
|
||||
implementation 'com.squareup.retrofit2:converter-gson:2.7.1'
|
||||
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.7.1'
|
||||
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
|
||||
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
|
||||
//Crash Logging
|
||||
implementation 'com.google.firebase:firebase-crashlytics:17.2.1'
|
||||
implementation 'com.google.firebase:firebase-crashlytics:17.2.2'
|
||||
|
||||
//Dependency Injection
|
||||
implementation 'com.google.dagger:dagger:2.27'
|
||||
kapt 'com.google.dagger:dagger-compiler:2.25.4'
|
||||
implementation 'com.google.dagger:dagger:2.29.1'
|
||||
kapt 'com.google.dagger:dagger-compiler:2.29.1'
|
||||
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
|
||||
compileOnly 'com.github.pengrad:jdk9-deps:1.0'
|
||||
//App Compatibility and Material Design
|
||||
|
|
@ -64,36 +64,34 @@ dependencies {
|
|||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
||||
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
|
||||
// Markdown
|
||||
implementation "io.noties.markwon:core:4.2.0"
|
||||
implementation "io.noties.markwon:ext-strikethrough:4.2.0"
|
||||
implementation "io.noties.markwon:image:4.2.0"
|
||||
implementation "io.noties.markwon:recycler:4.2.0"
|
||||
implementation "io.noties.markwon:html:4.2.0"
|
||||
// About View for all dependent Libraries, we are using
|
||||
implementation('com.mikepenz:aboutlibraries:5.9.4@aar') {
|
||||
transitive = true
|
||||
}
|
||||
implementation "io.noties.markwon:core:4.6.0"
|
||||
implementation "io.noties.markwon:ext-strikethrough:4.6.0"
|
||||
implementation "io.noties.markwon:image:4.6.0"
|
||||
implementation "io.noties.markwon:recycler:4.6.0"
|
||||
implementation "io.noties.markwon:html:4.6.0"
|
||||
//Eventbus
|
||||
implementation 'org.greenrobot:eventbus:3.1.1'
|
||||
implementation 'org.greenrobot:eventbus:3.2.0'
|
||||
// IAP Handling / Verification
|
||||
implementation 'org.solovyev.android:checkout:1.2.1'
|
||||
implementation 'org.solovyev.android:checkout:1.2.2'
|
||||
//Facebook
|
||||
implementation('com.facebook.android:facebook-android-sdk:4.40.0') {
|
||||
implementation('com.facebook.android:facebook-android-sdk:7.1.0') {
|
||||
transitive = true
|
||||
}
|
||||
implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1@aar'
|
||||
//RxJava
|
||||
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
|
||||
implementation 'io.reactivex.rxjava2:rxjava:2.2.17'
|
||||
implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'
|
||||
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
|
||||
implementation 'io.reactivex.rxjava3:rxjava:3.0.6'
|
||||
implementation 'io.reactivex.rxjava3:rxkotlin:3.0.1'
|
||||
implementation 'io.reactivex.rxjava2:rxjava:2.2.19'
|
||||
implementation "com.github.akarnokd:rxjava3-bridge:3.0.0"
|
||||
|
||||
//Analytics
|
||||
implementation 'com.amplitude:android-sdk:2.23.2'
|
||||
implementation 'com.amplitude:android-sdk:2.25.2'
|
||||
// Fresco Image Management Library
|
||||
implementation('com.facebook.fresco:fresco:2.0.0') {
|
||||
implementation('com.facebook.fresco:fresco:2.3.0') {
|
||||
exclude module: 'bolts-android'
|
||||
}
|
||||
implementation('com.facebook.fresco:animated-gif:2.0.0') {
|
||||
implementation('com.facebook.fresco:animated-gif:2.3.0') {
|
||||
exclude module: 'bolts-android'
|
||||
}
|
||||
//Tests
|
||||
|
|
@ -110,20 +108,18 @@ dependencies {
|
|||
testImplementation 'org.powermock:powermock-module-junit4-rule:1.7.0'
|
||||
testImplementation 'org.powermock:powermock-module-junit4:1.7.0'
|
||||
//Leak Detection
|
||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2'
|
||||
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2'
|
||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5'
|
||||
//Push Notifications
|
||||
implementation 'com.google.firebase:firebase-core:17.5.0'
|
||||
implementation 'com.google.firebase:firebase-messaging:20.2.4'
|
||||
implementation 'com.google.firebase:firebase-messaging:20.3.0'
|
||||
implementation 'com.google.firebase:firebase-config:19.2.0'
|
||||
implementation 'com.google.firebase:firebase-perf:19.0.8'
|
||||
implementation 'com.google.firebase:firebase-perf:19.0.9'
|
||||
implementation 'com.google.android.gms:play-services-auth:18.1.0'
|
||||
implementation 'io.realm:android-adapters:3.1.0'
|
||||
implementation 'io.realm:android-adapters:4.0.0'
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation 'com.nex3z:flow-layout:1.2.2'
|
||||
|
||||
implementation 'androidx.core:core-ktx:1.3.1'
|
||||
implementation 'androidx.core:core-ktx:1.3.2'
|
||||
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
|
||||
implementation "androidx.lifecycle:lifecycle-common-java8:2.2.0"
|
||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
|
||||
|
|
@ -153,15 +149,14 @@ android {
|
|||
vectorDrawables.useSupportLibrary = true
|
||||
buildConfigField "String", "STORE", "\"google\""
|
||||
buildConfigField "String", "TESTING_LEVEL", "\"production\""
|
||||
multiDexEnabled true
|
||||
resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW"
|
||||
|
||||
versionCode 2571
|
||||
versionName "3.0.1"
|
||||
versionCode 2587
|
||||
versionName "3.1"
|
||||
}
|
||||
|
||||
viewBinding {
|
||||
enabled = true
|
||||
buildFeatures {
|
||||
viewBinding true
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
|
|
@ -177,7 +172,6 @@ android {
|
|||
debug {
|
||||
applicationIdSuffix ".debug"
|
||||
debuggable true
|
||||
multiDexEnabled true
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
// Disable fabric build ID generation for debug builds
|
||||
|
|
@ -189,7 +183,6 @@ android {
|
|||
release {
|
||||
signingConfig signingConfigs.release
|
||||
debuggable false
|
||||
multiDexEnabled true
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
|
|
|
|||
|
|
@ -1,14 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/colorContentBackground"
|
||||
android:foreground="?selectableItemBackground"
|
||||
android:orientation="vertical">
|
||||
android:foreground="?selectableItemBackground">
|
||||
|
||||
<FrameLayout
|
||||
<LinearLayout
|
||||
android:id="@+id/main_task_wrapper"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
@ -16,11 +14,8 @@
|
|||
android:layout_marginVertical="@dimen/task_spacing_vertical"
|
||||
android:background="@drawable/task_background"
|
||||
android:clipChildren="true"
|
||||
android:minHeight="@dimen/task_min_height">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
android:minHeight="@dimen/task_min_height"
|
||||
android:orientation="vertical">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
@ -73,6 +68,5 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" />
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Body2"
|
||||
android:textColor="@color/black_50_alpha"
|
||||
android:textColor="@color/text_secondary"
|
||||
tools:text="These are the notes"
|
||||
android:gravity="center"/>
|
||||
</merge>
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
android:gravity="center"
|
||||
android:minWidth="20dp"
|
||||
android:paddingTop="0dp"
|
||||
android:textColor="@color/text_inverted"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="12sp"
|
||||
android:visibility="gone"
|
||||
tools:text="1"
|
||||
|
|
@ -116,7 +116,7 @@
|
|||
android:gravity="center"
|
||||
android:minWidth="20dp"
|
||||
android:paddingTop="0dp"
|
||||
android:textColor="#FFF"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="12sp"
|
||||
android:visibility="gone"
|
||||
tools:text="1"
|
||||
|
|
|
|||
|
|
@ -11,9 +11,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:padding="0dp"
|
||||
android:src="@drawable/ic_close_purple_300_36dp"
|
||||
android:tint="?colorPrimary"
|
||||
android:tintMode="src_atop"
|
||||
style="@style/Base.Widget.AppCompat.Button.Borderless"/>
|
||||
android:tint="@color/color_accent"
|
||||
android:background="@color/transparent"/>
|
||||
<EditText
|
||||
android:id="@+id/edit_text"
|
||||
android:layout_width="0dp"
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
android:layout_gravity="center_vertical"
|
||||
android:paddingTop="@dimen/task_top_bottom_padding"
|
||||
android:paddingBottom="@dimen/task_top_bottom_padding"
|
||||
android:paddingEnd="@dimen/task_text_padding"
|
||||
android:paddingStart="@dimen/task_text_padding">
|
||||
android:layout_marginEnd="@dimen/task_text_padding"
|
||||
android:layout_marginStart="@dimen/task_text_padding">
|
||||
<com.habitrpg.android.habitica.ui.views.EllipsisTextView
|
||||
android:id="@+id/checkedTextView"
|
||||
style="@style/Subheader3"
|
||||
|
|
@ -32,6 +32,7 @@
|
|||
android:ellipsize="end"
|
||||
android:textSize="13sp"
|
||||
tools:text="Notes"
|
||||
android:layout_marginTop="1dp"
|
||||
android:layout_marginBottom="7dp"/>
|
||||
|
||||
<Button
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
android:foreground="?selectableItemBackground"
|
||||
android:orientation="vertical">
|
||||
|
||||
<FrameLayout
|
||||
<LinearLayout
|
||||
android:id="@+id/main_task_wrapper"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
@ -15,12 +15,8 @@
|
|||
android:layout_marginVertical="@dimen/task_spacing_vertical"
|
||||
android:background="@drawable/task_background"
|
||||
android:clipChildren="true"
|
||||
android:minHeight="@dimen/task_min_height">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
android:minHeight="@dimen/task_min_height"
|
||||
android:orientation="vertical">
|
||||
<LinearLayout
|
||||
android:id="@+id/card_view"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -76,6 +72,5 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" />
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.habitrpg.android.habitica
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
|
|
@ -11,7 +12,6 @@ import android.database.sqlite.SQLiteDatabase
|
|||
import android.util.Log
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.content.edit
|
||||
import androidx.multidex.MultiDexApplication
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.amplitude.api.Amplitude
|
||||
import com.amplitude.api.Identify
|
||||
|
|
@ -33,8 +33,6 @@ import com.habitrpg.android.habitica.ui.activities.IntroActivity
|
|||
import com.habitrpg.android.habitica.ui.activities.LoginActivity
|
||||
import com.habitrpg.android.habitica.ui.helpers.MarkdownParser
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.squareup.leakcanary.LeakCanary
|
||||
import com.squareup.leakcanary.RefWatcher
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmConfiguration
|
||||
import org.solovyev.android.checkout.Billing
|
||||
|
|
@ -44,8 +42,7 @@ import org.solovyev.android.checkout.PurchaseVerifier
|
|||
import javax.inject.Inject
|
||||
|
||||
//contains all HabiticaApplicationLogic except dagger componentInitialisation
|
||||
abstract class HabiticaBaseApplication : MultiDexApplication() {
|
||||
var refWatcher: RefWatcher? = null
|
||||
abstract class HabiticaBaseApplication : Application() {
|
||||
@Inject
|
||||
internal lateinit var lazyApiHelper: ApiClient
|
||||
@Inject
|
||||
|
|
@ -69,16 +66,10 @@ abstract class HabiticaBaseApplication : MultiDexApplication() {
|
|||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
if (LeakCanary.isInAnalyzerProcess(this)) {
|
||||
// This process is dedicated to LeakCanary for heap analysis.
|
||||
// You should not init your app in this process.
|
||||
return
|
||||
}
|
||||
setupRealm()
|
||||
setupDagger()
|
||||
setupRemoteConfig()
|
||||
setupNotifications()
|
||||
refWatcher = LeakCanary.install(this)
|
||||
createBillingAndCheckout()
|
||||
HabiticaIconsHelper.init(this)
|
||||
MarkdownParser.setup(this)
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import com.habitrpg.android.habitica.models.tasks.TaskList
|
|||
import com.habitrpg.android.habitica.models.user.Items
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import retrofit2.http.*
|
||||
|
||||
@JvmSuppressWildcards
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.api;
|
|||
|
||||
import com.habitrpg.android.habitica.models.responses.MaintenanceResponse;
|
||||
|
||||
import io.reactivex.Flowable;
|
||||
import io.reactivex.rxjava3.core.Flowable;
|
||||
import retrofit2.http.GET;
|
||||
|
||||
public interface MaintenanceApiService {
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ import com.habitrpg.android.habitica.models.tasks.TaskList
|
|||
import com.habitrpg.android.habitica.models.user.Items
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.FlowableTransformer
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.FlowableTransformer
|
||||
import retrofit2.HttpException
|
||||
|
||||
|
||||
|
|
@ -54,17 +54,17 @@ interface ApiClient {
|
|||
|
||||
fun buyItem(itemKey: String, purchaseQuantity: Int): Flowable<BuyResponse>
|
||||
|
||||
fun purchaseItem(type: String, itemKey: String, purchaseQuantity: Int): Flowable<Any>
|
||||
fun purchaseItem(type: String, itemKey: String, purchaseQuantity: Int): Flowable<Void>
|
||||
|
||||
fun purchaseHourglassItem(type: String, itemKey: String): Flowable<Any>
|
||||
fun purchaseHourglassItem(type: String, itemKey: String): Flowable<Void>
|
||||
|
||||
fun purchaseMysterySet(itemKey: String): Flowable<Any>
|
||||
fun purchaseMysterySet(itemKey: String): Flowable<Void>
|
||||
|
||||
fun purchaseQuest(key: String): Flowable<Any>
|
||||
fun purchaseSpecialSpell(key: String): Flowable<Any>
|
||||
fun purchaseQuest(key: String): Flowable<Void>
|
||||
fun purchaseSpecialSpell(key: String): Flowable<Void>
|
||||
fun validateSubscription(request: SubscriptionValidationRequest): Flowable<Any>
|
||||
fun validateNoRenewSubscription(request: PurchaseValidationRequest): Flowable<Any>
|
||||
fun cancelSubscription(): Flowable<Any>
|
||||
fun cancelSubscription(): Flowable<Void>
|
||||
|
||||
fun sellItem(itemType: String, itemKey: String): Flowable<User>
|
||||
|
||||
|
|
@ -214,9 +214,9 @@ interface ApiClient {
|
|||
fun debugAddTenGems(): Flowable<Void>
|
||||
|
||||
// Notifications
|
||||
fun readNotification(notificationId: String): Flowable<List<*>>
|
||||
fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>>
|
||||
fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>>
|
||||
fun readNotification(notificationId: String): Flowable<List<Any>>
|
||||
fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
|
||||
fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
|
||||
|
||||
fun getErrorResponse(throwable: HttpException): ErrorResponse
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.habitrpg.android.habitica.models.social.Challenge
|
|||
import com.habitrpg.android.habitica.models.social.ChallengeMembership
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.models.tasks.TaskList
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface ChallengeRepository : BaseRepository {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import android.content.Context
|
|||
import com.habitrpg.android.habitica.models.ContentResult
|
||||
import com.habitrpg.android.habitica.models.WorldState
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
|
||||
interface ContentRepository {
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data
|
|||
|
||||
import com.habitrpg.android.habitica.models.inventory.Customization
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface CustomizationRepository : BaseRepository {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data
|
|||
|
||||
import com.habitrpg.android.habitica.models.FAQArticle
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface FAQRepository : BaseRepository {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import com.habitrpg.android.habitica.models.responses.FeedResponse
|
|||
import com.habitrpg.android.habitica.models.shops.Shop
|
||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||
import com.habitrpg.android.habitica.models.user.*
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
|
||||
|
|
@ -65,14 +65,14 @@ interface InventoryRepository : BaseRepository {
|
|||
fun retrieveShopInventory(identifier: String): Flowable<Shop>
|
||||
fun retrieveMarketGear(): Flowable<Shop>
|
||||
|
||||
fun purchaseMysterySet(categoryIdentifier: String): Flowable<Any>
|
||||
fun purchaseMysterySet(categoryIdentifier: String): Flowable<Void>
|
||||
|
||||
fun purchaseHourglassItem(purchaseType: String, key: String): Flowable<Any>
|
||||
fun purchaseHourglassItem(purchaseType: String, key: String): Flowable<Void>
|
||||
|
||||
fun purchaseQuest(key: String): Flowable<Any>
|
||||
fun purchaseSpecialSpell(key: String): Flowable<Any>
|
||||
fun purchaseQuest(key: String): Flowable<Void>
|
||||
fun purchaseSpecialSpell(key: String): Flowable<Void>
|
||||
|
||||
fun purchaseItem(purchaseType: String, key: String, purchaseQuantity: Int): Flowable<Any>
|
||||
fun purchaseItem(purchaseType: String, key: String, purchaseQuantity: Int): Flowable<Void>
|
||||
|
||||
fun togglePinnedItem(item: ShopItem): Flowable<List<ShopItem>>
|
||||
fun getItems(itemClass: Class<out Item>, keys: Array<String>): Flowable<out RealmResults<out Item>>
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ import com.habitrpg.android.habitica.models.members.Member
|
|||
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult
|
||||
import com.habitrpg.android.habitica.models.social.*
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.realm.RealmResults
|
||||
import java.util.*
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ package com.habitrpg.android.habitica.data
|
|||
|
||||
import com.habitrpg.android.habitica.models.Tag
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface TagRepository : BaseRepository {
|
||||
|
|
|
|||
|
|
@ -6,9 +6,9 @@ import com.habitrpg.android.habitica.models.tasks.Task
|
|||
import com.habitrpg.android.habitica.models.tasks.TaskList
|
||||
import com.habitrpg.android.habitica.models.tasks.TasksOrder
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.Maybe
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Maybe
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmResults
|
||||
import java.util.*
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package com.habitrpg.android.habitica.data
|
||||
|
||||
import com.habitrpg.android.habitica.models.TutorialStep
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface TutorialRepository : BaseRepository {
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ import com.habitrpg.android.habitica.models.responses.VerifyUsernameResponse
|
|||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.Maybe
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Maybe
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface UserRepository : BaseRepository {
|
||||
|
|
@ -52,9 +52,9 @@ interface UserRepository : BaseRepository {
|
|||
fun runCron(tasks: MutableList<Task>)
|
||||
fun runCron()
|
||||
|
||||
fun readNotification(id: String): Flowable<List<*>>
|
||||
fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>>
|
||||
fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>>
|
||||
fun readNotification(id: String): Flowable<List<Any>>
|
||||
fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
|
||||
fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>>
|
||||
|
||||
fun changeCustomDayStart(dayStartTime: Int): Flowable<User>
|
||||
|
||||
|
|
|
|||
|
|
@ -32,11 +32,11 @@ import com.habitrpg.android.habitica.models.user.Items
|
|||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.FlowableTransformer
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.functions.Consumer
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.FlowableTransformer
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.functions.Consumer
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import okhttp3.Cache
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
|
|
@ -44,7 +44,7 @@ import okhttp3.logging.HttpLoggingInterceptor
|
|||
import org.greenrobot.eventbus.EventBus
|
||||
import retrofit2.HttpException
|
||||
import retrofit2.Retrofit
|
||||
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
|
||||
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
|
||||
import retrofit2.converter.gson.GsonConverterFactory
|
||||
import java.io.IOException
|
||||
import java.net.SocketException
|
||||
|
|
@ -125,9 +125,9 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
|
|||
if (BuildConfig.STAGING_KEY.isNotEmpty()) {
|
||||
builder = builder.header("Authorization", "Basic " + BuildConfig.STAGING_KEY)
|
||||
}
|
||||
val request = builder.method(original.method(), original.body())
|
||||
val request = builder.method(original.method, original.body)
|
||||
.build()
|
||||
lastAPICallURL = original.url().toString()
|
||||
lastAPICallURL = original.url.toString()
|
||||
chain.proceed(request)
|
||||
}
|
||||
.readTimeout(2400, TimeUnit.SECONDS)
|
||||
|
|
@ -138,7 +138,7 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
|
|||
retrofitAdapter = Retrofit.Builder()
|
||||
.client(client)
|
||||
.baseUrl(server.toString())
|
||||
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
||||
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
|
||||
.addConverterFactory(gsonConverter)
|
||||
.build()
|
||||
|
||||
|
|
@ -193,12 +193,12 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
|
|||
this.showConnectionProblemDialog(R.string.internal_error_api)
|
||||
} else if (throwableClass == SocketTimeoutException::class.java || UnknownHostException::class.java == throwableClass) {
|
||||
this.showConnectionProblemDialog(R.string.network_error_no_network_body)
|
||||
} else if (throwableClass == retrofit2.adapter.rxjava2.HttpException::class.java) {
|
||||
} else if (throwableClass == retrofit2.adapter.rxjava3.HttpException::class.java) {
|
||||
val error = throwable as HttpException
|
||||
val res = getErrorResponse(error)
|
||||
val status = error.code()
|
||||
|
||||
if (status == 404 || error.response()?.raw()?.request()?.url()?.toString()?.endsWith("/user/push-devices") == true) {
|
||||
if (status == 404 || error.response()?.raw()?.request?.url?.toString()?.endsWith("/user/push-devices") == true) {
|
||||
//workaround for an error that sometimes displays that the user already has this push device
|
||||
return
|
||||
}
|
||||
|
|
@ -337,7 +337,7 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
|
|||
return apiService.blockMember(userID).compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
override fun purchaseItem(type: String, itemKey: String, purchaseQuantity: Int): Flowable<Any> {
|
||||
override fun purchaseItem(type: String, itemKey: String, purchaseQuantity: Int): Flowable<Void> {
|
||||
return apiService.purchaseItem(type, itemKey, mapOf(Pair("quantity", purchaseQuantity))).compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
|
|
@ -359,23 +359,23 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
|
|||
}
|
||||
}
|
||||
|
||||
override fun cancelSubscription(): Flowable<Any> {
|
||||
override fun cancelSubscription(): Flowable<Void> {
|
||||
return apiService.cancelSubscription().compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
override fun purchaseHourglassItem(type: String, itemKey: String): Flowable<Any> {
|
||||
override fun purchaseHourglassItem(type: String, itemKey: String): Flowable<Void> {
|
||||
return apiService.purchaseHourglassItem(type, itemKey).compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
override fun purchaseMysterySet(itemKey: String): Flowable<Any> {
|
||||
override fun purchaseMysterySet(itemKey: String): Flowable<Void> {
|
||||
return apiService.purchaseMysterySet(itemKey).compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
override fun purchaseQuest(key: String): Flowable<Any> {
|
||||
override fun purchaseQuest(key: String): Flowable<Void> {
|
||||
return apiService.purchaseQuest(key).compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
override fun purchaseSpecialSpell(key: String): Flowable<Any> {
|
||||
override fun purchaseSpecialSpell(key: String): Flowable<Void> {
|
||||
return apiService.purchaseSpecialSpell(key).compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
|
|
@ -690,15 +690,15 @@ class ApiClientImpl//private OnHabitsAPIResult mResultListener;
|
|||
return apiService.debugAddTenGems().compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
override fun readNotification(notificationId: String): Flowable<List<*>> {
|
||||
override fun readNotification(notificationId: String): Flowable<List<Any>> {
|
||||
return apiService.readNotification(notificationId).compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
override fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> {
|
||||
override fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>> {
|
||||
return apiService.readNotifications(notificationIds).compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
override fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> {
|
||||
override fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>> {
|
||||
return apiService.seeNotifications(notificationIds).compose(configureApiCallObserver())
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import com.habitrpg.android.habitica.models.social.ChallengeMembership
|
|||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.models.tasks.TaskList
|
||||
import com.habitrpg.android.habitica.models.tasks.TasksOrder
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import com.habitrpg.android.habitica.data.local.ContentLocalRepository
|
|||
import com.habitrpg.android.habitica.models.ContentResult
|
||||
import com.habitrpg.android.habitica.models.WorldState
|
||||
import com.habitrpg.android.habitica.models.inventory.SpecialItem
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmList
|
||||
import java.util.*
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import com.habitrpg.android.habitica.data.CustomizationRepository
|
|||
import com.habitrpg.android.habitica.data.local.CustomizationLocalRepository
|
||||
import com.habitrpg.android.habitica.models.inventory.Customization
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
class CustomizationRepositoryImpl(localRepository: CustomizationLocalRepository, apiClient: ApiClient, userID: String) : BaseRepositoryImpl<CustomizationLocalRepository>(localRepository, apiClient, userID), CustomizationRepository {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import com.habitrpg.android.habitica.data.FAQRepository
|
|||
import com.habitrpg.android.habitica.data.local.FAQLocalRepository
|
||||
import com.habitrpg.android.habitica.models.FAQArticle
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import com.habitrpg.android.habitica.models.responses.FeedResponse
|
|||
import com.habitrpg.android.habitica.models.shops.Shop
|
||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||
import com.habitrpg.android.habitica.models.user.*
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
class InventoryRepositoryImpl(localRepository: InventoryLocalRepository, apiClient: ApiClient, userID: String, var appConfigManager: AppConfigManager) : BaseRepositoryImpl<InventoryLocalRepository>(localRepository, apiClient, userID), InventoryRepository {
|
||||
|
|
@ -276,23 +276,23 @@ class InventoryRepositoryImpl(localRepository: InventoryLocalRepository, apiClie
|
|||
return apiClient.retrieveMarketGear()
|
||||
}
|
||||
|
||||
override fun purchaseMysterySet(categoryIdentifier: String): Flowable<Any> {
|
||||
override fun purchaseMysterySet(categoryIdentifier: String): Flowable<Void> {
|
||||
return apiClient.purchaseMysterySet(categoryIdentifier)
|
||||
}
|
||||
|
||||
override fun purchaseHourglassItem(purchaseType: String, key: String): Flowable<Any> {
|
||||
override fun purchaseHourglassItem(purchaseType: String, key: String): Flowable<Void> {
|
||||
return apiClient.purchaseHourglassItem(purchaseType, key)
|
||||
}
|
||||
|
||||
override fun purchaseQuest(key: String): Flowable<Any> {
|
||||
override fun purchaseQuest(key: String): Flowable<Void> {
|
||||
return apiClient.purchaseQuest(key)
|
||||
}
|
||||
|
||||
override fun purchaseSpecialSpell(key: String): Flowable<Any> {
|
||||
override fun purchaseSpecialSpell(key: String): Flowable<Void> {
|
||||
return apiClient.purchaseSpecialSpell(key)
|
||||
}
|
||||
|
||||
override fun purchaseItem(purchaseType: String, key: String, purchaseQuantity: Int): Flowable<Any> {
|
||||
override fun purchaseItem(purchaseType: String, key: String, purchaseQuantity: Int): Flowable<Void> {
|
||||
return apiClient.purchaseItem(purchaseType, key, purchaseQuantity)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ import com.habitrpg.android.habitica.models.members.Member
|
|||
import com.habitrpg.android.habitica.models.responses.PostChatMessageResult
|
||||
import com.habitrpg.android.habitica.models.social.*
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.realm.RealmResults
|
||||
import java.util.*
|
||||
import kotlin.collections.HashMap
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ import com.habitrpg.android.habitica.data.ApiClient
|
|||
import com.habitrpg.android.habitica.data.TagRepository
|
||||
import com.habitrpg.android.habitica.data.local.TagLocalRepository
|
||||
import com.habitrpg.android.habitica.models.Tag
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.realm.RealmResults
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ import com.habitrpg.android.habitica.models.responses.TaskScoringResult
|
|||
import com.habitrpg.android.habitica.models.tasks.*
|
||||
import com.habitrpg.android.habitica.models.user.OwnedItem
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.Maybe
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Maybe
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmResults
|
||||
import java.text.SimpleDateFormat
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.habitrpg.android.habitica.data.ApiClient
|
|||
import com.habitrpg.android.habitica.data.TutorialRepository
|
||||
import com.habitrpg.android.habitica.data.local.TutorialLocalRepository
|
||||
import com.habitrpg.android.habitica.models.TutorialStep
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ import com.habitrpg.android.habitica.models.responses.VerifyUsernameResponse
|
|||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.Maybe
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Maybe
|
||||
import io.realm.RealmResults
|
||||
import java.util.*
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
|
@ -171,15 +171,15 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli
|
|||
runCron(ArrayList())
|
||||
}
|
||||
|
||||
override fun readNotification(id: String): Flowable<List<*>> = apiClient.readNotification(id)
|
||||
override fun readNotification(id: String): Flowable<List<Any>> = apiClient.readNotification(id)
|
||||
override fun getUserQuestStatus(): Flowable<UserQuestStatus> {
|
||||
return localRepository.getUserQuestStatus(userID)
|
||||
}
|
||||
|
||||
override fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> =
|
||||
override fun readNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>> =
|
||||
apiClient.readNotifications(notificationIds)
|
||||
|
||||
override fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<*>> =
|
||||
override fun seeNotifications(notificationIds: Map<String, List<String>>): Flowable<List<Any>> =
|
||||
apiClient.seeNotifications(notificationIds)
|
||||
|
||||
override fun changeCustomDayStart(dayStartTime: Int): Flowable<User> {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import com.habitrpg.android.habitica.models.social.Challenge
|
|||
import com.habitrpg.android.habitica.models.social.ChallengeMembership
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface ChallengeLocalRepository : BaseLocalRepository {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data.local
|
|||
|
||||
import com.habitrpg.android.habitica.models.inventory.Customization
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface CustomizationLocalRepository : ContentLocalRepository {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data.local
|
|||
|
||||
import com.habitrpg.android.habitica.models.FAQArticle
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface FAQLocalRepository : ContentLocalRepository {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import com.habitrpg.android.habitica.models.user.OwnedItem
|
|||
import com.habitrpg.android.habitica.models.user.OwnedMount
|
||||
import com.habitrpg.android.habitica.models.user.OwnedPet
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface InventoryLocalRepository : ContentLocalRepository {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import com.habitrpg.android.habitica.models.social.Group
|
|||
import com.habitrpg.android.habitica.models.social.GroupMembership
|
||||
import com.habitrpg.android.habitica.models.social.InboxConversation
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface SocialLocalRepository : BaseLocalRepository {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package com.habitrpg.android.habitica.data.local
|
|||
|
||||
import com.habitrpg.android.habitica.models.Tag
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface TagLocalRepository : BaseLocalRepository {
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ import com.habitrpg.android.habitica.models.tasks.Task
|
|||
import com.habitrpg.android.habitica.models.tasks.TaskList
|
||||
import com.habitrpg.android.habitica.models.tasks.TasksOrder
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.Maybe
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Maybe
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface TaskLocalRepository : BaseLocalRepository {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package com.habitrpg.android.habitica.data.local
|
||||
|
||||
import com.habitrpg.android.habitica.models.TutorialStep
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
interface TutorialLocalRepository : BaseLocalRepository {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import com.habitrpg.android.habitica.models.Skill
|
|||
import com.habitrpg.android.habitica.models.TutorialStep
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
|
||||
enum class UserQuestStatus {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ import com.habitrpg.android.habitica.data.local.ChallengeLocalRepository
|
|||
import com.habitrpg.android.habitica.models.social.Challenge
|
||||
import com.habitrpg.android.habitica.models.social.ChallengeMembership
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import io.reactivex.Flowable
|
||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmResults
|
||||
import io.realm.Sort
|
||||
|
|
@ -12,60 +13,58 @@ import java.util.*
|
|||
|
||||
class RealmChallengeLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), ChallengeLocalRepository {
|
||||
|
||||
override fun isChallengeMember(userID: String, challengeID: String): Flowable<Boolean> = realm.where(ChallengeMembership::class.java)
|
||||
override fun isChallengeMember(userID: String, challengeID: String): Flowable<Boolean> = RxJavaBridge.toV3Flowable(realm.where(ChallengeMembership::class.java)
|
||||
.equalTo("userID", userID)
|
||||
.equalTo("challengeID", challengeID)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.map { it.count() > 0 }
|
||||
.filter { it.isLoaded }).map { it.count() > 0 }
|
||||
|
||||
override fun getChallengeMembership(userId: String, id: String): Flowable<ChallengeMembership> = realm.where(ChallengeMembership::class.java)
|
||||
override fun getChallengeMembership(userId: String, id: String): Flowable<ChallengeMembership> = RxJavaBridge.toV3Flowable(realm.where(ChallengeMembership::class.java)
|
||||
.equalTo("userID", userId)
|
||||
.equalTo("challengeID", id)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.map { it.first() }
|
||||
.filter { it.isLoaded }).map { it.first() }
|
||||
|
||||
override fun getChallengeMemberships(userId: String): Flowable<RealmResults<ChallengeMembership>> = realm.where(ChallengeMembership::class.java)
|
||||
override fun getChallengeMemberships(userId: String): Flowable<RealmResults<ChallengeMembership>> = RxJavaBridge.toV3Flowable(realm.where(ChallengeMembership::class.java)
|
||||
.equalTo("userID", userId)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
|
||||
override fun getChallenge(id: String): Flowable<Challenge> {
|
||||
return realm.where(Challenge::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Challenge::class.java)
|
||||
.equalTo("id", id)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { realmObject -> realmObject.isLoaded && realmObject.isNotEmpty() }
|
||||
.map { it.first() }
|
||||
.map { it.first() })
|
||||
}
|
||||
|
||||
override fun getTasks(challengeID: String): Flowable<RealmResults<Task>> {
|
||||
return realm.where(Task::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java)
|
||||
.equalTo("userId", challengeID)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { realmObject -> realmObject.isLoaded }
|
||||
.filter { realmObject -> realmObject.isLoaded })
|
||||
}
|
||||
|
||||
override val challenges: Flowable<RealmResults<Challenge>>
|
||||
get() = realm.where(Challenge::class.java)
|
||||
get() = RxJavaBridge.toV3Flowable(realm.where(Challenge::class.java)
|
||||
.isNotNull("name")
|
||||
.sort("official", Sort.DESCENDING, "createdAt", Sort.DESCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
|
||||
override fun getUserChallenges(userId: String): Flowable<RealmResults<Challenge>> {
|
||||
return realm.where(ChallengeMembership::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(ChallengeMembership::class.java)
|
||||
.equalTo("userID", userId)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.flatMap {
|
||||
.filter { it.isLoaded })
|
||||
.flatMap {
|
||||
val ids = it.map {
|
||||
return@map it.challengeID
|
||||
}.toTypedArray()
|
||||
|
|
@ -80,7 +79,7 @@ class RealmChallengeLocalRepository(realm: Realm) : RealmBaseLocalRepository(rea
|
|||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun setParticipating(userID: String, challengeID: String, isParticipating: Boolean) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ package com.habitrpg.android.habitica.data.local.implementation
|
|||
|
||||
import com.habitrpg.android.habitica.data.local.CustomizationLocalRepository
|
||||
import com.habitrpg.android.habitica.models.inventory.Customization
|
||||
import io.reactivex.Flowable
|
||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmResults
|
||||
import java.util.*
|
||||
|
|
@ -29,10 +30,10 @@ class RealmCustomizationLocalRepository(realm: Realm) : RealmContentLocalReposit
|
|||
.endGroup()
|
||||
.endGroup()
|
||||
}
|
||||
return query
|
||||
return RxJavaBridge.toV3Flowable(query
|
||||
.sort("customizationSetName")
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,23 +2,24 @@ package com.habitrpg.android.habitica.data.local.implementation
|
|||
|
||||
import com.habitrpg.android.habitica.data.local.FAQLocalRepository
|
||||
import com.habitrpg.android.habitica.models.FAQArticle
|
||||
import io.reactivex.Flowable
|
||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmResults
|
||||
|
||||
class RealmFAQLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), FAQLocalRepository {
|
||||
override fun getArticle(position: Int): Flowable<FAQArticle> {
|
||||
return realm.where(FAQArticle::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(FAQArticle::class.java)
|
||||
.equalTo("position", position)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter{ it.isLoaded && it.count() > 0 }
|
||||
.map { it.first() }
|
||||
.map { it.first() })
|
||||
}
|
||||
|
||||
override val articles: Flowable<RealmResults<FAQArticle>>
|
||||
get() = realm.where(FAQArticle::class.java)
|
||||
get() = RxJavaBridge.toV3Flowable(realm.where(FAQArticle::class.java)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter{ it.isLoaded }
|
||||
.filter{ it.isLoaded })
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@ import com.habitrpg.android.habitica.models.user.OwnedItem
|
|||
import com.habitrpg.android.habitica.models.user.OwnedMount
|
||||
import com.habitrpg.android.habitica.models.user.OwnedPet
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmObject
|
||||
import io.realm.RealmResults
|
||||
|
|
@ -17,27 +18,27 @@ import io.realm.Sort
|
|||
|
||||
class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(realm), InventoryLocalRepository {
|
||||
override fun getQuestContent(keys: List<String>): Flowable<RealmResults<QuestContent>> {
|
||||
return realm.where(QuestContent::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(QuestContent::class.java)
|
||||
.`in`("key", keys.toTypedArray())
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getQuestContent(key: String): Flowable<QuestContent> {
|
||||
return realm.where(QuestContent::class.java).equalTo("key", key)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(QuestContent::class.java).equalTo("key", key)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { content -> content.isLoaded && content.isValid && !content.isEmpty() }
|
||||
.map { content -> content.first() }
|
||||
.map { content -> content.first() })
|
||||
}
|
||||
|
||||
override fun getEquipment(searchedKeys: List<String>): Flowable<RealmResults<Equipment>> {
|
||||
return realm.where(Equipment::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
|
||||
.`in`("key", searchedKeys.toTypedArray())
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getArmoireRemainingCount(): Long {
|
||||
|
|
@ -52,29 +53,29 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
|
|||
}
|
||||
|
||||
override fun getOwnedEquipment(type: String): Flowable<RealmResults<Equipment>> {
|
||||
return realm.where(Equipment::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
|
||||
.equalTo("type", type)
|
||||
.equalTo("owned", true)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getOwnedEquipment(): Flowable<RealmResults<Equipment>> {
|
||||
return realm.where(Equipment::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
|
||||
.equalTo("owned", true)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getEquipmentType(type: String, set: String): Flowable<RealmResults<Equipment>> {
|
||||
return realm.where(Equipment::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
|
||||
.equalTo("type", type)
|
||||
.equalTo("gearSet", set)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getOwnedItems(itemType: String, userID: String, includeZero: Boolean): Flowable<RealmResults<OwnedItem>> {
|
||||
|
|
@ -82,22 +83,22 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
|
|||
if (!includeZero) {
|
||||
query = query.greaterThan("numberOwned", 0)
|
||||
}
|
||||
return query.equalTo("itemType", itemType)
|
||||
return RxJavaBridge.toV3Flowable(query.equalTo("itemType", itemType)
|
||||
.equalTo("userID", userID)
|
||||
.sort("key")
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getItems(itemClass: Class<out Item>, keys: Array<String>): Flowable<out RealmResults<out Item>> {
|
||||
return realm.where(itemClass).`in`("key", keys).findAll().asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
return RxJavaBridge.toV3Flowable(realm.where(itemClass).`in`("key", keys).findAll().asFlowable()
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getItems(itemClass: Class<out Item>): Flowable<out RealmResults<out Item>> {
|
||||
return realm.where(itemClass).findAll().asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
return RxJavaBridge.toV3Flowable(realm.where(itemClass).findAll().asFlowable()
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getOwnedItems(userID: String, includeZero: Boolean): Flowable<Map<String, OwnedItem>> {
|
||||
|
|
@ -105,7 +106,7 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
|
|||
if (!includeZero) {
|
||||
query = query.greaterThan("numberOwned", 0)
|
||||
}
|
||||
return query.equalTo("userID", userID)
|
||||
return RxJavaBridge.toV3Flowable(query.equalTo("userID", userID)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.map {
|
||||
|
|
@ -114,25 +115,25 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
|
|||
items[item.key + "-" + item.itemType] = item
|
||||
}
|
||||
items
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun getEquipment(key: String): Flowable<Equipment> {
|
||||
return realm.where(Equipment::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
|
||||
.sort("text")
|
||||
.equalTo("key", key)
|
||||
.findFirstAsync()
|
||||
.asFlowable<RealmObject>()
|
||||
.filter { realmObject -> realmObject.isLoaded }
|
||||
.cast(Equipment::class.java)
|
||||
.cast(Equipment::class.java))
|
||||
}
|
||||
|
||||
override fun getMounts(): Flowable<RealmResults<Mount>> {
|
||||
return realm.where(Mount::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Mount::class.java)
|
||||
.sort("type", Sort.ASCENDING, "animal", Sort.ASCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getMounts(type: String?, group: String?, color: String?): Flowable<RealmResults<Mount>> {
|
||||
|
|
@ -147,26 +148,26 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
|
|||
if (color != null) {
|
||||
query = query.equalTo("color", color)
|
||||
}
|
||||
return query.findAll()
|
||||
return RxJavaBridge.toV3Flowable(query.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getOwnedMounts(userID: String): Flowable<RealmResults<OwnedMount>> {
|
||||
return realm.where(OwnedMount::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(OwnedMount::class.java)
|
||||
.equalTo("owned", true)
|
||||
.equalTo("userID", userID)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getPets(): Flowable<RealmResults<Pet>> {
|
||||
return realm.where(Pet::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Pet::class.java)
|
||||
.sort("type", Sort.ASCENDING, "animal", Sort.ASCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getPets(type: String?, group: String?, color: String?): Flowable<RealmResults<Pet>> {
|
||||
|
|
@ -181,18 +182,18 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
|
|||
if (color != null) {
|
||||
query = query.equalTo("color", color)
|
||||
}
|
||||
return query.findAll()
|
||||
return RxJavaBridge.toV3Flowable(query.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getOwnedPets(userID: String): Flowable<RealmResults<OwnedPet>> {
|
||||
return realm.where(OwnedPet::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(OwnedPet::class.java)
|
||||
.greaterThan("trained", 0)
|
||||
.equalTo("userID", userID)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun updateOwnedEquipment(user: User) {
|
||||
|
|
@ -217,9 +218,9 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
|
|||
if (!includeZero) {
|
||||
query = query.greaterThan("numberOwned", 0)
|
||||
}
|
||||
return query.findFirstAsync()
|
||||
return RxJavaBridge.toV3Flowable(query.findFirstAsync()
|
||||
.asFlowable<OwnedItem>()
|
||||
.filter { realmObject -> realmObject.isLoaded }
|
||||
.filter { realmObject -> realmObject.isLoaded })
|
||||
}
|
||||
|
||||
override fun getItem(type: String, key: String): Flowable<Item> {
|
||||
|
|
@ -230,9 +231,9 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
|
|||
"quests" -> QuestContent::class.java
|
||||
else -> Egg::class.java
|
||||
}
|
||||
return realm.where(itemClass).equalTo("key", key).findFirstAsync().asFlowable<RealmObject>()
|
||||
return RxJavaBridge.toV3Flowable(realm.where(itemClass).equalTo("key", key).findFirstAsync().asFlowable<RealmObject>()
|
||||
.filter { realmObject -> realmObject.isLoaded }
|
||||
.cast(Item::class.java)
|
||||
.cast(Item::class.java))
|
||||
}
|
||||
|
||||
override fun decrementMysteryItemCount(user: User?) {
|
||||
|
|
@ -251,10 +252,10 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
|
|||
}
|
||||
|
||||
override fun getInAppRewards(): Flowable<RealmResults<ShopItem>> {
|
||||
return realm.where(ShopItem::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(ShopItem::class.java)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun saveInAppRewards(onlineItems: List<ShopItem>) {
|
||||
|
|
@ -340,12 +341,12 @@ class RealmInventoryLocalRepository(realm: Realm) : RealmContentLocalRepository(
|
|||
}
|
||||
|
||||
override fun getLatestMysteryItem(): Flowable<Equipment> {
|
||||
return realm.where(Equipment::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Equipment::class.java)
|
||||
.contains("key", "mystery_2")
|
||||
.sort("mystery", Sort.DESCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded && it.size > 0}
|
||||
.map { it.first() }
|
||||
.map { it.first() })
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@ import com.habitrpg.android.habitica.models.members.Member
|
|||
import com.habitrpg.android.habitica.models.social.*
|
||||
import com.habitrpg.android.habitica.models.user.ContributorInfo
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmResults
|
||||
import io.realm.Sort
|
||||
|
|
@ -13,26 +14,26 @@ import java.util.*
|
|||
|
||||
|
||||
class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), SocialLocalRepository {
|
||||
override fun getChatMessage(messageID: String): Flowable<ChatMessage> = realm.where(ChatMessage::class.java)
|
||||
override fun getChatMessage(messageID: String): Flowable<ChatMessage> = RxJavaBridge.toV3Flowable(realm.where(ChatMessage::class.java)
|
||||
.equalTo("id", messageID)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded && it.isNotEmpty() }
|
||||
.map { it.first() }
|
||||
.map { it.first() })
|
||||
|
||||
override fun getGroupMembership(userId: String, id: String): Flowable<GroupMembership> = realm.where(GroupMembership::class.java)
|
||||
override fun getGroupMembership(userId: String, id: String): Flowable<GroupMembership> = RxJavaBridge.toV3Flowable(realm.where(GroupMembership::class.java)
|
||||
.equalTo("userID", userId)
|
||||
.equalTo("groupID", id)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded && it.isNotEmpty() }
|
||||
.map { it.first() }
|
||||
.map { it.first() })
|
||||
|
||||
override fun getGroupMemberships(userId: String): Flowable<RealmResults<GroupMembership>> = realm.where(GroupMembership::class.java)
|
||||
override fun getGroupMemberships(userId: String): Flowable<RealmResults<GroupMembership>> = RxJavaBridge.toV3Flowable(realm.where(GroupMembership::class.java)
|
||||
.equalTo("userID", userId)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
|
||||
override fun updateMembership(userId: String, id: String, isMember: Boolean) {
|
||||
if (isMember) {
|
||||
|
|
@ -97,22 +98,22 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
|
|||
}
|
||||
}
|
||||
|
||||
override fun getPublicGuilds(): Flowable<RealmResults<Group>> = realm.where(Group::class.java)
|
||||
override fun getPublicGuilds(): Flowable<RealmResults<Group>> = RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
|
||||
.equalTo("type", "guild")
|
||||
.equalTo("privacy", "public")
|
||||
.notEqualTo("id", Group.TAVERN_ID)
|
||||
.sort("memberCount", Sort.DESCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
|
||||
override fun getUserGroups(userID: String, type: String?): Flowable<RealmResults<Group>> = realm.where(GroupMembership::class.java)
|
||||
override fun getUserGroups(userID: String, type: String?): Flowable<RealmResults<Group>> = RxJavaBridge.toV3Flowable(realm.where(GroupMembership::class.java)
|
||||
.equalTo("userID", userID)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.flatMap {memberships ->
|
||||
realm.where(Group::class.java)
|
||||
.filter { it.isLoaded })
|
||||
.flatMap {memberships ->
|
||||
RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
|
||||
.equalTo("type", type ?: "guild")
|
||||
.notEqualTo("id", Group.TAVERN_ID)
|
||||
.`in`("id", memberships.map {
|
||||
|
|
@ -121,48 +122,48 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
|
|||
.sort("memberCount", Sort.DESCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
|
||||
|
||||
override fun getGroups(type: String): Flowable<RealmResults<Group>> {
|
||||
return realm.where(Group::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
|
||||
.equalTo("type", type)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getGroup(id: String): Flowable<Group> {
|
||||
return realm.where(Group::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
|
||||
.equalTo("id", id)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { group -> group.isLoaded && group.isValid && !group.isEmpty() }
|
||||
.map { groups -> groups.first() }
|
||||
.map { groups -> groups.first() })
|
||||
}
|
||||
|
||||
override fun getGroupChat(groupId: String): Flowable<RealmResults<ChatMessage>> {
|
||||
return realm.where(ChatMessage::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(ChatMessage::class.java)
|
||||
.equalTo("groupId", groupId)
|
||||
.sort("timestamp", Sort.DESCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun deleteMessage(id: String) {
|
||||
getMessage(id).firstElement().subscribe { chatMessage -> executeTransaction { chatMessage.deleteFromRealm() } }
|
||||
}
|
||||
|
||||
override fun getGroupMembers(partyId: String): Flowable<RealmResults<Member>> {
|
||||
return realm.where(Member::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Member::class.java)
|
||||
.equalTo("party.id", partyId)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun updateRSVPNeeded(user: User?, newValue: Boolean) {
|
||||
executeTransaction { user?.party?.quest?.RSVPNeeded = newValue }
|
||||
|
|
@ -242,11 +243,11 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
|
|||
|
||||
|
||||
private fun getMessage(id: String): Flowable<ChatMessage> {
|
||||
return realm.where(ChatMessage::class.java).equalTo("id", id)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(ChatMessage::class.java).equalTo("id", id)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { messages -> messages.isLoaded && messages.isValid && !messages.isEmpty() }
|
||||
.map { messages -> messages.first() }
|
||||
.map { messages -> messages.first() })
|
||||
}
|
||||
|
||||
override fun doesGroupExist(id: String): Boolean {
|
||||
|
|
@ -255,22 +256,22 @@ class RealmSocialLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm)
|
|||
}
|
||||
|
||||
override fun getInboxMessages(userId: String, replyToUserID: String?): Flowable<RealmResults<ChatMessage>> {
|
||||
return realm.where(ChatMessage::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(ChatMessage::class.java)
|
||||
.equalTo("isInboxMessage", true)
|
||||
.equalTo("uuid", replyToUserID)
|
||||
.equalTo("userID", userId)
|
||||
.sort("timestamp", Sort.DESCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getInboxConversation(userId: String): Flowable<RealmResults<InboxConversation>> {
|
||||
return realm.where(InboxConversation::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(InboxConversation::class.java)
|
||||
.equalTo("userID", userId)
|
||||
.sort("timestamp", Sort.DESCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ package com.habitrpg.android.habitica.data.local.implementation
|
|||
|
||||
import com.habitrpg.android.habitica.data.local.TagLocalRepository
|
||||
import com.habitrpg.android.habitica.models.Tag
|
||||
import io.reactivex.Flowable
|
||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmResults
|
||||
|
||||
|
|
@ -14,7 +15,7 @@ class RealmTagLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm), T
|
|||
}
|
||||
|
||||
override fun getTags(userId: String): Flowable<RealmResults<Tag>> {
|
||||
return realm.where(Tag::class.java).equalTo("userId", userId).findAll().asFlowable()
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Tag::class.java).equalTo("userId", userId).findAll().asFlowable())
|
||||
}
|
||||
|
||||
override fun removeOldTags(onlineTags: List<Tag>, userID: String) {
|
||||
|
|
|
|||
|
|
@ -3,8 +3,9 @@ package com.habitrpg.android.habitica.data.local.implementation
|
|||
import com.habitrpg.android.habitica.data.local.TaskLocalRepository
|
||||
import com.habitrpg.android.habitica.models.tasks.*
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.Maybe
|
||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Maybe
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmObject
|
||||
import io.realm.RealmResults
|
||||
|
|
@ -16,26 +17,25 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
|
|||
if (realm.isClosed) {
|
||||
return Flowable.empty()
|
||||
}
|
||||
return realm.where(Task::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java)
|
||||
.equalTo("type", taskType)
|
||||
.equalTo("userId", userID)
|
||||
.sort("position", Sort.ASCENDING, "dateCreated", Sort.DESCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.retry(1)
|
||||
.filter { it.isLoaded }).retry(1)
|
||||
}
|
||||
|
||||
override fun getTasks(userId: String): Flowable<RealmResults<Task>> {
|
||||
if (realm.isClosed) {
|
||||
return Flowable.empty()
|
||||
}
|
||||
return realm.where(Task::class.java).equalTo("userId", userId)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java).equalTo("userId", userId)
|
||||
.sort("position", Sort.ASCENDING, "dateCreated", Sort.DESCENDING)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun saveTasks(userId: String, tasksOrder: TasksOrder, tasks: TaskList) {
|
||||
val sortedTasks = ArrayList<Task>()
|
||||
|
|
@ -155,9 +155,9 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
|
|||
if (realm.isClosed) {
|
||||
return Flowable.empty()
|
||||
}
|
||||
return realm.where(Task::class.java).equalTo("id", taskId).findFirstAsync().asFlowable<RealmObject>()
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java).equalTo("id", taskId).findFirstAsync().asFlowable<RealmObject>()
|
||||
.filter { realmObject -> realmObject.isLoaded }
|
||||
.cast(Task::class.java)
|
||||
.cast(Task::class.java))
|
||||
}
|
||||
|
||||
override fun getTaskCopy(taskId: String): Flowable<Task> {
|
||||
|
|
@ -192,9 +192,9 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
|
|||
}
|
||||
|
||||
override fun getTaskAtPosition(taskType: String, position: Int): Flowable<Task> {
|
||||
return realm.where(Task::class.java).equalTo("type", taskType).equalTo("position", position).findFirstAsync().asFlowable<RealmObject>()
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java).equalTo("type", taskType).equalTo("position", position).findFirstAsync().asFlowable<RealmObject>()
|
||||
.filter { realmObject -> realmObject.isLoaded }
|
||||
.cast(Task::class.java)
|
||||
.cast(Task::class.java))
|
||||
}
|
||||
|
||||
override fun updateIsdue(daily: TaskList): Maybe<TaskList> {
|
||||
|
|
@ -218,32 +218,31 @@ class RealmTaskLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
|
|||
}
|
||||
|
||||
override fun getErroredTasks(userID: String): Flowable<RealmResults<Task>> {
|
||||
return realm.where(Task::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java)
|
||||
.equalTo("userId", userID)
|
||||
.equalTo("hasErrored", true)
|
||||
.sort("position")
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.retry(1)
|
||||
.filter { it.isLoaded }).retry(1)
|
||||
}
|
||||
|
||||
override fun getUser(userID: String): Flowable<User> {
|
||||
return realm.where(User::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(User::class.java)
|
||||
.equalTo("id", userID)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { realmObject -> realmObject.isLoaded && realmObject.isValid && !realmObject.isEmpty() }
|
||||
.map { users -> users.first() }
|
||||
.map { users -> users.first() })
|
||||
}
|
||||
|
||||
override fun getTasksForChallenge(challengeID: String?, userID: String?): Flowable<RealmResults<Task>> {
|
||||
return realm.where(Task::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Task::class.java)
|
||||
.equalTo("challengeID", challengeID)
|
||||
.equalTo("userId", userID)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.retry(1)
|
||||
.filter { it.isLoaded })
|
||||
.retry(1)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ package com.habitrpg.android.habitica.data.local.implementation
|
|||
|
||||
import com.habitrpg.android.habitica.data.local.TutorialLocalRepository
|
||||
import com.habitrpg.android.habitica.models.TutorialStep
|
||||
import io.reactivex.Flowable
|
||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmResults
|
||||
|
||||
|
|
@ -11,7 +12,7 @@ class RealmTutorialLocalRepository(realm: Realm) : RealmBaseLocalRepository(real
|
|||
|
||||
override fun getTutorialStep(key: String): Flowable<TutorialStep> {
|
||||
if (realm.isClosed) return Flowable.empty()
|
||||
return realm.where(TutorialStep::class.java).equalTo("identifier", key)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(TutorialStep::class.java).equalTo("identifier", key)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { realmObject -> realmObject.isLoaded && realmObject.isValid && realmObject.isNotEmpty() }
|
||||
|
|
@ -27,15 +28,15 @@ class RealmTutorialLocalRepository(realm: Realm) : RealmBaseLocalRepository(real
|
|||
}
|
||||
}
|
||||
.map { steps -> steps.first() }
|
||||
.cast(TutorialStep::class.java)
|
||||
.cast(TutorialStep::class.java))
|
||||
}
|
||||
|
||||
override fun getTutorialSteps(keys: List<String>): Flowable<RealmResults<TutorialStep>> {
|
||||
if (realm.isClosed) return Flowable.empty()
|
||||
return realm.where(TutorialStep::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(TutorialStep::class.java)
|
||||
.`in`("identifier", keys.toTypedArray())
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@ import com.habitrpg.android.habitica.models.social.Group
|
|||
import com.habitrpg.android.habitica.models.user.OwnedMount
|
||||
import com.habitrpg.android.habitica.models.user.OwnedPet
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.Flowable
|
||||
import hu.akarnokd.rxjava3.bridge.RxJavaBridge
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmResults
|
||||
|
||||
|
|
@ -19,15 +20,15 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
|
|||
.map { it.party?.id ?: "" }
|
||||
.filter { it.isNotBlank() }
|
||||
.flatMap {
|
||||
realm.where(Group::class.java)
|
||||
RxJavaBridge.toV3Flowable(realm.where(Group::class.java)
|
||||
.equalTo("id", it)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { groups -> groups.size > 0 }
|
||||
.map { groups -> groups.first() }
|
||||
.map { groups -> groups.first() })
|
||||
}
|
||||
.map { when {
|
||||
it.quest?.members?.find { questMember -> questMember.key == userID } === null -> UserQuestStatus.NO_QUEST
|
||||
it?.quest?.members?.find { questMember -> questMember.key == userID } === null -> UserQuestStatus.NO_QUEST
|
||||
it.quest?.progress?.collect?.isNotEmpty() ?: false -> UserQuestStatus.QUEST_COLLECT
|
||||
it.quest?.progress?.hp ?: 0.0 > 0.0 -> UserQuestStatus.QUEST_BOSS
|
||||
else -> UserQuestStatus.QUEST_UNKNOWN
|
||||
|
|
@ -35,32 +36,31 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
|
|||
}
|
||||
|
||||
override fun getAchievements(): Flowable<RealmResults<Achievement>> {
|
||||
return realm.where(Achievement::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Achievement::class.java)
|
||||
.sort("index")
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getQuestAchievements(userID: String): Flowable<RealmResults<QuestAchievement>> {
|
||||
return realm.where(QuestAchievement::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(QuestAchievement::class.java)
|
||||
.equalTo("userID", userID)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getTutorialSteps(): Flowable<RealmResults<TutorialStep>> = realm.where(TutorialStep::class.java).findAll().asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
|
||||
override fun getUser(userID: String): Flowable<User> {
|
||||
override fun getTutorialSteps(): Flowable<RealmResults<TutorialStep>> = RxJavaBridge.toV3Flowable(realm.where(TutorialStep::class.java).findAll().asFlowable()
|
||||
.filter { it.isLoaded })
|
||||
override fun getUser(userID: String): Flowable<User> {
|
||||
if (realm.isClosed) return Flowable.empty()
|
||||
return realm.where(User::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(User::class.java)
|
||||
.equalTo("id", userID)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { realmObject -> realmObject.isLoaded && realmObject.isValid && !realmObject.isEmpty() }
|
||||
.map { users -> users.first() }
|
||||
.map { users -> users.first() })
|
||||
}
|
||||
|
||||
override fun saveUser(user: User) {
|
||||
|
|
@ -136,12 +136,12 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
|
|||
|
||||
override fun getSkills(user: User): Flowable<RealmResults<Skill>> {
|
||||
val habitClass = if (user.preferences?.disableClasses == true) "none" else user.stats?.habitClass
|
||||
return realm.where(Skill::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Skill::class.java)
|
||||
.equalTo("habitClass", habitClass)
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
|
||||
override fun getSpecialItems(user: User): Flowable<RealmResults<Skill>> {
|
||||
val specialItems = user.items?.special
|
||||
|
|
@ -163,10 +163,10 @@ class RealmUserLocalRepository(realm: Realm) : RealmBaseLocalRepository(realm),
|
|||
if (ownedItems.size == 0) {
|
||||
ownedItems.add("")
|
||||
}
|
||||
return realm.where(Skill::class.java)
|
||||
return RxJavaBridge.toV3Flowable(realm.where(Skill::class.java)
|
||||
.`in`("key", ownedItems.toTypedArray())
|
||||
.findAll()
|
||||
.asFlowable()
|
||||
.filter { it.isLoaded }
|
||||
}
|
||||
.filter { it.isLoaded })
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package com.habitrpg.android.habitica.executors;
|
||||
|
||||
|
||||
import io.reactivex.Scheduler;
|
||||
import io.reactivex.rxjava3.core.Scheduler;
|
||||
|
||||
public interface PostExecutionThread {
|
||||
Scheduler getScheduler();
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ package com.habitrpg.android.habitica.executors;
|
|||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import io.reactivex.Scheduler;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.rxjava3.core.Scheduler;
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||
|
||||
@Singleton
|
||||
public class UIThread implements PostExecutionThread {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
package com.habitrpg.android.habitica.extensions
|
||||
|
||||
import io.reactivex.Completable
|
||||
import io.reactivex.rxjava3.core.Completable
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
package com.habitrpg.android.habitica.extensions
|
||||
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.disposables.Disposable
|
||||
import io.reactivex.functions.Consumer
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.disposables.Disposable
|
||||
import io.reactivex.rxjava3.functions.Consumer
|
||||
|
||||
fun <T> Flowable<T>.subscribeWithErrorHandler(function: Consumer<T>): Disposable {
|
||||
return subscribe(function, RxErrorHandler.handleEmptyError())
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
package com.habitrpg.android.habitica.extensions
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.Maybe
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.core.Maybe
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
|
||||
|
||||
fun <S, T : Optional<S>> Flowable<T>.filterOptionalDoOnEmpty(function: () -> Unit): Flowable<S> {
|
||||
|
|
@ -29,7 +29,7 @@ fun <S, T : Optional<S>> Observable<T>.filterMapEmpty(): Observable<S> {
|
|||
}
|
||||
|
||||
fun <S, T : Optional<S>> Single<T>.filterOptionalDoOnEmpty(function: () -> Unit): Maybe<S> {
|
||||
return this.doAfterSuccess { if (it.isEmpty) function() }
|
||||
return this.doOnSuccess { if (it.isEmpty) function() }
|
||||
.filter { !it.isEmpty }
|
||||
.map { it.value }
|
||||
}
|
||||
|
|
@ -40,7 +40,7 @@ fun <S, T : Optional<S>> Single<T>.filterMapEmpty(): Maybe<S> {
|
|||
}
|
||||
|
||||
fun <S, T : Optional<S>> Maybe<T>.filterOptionalDoOnEmpty(function: () -> Unit): Maybe<S> {
|
||||
return this.doAfterSuccess { if (it.isEmpty) function() }
|
||||
return this.doOnSuccess { if (it.isEmpty) function() }
|
||||
.filter { !it.isEmpty }
|
||||
.map { it.value }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,10 +14,10 @@ import com.habitrpg.android.habitica.models.notifications.FirstDropData
|
|||
import com.habitrpg.android.habitica.models.notifications.LoginIncentiveData
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Completable
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.BehaviorSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Completable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.BehaviorSubject
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import java.util.*
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
|
@ -42,8 +42,7 @@ class NotificationsManager (private val context: Context) {
|
|||
}
|
||||
|
||||
fun getNotifications(): Flowable<List<Notification>> {
|
||||
return this.notifications
|
||||
.startWith(emptyList<Notification>())
|
||||
return this.notifications.startWithArray(emptyList())
|
||||
.toFlowable(BackpressureStrategy.LATEST)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package com.habitrpg.android.habitica.helpers
|
|||
import android.util.Log
|
||||
import com.habitrpg.android.habitica.BuildConfig
|
||||
import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
|
||||
import io.reactivex.functions.Consumer
|
||||
import io.reactivex.rxjava3.functions.Consumer
|
||||
import okhttp3.internal.http2.ConnectionShutdownException
|
||||
import retrofit2.HttpException
|
||||
import java.io.EOFException
|
||||
|
|
|
|||
|
|
@ -4,13 +4,14 @@ import android.annotation.SuppressLint
|
|||
import android.content.Context
|
||||
import android.os.Environment
|
||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import okio.Okio
|
||||
import okio.buffer
|
||||
import okio.sink
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
|
||||
|
|
@ -52,8 +53,8 @@ class SoundFileLoader(private val context: Context) {
|
|||
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
|
||||
try {
|
||||
val sink = Okio.buffer(Okio.sink(file))
|
||||
sink.writeAll(response.body()!!.source())
|
||||
val sink = file.sink().buffer()
|
||||
sink.writeAll(response.body!!.source())
|
||||
sink.flush()
|
||||
sink.close()
|
||||
} catch (io: IOException) {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
package com.habitrpg.android.habitica.helpers
|
||||
|
||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import io.reactivex.Maybe
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import io.reactivex.rxjava3.core.Maybe
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import javax.inject.Inject
|
||||
|
||||
class SoundManager {
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import com.habitrpg.android.habitica.receivers.NotificationPublisher
|
|||
import com.habitrpg.android.habitica.receivers.TaskReceiver
|
||||
import com.habitrpg.shared.habitica.HLogger
|
||||
import com.habitrpg.shared.habitica.LogLevel
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import java.util.*
|
||||
|
||||
class TaskAlarmManager(private var context: Context, private var taskRepository: TaskRepository, private var userId: String) {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import com.habitrpg.android.habitica.models.user.User
|
|||
|
||||
import javax.inject.Inject
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
|
||||
class BuyRewardUseCase @Inject
|
||||
constructor(private val taskRepository: TaskRepository, private val soundManager: SoundManager,
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import com.habitrpg.android.habitica.ui.activities.ClassSelectionActivity
|
|||
|
||||
import javax.inject.Inject
|
||||
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
|
||||
import com.habitrpg.android.habitica.ui.activities.MainActivity.Companion.SELECT_CLASS_RESULT
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import com.habitrpg.android.habitica.executors.ThreadExecutor
|
|||
import com.habitrpg.android.habitica.helpers.SoundManager
|
||||
import com.habitrpg.android.habitica.models.responses.TaskScoringResult
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import java.lang.StringBuilder
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.models.user.User
|
|||
import com.habitrpg.android.habitica.ui.AvatarView
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import com.habitrpg.android.habitica.models.user.User
|
|||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import javax.inject.Inject
|
||||
import kotlin.math.abs
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package com.habitrpg.android.habitica.interactors;
|
|||
import com.habitrpg.android.habitica.executors.PostExecutionThread;
|
||||
import com.habitrpg.android.habitica.executors.ThreadExecutor;
|
||||
|
||||
import io.reactivex.Flowable;
|
||||
import io.reactivex.rxjava3.core.Flowable;
|
||||
|
||||
public abstract class UseCase<Q extends UseCase.RequestValues, T> {
|
||||
|
||||
|
|
|
|||
|
|
@ -156,10 +156,10 @@ open class Task : RealmObject, Parcelable {
|
|||
}
|
||||
|
||||
val isDisplayedActive: Boolean
|
||||
get() = isDue == true && !completed
|
||||
get() = ((isDue == true && type == Task.TYPE_DAILY) || type == TYPE_TODO) && !completed
|
||||
|
||||
val isChecklistDisplayActive: Boolean
|
||||
get() = this.isDisplayedActive && this.checklist?.size != this.completedChecklistCount
|
||||
get() = this.checklist?.size != this.completedChecklistCount
|
||||
|
||||
val isGroupTask: Boolean
|
||||
get() = group?.approvalApproved == true
|
||||
|
|
@ -211,10 +211,10 @@ open class Task : RealmObject, Parcelable {
|
|||
return this.parsedText ?: ""
|
||||
}
|
||||
|
||||
MarkdownParser.parseMarkdownAsync(this.text, { parsedText ->
|
||||
MarkdownParser.parseMarkdownAsync(this.text) { parsedText ->
|
||||
this.parsedText = parsedText
|
||||
callback(parsedText)
|
||||
})
|
||||
}
|
||||
|
||||
return this.text
|
||||
}
|
||||
|
|
@ -225,10 +225,10 @@ open class Task : RealmObject, Parcelable {
|
|||
}
|
||||
|
||||
if (notes?.isNotEmpty() == true) {
|
||||
MarkdownParser.parseMarkdownAsync(notes, { parsedText ->
|
||||
MarkdownParser.parseMarkdownAsync(notes) { parsedText ->
|
||||
parsedNotes = parsedText
|
||||
callback(parsedText)
|
||||
})
|
||||
}
|
||||
}
|
||||
return notes
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import javax.inject.Singleton;
|
|||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
import retrofit2.Retrofit;
|
||||
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
|
||||
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
|
||||
import retrofit2.converter.gson.GsonConverterFactory;
|
||||
|
||||
@Module
|
||||
|
|
@ -50,7 +50,7 @@ public class ApiModule {
|
|||
public MaintenanceApiService providesMaintenanceApiService(GsonConverterFactory gsonConverter, HostConfig hostConfig) {
|
||||
Retrofit adapter = new Retrofit.Builder()
|
||||
.baseUrl("https://habitica-assets.s3.amazonaws.com/mobileApp/endpoint/")
|
||||
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
||||
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
|
||||
.addConverterFactory(gsonConverter)
|
||||
.build();
|
||||
return adapter.create(MaintenanceApiService.class);
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import com.habitrpg.android.habitica.helpers.TaskAlarmManager
|
|||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||
import io.reactivex.functions.BiFunction
|
||||
import io.reactivex.rxjava3.functions.BiFunction
|
||||
import io.realm.RealmResults
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import com.habitrpg.android.habitica.models.tasks.Task
|
|||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||
import com.habitrpg.shared.habitica.HLogger
|
||||
import com.habitrpg.shared.habitica.LogLevel
|
||||
import io.reactivex.functions.Consumer
|
||||
import io.reactivex.rxjava3.functions.Consumer
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.models.Avatar
|
||||
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
|
||||
import io.reactivex.functions.Consumer
|
||||
import io.reactivex.rxjava3.functions.Consumer
|
||||
import java.util.*
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import com.habitrpg.android.habitica.models.Avatar
|
|||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.disposables.Disposable
|
||||
import io.reactivex.rxjava3.disposables.Disposable
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import java.util.*
|
||||
import kotlin.math.floor
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import com.habitrpg.android.habitica.extensions.updateStatusBarColor
|
|||
import com.habitrpg.android.habitica.helpers.LanguageHelper
|
||||
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import io.reactivex.disposables.CompositeDisposable
|
||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import java.util.*
|
||||
|
|
@ -35,6 +35,7 @@ abstract class BaseActivity : AppCompatActivity() {
|
|||
private var currentTheme: String? = null
|
||||
private var isNightMode: Boolean = false
|
||||
internal var forcedTheme: String? = null
|
||||
internal var forcedIsNight: Boolean? = null
|
||||
private var destroyed: Boolean = false
|
||||
|
||||
open var overrideModernHeader: Boolean? = null
|
||||
|
|
@ -105,7 +106,7 @@ abstract class BaseActivity : AppCompatActivity() {
|
|||
val theme = forcedTheme ?: sharedPreferences.getString("theme_name", "purple")
|
||||
val modernHeaderStyle = overrideModernHeader ?: sharedPreferences.getBoolean("modern_header_style", true)
|
||||
if (theme != currentTheme || forced) {
|
||||
if (isNightMode) {
|
||||
if (forcedIsNight ?: isNightMode) {
|
||||
setTheme(when (theme) {
|
||||
"maroon" -> R.style.MainAppTheme_Maroon_Dark
|
||||
"red" -> R.style.MainAppTheme_Red_Dark
|
||||
|
|
@ -131,12 +132,12 @@ abstract class BaseActivity : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
if (isNightMode) {
|
||||
window.navigationBarColor = ContextCompat.getColor(this, R.color.system_bars)
|
||||
window.navigationBarColor = if (forcedIsNight ?: isNightMode) {
|
||||
ContextCompat.getColor(this, R.color.system_bars)
|
||||
} else {
|
||||
window.navigationBarColor = getThemeColor(R.attr.colorPrimaryDark)
|
||||
getThemeColor(R.attr.colorPrimaryDark)
|
||||
}
|
||||
if (!isNightMode && modernHeaderStyle) {
|
||||
if (!(forcedIsNight ?: isNightMode) && modernHeaderStyle) {
|
||||
window.updateStatusBarColor(getThemeColor(R.attr.headerBackgroundColor), true)
|
||||
} else {
|
||||
window.updateStatusBarColor(getThemeColor(R.attr.statusBarBackground), false)
|
||||
|
|
|
|||
|
|
@ -30,8 +30,7 @@ import com.habitrpg.android.habitica.ui.adapter.social.challenges.ChallengeTasks
|
|||
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxkotlin.zipWith
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import java.lang.NumberFormatException
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
|
@ -332,7 +331,7 @@ class ChallengeFormActivity : BaseActivity() {
|
|||
return@flatMap Flowable.empty<Group>()
|
||||
}
|
||||
socialRepository.retrieveGroup(it)
|
||||
})
|
||||
}, { user, groups -> Pair(user, groups) })
|
||||
.subscribe({ groups ->
|
||||
val mutableGroups = groups.first.toMutableList()
|
||||
if (groups.first.firstOrNull { it.id == "00000000-0000-4000-A000-000000000000" } == null) {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
|||
import com.habitrpg.android.habitica.models.user.*
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import io.reactivex.functions.Consumer
|
||||
import io.reactivex.rxjava3.functions.Consumer
|
||||
import javax.inject.Inject
|
||||
|
||||
class ClassSelectionActivity : BaseActivity(), Consumer<User> {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import android.widget.TableLayout
|
|||
import android.widget.TableRow
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.widget.AppCompatEditText
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.os.bundleOf
|
||||
import com.facebook.drawee.backends.pipeline.Fresco
|
||||
|
|
@ -36,14 +35,13 @@ import com.habitrpg.android.habitica.models.user.Stats
|
|||
import com.habitrpg.android.habitica.ui.AvatarView
|
||||
import com.habitrpg.android.habitica.ui.AvatarWithBarsViewModel
|
||||
import com.habitrpg.android.habitica.ui.adapter.social.AchievementProfileAdapter
|
||||
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
|
||||
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
||||
import com.habitrpg.android.habitica.ui.helpers.loadImage
|
||||
import com.habitrpg.android.habitica.ui.helpers.setMarkdown
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.realm.RealmResults
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
|
|
|||
|
|
@ -30,10 +30,10 @@ class GuidelinesActivity: BaseActivity() {
|
|||
|
||||
@Throws(IOException::class)
|
||||
override fun onResponse(call: Call, response: Response) {
|
||||
val `in` = response.body()?.byteStream()
|
||||
val `in` = response.body?.byteStream()
|
||||
val reader = BufferedReader(InputStreamReader(`in`))
|
||||
val text = reader.readText()
|
||||
response.body()?.close()
|
||||
response.body?.close()
|
||||
|
||||
findViewById<TextView>(R.id.text_view).post {
|
||||
findViewById<TextView>(R.id.text_view).setMarkdown(text)
|
||||
|
|
|
|||
|
|
@ -52,10 +52,10 @@ import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
|
|||
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.willowtreeapps.signinwithapplebutton.SignInWithAppleConfiguration
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.exceptions.Exceptions
|
||||
import io.reactivex.functions.Consumer
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.exceptions.Exceptions
|
||||
import io.reactivex.rxjava3.functions.Consumer
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import java.io.IOException
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
|
|||
|
|
@ -73,11 +73,11 @@ import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider
|
|||
import com.habitrpg.android.habitica.widget.DailiesWidgetProvider
|
||||
import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider
|
||||
import com.habitrpg.android.habitica.widget.TodoListWidgetProvider
|
||||
import io.reactivex.Completable
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.functions.Consumer
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import io.reactivex.rxjava3.core.Completable
|
||||
import io.reactivex.rxjava3.core.Observable
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.functions.Consumer
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import io.realm.kotlin.isValid
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
|
|
@ -836,7 +836,7 @@ open class MainActivity : BaseActivity(), TutorialView.OnTutorialReaction {
|
|||
val petWrapper = View.inflate(this, R.layout.pet_imageview, null) as? FrameLayout
|
||||
val petImageView = petWrapper?.findViewById(R.id.pet_imageview) as? SimpleDraweeView
|
||||
|
||||
DataBindingUtils.loadImage(petImageView, "social_Pet-" + egg.key + "-" + potion.key)
|
||||
DataBindingUtils.loadImage(petImageView, "stable_Pet-" + egg.key + "-" + potion.key)
|
||||
val potionName = potion.text
|
||||
val eggName = egg.text
|
||||
val dialog = HabiticaAlertDialog(this)
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ import com.habitrpg.android.habitica.data.ApiClient
|
|||
import com.habitrpg.android.habitica.databinding.ActivityMaintenanceBinding
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.ui.helpers.setMarkdown
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import javax.inject.Inject
|
||||
|
||||
class MaintenanceActivity : BaseActivity() {
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ import com.habitrpg.android.habitica.ui.fragments.setup.AvatarSetupFragment
|
|||
import com.habitrpg.android.habitica.ui.fragments.setup.TaskSetupFragment
|
||||
import com.habitrpg.android.habitica.ui.fragments.setup.WelcomeFragment
|
||||
import com.viewpagerindicator.IconPagerAdapter
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ class TaskFormActivity : BaseActivity() {
|
|||
val bundle = intent.extras ?: return
|
||||
|
||||
val taskId = bundle.getString(TASK_ID_KEY)
|
||||
forcedIsNight = false
|
||||
forcedTheme = if (taskId != null) {
|
||||
val taskValue = bundle.getDouble(TASK_VALUE_KEY)
|
||||
when {
|
||||
|
|
@ -131,7 +132,7 @@ class TaskFormActivity : BaseActivity() {
|
|||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setDisplayShowHomeEnabled(true)
|
||||
tintColor = getThemeColor(R.attr.taskFormTint)
|
||||
val upperTintColor = if (forcedTheme == "purple") getThemeColor(R.attr.taskFormTint) else getThemeColor(R.attr.colorAccent)
|
||||
val upperTintColor = if (forcedTheme == "taskform") getThemeColor(R.attr.taskFormTint) else getThemeColor(R.attr.colorAccent)
|
||||
supportActionBar?.setBackgroundDrawable(ColorDrawable(upperTintColor))
|
||||
binding.upperTextWrapper.setBackgroundColor(upperTintColor)
|
||||
|
||||
|
|
@ -212,7 +213,7 @@ class TaskFormActivity : BaseActivity() {
|
|||
|
||||
override fun loadTheme(sharedPreferences: SharedPreferences, forced: Boolean) {
|
||||
super.loadTheme(sharedPreferences, forced)
|
||||
val upperTintColor = if (forcedTheme == "purple") getThemeColor(R.attr.taskFormTint) else getThemeColor(R.attr.colorAccent)
|
||||
val upperTintColor = if (forcedTheme == "taskform") getThemeColor(R.attr.taskFormTint) else getThemeColor(R.attr.colorAccent)
|
||||
window.statusBarColor = upperTintColor
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@ import com.habitrpg.android.habitica.extensions.runDelayed
|
|||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
|
|||
|
|
@ -17,9 +17,9 @@ import com.habitrpg.android.habitica.models.inventory.Equipment
|
|||
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import java.util.*
|
||||
|
||||
class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@ import com.habitrpg.android.habitica.models.inventory.CustomizationSet
|
|||
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import java.util.*
|
||||
|
||||
class CustomizationRecyclerViewAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ import com.habitrpg.android.habitica.ui.views.promo.PromoMenuView
|
|||
import com.habitrpg.android.habitica.ui.views.promo.PromoMenuViewHolder
|
||||
import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoView
|
||||
import com.habitrpg.android.habitica.ui.views.promo.SubscriptionBuyGemsPromoViewHolder
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
|
||||
|
||||
class NavigationDrawerAdapter(tintColor: Int, backgroundTintColor: Int): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.databinding.SkillTaskItemCardBinding
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import io.realm.OrderedRealmCollection
|
||||
import io.realm.RealmRecyclerViewAdapter
|
||||
import java.util.*
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@ import com.habitrpg.android.habitica.models.Skill
|
|||
import com.habitrpg.android.habitica.models.user.SpecialItems
|
||||
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
|
||||
class SkillsRecyclerViewAdapter : RecyclerView.Adapter<SkillsRecyclerViewAdapter.SkillViewHolder>() {
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.databinding.GearListItemBinding
|
|||
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import io.realm.OrderedRealmCollection
|
||||
import io.realm.RealmRecyclerViewAdapter
|
||||
|
||||
|
|
|
|||
|
|
@ -17,9 +17,9 @@ import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
|
|||
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu
|
||||
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.DetailDialog
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import io.realm.OrderedRealmCollection
|
||||
import io.realm.RealmRecyclerViewAdapter
|
||||
import io.realm.RealmResults
|
||||
|
|
|
|||
|
|
@ -6,9 +6,9 @@ import com.habitrpg.android.habitica.models.inventory.StableSection
|
|||
import com.habitrpg.android.habitica.models.user.OwnedMount
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.MountViewHolder
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
|
||||
class MountDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {
|
||||
private var ownedMounts: Map<String, OwnedMount>? = null
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ import com.habitrpg.android.habitica.models.user.OwnedMount
|
|||
import com.habitrpg.android.habitica.models.user.OwnedPet
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import io.realm.RealmResults
|
||||
|
||||
class PetDetailRecyclerAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@ import com.habitrpg.android.habitica.ui.helpers.loadImage
|
|||
import com.habitrpg.android.habitica.ui.viewHolders.MountViewHolder
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.PetViewHolder
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.SectionViewHolder
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
|
||||
|
||||
class StableRecyclerAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ import com.habitrpg.android.habitica.extensions.inflate
|
|||
import com.habitrpg.android.habitica.extensions.setTintWith
|
||||
import com.habitrpg.android.habitica.models.SetupCustomization
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
|
||||
internal class CustomizationSetupAdapter : RecyclerView.Adapter<CustomizationSetupAdapter.CustomizationViewHolder>() {
|
||||
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@ import com.habitrpg.android.habitica.models.social.Challenge
|
|||
import com.habitrpg.android.habitica.models.social.ChallengeMembership
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeFilterOptions
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import io.realm.OrderedRealmCollection
|
||||
import io.realm.RealmRecyclerViewAdapter
|
||||
import com.habitrpg.android.habitica.ui.helpers.EmojiParser
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@ import com.habitrpg.android.habitica.extensions.inflate
|
|||
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerMessageViewHolder
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import io.realm.OrderedRealmCollection
|
||||
import io.realm.RealmRecyclerViewAdapter
|
||||
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@ import com.habitrpg.android.habitica.models.user.User
|
|||
import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerViewHolder
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerIntroViewHolder
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.ChatRecyclerMessageViewHolder
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
|
||||
class InboxAdapter(private var user: User?, private var replyToUser : Member) : PagedListAdapter<ChatMessage, ChatRecyclerViewHolder>(DIFF_CALLBACK) {
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.GroupMemberViewHolder
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import io.realm.OrderedRealmCollection
|
||||
import io.realm.RealmRecyclerViewAdapter
|
||||
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ import com.habitrpg.android.habitica.models.tasks.Task
|
|||
import com.habitrpg.android.habitica.ui.adapter.tasks.BaseTasksRecyclerViewAdapter
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.tasks.*
|
||||
import io.reactivex.BackpressureStrategy
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.subjects.PublishSubject
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
|
||||
class ChallengeTasksRecyclerViewAdapter(taskFilterHelper: TaskFilterHelper?, layoutResource: Int,
|
||||
newContext: Context, userID: String,
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ import com.habitrpg.android.habitica.helpers.TaskFilterHelper
|
|||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.proxy.CrashlyticsProxy
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import java.util.*
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue