Merge branch 'main' into hafiz/sign-in-fixes

This commit is contained in:
Phillip Thelen 2022-07-18 19:36:13 +02:00 committed by GitHub
commit cc4e79690e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
464 changed files with 2177 additions and 1329 deletions

View file

@ -1,4 +1,5 @@
chmod +x gradlew
cp habitica.properties.example habitica.properties
cp habitica.resources.example habitica.resources
cp Habitica/google-services.json.example Habitica/google-services.json
cp Habitica/google-services.json.example Habitica/google-services.json
cp Habitica/google-services.json.example wearos/google-services.json

View file

@ -5,12 +5,12 @@ plugins {
id 'com.google.gms.google-services'
id 'com.google.firebase.crashlytics'
id 'realm-android'
id 'androidx.navigation.safeargs'
id 'com.google.firebase.firebase-perf'
}
apply plugin: 'kotlin-android'
apply plugin: "realm-android"
repositories {
mavenLocal()
@ -26,7 +26,7 @@ configurations {
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation fileTree(include: ['*.jar'], dir: '../common/libs')
//Networking
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version"
@ -78,7 +78,7 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation 'androidx.test:runner:1.4.0'
androidTestImplementation 'androidx.test:rules:1.4.0'
debugImplementation 'androidx.fragment:fragment-testing:1.4.1'
debugImplementation 'androidx.fragment:fragment-testing:1.5.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test:core-ktx:1.4.0'
androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.3'
@ -108,15 +108,13 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
implementation "androidx.fragment:fragment-ktx:1.4.1"
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.0'
implementation "androidx.fragment:fragment-ktx:1.5.0"
implementation "androidx.paging:paging-runtime-ktx:3.1.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6'
implementation 'com.willowtreeapps:signinwithapplebutton:0.3'
implementation project(':shared')
@ -129,7 +127,6 @@ dependencies {
}
androidTestImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
android {
@ -150,9 +147,6 @@ android {
buildConfigField "String", "TESTING_LEVEL", "\"production\""
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'
println app_version_code
println app_version_name
versionCode app_version_code
versionName app_version_name
@ -160,6 +154,9 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
testInstrumentationRunnerArguments clearPackageData: 'true'
def formattedDate = new Date().format('yyMMdd')
archivesBaseName = "Habitica-${formattedDate}${versionCode}"
}
buildFeatures {
@ -215,6 +212,13 @@ android {
dimension "buildType"
buildConfigField "String", "TESTING_LEVEL", "\"staff\""
resValue "string", "app_name", "Habitica Staff"
versionCode app_version_code + 8
}
partners {
dimension "buildType"
buildConfigField "String", "TESTING_LEVEL", "\"partners\""
resValue "string", "app_name", "Habitica"
versionCode app_version_code + 6
}
@ -260,9 +264,6 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
}
kotlinOptions {

View file

@ -97,21 +97,6 @@
-keepclassmembers class * {
native <methods>;
}
# Keep our interfaces so they can be used by other ProGuard rules.
# See http://sourceforge.net/p/proguard/bugs/466/
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
# Do not strip any method/class that is annotated with @DoNotStrip
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {
@com.facebook.common.internal.DoNotStrip *;
}
# Keep native methods
-keepclassmembers class * {
native <methods>;
}
#end fresko
#amplitude
-keep class com.google.android.gms.ads.** { *; }
@ -138,20 +123,6 @@
-dontwarn com.google.android.gms.**
#end playservices
#checkout
-keep class com.android.vending.billing.**
-assumenosideeffects class org.solovyev.android.checkout.Billing {
public static void debug(...);
public static void warning(...);
public static void error(...);
}
-assumenosideeffects class org.solovyev.android.checkout.Check {
static *;
}
#end chekout
#add warnings here, warnings in proguard is normal
-dontwarn javax.annotation.**
-dontwarn com.squareup.picasso.**

View file

@ -41,7 +41,7 @@
android:src="@drawable/adventure_guide_art" />
<TextView
style="@style/Subheader1"
style="@style/SubHeader1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="30dp"

View file

@ -23,7 +23,7 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal">
<com.habitrpg.common.habitica.views.CurrencyView
<com.habitrpg.android.habitica.ui.views.CurrencyView
android:id="@+id/gold_view"
android:layout_width="wrap_content"
android:layout_height="30dp"
@ -85,6 +85,7 @@
tools:text="+21 Experience"
android:textStyle="bold"
android:textSize="28sp"
android:gravity="center"
android:textColor="@color/text_primary"/>
<TextView
android:id="@+id/subtitle_view"

View file

@ -180,7 +180,7 @@
android:layout_height="43dp"
android:textColor="@color/white"
android:gravity="center"
style="@style/Subheader1"
style="@style/SubHeader1"
android:background="@drawable/layout_rounded_bg_yellow_10"
tools:text="Becoma a Healer"/>
</LinearLayout>

View file

@ -103,7 +103,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="@string/joined"
style="@style/Subheader1"/>
style="@style/SubHeader1"/>
<TextView
android:id="@+id/joined_view"
android:layout_width="wrap_content"
@ -120,7 +120,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="@string/last_login"
style="@style/Subheader1"/>
style="@style/SubHeader1"/>
<TextView
android:id="@+id/last_login_view"
android:layout_width="wrap_content"
@ -136,7 +136,7 @@
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="@string/total_checkins"
style="@style/Subheader1"/>
style="@style/SubHeader1"/>
<TextView
android:id="@+id/total_checkins_view"
android:layout_width="wrap_content"

View file

@ -38,7 +38,7 @@
app:showMount="false"
app:showSleeping="false"
android:layout_gravity="center_horizontal"/>
<com.habitrpg.common.habitica.views.UsernameLabel
<com.habitrpg.android.habitica.ui.views.UsernameLabel
android:id="@+id/display_name_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View file

@ -11,7 +11,7 @@
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="16sp" />
<com.habitrpg.common.habitica.views.CurrencyView
<com.habitrpg.android.habitica.ui.views.CurrencyView
android:id="@+id/currency_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View file

@ -19,7 +19,7 @@
android:layout_height="wrap_content"
android:textColor="@color/text_primary"
android:text="@string/armoire_rate_equipment_title"
style="@style/Subheader1" />
style="@style/SubHeader1" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -34,7 +34,7 @@
android:layout_height="wrap_content"
android:textColor="@color/text_primary"
android:text="@string/armoire_rate_food_title"
style="@style/Subheader1" />
style="@style/SubHeader1" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -49,7 +49,7 @@
android:layout_height="wrap_content"
android:textColor="@color/text_primary"
android:text="@string/armoire_rate_experience_title"
style="@style/Subheader1" />
style="@style/SubHeader1" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"

View file

@ -6,7 +6,7 @@
android:paddingBottom="@dimen/spacing_medium"
android:paddingStart="@dimen/spacing_large"
android:paddingEnd="@dimen/spacing_large">
<com.habitrpg.common.habitica.views.UsernameLabel
<com.habitrpg.android.habitica.ui.views.UsernameLabel
android:id="@+id/display_name_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

View file

@ -35,7 +35,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.habitrpg.common.habitica.views.UsernameLabel
<com.habitrpg.android.habitica.ui.views.UsernameLabel
android:id="@+id/user_label"
style="@style/ChatMessageUserTextViewStyle"
android:layout_width="wrap_content"

View file

@ -23,7 +23,7 @@
android:layout_width="match_parent"
android:layout_height="32dp"
android:background="@drawable/layout_rounded_bg_shopitem_price">
<com.habitrpg.common.habitica.views.CurrencyView
<com.habitrpg.android.habitica.ui.views.CurrencyView
android:id="@+id/price_label"
android:layout_width="wrap_content"
android:layout_height="32dp"

View file

@ -23,7 +23,7 @@
android:layout_width="match_parent"
android:layout_height="32dp"
android:background="@drawable/layout_rounded_bg_shopitem_price">
<com.habitrpg.common.habitica.views.CurrencyView
<com.habitrpg.android.habitica.ui.views.CurrencyView
android:id="@+id/price_label"
android:layout_width="wrap_content"
android:layout_height="32dp"

View file

@ -22,7 +22,7 @@
android:textColor="@color/text_primary"
style="@style/Body1"
android:layout_marginEnd="@dimen/spacing_medium"/>
<com.habitrpg.common.habitica.views.CurrencyView
<com.habitrpg.android.habitica.ui.views.CurrencyView
android:id="@+id/set_price_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

View file

@ -1,10 +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"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:background="@drawable/button_background_primary"
android:gravity="center">
android:gravity="center"
android:padding="6dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -15,8 +17,9 @@
android:textColor="@color/white"
android:layout_marginEnd="6dp"
/>
<com.habitrpg.common.habitica.views.CurrencyView
<com.habitrpg.android.habitica.ui.views.CurrencyView
android:id="@+id/currencyView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:layout_height="wrap_content"
app:fontFamily="sans-serif-medium"/>
</LinearLayout>

View file

@ -33,7 +33,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
style="@style/Subheader1"
style="@style/SubHeader1"
tools:text="4 Gems"
android:gravity="center"/>
<Button

View file

@ -35,7 +35,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/levelup_title_10"
style="@style/Subheader1"
style="@style/SubHeader1"
android:gravity="center_horizontal"
android:textColor="@color/text_primary"
android:layout_marginBottom="@dimen/spacing_medium"/>

View file

@ -52,12 +52,14 @@
android:id="@+id/shimmer_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:shimmer_repeat_delay="8000">
app:shimmer_repeat_delay="8000"
app:shimmer_base_color="@color/text_dimmed"
app:shimmer_highlight_color="@color/content_background"
app:shimmer_highlight_alpha="0.8">
<com.habitrpg.common.habitica.views.PixelArtView
android:id="@+id/pet_view"
android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size"
android:alpha="0.1"
android:layout_gravity="center" />
</com.facebook.shimmer.ShimmerFrameLayout>
</FrameLayout>

View file

@ -14,13 +14,13 @@
android:layout_height="wrap_content"
android:text="@string/reward_dialog_buy"
android:textColor="@color/brand_300"
style="@style/Subheader1" />
<com.habitrpg.common.habitica.views.CurrencyView
style="@style/SubHeader1" />
<com.habitrpg.android.habitica.ui.views.CurrencyView
android:id="@+id/priceLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="10"
tools:textColor="@color/green_10"
style="@style/Subheader1"
style="@style/SubHeader1"
android:layout_marginStart="12dp"/>
</LinearLayout>

View file

@ -14,7 +14,7 @@
android:layout_marginBottom="@dimen/spacing_large">
<TextView
style="@style/Subheader1"
style="@style/SubHeader1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/filters"

View file

@ -151,7 +151,7 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1">
<com.habitrpg.common.habitica.views.UsernameLabel
<com.habitrpg.android.habitica.ui.views.UsernameLabel
android:id="@+id/creator_label"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

View file

@ -18,7 +18,7 @@
app:showMount="false"
app:showSleeping="false"
android:layout_gravity="center_horizontal"/>
<com.habitrpg.common.habitica.views.UsernameLabel
<com.habitrpg.android.habitica.ui.views.UsernameLabel
android:id="@+id/display_name_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View file

@ -18,7 +18,7 @@
app:showMount="false"
app:showSleeping="false"
android:layout_gravity="center_horizontal"/>
<com.habitrpg.common.habitica.views.UsernameLabel
<com.habitrpg.android.habitica.ui.views.UsernameLabel
android:id="@+id/display_name_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View file

@ -162,7 +162,7 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_vertical">
<com.habitrpg.common.habitica.views.UsernameLabel
<com.habitrpg.android.habitica.ui.views.UsernameLabel
android:id="@+id/leader_profile_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

View file

@ -25,7 +25,7 @@
android:layout_height="wrap_content"
android:text="@string/pms_disabled"
android:gravity="center"
style="@style/Subheader1"
style="@style/SubHeader1"
android:textColor="@color/text_primary"
android:layout_marginBottom="4dp"/>
<TextView

View file

@ -65,7 +65,7 @@
android:id="@+id/promo_banner_duration_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Subheader1"/>
style="@style/SubHeader1"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
@ -91,7 +91,7 @@
android:id="@+id/prompt_button"
android:layout_width="match_parent"
android:layout_height="38dp"
style="@style/Subheader1"
style="@style/SubHeader1"
android:gravity="center" />
<TextView

View file

@ -62,7 +62,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
style="@style/Subheader1"
style="@style/SubHeader1"
android:textColor="@color/white"
android:layout_marginStart="84dp"
android:layout_marginEnd="84dp"
@ -111,7 +111,7 @@
android:layout_height="wrap_content"
android:text="@string/subscribe_prompt"
android:gravity="center"
style="@style/Subheader1"
style="@style/SubHeader1"
app:dayTextColor="@color/text_brand"
app:nightTextColor="@color/gray_400"
android:lineSpacingExtra="4dp"
@ -316,7 +316,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
style="@style/Subheader1"
style="@style/SubHeader1"
android:textColor="@color/text_brand"
android:text="@string/subscribe_options_title"
android:layout_marginBottom="20dp"/>

View file

@ -60,7 +60,7 @@
android:textColor="@color/white"
android:elevation="4dp"
android:textAllCaps="false"
style="@style/Subheader1"
style="@style/SubHeader1"
/>
</LinearLayout>
<LinearLayout
@ -110,7 +110,7 @@
android:textColor="@color/white"
android:elevation="4dp"
android:textAllCaps="false"
style="@style/Subheader1"
style="@style/SubHeader1"
/>
</LinearLayout>
<LinearLayout
@ -159,7 +159,7 @@
android:background="@drawable/support_info_lower_bg"
android:elevation="4dp"
android:textColor="@color/white"
style="@style/Subheader1"
style="@style/SubHeader1"
/>
</LinearLayout>
</LinearLayout>

View file

@ -30,7 +30,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.habitrpg.common.habitica.views.UsernameLabel
<com.habitrpg.android.habitica.ui.views.UsernameLabel
android:id="@+id/display_name_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

View file

@ -12,7 +12,7 @@
<TextView
android:id="@+id/nameTextView"
style="@style/Subheader1"
style="@style/SubHeader1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

View file

@ -19,5 +19,5 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
style="@style/Subheader1"/>
style="@style/SubHeader1"/>
</LinearLayout>

View file

@ -11,7 +11,7 @@
android:layout_height="wrap_content"
tools:text="Title"
android:gravity="center"
style="@style/Subheader1"/>
style="@style/SubHeader1"/>
<com.habitrpg.common.habitica.views.PixelArtView
android:id="@+id/icon_view"
android:layout_width="@dimen/shopitem_image_size"

View file

@ -18,7 +18,7 @@
android:layout_height="wrap_content"
style="@style/BottomMenuItemText"
tools:text="Menu Item"/>
<com.habitrpg.common.habitica.views.CurrencyView
<com.habitrpg.android.habitica.ui.views.CurrencyView
android:id="@+id/currency_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View file

@ -24,7 +24,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.habitrpg.common.habitica.views.UsernameLabel
<com.habitrpg.android.habitica.ui.views.UsernameLabel
android:id="@+id/display_name_textview"
android:layout_height="wrap_content"
android:layout_width="0dp"

View file

@ -60,7 +60,7 @@
android:background="@drawable/purchase_button_background"
android:textColor="@color/brand_400"
android:gravity="center"
style="@style/Subheader1"
style="@style/SubHeader1"
android:letterSpacing="0.02"
android:layout_marginStart="@dimen/spacing_medium"
android:layout_marginEnd="@dimen/spacing_medium"

View file

@ -27,7 +27,7 @@
android:minHeight="40dp"
android:gravity="center"
android:background="@drawable/layout_rounded_bg_shopitem_price">
<com.habitrpg.common.habitica.views.CurrencyView
<com.habitrpg.android.habitica.ui.views.CurrencyView
android:id="@+id/priceLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View file

@ -40,7 +40,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="Spell Name"
style="@style/Subheader1"/>
style="@style/SubHeader1"/>
<TextView
android:id="@+id/skill_notes"

View file

@ -27,7 +27,7 @@
<com.habitrpg.android.habitica.ui.views.Typewriter
android:id="@+id/textView"
style="@style/Subheader1"
style="@style/SubHeader1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="@string/welcome_text" />

View file

@ -30,7 +30,7 @@
android:textColor="@color/gray_300"
android:textSize="12sp" />
<com.habitrpg.common.habitica.views.UsernameLabel
<com.habitrpg.android.habitica.ui.views.UsernameLabel
android:id="@+id/display_name_textview"
android:layout_width="wrap_content"
android:layout_height="24dp"

View file

@ -35,7 +35,7 @@
</style>
<!-- Subheader -->
<style name="Subheader1">
<style name="SubHeader1">
<item name="android:fontFamily">@string/font_family_medium</item>
<item name="android:textSize">16sp</item>
<item name="android:textColor">?textColorSecondary</item>

View file

@ -3,5 +3,6 @@
tools:keep="@array/android_wear_capabilities">
<string-array name="android_wear_capabilities">
<item>edit_task</item>
<item>open_activity</item>
</string-array>
</resources>

View file

@ -20,6 +20,7 @@ import androidx.core.content.edit
import androidx.preference.PreferenceManager
import com.amplitude.api.Amplitude
import com.amplitude.api.Identify
import com.google.android.gms.wearable.Wearable
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.installations.FirebaseInstallations
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
@ -35,10 +36,10 @@ import com.habitrpg.android.habitica.modules.UserRepositoryModule
import com.habitrpg.android.habitica.proxy.AnalyticsManager
import com.habitrpg.android.habitica.ui.activities.BaseActivity
import com.habitrpg.android.habitica.ui.activities.LoginActivity
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.common.habitica.extensions.setupCoil
import com.habitrpg.common.habitica.helpers.LanguageHelper
import com.habitrpg.common.habitica.helpers.MarkdownParser
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import io.realm.Realm
import io.realm.RealmConfiguration
import java.lang.ref.WeakReference
@ -272,6 +273,7 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
}
reloadUserComponent()
getInstance(context)?.lazyApiHelper?.updateAuthenticationCredentials(null, null)
Wearable.getCapabilityClient(context).removeLocalCapability("provide_auth")
startActivity(LoginActivity::class.java, context)
}

View file

@ -37,6 +37,7 @@ class RxErrorHandler {
!HttpException::class.java.isAssignableFrom(throwable.javaClass) &&
!retrofit2.HttpException::class.java.isAssignableFrom(throwable.javaClass) &&
!EOFException::class.java.isAssignableFrom(throwable.javaClass) &&
!retrofit2.adapter.rxjava3.HttpException::class.java.isAssignableFrom(throwable.javaClass) &&
throwable !is ConnectionShutdownException
) {
instance?.analyticsManager?.logException(throwable)

View file

@ -11,7 +11,7 @@ import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.common.habitica.views.AvatarView
import com.habitrpg.android.habitica.ui.activities.BaseActivity
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.rxjava3.core.Flowable

View file

@ -19,7 +19,7 @@ import com.habitrpg.android.habitica.extensions.round
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.activities.BaseActivity
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
import io.reactivex.rxjava3.core.Flowable

View file

@ -10,6 +10,7 @@ import com.habitrpg.android.habitica.models.BaseMainObject
import com.habitrpg.android.habitica.models.Tag
import com.habitrpg.common.habitica.helpers.MarkdownParser
import com.habitrpg.common.habitica.models.tasks.Attribute
import com.habitrpg.common.habitica.models.tasks.BaseTask
import com.habitrpg.common.habitica.models.tasks.Frequency
import com.habitrpg.common.habitica.models.tasks.TaskType
import io.realm.RealmList
@ -28,7 +29,7 @@ import java.util.Calendar
import java.util.Date
import java.util.GregorianCalendar
open class Task : RealmObject, BaseMainObject, Parcelable {
open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask {
override val realmClass: Class<Task>
get() = Task::class.java
override val primaryIdentifier: String?
@ -43,7 +44,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
var priority: Float = 0.0f
var text: String = ""
var notes: String? = null
var type: TaskType?
override var type: TaskType?
get() = TaskType.from(typeValue)
set(value) { typeValue = value?.value }
private var typeValue: String? = null
@ -61,10 +62,10 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
// Habits
var up: Boolean? = false
var down: Boolean? = false
var counterUp: Int? = 0
var counterDown: Int? = 0
override var counterUp: Int? = 0
override var counterDown: Int? = 0
// todos/dailies
var completed: Boolean = false
override var completed: Boolean = false
var checklist: RealmList<ChecklistItem>? = RealmList()
var reminders: RealmList<RemindersItem>? = RealmList()
// dailies
@ -73,7 +74,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
set(value) { frequencyValue = value?.value }
var frequencyValue: String? = null
var everyX: Int? = 0
var streak: Int? = 0
override var streak: Int? = 0
var startDate: Date? = null
var repeat: Days? = null
// todos
@ -86,7 +87,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
@Ignore
var parsedNotes: Spanned? = null
var isDue: Boolean? = null
override var isDue: Boolean? = null
var nextDue: RealmList<Date>? = null
@ -188,9 +189,6 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
}
}
val isDisplayedActive: Boolean
get() = ((isDue == true && type == TaskType.DAILY) || type == TaskType.TODO) && !completed
val isChecklistDisplayActive: Boolean
get() = this.checklist?.size != this.completedChecklistCount

View file

@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.modules;
import android.content.Context;
import android.content.SharedPreferences;
import com.habitrpg.android.habitica.BuildConfig;
import com.habitrpg.android.habitica.data.TaskRepository;
import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.helpers.TaskAlarmManager;
@ -28,7 +29,11 @@ public class UserModule {
@Named(NAMED_USER_ID)
@UserScope
public String providesUserID(SharedPreferences sharedPreferences) {
return sharedPreferences.getString("UserID", "");
if (BuildConfig.DEBUG && !BuildConfig.TEST_USER_ID.isEmpty()) {
return BuildConfig.TEST_USER_ID;
} else {
return sharedPreferences.getString("UserID", "");
}
}
@Provides

View file

@ -9,6 +9,7 @@ import com.habitrpg.android.habitica.ui.activities.LoginActivity
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.android.habitica.ui.activities.TaskFormActivity
import com.habitrpg.common.habitica.api.HostConfig
import com.habitrpg.common.habitica.helpers.DeviceCommunication
import javax.inject.Inject
class DeviceCommunicationService : WearableListenerService() {
@ -24,16 +25,19 @@ class DeviceCommunicationService : WearableListenerService() {
override fun onMessageReceived(event: MessageEvent) {
super.onMessageReceived(event)
when (event.path) {
"/request/auth" -> processAuthRequest(event)
"/show/register" -> openActivity(LoginActivity::class.java)
"/show/rya" -> openActivity(MainActivity::class.java)
"/tasks/edit" -> openTaskForm(event)
DeviceCommunication.REQUEST_AUTH -> processAuthRequest(event)
DeviceCommunication.SHOW_REGISTER -> openActivity(event, LoginActivity::class.java)
DeviceCommunication.SHOW_LOGIN -> openActivity(event, LoginActivity::class.java)
DeviceCommunication.SHOW_RYA -> openActivity(event, MainActivity::class.java)
DeviceCommunication.SHOW_TASK_EDIT -> openTaskForm(event)
}
}
private fun openActivity(activityClass: Class<*>) {
private fun openActivity(event: MessageEvent, activityClass: Class<*>) {
val intent = Intent(this, activityClass)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
messageClient.sendMessage(event.sourceNodeId, "/action_completed", null)
}
private fun openTaskForm(event: MessageEvent) {
@ -41,7 +45,9 @@ class DeviceCommunicationService : WearableListenerService() {
val startIntent = Intent(this, TaskFormActivity::class.java).apply {
putExtra(TaskFormActivity.TASK_ID_KEY, taskID)
}
startActivity(startIntent)
startIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(startIntent)
messageClient.sendMessage(event.sourceNodeId, "/action_completed", null)
}
private fun processAuthRequest(event: MessageEvent) {

View file

@ -8,7 +8,8 @@ import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.helpers.TaskAlarmManager
import com.habitrpg.shared.habitica.HLogger
import com.habitrpg.shared.habitica.LogLevel
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import javax.inject.Inject
@ -19,9 +20,12 @@ class TaskAlarmBootReceiver : BroadcastReceiver() {
@Inject
lateinit var sharedPreferences: SharedPreferences
override fun onReceive(context: Context, arg1: Intent) {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action != Intent.ACTION_BOOT_COMPLETED) {
return
}
HabiticaBaseApplication.userComponent?.inject(this)
GlobalScope.launch {
MainScope().launch(Dispatchers.Main) {
taskAlarmManager.scheduleAllSavedAlarms(sharedPreferences.getBoolean("preventDailyReminder", false))
}
HLogger.log(LogLevel.INFO, this::javaClass.name, "onReceive")

View file

@ -10,7 +10,7 @@ import androidx.core.os.bundleOf
import androidx.lifecycle.ViewModel
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.AvatarWithBarsBinding
import com.habitrpg.android.habitica.helpers.Animations
import com.habitrpg.common.habitica.helpers.Animations
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
@ -18,7 +18,7 @@ import com.habitrpg.android.habitica.ui.activities.mainActivityCreatedAt
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.common.habitica.helpers.HealthFormatter
import com.habitrpg.common.habitica.models.Avatar
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import java.util.Date
import java.util.Locale
import kotlin.math.floor

View file

@ -10,7 +10,7 @@ import android.widget.TextView
import androidx.appcompat.app.AlertDialog
import com.habitrpg.android.habitica.R
import com.habitrpg.common.habitica.extensions.loadImage
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.common.habitica.views.PixelArtView
class ItemDetailDialog(context: Context) : AlertDialog(context) {

View file

@ -18,7 +18,7 @@ import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.android.habitica.extensions.observeOnce
import com.habitrpg.android.habitica.helpers.AdHandler
import com.habitrpg.android.habitica.helpers.AdType
import com.habitrpg.android.habitica.helpers.Animations
import com.habitrpg.common.habitica.helpers.Animations
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.common.habitica.extensions.loadImage
@ -26,7 +26,6 @@ import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.ads.AdButton
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaBottomSheetDialog
import com.plattysoft.leonids.ParticleSystem
import kotlinx.coroutines.launch
import java.util.Locale
import javax.inject.Inject
@ -156,10 +155,8 @@ class ArmoireActivity : BaseActivity() {
binding.titleView.alpha = 0f
binding.subtitleView.alpha = 0f
lifecycleScope.launch {
if (binding.iconWrapper.isAttachedToWindow) {
Animations.circularReveal(binding.iconWrapper, 300)
}
binding.iconWrapper.post {
Animations.circularReveal(binding.iconWrapper, 300)
}
binding.leftSparkView.startAnimating()

View file

@ -34,10 +34,9 @@ import com.habitrpg.common.habitica.models.tasks.TaskType
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.adapter.social.challenges.ChallengeTasksRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengesOverviewFragmentDirections
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
import io.reactivex.rxjava3.core.Flowable

View file

@ -21,7 +21,7 @@ import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.rxjava3.functions.Consumer
import javax.inject.Inject

View file

@ -14,12 +14,12 @@ import com.habitrpg.android.habitica.extensions.fromHtml
import com.habitrpg.android.habitica.extensions.observeOnce
import com.habitrpg.android.habitica.helpers.AdHandler
import com.habitrpg.android.habitica.helpers.AdType
import com.habitrpg.android.habitica.helpers.Animations
import com.habitrpg.common.habitica.helpers.Animations
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.ads.AdButton
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.plattysoft.leonids.ParticleSystem
import javax.inject.Inject
@ -105,7 +105,7 @@ class DeathActivity: BaseActivity() {
.setSpeedRange(0.01f, 0.03f)
.setFadeOut(4000, AccelerateInterpolator())
.setSpeedModuleAndAngleRange(0.01f, 0.03f, startAngle, startAngle+80)
.emit(550, 680, 3, 6000)
.emit(550, 690, 3, 6000)
}

View file

@ -13,9 +13,7 @@ import com.habitrpg.android.habitica.databinding.ActivityFixcharacterBinding
import com.habitrpg.android.habitica.extensions.setTintWith
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.modules.AppModule
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import javax.inject.Inject

View file

@ -16,7 +16,7 @@ import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.ui.fragments.purchases.GiftBalanceGemsFragment
import com.habitrpg.android.habitica.ui.fragments.purchases.GiftPurchaseGemsFragment
import com.habitrpg.common.habitica.views.CurrencyView
import com.habitrpg.android.habitica.ui.views.CurrencyView
import javax.inject.Inject
class GiftGemsActivity : PurchaseActivity() {

View file

@ -12,7 +12,7 @@ import com.habitrpg.android.habitica.databinding.ActivityVerifyUsernameBinding
import com.habitrpg.android.habitica.extensions.OnChangeTextWatcher
import com.habitrpg.android.habitica.extensions.runDelayed
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable

View file

@ -14,7 +14,7 @@ import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.models.inventory.CustomizationSet
import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.common.habitica.extensions.loadImage
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.common.habitica.views.PixelArtView
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.rxjava3.core.BackpressureStrategy
@ -126,7 +126,8 @@ class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.R
equipment?.value ?: 0
}.toString()
(dialogContent.findViewById<View>(R.id.gem_icon) as? ImageView)?.setImageBitmap(HabiticaIconsHelper.imageOfGem())
(dialogContent.findViewById<View>(R.id.gem_icon) as? ImageView)?.setImageBitmap(
HabiticaIconsHelper.imageOfGem())
val dialog = HabiticaAlertDialog(itemView.context)
dialog.addButton(R.string.purchase_button, true) { _, _ ->

View file

@ -14,7 +14,7 @@ import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.android.habitica.models.Skill
import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.common.habitica.extensions.loadImage
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject

View file

@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.databinding.GearListItemBinding
import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.common.habitica.extensions.loadImage
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.rxjava3.subjects.PublishSubject
class EquipmentRecyclerViewAdapter : BaseRecyclerViewAdapter<Equipment, EquipmentRecyclerViewAdapter.GearViewHolder>() {

View file

@ -10,7 +10,7 @@ import androidx.core.content.ContextCompat
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
class HabiticaClassArrayAdapter(context: Context, resource: Int, objects: List<CharSequence>) : ArrayAdapter<CharSequence>(context, resource, R.id.textView, objects) {

View file

@ -5,7 +5,7 @@ import android.view.ViewGroup
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.CanHatchItemBinding
import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.helpers.Animations
import com.habitrpg.common.habitica.helpers.Animations
import com.habitrpg.android.habitica.models.inventory.Animal
import com.habitrpg.android.habitica.models.inventory.Egg
import com.habitrpg.android.habitica.models.inventory.Food

View file

@ -11,7 +11,7 @@ import com.habitrpg.android.habitica.models.social.ChallengeMembership
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeFilterOptions
import com.habitrpg.common.habitica.helpers.EmojiParser
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject

View file

@ -19,7 +19,7 @@ import com.habitrpg.common.habitica.helpers.NumberAbbreviator
import com.habitrpg.android.habitica.models.social.Group
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.common.habitica.helpers.EmojiParser
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.realm.Case
import io.realm.OrderedRealmCollection
import java.util.Locale

View file

@ -8,11 +8,11 @@ import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.common.habitica.models.tasks.TaskType
import com.habitrpg.android.habitica.proxy.AnalyticsManager
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
import com.habitrpg.common.habitica.models.tasks.TaskType
import javax.inject.Inject
abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(
@ -60,13 +60,13 @@ abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(
if (taskType != task.type)
return
var i = 0
while (i < this.content?.size ?: 0) {
while (i < (this.content?.size ?: 0)) {
if (content?.get(i)?.id == task.id) {
break
}
++i
}
if (i < content?.size ?: 0) {
if (i < (content?.size ?: 0)) {
content?.set(i, task)
}
filter()

View file

@ -18,7 +18,7 @@ import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.functions.Action
@ -35,11 +35,7 @@ abstract class RealmBaseTasksRecyclerViewAdapter(
set(value) {
if (field == value) return
field = value
if (value) {
notifyItemInserted(0)
} else {
notifyItemRemoved(0)
}
notifyDataSetChanged()
}
override var user: User? = null
set(value) {

View file

@ -19,7 +19,7 @@ import com.habitrpg.common.habitica.models.tasks.Attribute
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.stats.BulkAllocateStatsDialog
import javax.inject.Inject

View file

@ -28,7 +28,7 @@ abstract class BasePreferencesFragment : PreferenceFragmentCompat() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
userViewModel.user.observe(viewLifecycleOwner) { user = it }
userViewModel.user.observe(viewLifecycleOwner) { setUser(it) }
return super.onCreateView(inflater, container, savedInstanceState)
}

View file

@ -18,8 +18,6 @@ import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.data.ContentRepository
import com.habitrpg.android.habitica.extensions.addCancelButton
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.common.habitica.helpers.AppTestingLevel
import com.habitrpg.common.habitica.helpers.LanguageHelper
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.helpers.SoundManager
import com.habitrpg.android.habitica.helpers.TaskAlarmManager
@ -32,6 +30,8 @@ import com.habitrpg.android.habitica.ui.activities.PrefsActivity
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.common.habitica.helpers.AppTestingLevel
import com.habitrpg.common.habitica.helpers.LanguageHelper
import java.util.Locale
import javax.inject.Inject
@ -294,7 +294,7 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
override fun setUser(user: User?) {
super.setUser(user)
if (10 <= user?.stats?.lvl ?: 0) {
if (10 <= (user?.stats?.lvl ?: 0)) {
if (user?.flags?.classSelected == true) {
if (user.preferences?.disableClasses == true) {
classSelectionPreference?.title = getString(R.string.enable_class)

View file

@ -17,7 +17,7 @@ import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.activities.SetupActivity
import com.habitrpg.android.habitica.ui.adapter.setup.TaskSetupAdapter
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import java.util.Date
class TaskSetupFragment : BaseFragment<FragmentSetupTasksBinding>() {

View file

@ -15,7 +15,7 @@ import com.habitrpg.android.habitica.databinding.FragmentWelcomeBinding
import com.habitrpg.android.habitica.extensions.OnChangeTextWatcher
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.subjects.PublishSubject
import java.util.concurrent.TimeUnit

View file

@ -24,7 +24,7 @@ import com.habitrpg.android.habitica.ui.adapter.SkillsRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar
import io.reactivex.rxjava3.core.Flowable

View file

@ -25,7 +25,7 @@ import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.common.habitica.views.UsernameLabel
import com.habitrpg.android.habitica.ui.views.UsernameLabel
import javax.inject.Inject
class InboxOverviewFragment : BaseMainFragment<FragmentInboxBinding>(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener, View.OnClickListener {

View file

@ -28,7 +28,7 @@ import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.common.habitica.models.PlayerTier
import com.habitrpg.common.habitica.views.UsernameLabel
import com.habitrpg.android.habitica.ui.views.UsernameLabel
import javax.inject.Inject
class TavernDetailFragment : BaseFragment<FragmentTavernDetailBinding>() {

View file

@ -36,7 +36,7 @@ import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.common.habitica.helpers.EmojiParser
import com.habitrpg.common.habitica.helpers.setMarkdown
import com.habitrpg.common.habitica.models.tasks.TaskType
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import retrofit2.HttpException
import javax.inject.Inject

View file

@ -26,8 +26,8 @@ import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.common.habitica.helpers.setMarkdown
import com.habitrpg.android.habitica.ui.viewmodels.GroupViewModel
import com.habitrpg.common.habitica.views.HabiticaIcons
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIcons
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import kotlinx.coroutines.Dispatchers

View file

@ -17,7 +17,7 @@ import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.common.habitica.helpers.setMarkdown
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.rxjava3.functions.Consumer
import javax.inject.Inject
@ -45,13 +45,20 @@ class FAQOverviewFragment : BaseMainFragment<FragmentFaqOverviewBinding>() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding?.healthSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfHeartLarge())
binding?.experienceSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfExperienceReward())
binding?.manaSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfMagicLarge())
binding?.goldSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfGoldReward())
binding?.gemsSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfGem())
binding?.hourglassesSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfHourglassLarge())
binding?.statsSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfStats())
binding?.healthSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
HabiticaIconsHelper.imageOfHeartLarge())
binding?.experienceSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
HabiticaIconsHelper.imageOfExperienceReward())
binding?.manaSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
HabiticaIconsHelper.imageOfMagicLarge())
binding?.goldSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
HabiticaIconsHelper.imageOfGoldReward())
binding?.gemsSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
HabiticaIconsHelper.imageOfGem())
binding?.hourglassesSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
HabiticaIconsHelper.imageOfHourglassLarge())
binding?.statsSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
HabiticaIconsHelper.imageOfStats())
binding?.moreHelpTextView?.setMarkdown(context?.getString(R.string.need_help_header_description, "[Habitica Help Guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)"))
binding?.moreHelpTextView?.setOnClickListener { MainNavigationController.navigate(R.id.guildFragment, bundleOf("groupID" to "5481ccf3-5d2d-48a9-a871-70a7380cee5a")) }

View file

@ -15,6 +15,7 @@ import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.modules.AppModule
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import javax.inject.Inject
import javax.inject.Named
@ -59,7 +60,7 @@ class SupportMainFragment : BaseMainFragment<FragmentSupportMainBinding>() {
binding?.resetTutorialButton?.setOnClickListener {
userRepository.resetTutorial().subscribe({
activity?.showSnackbar(null, getString(R.string.tutorial_reset_confirmation))
activity?.showSnackbar(null, null, getString(R.string.tutorial_reset_confirmation), displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS)
}, RxErrorHandler.handleEmptyError())
}
}

View file

@ -38,16 +38,16 @@ import com.habitrpg.android.habitica.ui.adapter.tasks.RewardsRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.adapter.tasks.TaskRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.adapter.tasks.TodosRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.common.habitica.helpers.EmptyItem
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.common.habitica.helpers.EmptyItem
import com.habitrpg.common.habitica.models.responses.TaskDirection
import com.habitrpg.common.habitica.models.responses.TaskScoringResult
import com.habitrpg.common.habitica.models.tasks.TaskType
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.disposables.CompositeDisposable
import kotlinx.coroutines.Job
@ -102,6 +102,9 @@ open class TaskRecyclerViewFragment : BaseFragment<FragmentRefreshRecyclerviewBi
recyclerSubscription.dispose()
}
recyclerSubscription = CompositeDisposable()
if (viewModel == null && parentFragment is TasksFragment) {
viewModel = (parentFragment as TasksFragment).viewModel
}
viewModel?.let { viewModel ->
val adapter: BaseRecyclerViewAdapter<*, *>? = when (this.taskType) {
TaskType.HABIT -> HabitsRecyclerViewAdapter(R.layout.habit_item_card, viewModel)
@ -201,6 +204,7 @@ open class TaskRecyclerViewFragment : BaseFragment<FragmentRefreshRecyclerviewBi
component.inject(this)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
savedInstanceState?.let { this.taskType = TaskType.from(savedInstanceState.getString(CLASS_TYPE_KEY, "")) ?: TaskType.HABIT }

View file

@ -15,7 +15,7 @@ import com.habitrpg.android.habitica.models.social.ChatMessage
import com.habitrpg.android.habitica.models.social.FindUsernameResult
import com.habitrpg.android.habitica.models.user.Authentication
import com.habitrpg.android.habitica.models.user.Profile
import com.habitrpg.common.habitica.views.UsernameLabel
import com.habitrpg.android.habitica.ui.views.UsernameLabel
import com.habitrpg.common.habitica.helpers.EmojiMap
import com.habitrpg.common.habitica.helpers.EmojiParser
import java.util.Date

View file

@ -23,7 +23,7 @@ import com.habitrpg.common.habitica.extensions.DataBindingUtils
import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.common.habitica.helpers.MarkdownParser
import com.habitrpg.common.habitica.helpers.setParsedMarkdown
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.schedulers.Schedulers

View file

@ -8,7 +8,7 @@ import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.PartyMemberBinding
import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
class GroupMemberViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView), PopupMenu.OnMenuItemClickListener {
private val binding = PartyMemberBinding.bind(itemView)

View file

@ -11,7 +11,7 @@ import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.common.habitica.extensions.loadImage
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {

View file

@ -27,7 +27,7 @@ import io.reactivex.rxjava3.core.Single
import io.reactivex.rxjava3.functions.Action
import io.reactivex.rxjava3.schedulers.Schedulers
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
abstract class BaseTaskViewHolder constructor(
@ -36,6 +36,7 @@ abstract class BaseTaskViewHolder constructor(
var openTaskFunc: ((Pair<Task, View>) -> Unit),
var brokenTaskFunc: ((Task) -> Unit)
) : BindableViewHolder<Task>(itemView), View.OnTouchListener {
private val scope = MainScope()
var task: Task? = null
var movingFromPosition: Int? = null
var errorButtonClicked: Action? = null
@ -108,7 +109,7 @@ abstract class BaseTaskViewHolder constructor(
}
notesTextView?.addEllipsesListener(object : EllipsisTextView.EllipsisListener {
override fun ellipsisStateChanged(ellipses: Boolean) {
GlobalScope.launch(Dispatchers.Main.immediate) {
scope.launch(Dispatchers.Main.immediate) {
if (ellipses && notesTextView.maxLines != 3) {
notesTextView.maxLines = 3
}
@ -209,7 +210,7 @@ abstract class BaseTaskViewHolder constructor(
titleTextView.setTextColor(ContextCompat.getColor(context, R.color.text_primary))
if (displayMode == "standard") {
iconViewReminder?.visibility = if (data.reminders?.size ?: 0 > 0) View.VISIBLE else View.GONE
iconViewReminder?.visibility = if ((data.reminders?.size ?: 0) > 0) View.VISIBLE else View.GONE
iconViewChallenge?.visibility = if (task?.challengeID != null) View.VISIBLE else View.GONE
if (task?.challengeID != null) {

View file

@ -10,7 +10,7 @@ import com.habitrpg.common.habitica.helpers.NumberAbbreviator
import com.habitrpg.common.habitica.models.responses.TaskDirection
import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.ui.ItemDetailDialog
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
class RewardViewHolder(
itemView: View,

View file

@ -10,21 +10,21 @@ import androidx.paging.PositionalDataSource
import androidx.paging.toLiveData
import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.data.SocialRepository
import com.habitrpg.common.habitica.extensions.Optional
import com.habitrpg.common.habitica.extensions.asOptional
import com.habitrpg.android.habitica.extensions.filterOptionalDoOnEmpty
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.models.social.ChatMessage
import com.habitrpg.common.habitica.extensions.Optional
import com.habitrpg.common.habitica.extensions.asOptional
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.BehaviorSubject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import javax.inject.Inject
import kotlin.math.ceil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
class InboxViewModel(recipientID: String?, recipientUsername: String?) : BaseViewModel() {
@Inject
@ -101,7 +101,7 @@ class MessagesDataSource(
callback.onResult(emptyList())
return
}
GlobalScope.launch(Dispatchers.Main.immediate) {
MainScope().launch(Dispatchers.Main.immediate) {
if (recipientID?.isNotBlank() != true) { return@launch }
val page = ceil(params.startPosition.toFloat() / params.loadSize.toFloat()).toInt()
socialRepository.retrieveInboxMessages(recipientID ?: "", page)
@ -120,7 +120,7 @@ class MessagesDataSource(
override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<ChatMessage>) {
lastFetchWasEnd = false
GlobalScope.launch(Dispatchers.Main.immediate) {
MainScope().launch(Dispatchers.Main.immediate) {
socialRepository.getInboxMessages(recipientID)
.map { socialRepository.getUnmanagedCopy(it) }
.firstElement()

View file

@ -13,7 +13,6 @@ import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.ViewCollapsibleSectionBinding
import com.habitrpg.common.habitica.extensions.getThemeColor
import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
class CollapsibleSectionView(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) {
val infoIconView: ImageView

View file

@ -1,4 +1,4 @@
package com.habitrpg.common.habitica.views
package com.habitrpg.android.habitica.ui.views
import android.animation.ValueAnimator
import android.content.Context
@ -13,8 +13,8 @@ import androidx.core.animation.doOnEnd
import androidx.core.animation.doOnStart
import androidx.core.content.ContextCompat
import androidx.core.view.updateLayoutParams
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.common.habitica.R
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.common.habitica.helpers.NumberAbbreviator
class CurrencyView : androidx.appcompat.widget.AppCompatTextView {
@ -69,21 +69,21 @@ class CurrencyView : androidx.appcompat.widget.AppCompatTextView {
private fun configureCurrency() {
if ("gold" == currency) {
icon = HabiticaIconsHelper.imageOfGold()
icon = com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper.imageOfGold()
if (lightBackground) {
setTextColor(ContextCompat.getColor(context, R.color.yellow_1))
} else {
setTextColor(ContextCompat.getColor(context, R.color.yellow_100))
}
} else if ("gems" == currency) {
icon = HabiticaIconsHelper.imageOfGem()
icon = com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper.imageOfGem()
if (lightBackground) {
setTextColor(ContextCompat.getColor(context, R.color.green_10))
} else {
setTextColor(ContextCompat.getColor(context, R.color.green_50))
}
} else if ("hourglasses" == currency) {
icon = HabiticaIconsHelper.imageOfHourglass()
icon = com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper.imageOfHourglass()
if (lightBackground) {
setTextColor(ContextCompat.getColor(context, R.color.brand_300))
} else {

View file

@ -6,7 +6,6 @@ import android.util.TypedValue
import android.widget.LinearLayout
import com.habitrpg.android.habitica.R
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.common.habitica.views.CurrencyView
class CurrencyViews : LinearLayout {
var lightBackground: Boolean = false

View file

@ -1,4 +1,4 @@
package com.habitrpg.common.habitica.views;
package com.habitrpg.android.habitica.ui.views;
import android.content.Context;
import android.graphics.Bitmap;

View file

@ -1,4 +1,4 @@
package com.habitrpg.common.habitica.views;
package com.habitrpg.android.habitica.ui.views;
import android.content.Context;
import android.graphics.Bitmap;
@ -8,8 +8,6 @@ import android.graphics.RectF;
import androidx.annotation.ColorInt;
import com.habitrpg.common.habitica.views.HabiticaIcons;
/**
* Created by phillip on 05.09.17.
*/

View file

@ -1,4 +1,4 @@
package com.habitrpg.common.habitica.views
package com.habitrpg.android.habitica.ui.views
import android.content.Context
import android.util.AttributeSet
@ -44,7 +44,7 @@ class UsernameLabel @JvmOverloads constructor(
tierIconView.visibility = View.GONE
} else {
tierIconView.visibility = View.VISIBLE
tierIconView.setImageBitmap(HabiticaIconsHelper.imageOfContributorBadge(value.toFloat(), isNPC))
tierIconView.setImageBitmap(com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper.imageOfContributorBadge(value.toFloat(), isNPC))
}
}

View file

@ -16,7 +16,7 @@ import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.inventory.QuestContent
import com.habitrpg.android.habitica.models.inventory.QuestDropItem
import com.habitrpg.common.habitica.extensions.loadImage
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.common.habitica.views.PixelArtView
class QuestCompletedDialogContent : LinearLayout {

View file

@ -10,7 +10,7 @@ import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.EquipmentOverviewItemBinding
import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.common.habitica.extensions.loadImage
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
class EquipmentOverviewItem @JvmOverloads constructor(
context: Context,

View file

@ -6,7 +6,7 @@ import androidx.core.os.bundleOf
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.addCloseButton
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
class InsufficientHourglassesDialog(context: Context) : InsufficientCurrencyDialog(context) {
override fun onCreate(savedInstanceState: Bundle?) {

View file

@ -8,7 +8,7 @@ import android.content.Context
import android.util.AttributeSet
import android.view.View
import androidx.appcompat.widget.AppCompatImageView
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
class StarView : AppCompatImageView {

View file

@ -28,9 +28,9 @@ import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.activities.ArmoireActivityDirections
import com.habitrpg.common.habitica.views.CurrencyView
import com.habitrpg.android.habitica.ui.views.CurrencyView
import com.habitrpg.android.habitica.ui.views.CurrencyViews
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog
@ -44,6 +44,7 @@ import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
@ -308,7 +309,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
if (shopItem.isValid && !shopItem.locked) {
val gemsLeft = if (shopItem.limitedNumberLeft != null) shopItem.limitedNumberLeft else 0
if ((gemsLeft == 0 && shopItem.purchaseType == "gems") || shopItem.canAfford(user, purchaseQuantity)) {
GlobalScope.launch {
MainScope().launch(Dispatchers.Main) {
remainingPurchaseQuantity { quantity ->
if (quantity >= 0) {
if (quantity < purchaseQuantity) {

View file

@ -6,7 +6,7 @@ import com.habitrpg.android.habitica.databinding.DialogPurchaseGemsBinding
import com.habitrpg.android.habitica.extensions.asDrawable
import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.common.habitica.views.PixelArtView
internal class PurchaseDialogGemsContent(context: Context) : PurchaseDialogContent(context) {

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