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

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

View file

@ -97,21 +97,6 @@
-keepclassmembers class * { -keepclassmembers class * {
native <methods>; 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 #amplitude
-keep class com.google.android.gms.ads.** { *; } -keep class com.google.android.gms.ads.** { *; }
@ -138,20 +123,6 @@
-dontwarn com.google.android.gms.** -dontwarn com.google.android.gms.**
#end playservices #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 #add warnings here, warnings in proguard is normal
-dontwarn javax.annotation.** -dontwarn javax.annotation.**
-dontwarn com.squareup.picasso.** -dontwarn com.squareup.picasso.**

View file

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

View file

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

View file

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

View file

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

View file

@ -38,7 +38,7 @@
app:showMount="false" app:showMount="false"
app:showSleeping="false" app:showSleeping="false"
android:layout_gravity="center_horizontal"/> 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:id="@+id/display_name_text_view"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View file

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

View file

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

View file

@ -6,7 +6,7 @@
android:paddingBottom="@dimen/spacing_medium" android:paddingBottom="@dimen/spacing_medium"
android:paddingStart="@dimen/spacing_large" android:paddingStart="@dimen/spacing_large"
android:paddingEnd="@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:id="@+id/display_name_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />

View file

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

View file

@ -23,7 +23,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="32dp" android:layout_height="32dp"
android:background="@drawable/layout_rounded_bg_shopitem_price"> 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:id="@+id/price_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="32dp" android:layout_height="32dp"

View file

@ -23,7 +23,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="32dp" android:layout_height="32dp"
android:background="@drawable/layout_rounded_bg_shopitem_price"> 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:id="@+id/price_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="32dp" android:layout_height="32dp"

View file

@ -22,7 +22,7 @@
android:textColor="@color/text_primary" android:textColor="@color/text_primary"
style="@style/Body1" style="@style/Body1"
android:layout_marginEnd="@dimen/spacing_medium"/> 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:id="@+id/set_price_label"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />

View file

@ -1,10 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal" android:orientation="horizontal"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="60dp" android:layout_height="60dp"
android:background="@drawable/button_background_primary" android:background="@drawable/button_background_primary"
android:gravity="center"> android:gravity="center"
android:padding="6dp">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -15,8 +17,9 @@
android:textColor="@color/white" android:textColor="@color/white"
android:layout_marginEnd="6dp" android:layout_marginEnd="6dp"
/> />
<com.habitrpg.common.habitica.views.CurrencyView <com.habitrpg.android.habitica.ui.views.CurrencyView
android:id="@+id/currencyView" android:id="@+id/currencyView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"
app:fontFamily="sans-serif-medium"/>
</LinearLayout> </LinearLayout>

View file

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

View file

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

View file

@ -52,12 +52,14 @@
android:id="@+id/shimmer_view" android:id="@+id/shimmer_view"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="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 <com.habitrpg.common.habitica.views.PixelArtView
android:id="@+id/pet_view" android:id="@+id/pet_view"
android:layout_width="@dimen/gear_image_size" android:layout_width="@dimen/gear_image_size"
android:layout_height="@dimen/gear_image_size" android:layout_height="@dimen/gear_image_size"
android:alpha="0.1"
android:layout_gravity="center" /> android:layout_gravity="center" />
</com.facebook.shimmer.ShimmerFrameLayout> </com.facebook.shimmer.ShimmerFrameLayout>
</FrameLayout> </FrameLayout>

View file

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

View file

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

View file

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

View file

@ -18,7 +18,7 @@
app:showMount="false" app:showMount="false"
app:showSleeping="false" app:showSleeping="false"
android:layout_gravity="center_horizontal"/> 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:id="@+id/display_name_textview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View file

@ -18,7 +18,7 @@
app:showMount="false" app:showMount="false"
app:showSleeping="false" app:showSleeping="false"
android:layout_gravity="center_horizontal"/> 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:id="@+id/display_name_textview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View file

@ -162,7 +162,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:gravity="center_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:id="@+id/leader_profile_name"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -24,7 +24,7 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> 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:id="@+id/display_name_textview"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="0dp" android:layout_width="0dp"

View file

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

View file

@ -27,7 +27,7 @@
android:minHeight="40dp" android:minHeight="40dp"
android:gravity="center" android:gravity="center"
android:background="@drawable/layout_rounded_bg_shopitem_price"> 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:id="@+id/priceLabel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -37,6 +37,7 @@ class RxErrorHandler {
!HttpException::class.java.isAssignableFrom(throwable.javaClass) && !HttpException::class.java.isAssignableFrom(throwable.javaClass) &&
!retrofit2.HttpException::class.java.isAssignableFrom(throwable.javaClass) && !retrofit2.HttpException::class.java.isAssignableFrom(throwable.javaClass) &&
!EOFException::class.java.isAssignableFrom(throwable.javaClass) && !EOFException::class.java.isAssignableFrom(throwable.javaClass) &&
!retrofit2.adapter.rxjava3.HttpException::class.java.isAssignableFrom(throwable.javaClass) &&
throwable !is ConnectionShutdownException throwable !is ConnectionShutdownException
) { ) {
instance?.analyticsManager?.logException(throwable) 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.android.habitica.models.user.User
import com.habitrpg.common.habitica.views.AvatarView import com.habitrpg.common.habitica.views.AvatarView
import com.habitrpg.android.habitica.ui.activities.BaseActivity 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
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.rxjava3.core.Flowable 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.Stats
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.activities.BaseActivity 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
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
import io.reactivex.rxjava3.core.Flowable 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.android.habitica.models.Tag
import com.habitrpg.common.habitica.helpers.MarkdownParser import com.habitrpg.common.habitica.helpers.MarkdownParser
import com.habitrpg.common.habitica.models.tasks.Attribute 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.Frequency
import com.habitrpg.common.habitica.models.tasks.TaskType import com.habitrpg.common.habitica.models.tasks.TaskType
import io.realm.RealmList import io.realm.RealmList
@ -28,7 +29,7 @@ import java.util.Calendar
import java.util.Date import java.util.Date
import java.util.GregorianCalendar import java.util.GregorianCalendar
open class Task : RealmObject, BaseMainObject, Parcelable { open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask {
override val realmClass: Class<Task> override val realmClass: Class<Task>
get() = Task::class.java get() = Task::class.java
override val primaryIdentifier: String? override val primaryIdentifier: String?
@ -43,7 +44,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
var priority: Float = 0.0f var priority: Float = 0.0f
var text: String = "" var text: String = ""
var notes: String? = null var notes: String? = null
var type: TaskType? override var type: TaskType?
get() = TaskType.from(typeValue) get() = TaskType.from(typeValue)
set(value) { typeValue = value?.value } set(value) { typeValue = value?.value }
private var typeValue: String? = null private var typeValue: String? = null
@ -61,10 +62,10 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
// Habits // Habits
var up: Boolean? = false var up: Boolean? = false
var down: Boolean? = false var down: Boolean? = false
var counterUp: Int? = 0 override var counterUp: Int? = 0
var counterDown: Int? = 0 override var counterDown: Int? = 0
// todos/dailies // todos/dailies
var completed: Boolean = false override var completed: Boolean = false
var checklist: RealmList<ChecklistItem>? = RealmList() var checklist: RealmList<ChecklistItem>? = RealmList()
var reminders: RealmList<RemindersItem>? = RealmList() var reminders: RealmList<RemindersItem>? = RealmList()
// dailies // dailies
@ -73,7 +74,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
set(value) { frequencyValue = value?.value } set(value) { frequencyValue = value?.value }
var frequencyValue: String? = null var frequencyValue: String? = null
var everyX: Int? = 0 var everyX: Int? = 0
var streak: Int? = 0 override var streak: Int? = 0
var startDate: Date? = null var startDate: Date? = null
var repeat: Days? = null var repeat: Days? = null
// todos // todos
@ -86,7 +87,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
@Ignore @Ignore
var parsedNotes: Spanned? = null var parsedNotes: Spanned? = null
var isDue: Boolean? = null override var isDue: Boolean? = null
var nextDue: RealmList<Date>? = 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 val isChecklistDisplayActive: Boolean
get() = this.checklist?.size != this.completedChecklistCount 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.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import com.habitrpg.android.habitica.BuildConfig;
import com.habitrpg.android.habitica.data.TaskRepository; import com.habitrpg.android.habitica.data.TaskRepository;
import com.habitrpg.android.habitica.data.UserRepository; import com.habitrpg.android.habitica.data.UserRepository;
import com.habitrpg.android.habitica.helpers.TaskAlarmManager; import com.habitrpg.android.habitica.helpers.TaskAlarmManager;
@ -28,7 +29,11 @@ public class UserModule {
@Named(NAMED_USER_ID) @Named(NAMED_USER_ID)
@UserScope @UserScope
public String providesUserID(SharedPreferences sharedPreferences) { 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 @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.MainActivity
import com.habitrpg.android.habitica.ui.activities.TaskFormActivity import com.habitrpg.android.habitica.ui.activities.TaskFormActivity
import com.habitrpg.common.habitica.api.HostConfig import com.habitrpg.common.habitica.api.HostConfig
import com.habitrpg.common.habitica.helpers.DeviceCommunication
import javax.inject.Inject import javax.inject.Inject
class DeviceCommunicationService : WearableListenerService() { class DeviceCommunicationService : WearableListenerService() {
@ -24,16 +25,19 @@ class DeviceCommunicationService : WearableListenerService() {
override fun onMessageReceived(event: MessageEvent) { override fun onMessageReceived(event: MessageEvent) {
super.onMessageReceived(event) super.onMessageReceived(event)
when (event.path) { when (event.path) {
"/request/auth" -> processAuthRequest(event) DeviceCommunication.REQUEST_AUTH -> processAuthRequest(event)
"/show/register" -> openActivity(LoginActivity::class.java) DeviceCommunication.SHOW_REGISTER -> openActivity(event, LoginActivity::class.java)
"/show/rya" -> openActivity(MainActivity::class.java) DeviceCommunication.SHOW_LOGIN -> openActivity(event, LoginActivity::class.java)
"/tasks/edit" -> openTaskForm(event) 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) val intent = Intent(this, activityClass)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent) startActivity(intent)
messageClient.sendMessage(event.sourceNodeId, "/action_completed", null)
} }
private fun openTaskForm(event: MessageEvent) { private fun openTaskForm(event: MessageEvent) {
@ -41,7 +45,9 @@ class DeviceCommunicationService : WearableListenerService() {
val startIntent = Intent(this, TaskFormActivity::class.java).apply { val startIntent = Intent(this, TaskFormActivity::class.java).apply {
putExtra(TaskFormActivity.TASK_ID_KEY, taskID) 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) { 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.android.habitica.helpers.TaskAlarmManager
import com.habitrpg.shared.habitica.HLogger import com.habitrpg.shared.habitica.HLogger
import com.habitrpg.shared.habitica.LogLevel import com.habitrpg.shared.habitica.LogLevel
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
@ -19,9 +20,12 @@ class TaskAlarmBootReceiver : BroadcastReceiver() {
@Inject @Inject
lateinit var sharedPreferences: SharedPreferences 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) HabiticaBaseApplication.userComponent?.inject(this)
GlobalScope.launch { MainScope().launch(Dispatchers.Main) {
taskAlarmManager.scheduleAllSavedAlarms(sharedPreferences.getBoolean("preventDailyReminder", false)) taskAlarmManager.scheduleAllSavedAlarms(sharedPreferences.getBoolean("preventDailyReminder", false))
} }
HLogger.log(LogLevel.INFO, this::javaClass.name, "onReceive") HLogger.log(LogLevel.INFO, this::javaClass.name, "onReceive")

View file

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

View file

@ -10,7 +10,7 @@ import android.widget.TextView
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.common.habitica.extensions.loadImage 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.common.habitica.views.PixelArtView
class ItemDetailDialog(context: Context) : AlertDialog(context) { 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.extensions.observeOnce
import com.habitrpg.android.habitica.helpers.AdHandler import com.habitrpg.android.habitica.helpers.AdHandler
import com.habitrpg.android.habitica.helpers.AdType 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.AppConfigManager
import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.common.habitica.extensions.loadImage 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.ads.AdButton
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaBottomSheetDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaBottomSheetDialog
import com.plattysoft.leonids.ParticleSystem import com.plattysoft.leonids.ParticleSystem
import kotlinx.coroutines.launch
import java.util.Locale import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@ -156,10 +155,8 @@ class ArmoireActivity : BaseActivity() {
binding.titleView.alpha = 0f binding.titleView.alpha = 0f
binding.subtitleView.alpha = 0f binding.subtitleView.alpha = 0f
lifecycleScope.launch { binding.iconWrapper.post {
if (binding.iconWrapper.isAttachedToWindow) { Animations.circularReveal(binding.iconWrapper, 300)
Animations.circularReveal(binding.iconWrapper, 300)
}
} }
binding.leftSparkView.startAnimating() 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.models.user.User
import com.habitrpg.android.habitica.ui.adapter.social.challenges.ChallengeTasksRecyclerViewAdapter 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.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.MainUserViewModel
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel 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.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
import io.reactivex.rxjava3.core.Flowable 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.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog 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 io.reactivex.rxjava3.functions.Consumer
import javax.inject.Inject 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.extensions.observeOnce
import com.habitrpg.android.habitica.helpers.AdHandler import com.habitrpg.android.habitica.helpers.AdHandler
import com.habitrpg.android.habitica.helpers.AdType 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.AppConfigManager
import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.ads.AdButton 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 com.plattysoft.leonids.ParticleSystem
import javax.inject.Inject import javax.inject.Inject
@ -105,7 +105,7 @@ class DeathActivity: BaseActivity() {
.setSpeedRange(0.01f, 0.03f) .setSpeedRange(0.01f, 0.03f)
.setFadeOut(4000, AccelerateInterpolator()) .setFadeOut(4000, AccelerateInterpolator())
.setSpeedModuleAndAngleRange(0.01f, 0.03f, startAngle, startAngle+80) .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.extensions.setTintWith
import com.habitrpg.android.habitica.models.user.Stats import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.modules.AppModule import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
import javax.inject.Inject 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.models.members.Member
import com.habitrpg.android.habitica.ui.fragments.purchases.GiftBalanceGemsFragment import com.habitrpg.android.habitica.ui.fragments.purchases.GiftBalanceGemsFragment
import com.habitrpg.android.habitica.ui.fragments.purchases.GiftPurchaseGemsFragment 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 import javax.inject.Inject
class GiftGemsActivity : PurchaseActivity() { 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.OnChangeTextWatcher
import com.habitrpg.android.habitica.extensions.runDelayed import com.habitrpg.android.habitica.extensions.runDelayed
import com.habitrpg.android.habitica.helpers.RxErrorHandler 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 com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import io.reactivex.rxjava3.core.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable 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.CustomizationSet
import com.habitrpg.android.habitica.models.inventory.Equipment import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.common.habitica.extensions.loadImage 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.common.habitica.views.PixelArtView
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import io.reactivex.rxjava3.core.BackpressureStrategy import io.reactivex.rxjava3.core.BackpressureStrategy
@ -126,7 +126,8 @@ class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.R
equipment?.value ?: 0 equipment?.value ?: 0
}.toString() }.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) val dialog = HabiticaAlertDialog(itemView.context)
dialog.addButton(R.string.purchase_button, true) { _, _ -> 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.Skill
import com.habitrpg.android.habitica.models.user.OwnedItem import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.common.habitica.extensions.loadImage 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.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject 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.models.inventory.Equipment
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.common.habitica.extensions.loadImage 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 import io.reactivex.rxjava3.subjects.PublishSubject
class EquipmentRecyclerViewAdapter : BaseRecyclerViewAdapter<Equipment, EquipmentRecyclerViewAdapter.GearViewHolder>() { 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.R
import com.habitrpg.android.habitica.extensions.inflate import com.habitrpg.android.habitica.extensions.inflate
import com.habitrpg.android.habitica.models.user.Stats 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) { 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.R
import com.habitrpg.android.habitica.databinding.CanHatchItemBinding import com.habitrpg.android.habitica.databinding.CanHatchItemBinding
import com.habitrpg.android.habitica.extensions.inflate 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.Animal
import com.habitrpg.android.habitica.models.inventory.Egg import com.habitrpg.android.habitica.models.inventory.Egg
import com.habitrpg.android.habitica.models.inventory.Food 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.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeFilterOptions import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeFilterOptions
import com.habitrpg.common.habitica.helpers.EmojiParser 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.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.subjects.PublishSubject 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.models.social.Group
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.common.habitica.helpers.EmojiParser 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.Case
import io.realm.OrderedRealmCollection import io.realm.OrderedRealmCollection
import java.util.Locale 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.components.UserComponent
import com.habitrpg.android.habitica.data.TaskRepository import com.habitrpg.android.habitica.data.TaskRepository
import com.habitrpg.android.habitica.models.tasks.Task 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.proxy.AnalyticsManager
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
import com.habitrpg.common.habitica.models.tasks.TaskType
import javax.inject.Inject import javax.inject.Inject
abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>( abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(
@ -60,13 +60,13 @@ abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(
if (taskType != task.type) if (taskType != task.type)
return return
var i = 0 var i = 0
while (i < this.content?.size ?: 0) { while (i < (this.content?.size ?: 0)) {
if (content?.get(i)?.id == task.id) { if (content?.get(i)?.id == task.id) {
break break
} }
++i ++i
} }
if (i < content?.size ?: 0) { if (i < (content?.size ?: 0)) {
content?.set(i, task) content?.set(i, task)
} }
filter() 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.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel 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.BackpressureStrategy
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.functions.Action import io.reactivex.rxjava3.functions.Action
@ -35,11 +35,7 @@ abstract class RealmBaseTasksRecyclerViewAdapter(
set(value) { set(value) {
if (field == value) return if (field == value) return
field = value field = value
if (value) { notifyDataSetChanged()
notifyItemInserted(0)
} else {
notifyItemRemoved(0)
}
} }
override var user: User? = null override var user: User? = null
set(value) { 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.Stats
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel 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.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.stats.BulkAllocateStatsDialog import com.habitrpg.android.habitica.ui.views.stats.BulkAllocateStatsDialog
import javax.inject.Inject import javax.inject.Inject

View file

@ -28,7 +28,7 @@ abstract class BasePreferencesFragment : PreferenceFragmentCompat() {
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
userViewModel.user.observe(viewLifecycleOwner) { user = it } userViewModel.user.observe(viewLifecycleOwner) { setUser(it) }
return super.onCreateView(inflater, container, savedInstanceState) 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.data.ContentRepository
import com.habitrpg.android.habitica.extensions.addCancelButton import com.habitrpg.android.habitica.extensions.addCancelButton
import com.habitrpg.android.habitica.helpers.AppConfigManager 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.RxErrorHandler
import com.habitrpg.android.habitica.helpers.SoundManager import com.habitrpg.android.habitica.helpers.SoundManager
import com.habitrpg.android.habitica.helpers.TaskAlarmManager 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.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.SnackbarActivity import com.habitrpg.android.habitica.ui.views.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog 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 java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@ -294,7 +294,7 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
override fun setUser(user: User?) { override fun setUser(user: User?) {
super.setUser(user) super.setUser(user)
if (10 <= user?.stats?.lvl ?: 0) { if (10 <= (user?.stats?.lvl ?: 0)) {
if (user?.flags?.classSelected == true) { if (user?.flags?.classSelected == true) {
if (user.preferences?.disableClasses == true) { if (user.preferences?.disableClasses == true) {
classSelectionPreference?.title = getString(R.string.enable_class) 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.activities.SetupActivity
import com.habitrpg.android.habitica.ui.adapter.setup.TaskSetupAdapter import com.habitrpg.android.habitica.ui.adapter.setup.TaskSetupAdapter
import com.habitrpg.android.habitica.ui.fragments.BaseFragment 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 import java.util.Date
class TaskSetupFragment : BaseFragment<FragmentSetupTasksBinding>() { 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.OnChangeTextWatcher
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
import com.habitrpg.android.habitica.ui.fragments.BaseFragment 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.core.BackpressureStrategy
import io.reactivex.rxjava3.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import java.util.concurrent.TimeUnit 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.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel 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
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar
import io.reactivex.rxjava3.core.Flowable 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.helpers.dismissKeyboard
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel 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.HabiticaAlertDialog
import com.habitrpg.common.habitica.views.UsernameLabel import com.habitrpg.android.habitica.ui.views.UsernameLabel
import javax.inject.Inject import javax.inject.Inject
class InboxOverviewFragment : BaseMainFragment<FragmentInboxBinding>(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener, View.OnClickListener { 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.viewmodels.MainUserViewModel
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.common.habitica.models.PlayerTier 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 import javax.inject.Inject
class TavernDetailFragment : BaseFragment<FragmentTavernDetailBinding>() { 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.EmojiParser
import com.habitrpg.common.habitica.helpers.setMarkdown import com.habitrpg.common.habitica.helpers.setMarkdown
import com.habitrpg.common.habitica.models.tasks.TaskType 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 retrofit2.HttpException
import javax.inject.Inject 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.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.common.habitica.helpers.setMarkdown import com.habitrpg.common.habitica.helpers.setMarkdown
import com.habitrpg.android.habitica.ui.viewmodels.GroupViewModel import com.habitrpg.android.habitica.ui.viewmodels.GroupViewModel
import com.habitrpg.common.habitica.views.HabiticaIcons import com.habitrpg.android.habitica.ui.views.HabiticaIcons
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.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import kotlinx.coroutines.Dispatchers 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.helpers.RxErrorHandler
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.common.habitica.helpers.setMarkdown 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 io.reactivex.rxjava3.functions.Consumer
import javax.inject.Inject import javax.inject.Inject
@ -45,13 +45,20 @@ class FAQOverviewFragment : BaseMainFragment<FragmentFaqOverviewBinding>() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
binding?.healthSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfHeartLarge()) binding?.healthSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
binding?.experienceSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfExperienceReward()) HabiticaIconsHelper.imageOfHeartLarge())
binding?.manaSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfMagicLarge()) binding?.experienceSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
binding?.goldSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfGoldReward()) HabiticaIconsHelper.imageOfExperienceReward())
binding?.gemsSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfGem()) binding?.manaSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
binding?.hourglassesSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfHourglassLarge()) HabiticaIconsHelper.imageOfMagicLarge())
binding?.statsSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfStats()) 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?.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")) } 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.helpers.RxErrorHandler
import com.habitrpg.android.habitica.modules.AppModule import com.habitrpg.android.habitica.modules.AppModule
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Named import javax.inject.Named
@ -59,7 +60,7 @@ class SupportMainFragment : BaseMainFragment<FragmentSupportMainBinding>() {
binding?.resetTutorialButton?.setOnClickListener { binding?.resetTutorialButton?.setOnClickListener {
userRepository.resetTutorial().subscribe({ 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()) }, 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.TaskRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.adapter.tasks.TodosRecyclerViewAdapter import com.habitrpg.android.habitica.ui.adapter.tasks.TodosRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.fragments.BaseFragment 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.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel 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.HabiticaSnackbar
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog 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.TaskDirection
import com.habitrpg.common.habitica.models.responses.TaskScoringResult import com.habitrpg.common.habitica.models.responses.TaskScoringResult
import com.habitrpg.common.habitica.models.tasks.TaskType 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.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.disposables.CompositeDisposable
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@ -102,6 +102,9 @@ open class TaskRecyclerViewFragment : BaseFragment<FragmentRefreshRecyclerviewBi
recyclerSubscription.dispose() recyclerSubscription.dispose()
} }
recyclerSubscription = CompositeDisposable() recyclerSubscription = CompositeDisposable()
if (viewModel == null && parentFragment is TasksFragment) {
viewModel = (parentFragment as TasksFragment).viewModel
}
viewModel?.let { viewModel -> viewModel?.let { viewModel ->
val adapter: BaseRecyclerViewAdapter<*, *>? = when (this.taskType) { val adapter: BaseRecyclerViewAdapter<*, *>? = when (this.taskType) {
TaskType.HABIT -> HabitsRecyclerViewAdapter(R.layout.habit_item_card, viewModel) TaskType.HABIT -> HabitsRecyclerViewAdapter(R.layout.habit_item_card, viewModel)
@ -201,6 +204,7 @@ open class TaskRecyclerViewFragment : BaseFragment<FragmentRefreshRecyclerviewBi
component.inject(this) component.inject(this)
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
savedInstanceState?.let { this.taskType = TaskType.from(savedInstanceState.getString(CLASS_TYPE_KEY, "")) ?: TaskType.HABIT } 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.social.FindUsernameResult
import com.habitrpg.android.habitica.models.user.Authentication import com.habitrpg.android.habitica.models.user.Authentication
import com.habitrpg.android.habitica.models.user.Profile 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.EmojiMap
import com.habitrpg.common.habitica.helpers.EmojiParser import com.habitrpg.common.habitica.helpers.EmojiParser
import java.util.Date 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.extensions.dpToPx
import com.habitrpg.common.habitica.helpers.MarkdownParser import com.habitrpg.common.habitica.helpers.MarkdownParser
import com.habitrpg.common.habitica.helpers.setParsedMarkdown 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.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Maybe import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.schedulers.Schedulers 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.databinding.PartyMemberBinding
import com.habitrpg.android.habitica.models.members.Member import com.habitrpg.android.habitica.models.members.Member
import com.habitrpg.android.habitica.models.user.Stats 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 { class GroupMemberViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView), PopupMenu.OnMenuItemClickListener {
private val binding = PartyMemberBinding.bind(itemView) 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.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.android.habitica.models.shops.ShopItem import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.common.habitica.extensions.loadImage 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 import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener { 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.functions.Action
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
abstract class BaseTaskViewHolder constructor( abstract class BaseTaskViewHolder constructor(
@ -36,6 +36,7 @@ abstract class BaseTaskViewHolder constructor(
var openTaskFunc: ((Pair<Task, View>) -> Unit), var openTaskFunc: ((Pair<Task, View>) -> Unit),
var brokenTaskFunc: ((Task) -> Unit) var brokenTaskFunc: ((Task) -> Unit)
) : BindableViewHolder<Task>(itemView), View.OnTouchListener { ) : BindableViewHolder<Task>(itemView), View.OnTouchListener {
private val scope = MainScope()
var task: Task? = null var task: Task? = null
var movingFromPosition: Int? = null var movingFromPosition: Int? = null
var errorButtonClicked: Action? = null var errorButtonClicked: Action? = null
@ -108,7 +109,7 @@ abstract class BaseTaskViewHolder constructor(
} }
notesTextView?.addEllipsesListener(object : EllipsisTextView.EllipsisListener { notesTextView?.addEllipsesListener(object : EllipsisTextView.EllipsisListener {
override fun ellipsisStateChanged(ellipses: Boolean) { override fun ellipsisStateChanged(ellipses: Boolean) {
GlobalScope.launch(Dispatchers.Main.immediate) { scope.launch(Dispatchers.Main.immediate) {
if (ellipses && notesTextView.maxLines != 3) { if (ellipses && notesTextView.maxLines != 3) {
notesTextView.maxLines = 3 notesTextView.maxLines = 3
} }
@ -209,7 +210,7 @@ abstract class BaseTaskViewHolder constructor(
titleTextView.setTextColor(ContextCompat.getColor(context, R.color.text_primary)) titleTextView.setTextColor(ContextCompat.getColor(context, R.color.text_primary))
if (displayMode == "standard") { 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 iconViewChallenge?.visibility = if (task?.challengeID != null) View.VISIBLE else View.GONE
if (task?.challengeID != null) { 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.common.habitica.models.responses.TaskDirection
import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.models.tasks.Task
import com.habitrpg.android.habitica.ui.ItemDetailDialog import com.habitrpg.android.habitica.ui.ItemDetailDialog
import com.habitrpg.common.habitica.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
class RewardViewHolder( class RewardViewHolder(
itemView: View, itemView: View,

View file

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

View file

@ -13,7 +13,6 @@ import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.ViewCollapsibleSectionBinding import com.habitrpg.android.habitica.databinding.ViewCollapsibleSectionBinding
import com.habitrpg.common.habitica.extensions.getThemeColor import com.habitrpg.common.habitica.extensions.getThemeColor
import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
class CollapsibleSectionView(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) { class CollapsibleSectionView(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) {
val infoIconView: ImageView 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.animation.ValueAnimator
import android.content.Context import android.content.Context
@ -13,8 +13,8 @@ import androidx.core.animation.doOnEnd
import androidx.core.animation.doOnStart import androidx.core.animation.doOnStart
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.common.habitica.R import com.habitrpg.common.habitica.R
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.common.habitica.helpers.NumberAbbreviator import com.habitrpg.common.habitica.helpers.NumberAbbreviator
class CurrencyView : androidx.appcompat.widget.AppCompatTextView { class CurrencyView : androidx.appcompat.widget.AppCompatTextView {
@ -69,21 +69,21 @@ class CurrencyView : androidx.appcompat.widget.AppCompatTextView {
private fun configureCurrency() { private fun configureCurrency() {
if ("gold" == currency) { if ("gold" == currency) {
icon = HabiticaIconsHelper.imageOfGold() icon = com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper.imageOfGold()
if (lightBackground) { if (lightBackground) {
setTextColor(ContextCompat.getColor(context, R.color.yellow_1)) setTextColor(ContextCompat.getColor(context, R.color.yellow_1))
} else { } else {
setTextColor(ContextCompat.getColor(context, R.color.yellow_100)) setTextColor(ContextCompat.getColor(context, R.color.yellow_100))
} }
} else if ("gems" == currency) { } else if ("gems" == currency) {
icon = HabiticaIconsHelper.imageOfGem() icon = com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper.imageOfGem()
if (lightBackground) { if (lightBackground) {
setTextColor(ContextCompat.getColor(context, R.color.green_10)) setTextColor(ContextCompat.getColor(context, R.color.green_10))
} else { } else {
setTextColor(ContextCompat.getColor(context, R.color.green_50)) setTextColor(ContextCompat.getColor(context, R.color.green_50))
} }
} else if ("hourglasses" == currency) { } else if ("hourglasses" == currency) {
icon = HabiticaIconsHelper.imageOfHourglass() icon = com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper.imageOfHourglass()
if (lightBackground) { if (lightBackground) {
setTextColor(ContextCompat.getColor(context, R.color.brand_300)) setTextColor(ContextCompat.getColor(context, R.color.brand_300))
} else { } else {

View file

@ -6,7 +6,6 @@ import android.util.TypedValue
import android.widget.LinearLayout import android.widget.LinearLayout
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.common.habitica.views.CurrencyView
class CurrencyViews : LinearLayout { class CurrencyViews : LinearLayout {
var lightBackground: Boolean = false 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.content.Context;
import android.graphics.Bitmap; 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.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
@ -8,8 +8,6 @@ import android.graphics.RectF;
import androidx.annotation.ColorInt; import androidx.annotation.ColorInt;
import com.habitrpg.common.habitica.views.HabiticaIcons;
/** /**
* Created by phillip on 05.09.17. * 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.content.Context
import android.util.AttributeSet import android.util.AttributeSet
@ -44,7 +44,7 @@ class UsernameLabel @JvmOverloads constructor(
tierIconView.visibility = View.GONE tierIconView.visibility = View.GONE
} else { } else {
tierIconView.visibility = View.VISIBLE 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.QuestContent
import com.habitrpg.android.habitica.models.inventory.QuestDropItem import com.habitrpg.android.habitica.models.inventory.QuestDropItem
import com.habitrpg.common.habitica.extensions.loadImage 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.common.habitica.views.PixelArtView
class QuestCompletedDialogContent : LinearLayout { 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.android.habitica.databinding.EquipmentOverviewItemBinding
import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.common.habitica.extensions.loadImage 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( class EquipmentOverviewItem @JvmOverloads constructor(
context: Context, context: Context,

View file

@ -6,7 +6,7 @@ import androidx.core.os.bundleOf
import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.extensions.addCloseButton import com.habitrpg.android.habitica.extensions.addCloseButton
import com.habitrpg.android.habitica.helpers.MainNavigationController 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) { class InsufficientHourglassesDialog(context: Context) : InsufficientCurrencyDialog(context) {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {

View file

@ -8,7 +8,7 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import androidx.appcompat.widget.AppCompatImageView import androidx.appcompat.widget.AppCompatImageView
import com.habitrpg.common.habitica.views.HabiticaIconsHelper import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
class StarView : AppCompatImageView { 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.OwnedItem
import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.activities.ArmoireActivityDirections 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.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.SnackbarActivity
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog
@ -44,6 +44,7 @@ import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -308,7 +309,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
if (shopItem.isValid && !shopItem.locked) { if (shopItem.isValid && !shopItem.locked) {
val gemsLeft = if (shopItem.limitedNumberLeft != null) shopItem.limitedNumberLeft else 0 val gemsLeft = if (shopItem.limitedNumberLeft != null) shopItem.limitedNumberLeft else 0
if ((gemsLeft == 0 && shopItem.purchaseType == "gems") || shopItem.canAfford(user, purchaseQuantity)) { if ((gemsLeft == 0 && shopItem.purchaseType == "gems") || shopItem.canAfford(user, purchaseQuantity)) {
GlobalScope.launch { MainScope().launch(Dispatchers.Main) {
remainingPurchaseQuantity { quantity -> remainingPurchaseQuantity { quantity ->
if (quantity >= 0) { if (quantity >= 0) {
if (quantity < purchaseQuantity) { 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.android.habitica.extensions.asDrawable
import com.habitrpg.common.habitica.extensions.layoutInflater import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.shops.ShopItem 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 import com.habitrpg.common.habitica.views.PixelArtView
internal class PurchaseDialogGemsContent(context: Context) : PurchaseDialogContent(context) { internal class PurchaseDialogGemsContent(context: Context) : PurchaseDialogContent(context) {

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