mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 19:56:32 +00:00
Merge branch 'main' into hafiz/sign-in-fixes
This commit is contained in:
commit
cc4e79690e
464 changed files with 2177 additions and 1329 deletions
3
.github/prepare-workflow
vendored
3
.github/prepare-workflow
vendored
|
|
@ -1,4 +1,5 @@
|
|||
chmod +x gradlew
|
||||
cp habitica.properties.example habitica.properties
|
||||
cp habitica.resources.example habitica.resources
|
||||
cp Habitica/google-services.json.example Habitica/google-services.json
|
||||
cp Habitica/google-services.json.example Habitica/google-services.json
|
||||
cp Habitica/google-services.json.example wearos/google-services.json
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ plugins {
|
|||
|
||||
id 'com.google.gms.google-services'
|
||||
id 'com.google.firebase.crashlytics'
|
||||
id 'realm-android'
|
||||
id 'androidx.navigation.safeargs'
|
||||
id 'com.google.firebase.firebase-perf'
|
||||
}
|
||||
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: "realm-android"
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
|
|
@ -26,7 +26,7 @@ configurations {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
implementation fileTree(include: ['*.jar'], dir: '../common/libs')
|
||||
//Networking
|
||||
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
|
||||
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version"
|
||||
|
|
@ -78,7 +78,7 @@ dependencies {
|
|||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
||||
androidTestImplementation 'androidx.test:runner:1.4.0'
|
||||
androidTestImplementation 'androidx.test:rules:1.4.0'
|
||||
debugImplementation 'androidx.fragment:fragment-testing:1.4.1'
|
||||
debugImplementation 'androidx.fragment:fragment-testing:1.5.0'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
||||
androidTestImplementation 'androidx.test:core-ktx:1.4.0'
|
||||
androidTestImplementation 'androidx.test.ext:junit-ktx:1.1.3'
|
||||
|
|
@ -108,15 +108,13 @@ dependencies {
|
|||
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
|
||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
|
||||
implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
|
||||
implementation "androidx.fragment:fragment-ktx:1.4.1"
|
||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.0'
|
||||
implementation 'androidx.navigation:navigation-ui-ktx:2.5.0'
|
||||
implementation "androidx.fragment:fragment-ktx:1.5.0"
|
||||
implementation "androidx.paging:paging-runtime-ktx:3.1.1"
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
|
||||
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6'
|
||||
|
||||
implementation 'com.willowtreeapps:signinwithapplebutton:0.3'
|
||||
|
||||
implementation project(':shared')
|
||||
|
|
@ -129,7 +127,6 @@ dependencies {
|
|||
}
|
||||
androidTestImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
|
||||
}
|
||||
|
||||
android {
|
||||
|
|
@ -150,9 +147,6 @@ android {
|
|||
buildConfigField "String", "TESTING_LEVEL", "\"production\""
|
||||
resConfigs 'en', 'bg', 'de', 'en-rGB', 'es', 'fr', 'hr-rHR', 'in', 'it', 'iw', 'ja', 'ko', 'lt', 'nl', 'pl', 'pt-rBR', 'pt-rPT', 'ru', 'tr', 'zh', 'zh-rTW'
|
||||
|
||||
println app_version_code
|
||||
println app_version_name
|
||||
|
||||
versionCode app_version_code
|
||||
versionName app_version_name
|
||||
|
||||
|
|
@ -160,6 +154,9 @@ android {
|
|||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
testInstrumentationRunnerArguments clearPackageData: 'true'
|
||||
|
||||
def formattedDate = new Date().format('yyMMdd')
|
||||
archivesBaseName = "Habitica-${formattedDate}${versionCode}"
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
|
|
@ -215,6 +212,13 @@ android {
|
|||
dimension "buildType"
|
||||
buildConfigField "String", "TESTING_LEVEL", "\"staff\""
|
||||
resValue "string", "app_name", "Habitica Staff"
|
||||
versionCode app_version_code + 8
|
||||
}
|
||||
|
||||
partners {
|
||||
dimension "buildType"
|
||||
buildConfigField "String", "TESTING_LEVEL", "\"partners\""
|
||||
resValue "string", "app_name", "Habitica"
|
||||
versionCode app_version_code + 6
|
||||
}
|
||||
|
||||
|
|
@ -260,9 +264,6 @@ android {
|
|||
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
|
||||
// Flag to enable support for the new language APIs
|
||||
coreLibraryDesugaringEnabled true
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
|
|
|
|||
29
Habitica/proguard-rules.pro
vendored
29
Habitica/proguard-rules.pro
vendored
|
|
@ -97,21 +97,6 @@
|
|||
-keepclassmembers class * {
|
||||
native <methods>;
|
||||
}
|
||||
# Keep our interfaces so they can be used by other ProGuard rules.
|
||||
# See http://sourceforge.net/p/proguard/bugs/466/
|
||||
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
|
||||
|
||||
# Do not strip any method/class that is annotated with @DoNotStrip
|
||||
-keep @com.facebook.common.internal.DoNotStrip class *
|
||||
-keepclassmembers class * {
|
||||
@com.facebook.common.internal.DoNotStrip *;
|
||||
}
|
||||
|
||||
# Keep native methods
|
||||
-keepclassmembers class * {
|
||||
native <methods>;
|
||||
}
|
||||
#end fresko
|
||||
|
||||
#amplitude
|
||||
-keep class com.google.android.gms.ads.** { *; }
|
||||
|
|
@ -138,20 +123,6 @@
|
|||
-dontwarn com.google.android.gms.**
|
||||
#end playservices
|
||||
|
||||
#checkout
|
||||
-keep class com.android.vending.billing.**
|
||||
|
||||
-assumenosideeffects class org.solovyev.android.checkout.Billing {
|
||||
public static void debug(...);
|
||||
public static void warning(...);
|
||||
public static void error(...);
|
||||
}
|
||||
|
||||
-assumenosideeffects class org.solovyev.android.checkout.Check {
|
||||
static *;
|
||||
}
|
||||
#end chekout
|
||||
|
||||
#add warnings here, warnings in proguard is normal
|
||||
-dontwarn javax.annotation.**
|
||||
-dontwarn com.squareup.picasso.**
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
android:src="@drawable/adventure_guide_art" />
|
||||
|
||||
<TextView
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center_horizontal">
|
||||
<com.habitrpg.common.habitica.views.CurrencyView
|
||||
<com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||
android:id="@+id/gold_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="30dp"
|
||||
|
|
@ -85,6 +85,7 @@
|
|||
tools:text="+21 Experience"
|
||||
android:textStyle="bold"
|
||||
android:textSize="28sp"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/text_primary"/>
|
||||
<TextView
|
||||
android:id="@+id/subtitle_view"
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@
|
|||
android:layout_height="43dp"
|
||||
android:textColor="@color/white"
|
||||
android:gravity="center"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:background="@drawable/layout_rounded_bg_yellow_10"
|
||||
tools:text="Becoma a Healer"/>
|
||||
</LinearLayout>
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@
|
|||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/joined"
|
||||
style="@style/Subheader1"/>
|
||||
style="@style/SubHeader1"/>
|
||||
<TextView
|
||||
android:id="@+id/joined_view"
|
||||
android:layout_width="wrap_content"
|
||||
|
|
@ -120,7 +120,7 @@
|
|||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/last_login"
|
||||
style="@style/Subheader1"/>
|
||||
style="@style/SubHeader1"/>
|
||||
<TextView
|
||||
android:id="@+id/last_login_view"
|
||||
android:layout_width="wrap_content"
|
||||
|
|
@ -136,7 +136,7 @@
|
|||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/total_checkins"
|
||||
style="@style/Subheader1"/>
|
||||
style="@style/SubHeader1"/>
|
||||
<TextView
|
||||
android:id="@+id/total_checkins_view"
|
||||
android:layout_width="wrap_content"
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
app:showMount="false"
|
||||
app:showSleeping="false"
|
||||
android:layout_gravity="center_horizontal"/>
|
||||
<com.habitrpg.common.habitica.views.UsernameLabel
|
||||
<com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
android:id="@+id/display_name_text_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:textStyle="bold"
|
||||
android:textSize="16sp" />
|
||||
<com.habitrpg.common.habitica.views.CurrencyView
|
||||
<com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||
android:id="@+id/currency_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/text_primary"
|
||||
android:text="@string/armoire_rate_equipment_title"
|
||||
style="@style/Subheader1" />
|
||||
style="@style/SubHeader1" />
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/text_primary"
|
||||
android:text="@string/armoire_rate_food_title"
|
||||
style="@style/Subheader1" />
|
||||
style="@style/SubHeader1" />
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
@ -49,7 +49,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/text_primary"
|
||||
android:text="@string/armoire_rate_experience_title"
|
||||
style="@style/Subheader1" />
|
||||
style="@style/SubHeader1" />
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
android:paddingBottom="@dimen/spacing_medium"
|
||||
android:paddingStart="@dimen/spacing_large"
|
||||
android:paddingEnd="@dimen/spacing_large">
|
||||
<com.habitrpg.common.habitica.views.UsernameLabel
|
||||
<com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
android:id="@+id/display_name_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<com.habitrpg.common.habitica.views.UsernameLabel
|
||||
<com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
android:id="@+id/user_label"
|
||||
style="@style/ChatMessageUserTextViewStyle"
|
||||
android:layout_width="wrap_content"
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="@drawable/layout_rounded_bg_shopitem_price">
|
||||
<com.habitrpg.common.habitica.views.CurrencyView
|
||||
<com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||
android:id="@+id/price_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="32dp"
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:background="@drawable/layout_rounded_bg_shopitem_price">
|
||||
<com.habitrpg.common.habitica.views.CurrencyView
|
||||
<com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||
android:id="@+id/price_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="32dp"
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
android:textColor="@color/text_primary"
|
||||
style="@style/Body1"
|
||||
android:layout_marginEnd="@dimen/spacing_medium"/>
|
||||
<com.habitrpg.common.habitica.views.CurrencyView
|
||||
<com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||
android:id="@+id/set_price_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="60dp"
|
||||
android:background="@drawable/button_background_primary"
|
||||
android:gravity="center">
|
||||
android:gravity="center"
|
||||
android:padding="6dp">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
@ -15,8 +17,9 @@
|
|||
android:textColor="@color/white"
|
||||
android:layout_marginEnd="6dp"
|
||||
/>
|
||||
<com.habitrpg.common.habitica.views.CurrencyView
|
||||
<com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||
android:id="@+id/currencyView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
android:layout_height="wrap_content"
|
||||
app:fontFamily="sans-serif-medium"/>
|
||||
</LinearLayout>
|
||||
|
|
@ -33,7 +33,7 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
tools:text="4 Gems"
|
||||
android:gravity="center"/>
|
||||
<Button
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/levelup_title_10"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:gravity="center_horizontal"
|
||||
android:textColor="@color/text_primary"
|
||||
android:layout_marginBottom="@dimen/spacing_medium"/>
|
||||
|
|
|
|||
|
|
@ -52,12 +52,14 @@
|
|||
android:id="@+id/shimmer_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:shimmer_repeat_delay="8000">
|
||||
app:shimmer_repeat_delay="8000"
|
||||
app:shimmer_base_color="@color/text_dimmed"
|
||||
app:shimmer_highlight_color="@color/content_background"
|
||||
app:shimmer_highlight_alpha="0.8">
|
||||
<com.habitrpg.common.habitica.views.PixelArtView
|
||||
android:id="@+id/pet_view"
|
||||
android:layout_width="@dimen/gear_image_size"
|
||||
android:layout_height="@dimen/gear_image_size"
|
||||
android:alpha="0.1"
|
||||
android:layout_gravity="center" />
|
||||
</com.facebook.shimmer.ShimmerFrameLayout>
|
||||
</FrameLayout>
|
||||
|
|
|
|||
|
|
@ -14,13 +14,13 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:text="@string/reward_dialog_buy"
|
||||
android:textColor="@color/brand_300"
|
||||
style="@style/Subheader1" />
|
||||
<com.habitrpg.common.habitica.views.CurrencyView
|
||||
style="@style/SubHeader1" />
|
||||
<com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||
android:id="@+id/priceLabel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="10"
|
||||
tools:textColor="@color/green_10"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:layout_marginStart="12dp"/>
|
||||
</LinearLayout>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
android:layout_marginBottom="@dimen/spacing_large">
|
||||
|
||||
<TextView
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/filters"
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:layout_weight="1">
|
||||
<com.habitrpg.common.habitica.views.UsernameLabel
|
||||
<com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
android:id="@+id/creator_label"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
app:showMount="false"
|
||||
app:showSleeping="false"
|
||||
android:layout_gravity="center_horizontal"/>
|
||||
<com.habitrpg.common.habitica.views.UsernameLabel
|
||||
<com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
android:id="@+id/display_name_textview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
app:showMount="false"
|
||||
app:showSleeping="false"
|
||||
android:layout_gravity="center_horizontal"/>
|
||||
<com.habitrpg.common.habitica.views.UsernameLabel
|
||||
<com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
android:id="@+id/display_name_textview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center_vertical">
|
||||
<com.habitrpg.common.habitica.views.UsernameLabel
|
||||
<com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
android:id="@+id/leader_profile_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:text="@string/pms_disabled"
|
||||
android:gravity="center"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:textColor="@color/text_primary"
|
||||
android:layout_marginBottom="4dp"/>
|
||||
<TextView
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
android:id="@+id/promo_banner_duration_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Subheader1"/>
|
||||
style="@style/SubHeader1"/>
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
|
@ -91,7 +91,7 @@
|
|||
android:id="@+id/prompt_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="38dp"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:gravity="center" />
|
||||
|
||||
<TextView
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:textColor="@color/white"
|
||||
android:layout_marginStart="84dp"
|
||||
android:layout_marginEnd="84dp"
|
||||
|
|
@ -111,7 +111,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:text="@string/subscribe_prompt"
|
||||
android:gravity="center"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
app:dayTextColor="@color/text_brand"
|
||||
app:nightTextColor="@color/gray_400"
|
||||
android:lineSpacingExtra="4dp"
|
||||
|
|
@ -316,7 +316,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:gravity="center_horizontal"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:textColor="@color/text_brand"
|
||||
android:text="@string/subscribe_options_title"
|
||||
android:layout_marginBottom="20dp"/>
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@
|
|||
android:textColor="@color/white"
|
||||
android:elevation="4dp"
|
||||
android:textAllCaps="false"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
|
|
@ -110,7 +110,7 @@
|
|||
android:textColor="@color/white"
|
||||
android:elevation="4dp"
|
||||
android:textAllCaps="false"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
|
|
@ -159,7 +159,7 @@
|
|||
android:background="@drawable/support_info_lower_bg"
|
||||
android:elevation="4dp"
|
||||
android:textColor="@color/white"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<com.habitrpg.common.habitica.views.UsernameLabel
|
||||
<com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
android:id="@+id/display_name_textview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
<TextView
|
||||
android:id="@+id/nameTextView"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
|
|
|
|||
|
|
@ -19,5 +19,5 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
style="@style/Subheader1"/>
|
||||
style="@style/SubHeader1"/>
|
||||
</LinearLayout>
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
tools:text="Title"
|
||||
android:gravity="center"
|
||||
style="@style/Subheader1"/>
|
||||
style="@style/SubHeader1"/>
|
||||
<com.habitrpg.common.habitica.views.PixelArtView
|
||||
android:id="@+id/icon_view"
|
||||
android:layout_width="@dimen/shopitem_image_size"
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
style="@style/BottomMenuItemText"
|
||||
tools:text="Menu Item"/>
|
||||
<com.habitrpg.common.habitica.views.CurrencyView
|
||||
<com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||
android:id="@+id/currency_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<com.habitrpg.common.habitica.views.UsernameLabel
|
||||
<com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
android:id="@+id/display_name_textview"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="0dp"
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@
|
|||
android:background="@drawable/purchase_button_background"
|
||||
android:textColor="@color/brand_400"
|
||||
android:gravity="center"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:letterSpacing="0.02"
|
||||
android:layout_marginStart="@dimen/spacing_medium"
|
||||
android:layout_marginEnd="@dimen/spacing_medium"
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
android:minHeight="40dp"
|
||||
android:gravity="center"
|
||||
android:background="@drawable/layout_rounded_bg_shopitem_price">
|
||||
<com.habitrpg.common.habitica.views.CurrencyView
|
||||
<com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||
android:id="@+id/priceLabel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Spell Name"
|
||||
style="@style/Subheader1"/>
|
||||
style="@style/SubHeader1"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/skill_notes"
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
<com.habitrpg.android.habitica.ui.views.Typewriter
|
||||
android:id="@+id/textView"
|
||||
style="@style/Subheader1"
|
||||
style="@style/SubHeader1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="@string/welcome_text" />
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
android:textColor="@color/gray_300"
|
||||
android:textSize="12sp" />
|
||||
|
||||
<com.habitrpg.common.habitica.views.UsernameLabel
|
||||
<com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
android:id="@+id/display_name_textview"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="24dp"
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
</style>
|
||||
|
||||
<!-- Subheader -->
|
||||
<style name="Subheader1">
|
||||
<style name="SubHeader1">
|
||||
<item name="android:fontFamily">@string/font_family_medium</item>
|
||||
<item name="android:textSize">16sp</item>
|
||||
<item name="android:textColor">?textColorSecondary</item>
|
||||
|
|
|
|||
|
|
@ -3,5 +3,6 @@
|
|||
tools:keep="@array/android_wear_capabilities">
|
||||
<string-array name="android_wear_capabilities">
|
||||
<item>edit_task</item>
|
||||
<item>open_activity</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
|
@ -20,6 +20,7 @@ import androidx.core.content.edit
|
|||
import androidx.preference.PreferenceManager
|
||||
import com.amplitude.api.Amplitude
|
||||
import com.amplitude.api.Identify
|
||||
import com.google.android.gms.wearable.Wearable
|
||||
import com.google.firebase.analytics.FirebaseAnalytics
|
||||
import com.google.firebase.installations.FirebaseInstallations
|
||||
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
||||
|
|
@ -35,10 +36,10 @@ import com.habitrpg.android.habitica.modules.UserRepositoryModule
|
|||
import com.habitrpg.android.habitica.proxy.AnalyticsManager
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.android.habitica.ui.activities.LoginActivity
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.common.habitica.extensions.setupCoil
|
||||
import com.habitrpg.common.habitica.helpers.LanguageHelper
|
||||
import com.habitrpg.common.habitica.helpers.MarkdownParser
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmConfiguration
|
||||
import java.lang.ref.WeakReference
|
||||
|
|
@ -272,6 +273,7 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
|
|||
}
|
||||
reloadUserComponent()
|
||||
getInstance(context)?.lazyApiHelper?.updateAuthenticationCredentials(null, null)
|
||||
Wearable.getCapabilityClient(context).removeLocalCapability("provide_auth")
|
||||
startActivity(LoginActivity::class.java, context)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ class RxErrorHandler {
|
|||
!HttpException::class.java.isAssignableFrom(throwable.javaClass) &&
|
||||
!retrofit2.HttpException::class.java.isAssignableFrom(throwable.javaClass) &&
|
||||
!EOFException::class.java.isAssignableFrom(throwable.javaClass) &&
|
||||
!retrofit2.adapter.rxjava3.HttpException::class.java.isAssignableFrom(throwable.javaClass) &&
|
||||
throwable !is ConnectionShutdownException
|
||||
) {
|
||||
instance?.analyticsManager?.logException(throwable)
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import com.habitrpg.android.habitica.models.user.Stats
|
|||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.common.habitica.views.AvatarView
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import com.habitrpg.android.habitica.extensions.round
|
|||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import com.habitrpg.android.habitica.models.BaseMainObject
|
|||
import com.habitrpg.android.habitica.models.Tag
|
||||
import com.habitrpg.common.habitica.helpers.MarkdownParser
|
||||
import com.habitrpg.common.habitica.models.tasks.Attribute
|
||||
import com.habitrpg.common.habitica.models.tasks.BaseTask
|
||||
import com.habitrpg.common.habitica.models.tasks.Frequency
|
||||
import com.habitrpg.common.habitica.models.tasks.TaskType
|
||||
import io.realm.RealmList
|
||||
|
|
@ -28,7 +29,7 @@ import java.util.Calendar
|
|||
import java.util.Date
|
||||
import java.util.GregorianCalendar
|
||||
|
||||
open class Task : RealmObject, BaseMainObject, Parcelable {
|
||||
open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask {
|
||||
override val realmClass: Class<Task>
|
||||
get() = Task::class.java
|
||||
override val primaryIdentifier: String?
|
||||
|
|
@ -43,7 +44,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
|
|||
var priority: Float = 0.0f
|
||||
var text: String = ""
|
||||
var notes: String? = null
|
||||
var type: TaskType?
|
||||
override var type: TaskType?
|
||||
get() = TaskType.from(typeValue)
|
||||
set(value) { typeValue = value?.value }
|
||||
private var typeValue: String? = null
|
||||
|
|
@ -61,10 +62,10 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
|
|||
// Habits
|
||||
var up: Boolean? = false
|
||||
var down: Boolean? = false
|
||||
var counterUp: Int? = 0
|
||||
var counterDown: Int? = 0
|
||||
override var counterUp: Int? = 0
|
||||
override var counterDown: Int? = 0
|
||||
// todos/dailies
|
||||
var completed: Boolean = false
|
||||
override var completed: Boolean = false
|
||||
var checklist: RealmList<ChecklistItem>? = RealmList()
|
||||
var reminders: RealmList<RemindersItem>? = RealmList()
|
||||
// dailies
|
||||
|
|
@ -73,7 +74,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
|
|||
set(value) { frequencyValue = value?.value }
|
||||
var frequencyValue: String? = null
|
||||
var everyX: Int? = 0
|
||||
var streak: Int? = 0
|
||||
override var streak: Int? = 0
|
||||
var startDate: Date? = null
|
||||
var repeat: Days? = null
|
||||
// todos
|
||||
|
|
@ -86,7 +87,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
|
|||
@Ignore
|
||||
var parsedNotes: Spanned? = null
|
||||
|
||||
var isDue: Boolean? = null
|
||||
override var isDue: Boolean? = null
|
||||
|
||||
var nextDue: RealmList<Date>? = null
|
||||
|
||||
|
|
@ -188,9 +189,6 @@ open class Task : RealmObject, BaseMainObject, Parcelable {
|
|||
}
|
||||
}
|
||||
|
||||
val isDisplayedActive: Boolean
|
||||
get() = ((isDue == true && type == TaskType.DAILY) || type == TaskType.TODO) && !completed
|
||||
|
||||
val isChecklistDisplayActive: Boolean
|
||||
get() = this.checklist?.size != this.completedChecklistCount
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.habitrpg.android.habitica.modules;
|
|||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import com.habitrpg.android.habitica.BuildConfig;
|
||||
import com.habitrpg.android.habitica.data.TaskRepository;
|
||||
import com.habitrpg.android.habitica.data.UserRepository;
|
||||
import com.habitrpg.android.habitica.helpers.TaskAlarmManager;
|
||||
|
|
@ -28,7 +29,11 @@ public class UserModule {
|
|||
@Named(NAMED_USER_ID)
|
||||
@UserScope
|
||||
public String providesUserID(SharedPreferences sharedPreferences) {
|
||||
return sharedPreferences.getString("UserID", "");
|
||||
if (BuildConfig.DEBUG && !BuildConfig.TEST_USER_ID.isEmpty()) {
|
||||
return BuildConfig.TEST_USER_ID;
|
||||
} else {
|
||||
return sharedPreferences.getString("UserID", "");
|
||||
}
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import com.habitrpg.android.habitica.ui.activities.LoginActivity
|
|||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||
import com.habitrpg.android.habitica.ui.activities.TaskFormActivity
|
||||
import com.habitrpg.common.habitica.api.HostConfig
|
||||
import com.habitrpg.common.habitica.helpers.DeviceCommunication
|
||||
import javax.inject.Inject
|
||||
|
||||
class DeviceCommunicationService : WearableListenerService() {
|
||||
|
|
@ -24,16 +25,19 @@ class DeviceCommunicationService : WearableListenerService() {
|
|||
override fun onMessageReceived(event: MessageEvent) {
|
||||
super.onMessageReceived(event)
|
||||
when (event.path) {
|
||||
"/request/auth" -> processAuthRequest(event)
|
||||
"/show/register" -> openActivity(LoginActivity::class.java)
|
||||
"/show/rya" -> openActivity(MainActivity::class.java)
|
||||
"/tasks/edit" -> openTaskForm(event)
|
||||
DeviceCommunication.REQUEST_AUTH -> processAuthRequest(event)
|
||||
DeviceCommunication.SHOW_REGISTER -> openActivity(event, LoginActivity::class.java)
|
||||
DeviceCommunication.SHOW_LOGIN -> openActivity(event, LoginActivity::class.java)
|
||||
DeviceCommunication.SHOW_RYA -> openActivity(event, MainActivity::class.java)
|
||||
DeviceCommunication.SHOW_TASK_EDIT -> openTaskForm(event)
|
||||
}
|
||||
}
|
||||
|
||||
private fun openActivity(activityClass: Class<*>) {
|
||||
private fun openActivity(event: MessageEvent, activityClass: Class<*>) {
|
||||
val intent = Intent(this, activityClass)
|
||||
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
startActivity(intent)
|
||||
messageClient.sendMessage(event.sourceNodeId, "/action_completed", null)
|
||||
}
|
||||
|
||||
private fun openTaskForm(event: MessageEvent) {
|
||||
|
|
@ -41,7 +45,9 @@ class DeviceCommunicationService : WearableListenerService() {
|
|||
val startIntent = Intent(this, TaskFormActivity::class.java).apply {
|
||||
putExtra(TaskFormActivity.TASK_ID_KEY, taskID)
|
||||
}
|
||||
startActivity(startIntent)
|
||||
startIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
startActivity(startIntent)
|
||||
messageClient.sendMessage(event.sourceNodeId, "/action_completed", null)
|
||||
}
|
||||
|
||||
private fun processAuthRequest(event: MessageEvent) {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@ import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|||
import com.habitrpg.android.habitica.helpers.TaskAlarmManager
|
||||
import com.habitrpg.shared.habitica.HLogger
|
||||
import com.habitrpg.shared.habitica.LogLevel
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -19,9 +20,12 @@ class TaskAlarmBootReceiver : BroadcastReceiver() {
|
|||
@Inject
|
||||
lateinit var sharedPreferences: SharedPreferences
|
||||
|
||||
override fun onReceive(context: Context, arg1: Intent) {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
if (intent.action != Intent.ACTION_BOOT_COMPLETED) {
|
||||
return
|
||||
}
|
||||
HabiticaBaseApplication.userComponent?.inject(this)
|
||||
GlobalScope.launch {
|
||||
MainScope().launch(Dispatchers.Main) {
|
||||
taskAlarmManager.scheduleAllSavedAlarms(sharedPreferences.getBoolean("preventDailyReminder", false))
|
||||
}
|
||||
HLogger.log(LogLevel.INFO, this::javaClass.name, "onReceive")
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import androidx.core.os.bundleOf
|
|||
import androidx.lifecycle.ViewModel
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.databinding.AvatarWithBarsBinding
|
||||
import com.habitrpg.android.habitica.helpers.Animations
|
||||
import com.habitrpg.common.habitica.helpers.Animations
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
|
|
@ -18,7 +18,7 @@ import com.habitrpg.android.habitica.ui.activities.mainActivityCreatedAt
|
|||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.common.habitica.helpers.HealthFormatter
|
||||
import com.habitrpg.common.habitica.models.Avatar
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import kotlin.math.floor
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import android.widget.TextView
|
|||
import androidx.appcompat.app.AlertDialog
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.common.habitica.views.PixelArtView
|
||||
|
||||
class ItemDetailDialog(context: Context) : AlertDialog(context) {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import com.habitrpg.common.habitica.extensions.dpToPx
|
|||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.helpers.AdHandler
|
||||
import com.habitrpg.android.habitica.helpers.AdType
|
||||
import com.habitrpg.android.habitica.helpers.Animations
|
||||
import com.habitrpg.common.habitica.helpers.Animations
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
|
|
@ -26,7 +26,6 @@ import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
|||
import com.habitrpg.android.habitica.ui.views.ads.AdButton
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaBottomSheetDialog
|
||||
import com.plattysoft.leonids.ParticleSystem
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.Locale
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -156,10 +155,8 @@ class ArmoireActivity : BaseActivity() {
|
|||
binding.titleView.alpha = 0f
|
||||
binding.subtitleView.alpha = 0f
|
||||
|
||||
lifecycleScope.launch {
|
||||
if (binding.iconWrapper.isAttachedToWindow) {
|
||||
Animations.circularReveal(binding.iconWrapper, 300)
|
||||
}
|
||||
binding.iconWrapper.post {
|
||||
Animations.circularReveal(binding.iconWrapper, 300)
|
||||
}
|
||||
|
||||
binding.leftSparkView.startAnimating()
|
||||
|
|
|
|||
|
|
@ -34,10 +34,9 @@ import com.habitrpg.common.habitica.models.tasks.TaskType
|
|||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.adapter.social.challenges.ChallengeTasksRecyclerViewAdapter
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengesOverviewFragmentDirections
|
||||
import com.habitrpg.android.habitica.ui.helpers.ToolbarColorHelper
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import com.habitrpg.android.habitica.models.user.User
|
|||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.rxjava3.functions.Consumer
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
|
|||
|
|
@ -14,12 +14,12 @@ import com.habitrpg.android.habitica.extensions.fromHtml
|
|||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.helpers.AdHandler
|
||||
import com.habitrpg.android.habitica.helpers.AdType
|
||||
import com.habitrpg.android.habitica.helpers.Animations
|
||||
import com.habitrpg.common.habitica.helpers.Animations
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.ads.AdButton
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.plattysoft.leonids.ParticleSystem
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -105,7 +105,7 @@ class DeathActivity: BaseActivity() {
|
|||
.setSpeedRange(0.01f, 0.03f)
|
||||
.setFadeOut(4000, AccelerateInterpolator())
|
||||
.setSpeedModuleAndAngleRange(0.01f, 0.03f, startAngle, startAngle+80)
|
||||
.emit(550, 680, 3, 6000)
|
||||
.emit(550, 690, 3, 6000)
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,9 +13,7 @@ import com.habitrpg.android.habitica.databinding.ActivityFixcharacterBinding
|
|||
import com.habitrpg.android.habitica.extensions.setTintWith
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.modules.AppModule
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
|
||||
import javax.inject.Inject
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
|||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.ui.fragments.purchases.GiftBalanceGemsFragment
|
||||
import com.habitrpg.android.habitica.ui.fragments.purchases.GiftPurchaseGemsFragment
|
||||
import com.habitrpg.common.habitica.views.CurrencyView
|
||||
import com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||
import javax.inject.Inject
|
||||
|
||||
class GiftGemsActivity : PurchaseActivity() {
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import com.habitrpg.android.habitica.databinding.ActivityVerifyUsernameBinding
|
|||
import com.habitrpg.android.habitica.extensions.OnChangeTextWatcher
|
||||
import com.habitrpg.android.habitica.extensions.runDelayed
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import com.habitrpg.android.habitica.helpers.MainNavigationController
|
|||
import com.habitrpg.android.habitica.models.inventory.CustomizationSet
|
||||
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.common.habitica.views.PixelArtView
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
|
|
@ -126,7 +126,8 @@ class CustomizationEquipmentRecyclerViewAdapter : androidx.recyclerview.widget.R
|
|||
equipment?.value ?: 0
|
||||
}.toString()
|
||||
|
||||
(dialogContent.findViewById<View>(R.id.gem_icon) as? ImageView)?.setImageBitmap(HabiticaIconsHelper.imageOfGem())
|
||||
(dialogContent.findViewById<View>(R.id.gem_icon) as? ImageView)?.setImageBitmap(
|
||||
HabiticaIconsHelper.imageOfGem())
|
||||
|
||||
val dialog = HabiticaAlertDialog(itemView.context)
|
||||
dialog.addButton(R.string.purchase_button, true) { _, _ ->
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
|
|||
import com.habitrpg.android.habitica.models.Skill
|
||||
import com.habitrpg.android.habitica.models.user.OwnedItem
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.databinding.GearListItemBinding
|
|||
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
|
||||
class EquipmentRecyclerViewAdapter : BaseRecyclerViewAdapter<Equipment, EquipmentRecyclerViewAdapter.GearViewHolder>() {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import androidx.core.content.ContextCompat
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
|
||||
class HabiticaClassArrayAdapter(context: Context, resource: Int, objects: List<CharSequence>) : ArrayAdapter<CharSequence>(context, resource, R.id.textView, objects) {
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import android.view.ViewGroup
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.databinding.CanHatchItemBinding
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.helpers.Animations
|
||||
import com.habitrpg.common.habitica.helpers.Animations
|
||||
import com.habitrpg.android.habitica.models.inventory.Animal
|
||||
import com.habitrpg.android.habitica.models.inventory.Egg
|
||||
import com.habitrpg.android.habitica.models.inventory.Food
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import com.habitrpg.android.habitica.models.social.ChallengeMembership
|
|||
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
|
||||
import com.habitrpg.android.habitica.ui.fragments.social.challenges.ChallengeFilterOptions
|
||||
import com.habitrpg.common.habitica.helpers.EmojiParser
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import com.habitrpg.common.habitica.helpers.NumberAbbreviator
|
|||
import com.habitrpg.android.habitica.models.social.Group
|
||||
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
|
||||
import com.habitrpg.common.habitica.helpers.EmojiParser
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.realm.Case
|
||||
import io.realm.OrderedRealmCollection
|
||||
import java.util.Locale
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@ import com.habitrpg.android.habitica.HabiticaBaseApplication
|
|||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.TaskRepository
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.common.habitica.models.tasks.TaskType
|
||||
import com.habitrpg.android.habitica.proxy.AnalyticsManager
|
||||
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.BindableViewHolder
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
|
||||
import com.habitrpg.common.habitica.models.tasks.TaskType
|
||||
import javax.inject.Inject
|
||||
|
||||
abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(
|
||||
|
|
@ -60,13 +60,13 @@ abstract class BaseTasksRecyclerViewAdapter<VH : BindableViewHolder<Task>>(
|
|||
if (taskType != task.type)
|
||||
return
|
||||
var i = 0
|
||||
while (i < this.content?.size ?: 0) {
|
||||
while (i < (this.content?.size ?: 0)) {
|
||||
if (content?.get(i)?.id == task.id) {
|
||||
break
|
||||
}
|
||||
++i
|
||||
}
|
||||
if (i < content?.size ?: 0) {
|
||||
if (i < (content?.size ?: 0)) {
|
||||
content?.set(i, task)
|
||||
}
|
||||
filter()
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import com.habitrpg.android.habitica.models.user.User
|
|||
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.functions.Action
|
||||
|
|
@ -35,11 +35,7 @@ abstract class RealmBaseTasksRecyclerViewAdapter(
|
|||
set(value) {
|
||||
if (field == value) return
|
||||
field = value
|
||||
if (value) {
|
||||
notifyItemInserted(0)
|
||||
} else {
|
||||
notifyItemRemoved(0)
|
||||
}
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
override var user: User? = null
|
||||
set(value) {
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import com.habitrpg.common.habitica.models.tasks.Attribute
|
|||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.android.habitica.ui.views.stats.BulkAllocateStatsDialog
|
||||
import javax.inject.Inject
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ abstract class BasePreferencesFragment : PreferenceFragmentCompat() {
|
|||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
userViewModel.user.observe(viewLifecycleOwner) { user = it }
|
||||
userViewModel.user.observe(viewLifecycleOwner) { setUser(it) }
|
||||
return super.onCreateView(inflater, container, savedInstanceState)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,6 @@ import com.habitrpg.android.habitica.data.ApiClient
|
|||
import com.habitrpg.android.habitica.data.ContentRepository
|
||||
import com.habitrpg.android.habitica.extensions.addCancelButton
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.common.habitica.helpers.AppTestingLevel
|
||||
import com.habitrpg.common.habitica.helpers.LanguageHelper
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.helpers.SoundManager
|
||||
import com.habitrpg.android.habitica.helpers.TaskAlarmManager
|
||||
|
|
@ -32,6 +30,8 @@ import com.habitrpg.android.habitica.ui.activities.PrefsActivity
|
|||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.helpers.AppTestingLevel
|
||||
import com.habitrpg.common.habitica.helpers.LanguageHelper
|
||||
import java.util.Locale
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -294,7 +294,7 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
|
|||
|
||||
override fun setUser(user: User?) {
|
||||
super.setUser(user)
|
||||
if (10 <= user?.stats?.lvl ?: 0) {
|
||||
if (10 <= (user?.stats?.lvl ?: 0)) {
|
||||
if (user?.flags?.classSelected == true) {
|
||||
if (user.preferences?.disableClasses == true) {
|
||||
classSelectionPreference?.title = getString(R.string.enable_class)
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import com.habitrpg.android.habitica.models.user.User
|
|||
import com.habitrpg.android.habitica.ui.activities.SetupActivity
|
||||
import com.habitrpg.android.habitica.ui.adapter.setup.TaskSetupAdapter
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import java.util.Date
|
||||
|
||||
class TaskSetupFragment : BaseFragment<FragmentSetupTasksBinding>() {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import com.habitrpg.android.habitica.databinding.FragmentWelcomeBinding
|
|||
import com.habitrpg.android.habitica.extensions.OnChangeTextWatcher
|
||||
import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.subjects.PublishSubject
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import com.habitrpg.android.habitica.ui.adapter.SkillsRecyclerViewAdapter
|
|||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.Companion.showSnackbar
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
|||
import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.views.UsernameLabel
|
||||
import com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
import javax.inject.Inject
|
||||
|
||||
class InboxOverviewFragment : BaseMainFragment<FragmentInboxBinding>(), androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener, View.OnClickListener {
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
|||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.models.PlayerTier
|
||||
import com.habitrpg.common.habitica.views.UsernameLabel
|
||||
import com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
import javax.inject.Inject
|
||||
|
||||
class TavernDetailFragment : BaseFragment<FragmentTavernDetailBinding>() {
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
|||
import com.habitrpg.common.habitica.helpers.EmojiParser
|
||||
import com.habitrpg.common.habitica.helpers.setMarkdown
|
||||
import com.habitrpg.common.habitica.models.tasks.TaskType
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import retrofit2.HttpException
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@ import com.habitrpg.android.habitica.ui.activities.MainActivity
|
|||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.common.habitica.helpers.setMarkdown
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.GroupViewModel
|
||||
import com.habitrpg.common.habitica.views.HabiticaIcons
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIcons
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import com.habitrpg.android.habitica.helpers.MainNavigationController
|
|||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||
import com.habitrpg.common.habitica.helpers.setMarkdown
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.rxjava3.functions.Consumer
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -45,13 +45,20 @@ class FAQOverviewFragment : BaseMainFragment<FragmentFaqOverviewBinding>() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
binding?.healthSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfHeartLarge())
|
||||
binding?.experienceSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfExperienceReward())
|
||||
binding?.manaSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfMagicLarge())
|
||||
binding?.goldSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfGoldReward())
|
||||
binding?.gemsSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfGem())
|
||||
binding?.hourglassesSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfHourglassLarge())
|
||||
binding?.statsSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(HabiticaIconsHelper.imageOfStats())
|
||||
binding?.healthSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
|
||||
HabiticaIconsHelper.imageOfHeartLarge())
|
||||
binding?.experienceSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
|
||||
HabiticaIconsHelper.imageOfExperienceReward())
|
||||
binding?.manaSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
|
||||
HabiticaIconsHelper.imageOfMagicLarge())
|
||||
binding?.goldSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
|
||||
HabiticaIconsHelper.imageOfGoldReward())
|
||||
binding?.gemsSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
|
||||
HabiticaIconsHelper.imageOfGem())
|
||||
binding?.hourglassesSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
|
||||
HabiticaIconsHelper.imageOfHourglassLarge())
|
||||
binding?.statsSection?.findViewById<ImageView>(R.id.icon_view)?.setImageBitmap(
|
||||
HabiticaIconsHelper.imageOfStats())
|
||||
|
||||
binding?.moreHelpTextView?.setMarkdown(context?.getString(R.string.need_help_header_description, "[Habitica Help Guild](https://habitica.com/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a)"))
|
||||
binding?.moreHelpTextView?.setOnClickListener { MainNavigationController.navigate(R.id.guildFragment, bundleOf("groupID" to "5481ccf3-5d2d-48a9-a871-70a7380cee5a")) }
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import com.habitrpg.android.habitica.helpers.MainNavigationController
|
|||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.modules.AppModule
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Named
|
||||
|
||||
|
|
@ -59,7 +60,7 @@ class SupportMainFragment : BaseMainFragment<FragmentSupportMainBinding>() {
|
|||
|
||||
binding?.resetTutorialButton?.setOnClickListener {
|
||||
userRepository.resetTutorial().subscribe({
|
||||
activity?.showSnackbar(null, getString(R.string.tutorial_reset_confirmation))
|
||||
activity?.showSnackbar(null, null, getString(R.string.tutorial_reset_confirmation), displayType = HabiticaSnackbar.SnackbarDisplayType.SUCCESS)
|
||||
}, RxErrorHandler.handleEmptyError())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,16 +38,16 @@ import com.habitrpg.android.habitica.ui.adapter.tasks.RewardsRecyclerViewAdapter
|
|||
import com.habitrpg.android.habitica.ui.adapter.tasks.TaskRecyclerViewAdapter
|
||||
import com.habitrpg.android.habitica.ui.adapter.tasks.TodosRecyclerViewAdapter
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
|
||||
import com.habitrpg.common.habitica.helpers.EmptyItem
|
||||
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
|
||||
import com.habitrpg.android.habitica.ui.viewHolders.tasks.BaseTaskViewHolder
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.TasksViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.helpers.EmptyItem
|
||||
import com.habitrpg.common.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.common.habitica.models.responses.TaskScoringResult
|
||||
import com.habitrpg.common.habitica.models.tasks.TaskType
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||
import kotlinx.coroutines.Job
|
||||
|
|
@ -102,6 +102,9 @@ open class TaskRecyclerViewFragment : BaseFragment<FragmentRefreshRecyclerviewBi
|
|||
recyclerSubscription.dispose()
|
||||
}
|
||||
recyclerSubscription = CompositeDisposable()
|
||||
if (viewModel == null && parentFragment is TasksFragment) {
|
||||
viewModel = (parentFragment as TasksFragment).viewModel
|
||||
}
|
||||
viewModel?.let { viewModel ->
|
||||
val adapter: BaseRecyclerViewAdapter<*, *>? = when (this.taskType) {
|
||||
TaskType.HABIT -> HabitsRecyclerViewAdapter(R.layout.habit_item_card, viewModel)
|
||||
|
|
@ -201,6 +204,7 @@ open class TaskRecyclerViewFragment : BaseFragment<FragmentRefreshRecyclerviewBi
|
|||
component.inject(this)
|
||||
}
|
||||
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
savedInstanceState?.let { this.taskType = TaskType.from(savedInstanceState.getString(CLASS_TYPE_KEY, "")) ?: TaskType.HABIT }
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import com.habitrpg.android.habitica.models.social.ChatMessage
|
|||
import com.habitrpg.android.habitica.models.social.FindUsernameResult
|
||||
import com.habitrpg.android.habitica.models.user.Authentication
|
||||
import com.habitrpg.android.habitica.models.user.Profile
|
||||
import com.habitrpg.common.habitica.views.UsernameLabel
|
||||
import com.habitrpg.android.habitica.ui.views.UsernameLabel
|
||||
import com.habitrpg.common.habitica.helpers.EmojiMap
|
||||
import com.habitrpg.common.habitica.helpers.EmojiParser
|
||||
import java.util.Date
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import com.habitrpg.common.habitica.extensions.DataBindingUtils
|
|||
import com.habitrpg.common.habitica.extensions.dpToPx
|
||||
import com.habitrpg.common.habitica.helpers.MarkdownParser
|
||||
import com.habitrpg.common.habitica.helpers.setParsedMarkdown
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.core.Maybe
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.databinding.PartyMemberBinding
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
|
||||
class GroupMemberViewHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView), PopupMenu.OnMenuItemClickListener {
|
||||
private val binding = PartyMemberBinding.bind(itemView)
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import com.habitrpg.common.habitica.extensions.dpToPx
|
|||
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
|
||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
|
||||
|
||||
class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import io.reactivex.rxjava3.core.Single
|
|||
import io.reactivex.rxjava3.functions.Action
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
abstract class BaseTaskViewHolder constructor(
|
||||
|
|
@ -36,6 +36,7 @@ abstract class BaseTaskViewHolder constructor(
|
|||
var openTaskFunc: ((Pair<Task, View>) -> Unit),
|
||||
var brokenTaskFunc: ((Task) -> Unit)
|
||||
) : BindableViewHolder<Task>(itemView), View.OnTouchListener {
|
||||
private val scope = MainScope()
|
||||
var task: Task? = null
|
||||
var movingFromPosition: Int? = null
|
||||
var errorButtonClicked: Action? = null
|
||||
|
|
@ -108,7 +109,7 @@ abstract class BaseTaskViewHolder constructor(
|
|||
}
|
||||
notesTextView?.addEllipsesListener(object : EllipsisTextView.EllipsisListener {
|
||||
override fun ellipsisStateChanged(ellipses: Boolean) {
|
||||
GlobalScope.launch(Dispatchers.Main.immediate) {
|
||||
scope.launch(Dispatchers.Main.immediate) {
|
||||
if (ellipses && notesTextView.maxLines != 3) {
|
||||
notesTextView.maxLines = 3
|
||||
}
|
||||
|
|
@ -209,7 +210,7 @@ abstract class BaseTaskViewHolder constructor(
|
|||
titleTextView.setTextColor(ContextCompat.getColor(context, R.color.text_primary))
|
||||
|
||||
if (displayMode == "standard") {
|
||||
iconViewReminder?.visibility = if (data.reminders?.size ?: 0 > 0) View.VISIBLE else View.GONE
|
||||
iconViewReminder?.visibility = if ((data.reminders?.size ?: 0) > 0) View.VISIBLE else View.GONE
|
||||
|
||||
iconViewChallenge?.visibility = if (task?.challengeID != null) View.VISIBLE else View.GONE
|
||||
if (task?.challengeID != null) {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import com.habitrpg.common.habitica.helpers.NumberAbbreviator
|
|||
import com.habitrpg.common.habitica.models.responses.TaskDirection
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.ui.ItemDetailDialog
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
|
||||
class RewardViewHolder(
|
||||
itemView: View,
|
||||
|
|
|
|||
|
|
@ -10,21 +10,21 @@ import androidx.paging.PositionalDataSource
|
|||
import androidx.paging.toLiveData
|
||||
import com.habitrpg.android.habitica.components.UserComponent
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.common.habitica.extensions.Optional
|
||||
import com.habitrpg.common.habitica.extensions.asOptional
|
||||
import com.habitrpg.android.habitica.extensions.filterOptionalDoOnEmpty
|
||||
import com.habitrpg.android.habitica.helpers.RxErrorHandler
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||
import com.habitrpg.common.habitica.extensions.Optional
|
||||
import com.habitrpg.common.habitica.extensions.asOptional
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.core.BackpressureStrategy
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.subjects.BehaviorSubject
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
import kotlin.math.ceil
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class InboxViewModel(recipientID: String?, recipientUsername: String?) : BaseViewModel() {
|
||||
@Inject
|
||||
|
|
@ -101,7 +101,7 @@ class MessagesDataSource(
|
|||
callback.onResult(emptyList())
|
||||
return
|
||||
}
|
||||
GlobalScope.launch(Dispatchers.Main.immediate) {
|
||||
MainScope().launch(Dispatchers.Main.immediate) {
|
||||
if (recipientID?.isNotBlank() != true) { return@launch }
|
||||
val page = ceil(params.startPosition.toFloat() / params.loadSize.toFloat()).toInt()
|
||||
socialRepository.retrieveInboxMessages(recipientID ?: "", page)
|
||||
|
|
@ -120,7 +120,7 @@ class MessagesDataSource(
|
|||
|
||||
override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<ChatMessage>) {
|
||||
lastFetchWasEnd = false
|
||||
GlobalScope.launch(Dispatchers.Main.immediate) {
|
||||
MainScope().launch(Dispatchers.Main.immediate) {
|
||||
socialRepository.getInboxMessages(recipientID)
|
||||
.map { socialRepository.getUnmanagedCopy(it) }
|
||||
.firstElement()
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.databinding.ViewCollapsibleSectionBinding
|
||||
import com.habitrpg.common.habitica.extensions.getThemeColor
|
||||
import com.habitrpg.common.habitica.extensions.layoutInflater
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
|
||||
class CollapsibleSectionView(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) {
|
||||
val infoIconView: ImageView
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package com.habitrpg.common.habitica.views
|
||||
package com.habitrpg.android.habitica.ui.views
|
||||
|
||||
import android.animation.ValueAnimator
|
||||
import android.content.Context
|
||||
|
|
@ -13,8 +13,8 @@ import androidx.core.animation.doOnEnd
|
|||
import androidx.core.animation.doOnStart
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
|
||||
import com.habitrpg.common.habitica.R
|
||||
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
|
||||
import com.habitrpg.common.habitica.helpers.NumberAbbreviator
|
||||
|
||||
class CurrencyView : androidx.appcompat.widget.AppCompatTextView {
|
||||
|
|
@ -69,21 +69,21 @@ class CurrencyView : androidx.appcompat.widget.AppCompatTextView {
|
|||
|
||||
private fun configureCurrency() {
|
||||
if ("gold" == currency) {
|
||||
icon = HabiticaIconsHelper.imageOfGold()
|
||||
icon = com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper.imageOfGold()
|
||||
if (lightBackground) {
|
||||
setTextColor(ContextCompat.getColor(context, R.color.yellow_1))
|
||||
} else {
|
||||
setTextColor(ContextCompat.getColor(context, R.color.yellow_100))
|
||||
}
|
||||
} else if ("gems" == currency) {
|
||||
icon = HabiticaIconsHelper.imageOfGem()
|
||||
icon = com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper.imageOfGem()
|
||||
if (lightBackground) {
|
||||
setTextColor(ContextCompat.getColor(context, R.color.green_10))
|
||||
} else {
|
||||
setTextColor(ContextCompat.getColor(context, R.color.green_50))
|
||||
}
|
||||
} else if ("hourglasses" == currency) {
|
||||
icon = HabiticaIconsHelper.imageOfHourglass()
|
||||
icon = com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper.imageOfHourglass()
|
||||
if (lightBackground) {
|
||||
setTextColor(ContextCompat.getColor(context, R.color.brand_300))
|
||||
} else {
|
||||
|
|
@ -6,7 +6,6 @@ import android.util.TypedValue
|
|||
import android.widget.LinearLayout
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
|
||||
import com.habitrpg.common.habitica.views.CurrencyView
|
||||
|
||||
class CurrencyViews : LinearLayout {
|
||||
var lightBackground: Boolean = false
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package com.habitrpg.common.habitica.views;
|
||||
package com.habitrpg.android.habitica.ui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.habitrpg.common.habitica.views;
|
||||
package com.habitrpg.android.habitica.ui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
|
|
@ -8,8 +8,6 @@ import android.graphics.RectF;
|
|||
|
||||
import androidx.annotation.ColorInt;
|
||||
|
||||
import com.habitrpg.common.habitica.views.HabiticaIcons;
|
||||
|
||||
/**
|
||||
* Created by phillip on 05.09.17.
|
||||
*/
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.habitrpg.common.habitica.views
|
||||
package com.habitrpg.android.habitica.ui.views
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
|
|
@ -44,7 +44,7 @@ class UsernameLabel @JvmOverloads constructor(
|
|||
tierIconView.visibility = View.GONE
|
||||
} else {
|
||||
tierIconView.visibility = View.VISIBLE
|
||||
tierIconView.setImageBitmap(HabiticaIconsHelper.imageOfContributorBadge(value.toFloat(), isNPC))
|
||||
tierIconView.setImageBitmap(com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper.imageOfContributorBadge(value.toFloat(), isNPC))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -16,7 +16,7 @@ import com.habitrpg.common.habitica.extensions.layoutInflater
|
|||
import com.habitrpg.android.habitica.models.inventory.QuestContent
|
||||
import com.habitrpg.android.habitica.models.inventory.QuestDropItem
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.common.habitica.views.PixelArtView
|
||||
|
||||
class QuestCompletedDialogContent : LinearLayout {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.databinding.EquipmentOverviewItemBinding
|
||||
import com.habitrpg.common.habitica.extensions.layoutInflater
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
|
||||
class EquipmentOverviewItem @JvmOverloads constructor(
|
||||
context: Context,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import androidx.core.os.bundleOf
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.addCloseButton
|
||||
import com.habitrpg.android.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
|
||||
class InsufficientHourglassesDialog(context: Context) : InsufficientCurrencyDialog(context) {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import android.content.Context
|
|||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import androidx.appcompat.widget.AppCompatImageView
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
|
||||
class StarView : AppCompatImageView {
|
||||
|
||||
|
|
|
|||
|
|
@ -28,9 +28,9 @@ import com.habitrpg.android.habitica.models.shops.ShopItem
|
|||
import com.habitrpg.android.habitica.models.user.OwnedItem
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.activities.ArmoireActivityDirections
|
||||
import com.habitrpg.common.habitica.views.CurrencyView
|
||||
import com.habitrpg.android.habitica.ui.views.CurrencyView
|
||||
import com.habitrpg.android.habitica.ui.views.CurrencyViews
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.android.habitica.ui.views.insufficientCurrency.InsufficientGemsDialog
|
||||
|
|
@ -44,6 +44,7 @@ import kotlinx.coroutines.DelicateCoroutinesApi
|
|||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.launch
|
||||
|
|
@ -308,7 +309,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
|
|||
if (shopItem.isValid && !shopItem.locked) {
|
||||
val gemsLeft = if (shopItem.limitedNumberLeft != null) shopItem.limitedNumberLeft else 0
|
||||
if ((gemsLeft == 0 && shopItem.purchaseType == "gems") || shopItem.canAfford(user, purchaseQuantity)) {
|
||||
GlobalScope.launch {
|
||||
MainScope().launch(Dispatchers.Main) {
|
||||
remainingPurchaseQuantity { quantity ->
|
||||
if (quantity >= 0) {
|
||||
if (quantity < purchaseQuantity) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import com.habitrpg.android.habitica.databinding.DialogPurchaseGemsBinding
|
|||
import com.habitrpg.android.habitica.extensions.asDrawable
|
||||
import com.habitrpg.common.habitica.extensions.layoutInflater
|
||||
import com.habitrpg.android.habitica.models.shops.ShopItem
|
||||
import com.habitrpg.common.habitica.views.HabiticaIconsHelper
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
|
||||
import com.habitrpg.common.habitica.views.PixelArtView
|
||||
|
||||
internal class PurchaseDialogGemsContent(context: Context) : PurchaseDialogContent(context) {
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue