mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-04-14 11:46:32 +00:00
linting fixes
This commit is contained in:
parent
ba5f49fe69
commit
88f2ee7d8e
173 changed files with 304 additions and 769 deletions
|
|
@ -1,4 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--suppress AndroidDomInspection -->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="com.habitrpg.android.habitica"
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ dependencies {
|
|||
implementation "com.google.accompanist:accompanist-systemuicontroller:$accompanist_version"
|
||||
implementation 'com.google.android.play:core:1.10.3'
|
||||
|
||||
implementation 'androidx.activity:activity-compose:1.8.1'
|
||||
implementation 'androidx.activity:activity-compose:1.8.2'
|
||||
implementation "androidx.compose.runtime:runtime-livedata:$compose_version"
|
||||
implementation "androidx.compose.material:material:$compose_version"
|
||||
implementation "androidx.compose.animation:animation:$compose_version"
|
||||
|
|
|
|||
|
|
@ -25,4 +25,4 @@
|
|||
android:background="?attr/colorWindowBackground"/>
|
||||
<include layout="@layout/activity_main_content" android:id="@+id/content" />
|
||||
</LinearLayout>
|
||||
</androidx.drawerlayout.widget.DrawerLayout>
|
||||
</androidx.drawerlayout.widget.DrawerLayout>
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:tint="@color/text_brand_neon"
|
||||
app:tint="@color/text_brand_neon"
|
||||
android:src="@drawable/challenge_gem_add_button"/>
|
||||
|
||||
<ImageView
|
||||
|
|
@ -137,7 +137,7 @@
|
|||
android:gravity="center"
|
||||
android:inputType="number"
|
||||
android:textColor="@color/text_secondary"
|
||||
android:text="0"
|
||||
tools:text="0"
|
||||
android:id="@+id/create_challenge_prize"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
|
@ -147,7 +147,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:tint="@color/text_brand_neon"
|
||||
app:tint="@color/text_brand_neon"
|
||||
android:src="@drawable/challenge_gem_remove_button"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -226,4 +226,4 @@
|
|||
</androidx.recyclerview.widget.RecyclerView>
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
|
|
|||
|
|
@ -268,6 +268,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:foreground="?android:attr/selectableItemBackground">
|
||||
|
||||
<LinearLayout
|
||||
|
|
@ -284,8 +285,6 @@
|
|||
android:stretchColumns="0,1,2,3,4">
|
||||
|
||||
<TableRow android:layout_height="wrap_content">
|
||||
<!-- Headers -->
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content">
|
||||
|
|
@ -430,4 +429,4 @@
|
|||
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
|
|
|||
|
|
@ -23,4 +23,4 @@
|
|||
android:layout_gravity="start"
|
||||
tools:layout="@layout/drawer_main"/>
|
||||
|
||||
</androidx.drawerlayout.widget.DrawerLayout>
|
||||
</androidx.drawerlayout.widget.DrawerLayout>
|
||||
|
|
|
|||
|
|
@ -7,9 +7,11 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_margin="5dp"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:foreground="?selectableItemBackground"
|
||||
android:orientation="horizontal"
|
||||
android:baselineAligned="false"
|
||||
android:paddingStart="0dp"
|
||||
android:paddingEnd="16dp">
|
||||
|
||||
<LinearLayout
|
||||
|
|
@ -102,4 +104,4 @@
|
|||
android:text="@string/joined"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@
|
|||
android:layout_height="30dp"
|
||||
android:layout_gravity="center"
|
||||
android:background="@color/transparent"
|
||||
android:tint="@color/disabled_background"
|
||||
app:tint="@color/disabled_background"
|
||||
android:src="@drawable/ic_send_grey_600_24dp"
|
||||
android:contentDescription="@string/send"/>
|
||||
</LinearLayout>
|
||||
|
|
@ -92,4 +92,4 @@
|
|||
style="@style/HabiticaButton.Primary"
|
||||
android:text="@string/i_agree_to_follow_the_guidelines"/>
|
||||
</LinearLayout>
|
||||
</merge>
|
||||
</merge>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_gravity="end"
|
||||
tools:background="?colorPrimary"
|
||||
android:focusable="true"
|
||||
android:clickable="true">
|
||||
|
||||
<ImageView
|
||||
|
|
@ -23,4 +24,4 @@
|
|||
android:textColor="@color/white"
|
||||
android:background="@drawable/badge_bg"/>
|
||||
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
android:layout_marginBottom="@dimen/spacing_large"
|
||||
android:clipChildren="true"
|
||||
android:clipToPadding="true"
|
||||
android:focusable="true"
|
||||
android:clickable="true"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
|
@ -253,4 +254,4 @@
|
|||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
android:layout_marginBottom="8dp"
|
||||
android:background="@drawable/g1g1_box"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:clipChildren="true"
|
||||
android:clipToOutline="true"
|
||||
android:clipToPadding="true"
|
||||
|
|
@ -47,7 +48,8 @@
|
|||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentBottom="false"
|
||||
android:scaleType="center" />
|
||||
android:scaleType="center"
|
||||
android:importantForAccessibility="no" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/promo_banner_right_image"
|
||||
|
|
@ -55,7 +57,8 @@
|
|||
android:layout_height="match_parent"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:scaleType="center" />
|
||||
android:scaleType="center"
|
||||
android:importantForAccessibility="no" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
|
|
@ -114,7 +117,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:src="@drawable/subscribe_header" />
|
||||
android:src="@drawable/subscribe_header"
|
||||
android:importantForAccessibility="no" />
|
||||
|
||||
<com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionDetailsView
|
||||
android:id="@+id/subscriptionDetails"
|
||||
|
|
@ -140,7 +144,8 @@
|
|||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginBottom="20dp"
|
||||
android:src="@drawable/separator_fancy" />
|
||||
android:src="@drawable/separator_fancy"
|
||||
android:importantForAccessibility="no" />
|
||||
|
||||
<com.habitrpg.android.habitica.ui.views.subscriptions.SubscriberBenefitView
|
||||
android:id="@+id/subscriber_benefits"
|
||||
|
|
@ -153,7 +158,8 @@
|
|||
android:layout_gravity="center"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:src="@drawable/separator_fancy" />
|
||||
android:src="@drawable/separator_fancy"
|
||||
android:importantForAccessibility="no" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/loadingIndicator"
|
||||
|
|
@ -253,7 +259,8 @@
|
|||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="24dp"
|
||||
android:layout_marginBottom="6dp"
|
||||
android:src="@drawable/gift_sub_gift" />
|
||||
android:src="@drawable/gift_sub_gift"
|
||||
android:importantForAccessibility="no" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/RowWrapper"
|
||||
android:focusable="true"
|
||||
android:clickable="true">
|
||||
<com.habitrpg.common.habitica.views.PixelArtView
|
||||
android:id="@+id/imageView"
|
||||
|
|
@ -31,4 +32,4 @@
|
|||
android:textColor="@color/text_secondary"
|
||||
style="@style/RowText" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:layout_width="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:focusable="true"
|
||||
android:clickable="true"
|
||||
android:id="@+id/background">
|
||||
<View android:layout_height="match_parent"
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
android:id="@+id/more_button"
|
||||
android:src="@drawable/ic_more_horiz_black_18dp"
|
||||
android:background="@color/transparent"
|
||||
android:tint="?textColorPrimary"
|
||||
app:tint="?textColorPrimary"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="20dp"
|
||||
android:layout_gravity="end"/>
|
||||
|
|
@ -139,4 +139,4 @@
|
|||
</TableLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -48,4 +48,4 @@
|
|||
android:layout_marginBottom="4dp"
|
||||
style="@style/Body1"
|
||||
tools:text="Welcome to the Market! Stock up on new gear or buy rare eggs and potions. Check in periodically for new stock." />
|
||||
</FrameLayout>
|
||||
</merge>
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@
|
|||
android:layout_marginHorizontal="12dp"
|
||||
android:layout_marginVertical="@dimen/spacing_medium"
|
||||
android:visibility="gone"
|
||||
android:baselineAligned="false"
|
||||
android:clipToOutline="true">
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
|
|
|
|||
|
|
@ -146,7 +146,8 @@
|
|||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
android:orientation="horizontal"
|
||||
android:baselineAligned="false">
|
||||
<LinearLayout
|
||||
android:id="@+id/months_subscribed_layout"
|
||||
style="@style/subscriptionBox"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--suppress NavigationFile -->
|
||||
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
|
|||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
lifecycleTracker = ApplicationLifecycleTracker(sharedPrefs)
|
||||
ProcessLifecycleOwner.get().lifecycle.addObserver(lifecycleTracker);
|
||||
ProcessLifecycleOwner.get().lifecycle.addObserver(lifecycleTracker)
|
||||
|
||||
if (!BuildConfig.DEBUG) {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import com.habitrpg.android.habitica.models.responses.UnlockResponse
|
|||
import com.habitrpg.android.habitica.models.social.Group
|
||||
import com.habitrpg.android.habitica.models.social.GroupMembership
|
||||
import com.habitrpg.android.habitica.models.tasks.Task
|
||||
import com.habitrpg.android.habitica.models.user.OwnedItem
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.models.user.UserQuestStatus
|
||||
|
|
@ -196,7 +195,7 @@ class UserRepositoryImpl(
|
|||
return apiClient.getNews()
|
||||
}
|
||||
|
||||
override suspend fun getNewsNotification(): Notification? {
|
||||
override suspend fun getNewsNotification(): Notification {
|
||||
val baileyNews = apiClient.getNews()
|
||||
val baileyAnnouncement = (baileyNews?.first() as Map<*, *>)["title"] as String
|
||||
val notification = Notification()
|
||||
|
|
@ -369,15 +368,15 @@ class UserRepositoryImpl(
|
|||
}
|
||||
}
|
||||
}
|
||||
if (type == "background") {
|
||||
return if (type == "background") {
|
||||
apiClient.unlockPath("background.$identifier")
|
||||
return retrieveUser(false, true)
|
||||
retrieveUser(false, true)
|
||||
} else {
|
||||
var updatePath = "preferences.$type"
|
||||
if (category != null) {
|
||||
updatePath = "$updatePath.$category"
|
||||
}
|
||||
return updateUser(updatePath, identifier)
|
||||
updateUser(updatePath, identifier)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@ package com.habitrpg.android.habitica.data.local.implementation
|
|||
import com.habitrpg.android.habitica.data.local.ContentLocalRepository
|
||||
import com.habitrpg.android.habitica.models.ContentResult
|
||||
import com.habitrpg.android.habitica.models.WorldState
|
||||
import com.habitrpg.android.habitica.models.inventory.Quest
|
||||
import com.habitrpg.android.habitica.models.social.Group
|
||||
import io.realm.Realm
|
||||
import io.realm.kotlin.toFlow
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
|
|
|||
|
|
@ -184,7 +184,7 @@ class RealmInventoryLocalRepository(realm: Realm) :
|
|||
return queryUser(userID)
|
||||
.map {
|
||||
it?.items?.mounts?.filter {
|
||||
it.owned == true
|
||||
it.owned
|
||||
} ?: emptyList()
|
||||
}
|
||||
}
|
||||
|
|
@ -301,7 +301,7 @@ class RealmInventoryLocalRepository(realm: Realm) :
|
|||
}
|
||||
val liveUser = getLiveObject(user)
|
||||
val ownedItems = liveUser?.items?.special
|
||||
val item = ownedItems?.firstOrNull() { it.key == "inventory_present" }
|
||||
val item = ownedItems?.firstOrNull { it.key == "inventory_present" }
|
||||
executeTransaction {
|
||||
if (item != null && item.isValid) {
|
||||
item.numberOwned = item.numberOwned - 1
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package com.habitrpg.android.habitica.extensions
|
||||
|
||||
import android.content.DialogInterface
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,5 @@
|
|||
package com.habitrpg.android.habitica.helpers
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.provider.Settings
|
||||
import android.util.Log
|
||||
import androidx.core.content.edit
|
||||
import androidx.core.os.bundleOf
|
||||
/*import com.google.android.gms.ads.AdRequest
|
||||
import com.google.android.gms.ads.LoadAdError
|
||||
import com.google.android.gms.ads.MobileAds
|
||||
|
|
@ -15,8 +8,11 @@ import com.google.android.gms.ads.RequestConfiguration
|
|||
import com.google.android.gms.ads.rewarded.RewardItem
|
||||
import com.google.android.gms.ads.rewarded.RewardedAd
|
||||
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback*/
|
||||
import com.google.firebase.analytics.FirebaseAnalytics
|
||||
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.provider.Settings
|
||||
import androidx.core.content.edit
|
||||
import com.habitrpg.android.habitica.BuildConfig
|
||||
import java.io.UnsupportedEncodingException
|
||||
import java.security.MessageDigest
|
||||
|
|
@ -108,9 +104,9 @@ class AdHandler(val activity: Activity, val type: AdType, val rewardAction: (Boo
|
|||
if (currentAdStatus != AdStatus.UNINITIALIZED) return
|
||||
|
||||
if (BuildConfig.DEBUG || BuildConfig.TESTING_LEVEL == "staff" || BuildConfig.TESTING_LEVEL == "alpha") {
|
||||
val android_id: String =
|
||||
val androidId: String =
|
||||
Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)
|
||||
val deviceId: String = android_id.md5()?.uppercase() ?: ""
|
||||
val deviceId: String = androidId.md5()?.uppercase() ?: ""
|
||||
//val configuration = RequestConfiguration.Builder().setTestDeviceIds(listOf(deviceId)).build()
|
||||
//MobileAds.setRequestConfiguration(configuration)
|
||||
}
|
||||
|
|
@ -208,9 +204,9 @@ class AdHandler(val activity: Activity, val type: AdType, val rewardAction: (Boo
|
|||
}
|
||||
}
|
||||
|
||||
private fun configureReward() {
|
||||
//private fun configureReward() {
|
||||
//rewardedAd?.run { }
|
||||
}
|
||||
//}
|
||||
|
||||
private fun showRewardedAd() {
|
||||
if (nextAdAllowedDate(type)?.after(Date()) == true) {
|
||||
|
|
|
|||
|
|
@ -51,12 +51,8 @@ class ReviewManager(context: Context, private val configManager: AppConfigManage
|
|||
return false
|
||||
}
|
||||
|
||||
if (lastReviewCheckin != -1 && currentCheckins - lastReviewCheckin < 5) {
|
||||
// Less than 5 check-ins since the last review request, wait for more check-ins
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
// Less than 5 check-ins since the last review request, wait for more check-ins
|
||||
return !(lastReviewCheckin != -1 && currentCheckins - lastReviewCheckin < 5)
|
||||
}
|
||||
|
||||
fun requestReview(activity: AppCompatActivity, currentCheckins: Int) {
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ class SoundFile(val theme: String, private val fileName: String) {
|
|||
player?.setVolume(100f, 100f)
|
||||
player?.isLooping = false
|
||||
player?.start()
|
||||
} catch (e: IllegalStateException) {
|
||||
} catch (_: IllegalStateException) {
|
||||
} catch (e: Exception) {
|
||||
ExceptionHandler.reportError(e)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ class UserStatComputer {
|
|||
var itemClass: String? = i.klass
|
||||
val itemSpecialClass = i.specialClass
|
||||
|
||||
val classDoesNotExist = itemClass == null || itemClass.isEmpty()
|
||||
val classDoesNotExist = itemClass.isNullOrEmpty()
|
||||
val specialClassDoesNotExist = itemSpecialClass.isEmpty()
|
||||
|
||||
if (classDoesNotExist && specialClassDoesNotExist) {
|
||||
|
|
@ -93,7 +93,7 @@ class UserStatComputer {
|
|||
|
||||
if (!userClassMatchesGearClass && !userClassMatchesGearSpecialClass) classBonus = 0f
|
||||
|
||||
if (itemClass == null || itemClass.isEmpty() || itemClass == "special") {
|
||||
if (itemClass.isNullOrEmpty() || itemClass == "special") {
|
||||
itemClass = itemSpecialClass
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ class GuildInviteLocalNotification(context: Context, identifier: String?) : Habi
|
|||
|
||||
val acceptInviteIntent = Intent(context, LocalNotificationActionReceiver::class.java)
|
||||
acceptInviteIntent.action = res.getString(R.string.accept_guild_invite)
|
||||
val groupID = data.get("groupID")
|
||||
val groupID = data["groupID"]
|
||||
acceptInviteIntent.putExtra("groupID", groupID)
|
||||
acceptInviteIntent.putExtra("NOTIFICATION_ID", notificationId)
|
||||
val pendingIntentAccept = PendingIntent.getBroadcast(
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class PartyInviteLocalNotification(context: Context, identifier: String?) : Habi
|
|||
|
||||
val acceptInviteIntent = Intent(context, LocalNotificationActionReceiver::class.java)
|
||||
acceptInviteIntent.action = res.getString(R.string.accept_party_invite)
|
||||
val groupID = data.get("groupID")
|
||||
val groupID = data["groupID"]
|
||||
acceptInviteIntent.putExtra("groupID", groupID)
|
||||
acceptInviteIntent.putExtra("NOTIFICATION_ID", notificationId)
|
||||
val pendingIntentAccept = PendingIntent.getBroadcast(
|
||||
|
|
|
|||
|
|
@ -2,7 +2,4 @@ package com.habitrpg.android.habitica.helpers.notifications
|
|||
|
||||
import android.content.Context
|
||||
|
||||
/**
|
||||
* Created by keithholliday on 7/2/16.
|
||||
*/
|
||||
class WonChallengeLocalNotification(context: Context, identifier: String?) : HabiticaLocalNotification(context, identifier)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
package com.habitrpg.android.habitica.interactors
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Canvas
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.lifecycle.setViewTreeLifecycleOwner
|
||||
|
|
@ -13,14 +11,12 @@ import com.habitrpg.android.habitica.data.InventoryRepository
|
|||
import com.habitrpg.android.habitica.databinding.MountImageviewBinding
|
||||
import com.habitrpg.android.habitica.models.inventory.Food
|
||||
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.BackgroundScene
|
||||
import com.habitrpg.android.habitica.ui.views.SnackbarActivity
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.extensions.dpToPx
|
||||
import com.habitrpg.common.habitica.extensions.layoutInflater
|
||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.shared.habitica.models.responses.FeedResponse
|
||||
import kotlinx.coroutines.MainScope
|
||||
import javax.inject.Inject
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ constructor(
|
|||
return inventoryRepository.hatchPet(requestValues.egg, requestValues.potion) {
|
||||
val petWrapper = PetImageviewBinding.inflate(requestValues.context.layoutInflater)
|
||||
val petKey = requestValues.egg.key + "-" + requestValues.potion.key
|
||||
petWrapper.petImageview.loadImage("stable_Pet-" + petKey)
|
||||
petWrapper.petImageview.loadImage("stable_Pet-$petKey")
|
||||
val potionName = requestValues.potion.text
|
||||
val eggName = requestValues.egg.text
|
||||
val currentActivity =
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ class ScoreTaskLocallyInteractor {
|
|||
|
||||
var nextDelta = 0.9747.pow(currentValue) * if (direction == TaskDirection.DOWN) -1 else 1
|
||||
|
||||
if (task.checklist?.size ?: 0 > 0) {
|
||||
if ((task.checklist?.size ?: 0) > 0) {
|
||||
if (task.type == TaskType.TODO) {
|
||||
nextDelta *= 1 + (
|
||||
task.checklist?.map { if (it.completed) 1 else 0 }?.reduce { _, _ -> 0 }
|
||||
|
|
|
|||
|
|
@ -14,12 +14,10 @@ import androidx.savedstate.setViewTreeSavedStateRegistryOwner
|
|||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import com.habitrpg.android.habitica.databinding.MountImageviewBinding
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.BackgroundScene
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.extensions.dpToPx
|
||||
import com.habitrpg.common.habitica.extensions.layoutInflater
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import kotlinx.coroutines.delay
|
||||
|
||||
class ShareMountUseCase: UseCase<ShareMountUseCase.RequestValues, Unit>() {
|
||||
|
|
|
|||
|
|
@ -1,37 +1,25 @@
|
|||
package com.habitrpg.android.habitica.interactors
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Rect
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.view.PixelCopy
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.FrameLayout
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.platform.findViewTreeCompositionContext
|
||||
import androidx.core.view.doOnNextLayout
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.setViewTreeLifecycleOwner
|
||||
import androidx.savedstate.setViewTreeSavedStateRegistryOwner
|
||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.databinding.PetImageviewBinding
|
||||
import com.habitrpg.android.habitica.models.inventory.Food
|
||||
import com.habitrpg.android.habitica.models.inventory.Pet
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.BackgroundScene
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.extensions.dpToPx
|
||||
import com.habitrpg.common.habitica.extensions.layoutInflater
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import kotlinx.coroutines.delay
|
||||
|
||||
class SharePetUseCase: UseCase<SharePetUseCase.RequestValues, Unit>() {
|
||||
|
|
|
|||
|
|
@ -15,9 +15,6 @@ class CustomizationSet {
|
|||
customization.price?.let { total += it }
|
||||
}
|
||||
}
|
||||
if (total >= price) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
return total >= price
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,6 @@ open class QuestBoss : RealmObject(), BaseObject {
|
|||
|
||||
val hasRage: Boolean
|
||||
get() {
|
||||
return rage?.value ?: 0.0 > 0.0
|
||||
return (rage?.value ?: 0.0) > 0.0
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,9 +64,6 @@ open class QuestContent : RealmObject(), Item {
|
|||
|
||||
fun hasGifImage(): Boolean {
|
||||
val gifImageKeys = listOf("lostMasterclasser4")
|
||||
if (gifImageKeys.contains(key)) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
return gifImageKeys.contains(key)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,8 +170,7 @@ class GiftOneGetOneHabiticaPromotion(startDate: Date?, endDate: Date?) : Habitic
|
|||
fragment.binding?.promptButton?.setOnClickListener {
|
||||
fragment.context?.let { context ->
|
||||
SubscriptionFragment.showGiftSubscriptionDialog(
|
||||
context,
|
||||
true
|
||||
context
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,9 +4,6 @@ import com.habitrpg.android.habitica.models.user.Items;
|
|||
import com.habitrpg.android.habitica.models.user.Preferences;
|
||||
import com.habitrpg.android.habitica.models.user.Purchases;
|
||||
|
||||
/**
|
||||
* Created by viirus on 16/01/16.
|
||||
*/
|
||||
public class UnlockResponse {
|
||||
|
||||
public Preferences preferences;
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask {
|
|||
fun completeForUser(userID: String?, completed: Boolean) {
|
||||
if (isGroupTask && group?.assignedUsersDetail?.isNotEmpty() == true) {
|
||||
group?.assignedUsersDetail?.firstOrNull { it.assignedUserID == userID }?.completed = completed
|
||||
if (group?.assignedUsersDetail?.filter { it.completed != completed }?.isEmpty() == true) {
|
||||
if (group?.assignedUsersDetail?.none { it.completed != completed } == true) {
|
||||
this.completed = completed
|
||||
}
|
||||
} else {
|
||||
|
|
@ -436,30 +436,36 @@ open class Task : RealmObject, BaseMainObject, Parcelable, BaseTask {
|
|||
attribute != task.attribute && attribute != null -> return true
|
||||
tags != task.tags -> return true
|
||||
}
|
||||
if (type == TaskType.HABIT) {
|
||||
return when {
|
||||
up != task.up -> true
|
||||
down != task.down -> true
|
||||
frequency != task.frequency -> true
|
||||
counterUp != task.counterUp -> true
|
||||
counterDown != task.counterDown -> true
|
||||
else -> false
|
||||
when (type) {
|
||||
TaskType.HABIT -> {
|
||||
return when {
|
||||
up != task.up -> true
|
||||
down != task.down -> true
|
||||
frequency != task.frequency -> true
|
||||
counterUp != task.counterUp -> true
|
||||
counterDown != task.counterDown -> true
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
} else if (type == TaskType.DAILY) {
|
||||
return when {
|
||||
startDate != task.startDate -> true
|
||||
everyX != task.everyX -> true
|
||||
frequency != task.frequency -> true
|
||||
repeat != task.repeat -> true
|
||||
streak != task.streak -> true
|
||||
else -> false
|
||||
TaskType.DAILY -> {
|
||||
return when {
|
||||
startDate != task.startDate -> true
|
||||
everyX != task.everyX -> true
|
||||
frequency != task.frequency -> true
|
||||
repeat != task.repeat -> true
|
||||
streak != task.streak -> true
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
TaskType.TODO -> {
|
||||
return (dueDate != task.dueDate && task.dueDate != null)
|
||||
}
|
||||
TaskType.REWARD -> {
|
||||
return value != task.value
|
||||
}
|
||||
else -> {
|
||||
return false
|
||||
}
|
||||
} else if (type == TaskType.TODO) {
|
||||
return (dueDate != task.dueDate && task.dueDate != null)
|
||||
} else if (type == TaskType.REWARD) {
|
||||
return value != task.value
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,4 @@ import dagger.hilt.components.SingletonComponent
|
|||
// provide proxy class for libraries(to avoid 65k limit)
|
||||
@InstallIn(SingletonComponent::class)
|
||||
@Module
|
||||
open class DeveloperModule {
|
||||
|
||||
}
|
||||
open class DeveloperModule
|
||||
|
|
|
|||
|
|
@ -19,9 +19,6 @@ class DeviceCommunicationService : WearableListenerService() {
|
|||
|
||||
private val messageClient by lazy { Wearable.getMessageClient(this) }
|
||||
|
||||
init {
|
||||
}
|
||||
|
||||
override fun onMessageReceived(event: MessageEvent) {
|
||||
super.onMessageReceived(event)
|
||||
when (event.path) {
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ class RoundedFrameLayout @JvmOverloads constructor(
|
|||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
clipPath.reset()
|
||||
val radius = if (isCirclular) (canvas.height / 2).toFloat() else radius
|
||||
val radius = if (isCirclular) (height / 2).toFloat() else radius
|
||||
canvas.getClipBounds(bounds)
|
||||
clipPath.addRoundRect(bounds.toRectF(), radius, radius, Path.Direction.CW)
|
||||
canvas.clipPath(clipPath)
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import androidx.lifecycle.lifecycleScope
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.databinding.ActivityArmoireBinding
|
||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.common.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.helpers.AdHandler
|
||||
import com.habitrpg.android.habitica.helpers.AdType
|
||||
import com.habitrpg.android.habitica.helpers.Analytics
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
package com.habitrpg.android.habitica.ui.activities
|
||||
|
||||
import android.R.attr.bitmap
|
||||
import android.R.attr.name
|
||||
import android.content.ContentValues
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import androidx.lifecycle.lifecycleScope
|
|||
import androidx.navigation.navArgs
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.databinding.ActivityClassSelectionBinding
|
||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.common.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.helpers.ReviewManager
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.models.user.Gear
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
package com.habitrpg.android.habitica.ui.activities
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.SharedPreferences
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.animation.AccelerateInterpolator
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
|
|
@ -19,7 +19,6 @@ import androidx.compose.runtime.remember
|
|||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
|
|
@ -27,14 +26,13 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.compose.ui.unit.sp
|
||||
import androidx.core.content.edit
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.habitrpg.android.habitica.HabiticaApplication
|
||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.databinding.ActivityDeathBinding
|
||||
import com.habitrpg.android.habitica.extensions.DateUtils
|
||||
import com.habitrpg.android.habitica.extensions.getShortRemainingString
|
||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.common.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.helpers.AdHandler
|
||||
import com.habitrpg.android.habitica.helpers.AdType
|
||||
import com.habitrpg.android.habitica.helpers.Analytics
|
||||
|
|
@ -52,7 +50,6 @@ import com.habitrpg.common.habitica.helpers.Animations
|
|||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.views.HabiticaCircularProgressView
|
||||
import com.plattysoft.leonids.ParticleSystem
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.MainScope
|
||||
|
|
@ -257,6 +254,7 @@ class DeathActivity : BaseActivity(), SnackbarActivity {
|
|||
.emit(binding.root.width / 2, positionArray[1] + (binding.heartView.height / 2), 3, 6000)
|
||||
}
|
||||
|
||||
@SuppressLint("MissingSuperCall")
|
||||
override fun onBackPressed() {
|
||||
moveTaskToBack(true)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import android.widget.EditText
|
|||
import androidx.core.content.ContextCompat
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.databinding.ActivityFixcharacterBinding
|
||||
import com.habitrpg.android.habitica.extensions.setTintWith
|
||||
import com.habitrpg.common.habitica.extensions.setTintWith
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.habitrpg.android.habitica.ui.activities
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.SharedPreferences
|
||||
|
|
@ -28,7 +29,6 @@ import com.habitrpg.android.habitica.data.SocialRepository
|
|||
import com.habitrpg.android.habitica.databinding.ActivityFullProfileBinding
|
||||
import com.habitrpg.android.habitica.extensions.addCancelButton
|
||||
import com.habitrpg.android.habitica.helpers.ReviewManager
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.helpers.UserStatComputer
|
||||
import com.habitrpg.android.habitica.interactors.ShareAvatarUseCase
|
||||
import com.habitrpg.android.habitica.models.Achievement
|
||||
|
|
@ -39,16 +39,16 @@ import com.habitrpg.android.habitica.models.user.Permission
|
|||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.ui.adapter.social.AchievementProfileAdapter
|
||||
import com.habitrpg.android.habitica.ui.fragments.ReportBottomSheetFragment
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.views.AppHeaderView
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
|
||||
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar.SnackbarDisplayType
|
||||
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.common.habitica.helpers.RecyclerViewState
|
||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||
import com.habitrpg.common.habitica.helpers.setMarkdown
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.common.habitica.views.PixelArtView
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
|
@ -768,6 +768,7 @@ class FullProfileActivity : BaseActivity() {
|
|||
return true
|
||||
}
|
||||
|
||||
@SuppressLint("MissingSuperCall")
|
||||
override fun onBackPressed() {
|
||||
finish()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.habitrpg.android.habitica.ui.activities
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
|
|
@ -80,6 +81,7 @@ class GroupFormActivity : BaseActivity() {
|
|||
return true
|
||||
}
|
||||
|
||||
@SuppressLint("MissingSuperCall")
|
||||
override fun onBackPressed() {
|
||||
finish()
|
||||
dismissKeyboard()
|
||||
|
|
|
|||
|
|
@ -491,8 +491,6 @@ class LoginActivity : BaseActivity() {
|
|||
}
|
||||
|
||||
companion object {
|
||||
internal const val REQUEST_CODE_PICK_ACCOUNT = 1000
|
||||
|
||||
fun show(v: View) {
|
||||
v.visibility = View.VISIBLE
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,8 +49,8 @@ import com.habitrpg.android.habitica.data.InventoryRepository
|
|||
import com.habitrpg.android.habitica.data.TaskRepository
|
||||
import com.habitrpg.android.habitica.databinding.ActivityMainBinding
|
||||
import com.habitrpg.android.habitica.extensions.hideKeyboard
|
||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.extensions.setScaledPadding
|
||||
import com.habitrpg.common.habitica.extensions.observeOnce
|
||||
import com.habitrpg.common.habitica.extensions.setScaledPadding
|
||||
import com.habitrpg.android.habitica.extensions.updateStatusBarColor
|
||||
import com.habitrpg.android.habitica.helpers.Analytics
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import android.app.Activity
|
|||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.HapticFeedbackConstants
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.Button
|
||||
|
|
@ -22,9 +21,9 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.databinding.ActivityNotificationsBinding
|
||||
import com.habitrpg.android.habitica.extensions.fadeInAnimation
|
||||
import com.habitrpg.android.habitica.extensions.flash
|
||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.common.habitica.extensions.fadeInAnimation
|
||||
import com.habitrpg.common.habitica.extensions.flash
|
||||
import com.habitrpg.common.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.helpers.HapticFeedbackManager
|
||||
import com.habitrpg.android.habitica.models.inventory.QuestContent
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.NotificationsViewModel
|
||||
|
|
@ -36,7 +35,6 @@ import com.habitrpg.common.habitica.models.Notification
|
|||
import com.habitrpg.common.habitica.models.notifications.GroupTaskApprovedData
|
||||
import com.habitrpg.common.habitica.models.notifications.GroupTaskNeedsWorkData
|
||||
import com.habitrpg.common.habitica.models.notifications.GroupTaskRequiresApprovalData
|
||||
import com.habitrpg.common.habitica.models.notifications.GuildInvitationData
|
||||
import com.habitrpg.common.habitica.models.notifications.ItemReceivedData
|
||||
import com.habitrpg.common.habitica.models.notifications.NewChatMessageData
|
||||
import com.habitrpg.common.habitica.models.notifications.NewStuffData
|
||||
|
|
|
|||
|
|
@ -62,7 +62,6 @@ class PrefsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStart
|
|||
}
|
||||
|
||||
override fun snackbarContainer(): ViewGroup {
|
||||
val v = findViewById<ViewGroup>(R.id.snackbar_container)
|
||||
return v
|
||||
return findViewById(R.id.snackbar_container)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ class AchievementsAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
|||
achievementIconView.loadImage(iconName)
|
||||
achievementTitleView.text = achievement.title
|
||||
achievementDescriptionView?.text = achievement.text
|
||||
if (achievement.optionalCount ?: 0 > 0) {
|
||||
if ((achievement.optionalCount ?: 0) > 0) {
|
||||
achievementCountView.visibility = View.VISIBLE
|
||||
achievementCountView.text = achievement.optionalCount.toString()
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import java.util.Date
|
|||
import java.util.EnumMap
|
||||
import kotlin.math.min
|
||||
|
||||
class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {
|
||||
class CustomizationRecyclerViewAdapter : androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder>() {
|
||||
|
||||
var userSize: String? = null
|
||||
var hairColor: String? = null
|
||||
|
|
@ -34,9 +34,6 @@ class CustomizationRecyclerViewAdapter() : androidx.recyclerview.widget.Recycler
|
|||
private var customizationList: MutableList<Any> = ArrayList()
|
||||
var additionalSetItems: List<Customization> = ArrayList()
|
||||
var activeCustomization: String? = null
|
||||
set(value) {
|
||||
field = value
|
||||
}
|
||||
|
||||
var ownedCustomizations: List<String> = listOf()
|
||||
private var pinnedItemKeys: List<String> = ArrayList()
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import com.habitrpg.android.habitica.extensions.inflate
|
|||
|
||||
class SimpleSpinnerAdapter(context: Context, resource: Int) : ArrayAdapter<CharSequence>(context, resource, R.id.textView, context.resources.getTextArray(resource)) {
|
||||
|
||||
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View? {
|
||||
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||
val view = parent.inflate(R.layout.spinner_item, false) ?: View(context)
|
||||
(view as? TextView)?.text = getItem(position)
|
||||
return view
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ class SkillsRecyclerViewAdapter : RecyclerView.Adapter<SkillsRecyclerViewAdapter
|
|||
}
|
||||
binding.buttonIconView.setImageDrawable(magicDrawable)
|
||||
|
||||
if (skill.mana ?: 0 > mana) {
|
||||
if ((skill.mana ?: 0) > mana) {
|
||||
binding.buttonWrapper.setBackgroundColor(ContextCompat.getColor(context, R.color.offset_background))
|
||||
binding.buttonIconView.alpha = 0.3f
|
||||
binding.priceLabel.alpha = 0.3f
|
||||
|
|
@ -131,7 +131,7 @@ class SkillsRecyclerViewAdapter : RecyclerView.Adapter<SkillsRecyclerViewAdapter
|
|||
}
|
||||
|
||||
private fun getOwnedCount(key: String): Int {
|
||||
return specialItems?.firstOrNull() { it.key == key }?.numberOwned ?: 0
|
||||
return specialItems?.firstOrNull { it.key == key }?.numberOwned ?: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,9 +117,9 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter<BaseMa
|
|||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
inner class ShopAdViewHolder(val binding: ShopAdBinding): RecyclerView.ViewHolder(binding.root)
|
||||
inner class ShopAdViewHolder(val binding: ShopAdBinding): ViewHolder(binding.root)
|
||||
|
||||
inner class ItemViewHolder(val binding: ItemItemBinding) : RecyclerView.ViewHolder(binding.root), View.OnClickListener {
|
||||
inner class ItemViewHolder(val binding: ItemItemBinding) : ViewHolder(binding.root), View.OnClickListener {
|
||||
private var ownedItem: OwnedItem? = null
|
||||
var item: Item? = null
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.data.SetupCustomizationRepository
|
||||
import com.habitrpg.android.habitica.databinding.SetupCustomizationItemBinding
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.setTintWith
|
||||
import com.habitrpg.common.habitica.extensions.setTintWith
|
||||
import com.habitrpg.android.habitica.models.SetupCustomization
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
|
||||
|
|
@ -113,10 +113,8 @@ internal class CustomizationSetupAdapter : RecyclerView.Adapter<CustomizationSet
|
|||
override fun onClick(v: View) {
|
||||
customization?.let { selectedCustomization ->
|
||||
if (selectedCustomization.path == "glasses") {
|
||||
val key = if (selectedCustomization.key.isEmpty()) {
|
||||
val key = selectedCustomization.key.ifEmpty {
|
||||
user?.items?.gear?.equipped?.eyeWear
|
||||
} else {
|
||||
selectedCustomization.key
|
||||
}
|
||||
key?.let { onEquipGear?.invoke(it) }
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.extensions.setTintWith
|
||||
import com.habitrpg.common.habitica.extensions.setTintWith
|
||||
|
||||
class TaskSetupAdapter : RecyclerView.Adapter<TaskSetupAdapter.TaskViewHolder>() {
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ abstract class BaseMainFragment<VB : ViewBinding> : BaseFragment<VB>() {
|
|||
|
||||
protected var showsBackButton: Boolean = false
|
||||
|
||||
open val mainActivity get() = getActivity() as? MainActivity
|
||||
open val mainActivity get() = activity as? MainActivity
|
||||
val tabLayout get() = mainActivity?.binding?.content?.detailTabs
|
||||
val collapsingToolbar get() = mainActivity?.binding?.content?.toolbar
|
||||
val toolbarAccessoryContainer get() = mainActivity?.binding?.content?.toolbarAccessoryContainer
|
||||
|
|
|
|||
|
|
@ -734,7 +734,6 @@ class NavigationDrawerFragment : DialogFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalTime::class)
|
||||
fun updatePromo() {
|
||||
activePromo = configManager.activePromo()
|
||||
val promoItem = getItemWithIdentifier(SIDEBAR_PROMO) ?: return
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ class ReportBottomSheetFragment : BottomSheetDialogFragment() {
|
|||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
): View {
|
||||
binding = FragmentReportMessageBinding.inflate(inflater, container, false)
|
||||
return binding.root
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.databinding.FragmentStatsBinding
|
||||
import com.habitrpg.android.habitica.extensions.addOkButton
|
||||
import com.habitrpg.android.habitica.extensions.setScaledPadding
|
||||
import com.habitrpg.common.habitica.extensions.setScaledPadding
|
||||
import com.habitrpg.android.habitica.helpers.UserStatComputer
|
||||
import com.habitrpg.android.habitica.models.user.Stats
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
|
|
@ -110,9 +110,9 @@ class StatsFragment : BaseMainFragment<FragmentStatsBinding>() {
|
|||
userViewModel.user.observe(viewLifecycleOwner) { user ->
|
||||
if (user == null) return@observe
|
||||
canAllocatePoints =
|
||||
user.stats?.lvl ?: 0 >= 10 && user.stats?.points ?: 0 > 0
|
||||
(user.stats?.lvl ?: 0) >= 10 && (user.stats?.points ?: 0) > 0
|
||||
binding?.unlockAtLevel?.visibility =
|
||||
if (user.stats?.lvl ?: 0 < 10) View.VISIBLE else View.GONE
|
||||
if ((user.stats?.lvl ?: 0) < 10) View.VISIBLE else View.GONE
|
||||
updateStats(user)
|
||||
updateAttributePoints(user)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import com.habitrpg.android.habitica.data.CustomizationRepository
|
|||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.databinding.BottomSheetBackgroundsFilterBinding
|
||||
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
||||
import com.habitrpg.android.habitica.extensions.setTintWith
|
||||
import com.habitrpg.common.habitica.extensions.setTintWith
|
||||
import com.habitrpg.android.habitica.helpers.Analytics
|
||||
import com.habitrpg.android.habitica.models.CustomizationFilter
|
||||
import com.habitrpg.android.habitica.models.inventory.Customization
|
||||
|
|
|
|||
|
|
@ -24,25 +24,23 @@ import androidx.compose.ui.draw.alpha
|
|||
import androidx.compose.ui.platform.ViewCompositionStrategy
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.core.graphics.scale
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.map
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.databinding.FragmentComposeScrollingBinding
|
||||
import com.habitrpg.android.habitica.interactors.ShareAvatarUseCase
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.models.inventory.Equipment
|
||||
import com.habitrpg.android.habitica.ui.activities.BaseActivity
|
||||
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
|
||||
import com.habitrpg.android.habitica.ui.theme.colors
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel
|
||||
import com.habitrpg.android.habitica.ui.views.SegmentedControl
|
||||
import com.habitrpg.android.habitica.ui.views.equipment.AvatarCustomizationOverviewView
|
||||
import com.habitrpg.android.habitica.ui.views.equipment.EquipmentOverviewView
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||
import com.habitrpg.common.habitica.views.AvatarView
|
||||
import com.habitrpg.common.habitica.theme.HabiticaTheme
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import javax.inject.Inject
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.common.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.helpers.ReviewManager
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.ui.adapter.inventory.EquipmentRecyclerViewAdapter
|
||||
|
|
@ -97,7 +97,7 @@ class EquipmentDetailFragment :
|
|||
|
||||
binding?.recyclerView?.adapter = this.adapter
|
||||
binding?.recyclerView?.layoutManager = LinearLayoutManager(mainActivity)
|
||||
binding?.recyclerView?.addItemDecoration(DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL))
|
||||
binding?.recyclerView?.addItemDecoration(DividerItemDecoration(activity, DividerItemDecoration.VERTICAL))
|
||||
binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator()
|
||||
|
||||
type?.let { type ->
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import com.habitrpg.android.habitica.data.SocialRepository
|
|||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.databinding.FragmentItemsDialogBinding
|
||||
import com.habitrpg.android.habitica.extensions.addCloseButton
|
||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.common.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.helpers.Analytics
|
||||
import com.habitrpg.android.habitica.helpers.EventCategory
|
||||
import com.habitrpg.android.habitica.helpers.HitType
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ import com.habitrpg.android.habitica.data.SocialRepository
|
|||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.databinding.FragmentItemsBinding
|
||||
import com.habitrpg.android.habitica.extensions.addCloseButton
|
||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.common.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.helpers.Analytics
|
||||
import com.habitrpg.android.habitica.helpers.EventCategory
|
||||
import com.habitrpg.android.habitica.helpers.HitType
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.common.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.helpers.ReviewManager
|
||||
import com.habitrpg.android.habitica.interactors.FeedPetUseCase
|
||||
import com.habitrpg.android.habitica.models.inventory.Egg
|
||||
|
|
@ -99,7 +99,7 @@ class PetDetailRecyclerFragment :
|
|||
}
|
||||
binding?.refreshLayout?.setOnRefreshListener(this)
|
||||
|
||||
layoutManager = androidx.recyclerview.widget.GridLayoutManager(getActivity(), 4)
|
||||
layoutManager = androidx.recyclerview.widget.GridLayoutManager(activity, 4)
|
||||
layoutManager?.spanSizeLookup =
|
||||
object : androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup() {
|
||||
override fun getSpanSize(position: Int): Int {
|
||||
|
|
|
|||
|
|
@ -17,13 +17,11 @@ import androidx.core.view.isVisible
|
|||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.preference.EditTextPreference
|
||||
import androidx.preference.Preference
|
||||
import com.google.android.material.textfield.TextInputLayout
|
||||
import com.habitrpg.android.habitica.HabiticaBaseApplication
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.ApiClient
|
||||
import com.habitrpg.android.habitica.extensions.addCancelButton
|
||||
import com.habitrpg.android.habitica.extensions.addCloseButton
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.activities.FixCharacterValuesActivity
|
||||
import com.habitrpg.android.habitica.ui.fragments.preferences.HabiticaAccountDialog.AccountUpdateConfirmed
|
||||
|
|
@ -39,6 +37,7 @@ import com.habitrpg.common.habitica.api.HostConfig
|
|||
import com.habitrpg.common.habitica.extensions.dpToPx
|
||||
import com.habitrpg.common.habitica.extensions.layoutInflater
|
||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.launch
|
||||
|
|
@ -350,7 +349,7 @@ class AccountPreferenceFragment :
|
|||
} else {
|
||||
dialog.setTitle(R.string.add_password)
|
||||
}
|
||||
dialog.addButton(R.string.add, true, false, false) { dialog, _ ->
|
||||
dialog.addButton(R.string.add, true, false, false) { _, _ ->
|
||||
KeyboardUtil.dismissKeyboard(activity)
|
||||
emailEditText?.showErrorIfNecessary()
|
||||
passwordEditText?.showErrorIfNecessary()
|
||||
|
|
@ -386,8 +385,7 @@ class AccountPreferenceFragment :
|
|||
emailEditText?.text = user?.authentication?.localAuthentication?.email
|
||||
emailEditText?.validator = { PatternsCompat.EMAIL_ADDRESS.matcher(it ?: "").matches() }
|
||||
emailEditText?.errorText = getString(R.string.email_invalid)
|
||||
view?.findViewById<TextInputLayout>(R.id.input_layout)?.hint =
|
||||
context?.getString(R.string.email)
|
||||
emailEditText?.hint = context?.getString(R.string.email)
|
||||
val passwordEditText = view?.findViewById<ValidatingEditText>(R.id.password_edit_text)
|
||||
if (user?.authentication?.hasPassword != true) {
|
||||
passwordEditText?.isVisible = false
|
||||
|
|
@ -395,7 +393,7 @@ class AccountPreferenceFragment :
|
|||
context?.let { context ->
|
||||
val dialog = HabiticaAlertDialog(context)
|
||||
dialog.setTitle(R.string.change_email)
|
||||
dialog.addButton(R.string.change, true, false, false) { dialog, _ ->
|
||||
dialog.addButton(R.string.change, true, false, false) { _, _ ->
|
||||
KeyboardUtil.dismissKeyboard(activity)
|
||||
emailEditText?.showErrorIfNecessary()
|
||||
if (emailEditText?.isValid != true) return@addButton
|
||||
|
|
@ -445,11 +443,11 @@ class AccountPreferenceFragment :
|
|||
editText?.text = value
|
||||
editText?.validator = validator
|
||||
editText?.errorText = getString(R.string.username_requirements)
|
||||
view?.findViewById<TextInputLayout>(R.id.input_layout)?.hint = title
|
||||
editText?.hint = title
|
||||
context?.let { context ->
|
||||
val dialog = HabiticaAlertDialog(context)
|
||||
dialog.setTitle(title)
|
||||
dialog.addButton(R.string.save, true, autoDismiss = false) { dialog, _ ->
|
||||
dialog.addButton(R.string.save, true, autoDismiss = false) { _, _ ->
|
||||
KeyboardUtil.dismissKeyboard(activity)
|
||||
editText?.showErrorIfNecessary()
|
||||
if (editText?.isValid != true) return@addButton
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ class PreferencesFragment :
|
|||
showAsBottomSheet { dismiss ->
|
||||
PauseResumeDamageView(user?.preferences?.sleep ?: true, {
|
||||
lifecycleScope.launchCatching {
|
||||
user?.let { it -> userRepository.sleep(it) }
|
||||
user?.let { userRepository.sleep(it) }
|
||||
dismiss()
|
||||
}
|
||||
})
|
||||
|
|
@ -239,11 +239,13 @@ class PreferencesFragment :
|
|||
val alert = context?.let { HabiticaAlertDialog(it) }
|
||||
alert?.setTitle(R.string.push_notification_system_settings_title)
|
||||
alert?.setMessage(R.string.push_notification_system_settings_description)
|
||||
alert?.addButton(R.string.open_settings, true, false) { _, _ ->
|
||||
val notifSettingIntent: Intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(Settings.EXTRA_APP_PACKAGE, context?.applicationContext?.packageName)
|
||||
startActivity(notifSettingIntent)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
alert?.addButton(R.string.open_settings, true, false) { _, _ ->
|
||||
val notifSettingIntent: Intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(Settings.EXTRA_APP_PACKAGE, context?.applicationContext?.packageName)
|
||||
startActivity(notifSettingIntent)
|
||||
}
|
||||
}
|
||||
alert?.addButton(R.string.cancel, false) { _, _ ->
|
||||
alert.dismiss()
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
package com.habitrpg.android.habitica.ui.fragments.purchases
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.android.billingclient.api.ProductDetails
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
|
|
@ -47,10 +45,6 @@ class GiftPurchaseGemsFragment : BaseFragment<FragmentGiftGemPurchaseBinding>()
|
|||
|
||||
private var purchaseHandler: PurchaseHandler? = null
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
}
|
||||
|
||||
fun setupCheckout() {
|
||||
CoroutineScope(Dispatchers.IO).launch(ExceptionHandler.coroutine()) {
|
||||
val skus = purchaseHandler?.getAllGemSKUs()
|
||||
|
|
|
|||
|
|
@ -16,13 +16,11 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.data.InventoryRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.databinding.FragmentBottomsheetSubscriptionBinding
|
||||
import com.habitrpg.android.habitica.helpers.Analytics
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.PurchaseHandler
|
||||
import com.habitrpg.android.habitica.helpers.PurchaseTypes
|
||||
import com.habitrpg.android.habitica.models.user.User
|
||||
import com.habitrpg.android.habitica.ui.views.subscriptions.SubscriptionOptionView
|
||||
import com.habitrpg.common.habitica.extensions.loadImage
|
||||
import com.habitrpg.common.habitica.helpers.ExceptionHandler
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.common.habitica.helpers.launchCatching
|
||||
|
|
@ -72,7 +70,7 @@ open class SubscriptionBottomSheetFragment : BottomSheetDialogFragment() {
|
|||
MainNavigationController.navigate(R.id.subscriptionPurchaseActivity)
|
||||
}
|
||||
binding.subscribeButton.setOnClickListener { purchaseSubscription() }
|
||||
binding.subscriptionDisclaimerView?.setMarkdown("Once we’ve confirmed your purchase, the payment will be charged to your Google Account.\n\nSubscriptions automatically renew unless auto-renewal is turned off at least 24-hours before the end of the current period. If you have an active subscription, your account will be charged for renewal within 24-hours prior to the end of your current subscription period and you will be charged the same price you initially paid.\n\nBy continuing you accept the [Terms of Use](https://habitica.com/static/terms) and [Privacy Policy](https://habitica.com/static/privacy).")
|
||||
binding.subscriptionDisclaimerView.setMarkdown("Once we’ve confirmed your purchase, the payment will be charged to your Google Account.\n\nSubscriptions automatically renew unless auto-renewal is turned off at least 24-hours before the end of the current period. If you have an active subscription, your account will be charged for renewal within 24-hours prior to the end of your current subscription period and you will be charged the same price you initially paid.\n\nBy continuing you accept the [Terms of Use](https://habitica.com/static/terms) and [Privacy Policy](https://habitica.com/static/privacy).")
|
||||
|
||||
lifecycleScope.launchCatching {
|
||||
userRepository.getUser().collect { user ->
|
||||
|
|
|
|||
|
|
@ -13,13 +13,11 @@ import androidx.lifecycle.Lifecycle
|
|||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.habitrpg.android.habitica.MainNavDirections
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.databinding.FragmentChatBinding
|
||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.common.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||
import com.habitrpg.android.habitica.ui.activities.FullProfileActivity
|
||||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||
|
|
|
|||
|
|
@ -16,13 +16,11 @@ import androidx.lifecycle.Lifecycle
|
|||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.habitrpg.android.habitica.MainNavDirections
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.SocialRepository
|
||||
import com.habitrpg.android.habitica.databinding.FragmentInboxMessageListBinding
|
||||
import com.habitrpg.android.habitica.extensions.addOkButton
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||
import com.habitrpg.android.habitica.ui.activities.FullProfileActivity
|
||||
import com.habitrpg.android.habitica.ui.activities.MainActivity
|
||||
|
|
@ -75,7 +73,7 @@ class InboxMessageListFragment : BaseMainFragment<FragmentInboxMessageListBindin
|
|||
showsBackButton = true
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
val layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this.getActivity())
|
||||
val layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this.activity)
|
||||
layoutManager.reverseLayout = true
|
||||
layoutManager.stackFromEnd = false
|
||||
binding?.recyclerView?.layoutManager = layoutManager
|
||||
|
|
@ -193,10 +191,10 @@ class InboxMessageListFragment : BaseMainFragment<FragmentInboxMessageListBindin
|
|||
}
|
||||
|
||||
private fun copyMessageToClipboard(chatMessage: ChatMessage) {
|
||||
val clipMan = getActivity()?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager
|
||||
val clipMan = activity?.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager
|
||||
val messageText = ClipData.newPlainText("Chat message", chatMessage.text)
|
||||
clipMan?.setPrimaryClip(messageText)
|
||||
val activity = getActivity() as? MainActivity
|
||||
val activity = activity as? MainActivity
|
||||
if (activity != null && Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
|
||||
showSnackbar(activity.snackbarContainer, getString(R.string.chat_message_copied), HabiticaSnackbar.SnackbarDisplayType.NORMAL)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -256,14 +256,14 @@ class QuestDetailFragment : BaseMainFragment<FragmentQuestDetailBinding>() {
|
|||
HapticFeedbackManager.tap(requireView())
|
||||
context?.let {
|
||||
if (isQuestActive) {
|
||||
val builder = AlertDialog.Builder(getActivity())
|
||||
val builder = AlertDialog.Builder(activity)
|
||||
.setMessage(R.string.quest_abort_message)
|
||||
.setPositiveButton(R.string.yes) { _, _ ->
|
||||
party?.id?.let { partyID ->
|
||||
lifecycleScope.launchCatching {
|
||||
socialRepository.abortQuest(partyID)
|
||||
userRepository.retrieveUser(true)
|
||||
getActivity()?.supportFragmentManager?.popBackStack()
|
||||
activity?.supportFragmentManager?.popBackStack()
|
||||
}
|
||||
}
|
||||
}.setNegativeButton(R.string.no) { _, _ -> }
|
||||
|
|
@ -276,7 +276,7 @@ class QuestDetailFragment : BaseMainFragment<FragmentQuestDetailBinding>() {
|
|||
lifecycleScope.launchCatching {
|
||||
socialRepository.cancelQuest(partyID)
|
||||
userRepository.retrieveUser(true)
|
||||
getActivity()?.supportFragmentManager?.popBackStack()
|
||||
activity?.supportFragmentManager?.popBackStack()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -288,7 +288,7 @@ class QuestDetailFragment : BaseMainFragment<FragmentQuestDetailBinding>() {
|
|||
|
||||
private fun onQuestLeave() {
|
||||
HapticFeedbackManager.tap(requireView())
|
||||
val builder = AlertDialog.Builder(getActivity())
|
||||
val builder = AlertDialog.Builder(activity)
|
||||
.setMessage(if (quest?.active == true) R.string.quest_leave_message else R.string.quest_leave_message_nostart)
|
||||
.setPositiveButton(R.string.yes) { _, _ ->
|
||||
party?.id?.let { partyID ->
|
||||
|
|
@ -296,7 +296,7 @@ class QuestDetailFragment : BaseMainFragment<FragmentQuestDetailBinding>() {
|
|||
socialRepository.leaveQuest(partyID)
|
||||
socialRepository.retrieveGroup(partyID)
|
||||
userRepository.retrieveUser(true)
|
||||
getActivity()?.supportFragmentManager?.popBackStack()
|
||||
activity?.supportFragmentManager?.popBackStack()
|
||||
}
|
||||
}
|
||||
}.setNegativeButton(R.string.no) { _, _ -> }
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ class ChallengeDetailFragment : BaseMainFragment<FragmentChallengeDetailBinding>
|
|||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.action_edit -> {
|
||||
val intent = Intent(getActivity(), ChallengeFormActivity::class.java)
|
||||
val intent = Intent(activity, ChallengeFormActivity::class.java)
|
||||
val bundle = Bundle()
|
||||
bundle.putString(ChallengeFormActivity.CHALLENGE_ID_KEY, challengeID)
|
||||
intent.putExtras(bundle)
|
||||
|
|
|
|||
|
|
@ -50,8 +50,8 @@ internal class ChallengeFilterDialogHolder private constructor(
|
|||
private fun fillChallengeGroups() {
|
||||
binding.challengeFilterRecyclerView.layoutManager = LinearLayoutManager(context)
|
||||
adapter = ChallengesFilterRecyclerViewAdapter(filterGroups)
|
||||
if (currentFilter != null && currentFilter?.showByGroups != null) {
|
||||
adapter?.checkedEntries?.addAll(currentFilter?.showByGroups ?: emptyList())
|
||||
currentFilter?.let { currentFilter ->
|
||||
adapter?.checkedEntries?.addAll(currentFilter.showByGroups)
|
||||
}
|
||||
|
||||
binding.challengeFilterRecyclerView.adapter = adapter
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ class ChallengesOverviewFragment : BaseMainFragment<FragmentViewpagerBinding>()
|
|||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.action_create_challenge -> {
|
||||
val intent = Intent(getActivity(), ChallengeFormActivity::class.java)
|
||||
val intent = Intent(activity, ChallengeFormActivity::class.java)
|
||||
startActivity(intent)
|
||||
return true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ import com.habitrpg.android.habitica.data.InventoryRepository
|
|||
import com.habitrpg.android.habitica.data.TaskRepository
|
||||
import com.habitrpg.android.habitica.data.UserRepository
|
||||
import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBinding
|
||||
import com.habitrpg.android.habitica.extensions.observeOnce
|
||||
import com.habitrpg.android.habitica.extensions.setScaledPadding
|
||||
import com.habitrpg.common.habitica.extensions.observeOnce
|
||||
import com.habitrpg.common.habitica.extensions.setScaledPadding
|
||||
import com.habitrpg.android.habitica.helpers.AppConfigManager
|
||||
import com.habitrpg.android.habitica.helpers.HapticFeedbackManager
|
||||
import com.habitrpg.common.habitica.helpers.MainNavigationController
|
||||
|
|
@ -70,7 +70,7 @@ open class TaskRecyclerViewFragment :
|
|||
private var taskFlowJob: Job? = null
|
||||
val viewModel: TasksViewModel by viewModels({ requireParentFragment() })
|
||||
|
||||
internal var canScoreTaks: Boolean = true
|
||||
internal var canScoreTasks: Boolean = true
|
||||
override var binding: FragmentRefreshRecyclerviewBinding? = null
|
||||
|
||||
override fun createBinding(
|
||||
|
|
@ -162,7 +162,7 @@ open class TaskRecyclerViewFragment :
|
|||
}
|
||||
|
||||
viewModel.ownerID.observe(viewLifecycleOwner) {
|
||||
canScoreTaks = viewModel.isPersonalBoard
|
||||
canScoreTasks = viewModel.isPersonalBoard
|
||||
updateTaskSubscription(it)
|
||||
}
|
||||
lifecycleScope.launch {
|
||||
|
|
@ -324,7 +324,7 @@ open class TaskRecyclerViewFragment :
|
|||
}
|
||||
// Factor in if adventure guide is shown.
|
||||
if (recyclerAdapter?.showAdventureGuide == true) {
|
||||
newPosition = newPosition - 1
|
||||
newPosition -= 1
|
||||
}
|
||||
lifecycleScope.launchCatching {
|
||||
taskRepository.updateTaskPosition(
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import androidx.viewpager2.widget.ViewPager2
|
|||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.data.TagRepository
|
||||
import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding
|
||||
import com.habitrpg.android.habitica.extensions.setTintWith
|
||||
import com.habitrpg.common.habitica.extensions.setTintWith
|
||||
import com.habitrpg.android.habitica.helpers.Analytics
|
||||
import com.habitrpg.android.habitica.helpers.EventCategory
|
||||
import com.habitrpg.android.habitica.helpers.HitType
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import androidx.appcompat.view.menu.ActionMenuItemView
|
|||
import androidx.appcompat.widget.ActionMenuView
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.waitForLayout
|
||||
import com.habitrpg.common.habitica.extensions.waitForLayout
|
||||
import com.habitrpg.common.habitica.extensions.getThemeColor
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.databinding.ChatItemBinding
|
||||
import com.habitrpg.android.habitica.databinding.TavernChatIntroItemBinding
|
||||
import com.habitrpg.android.habitica.extensions.getAgoString
|
||||
import com.habitrpg.android.habitica.extensions.setScaledPadding
|
||||
import com.habitrpg.common.habitica.extensions.setScaledPadding
|
||||
import com.habitrpg.android.habitica.models.members.Member
|
||||
import com.habitrpg.android.habitica.models.social.ChatMessage
|
||||
import com.habitrpg.android.habitica.models.user.Permission
|
||||
|
|
|
|||
|
|
@ -10,11 +10,8 @@ import com.habitrpg.android.habitica.R
|
|||
import com.habitrpg.android.habitica.databinding.MountOverviewItemBinding
|
||||
import com.habitrpg.android.habitica.extensions.inflate
|
||||
import com.habitrpg.android.habitica.models.inventory.Mount
|
||||
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu
|
||||
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenuItem
|
||||
import com.habitrpg.android.habitica.ui.views.showAsBottomSheet
|
||||
import com.habitrpg.android.habitica.ui.views.stable.MountBottomSheet
|
||||
import com.habitrpg.android.habitica.ui.views.stable.PetBottomSheet
|
||||
import com.habitrpg.common.habitica.extensions.DataBindingUtils
|
||||
import dagger.hilt.android.internal.managers.ViewComponentManager
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import kotlinx.coroutines.MainScope
|
|||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
abstract class BaseTaskViewHolder constructor(
|
||||
abstract class BaseTaskViewHolder(
|
||||
itemView: View,
|
||||
var scoreTaskFunc: ((Task, TaskDirection) -> Unit),
|
||||
var openTaskFunc: ((Pair<Task, View>) -> Unit),
|
||||
|
|
|
|||
|
|
@ -37,8 +37,8 @@ class InboxViewModel @Inject constructor(
|
|||
userViewModel: MainUserViewModel,
|
||||
val socialRepository: SocialRepository
|
||||
) : BaseViewModel(userRepository, userViewModel) {
|
||||
val recipientID: String? = savedStateHandle.get("userID")
|
||||
val recipientUsername: String? = savedStateHandle.get("username")
|
||||
val recipientID: String? = savedStateHandle["userID"]
|
||||
val recipientUsername: String? = savedStateHandle["username"]
|
||||
|
||||
private var memberIDFlow = MutableStateFlow<String?>(null)
|
||||
val memberIDState: StateFlow<String?> = memberIDFlow
|
||||
|
|
@ -54,7 +54,6 @@ class InboxViewModel @Inject constructor(
|
|||
.filterNotNull()
|
||||
.flatMapLatest { socialRepository.retrieveMember(it).toFlow() }
|
||||
.asLiveData()
|
||||
fun getMemberData(): LiveData<Member?> = member
|
||||
|
||||
fun setMemberID(memberID: String) {
|
||||
if (memberID == memberIDState.value) return
|
||||
|
|
|
|||
|
|
@ -70,10 +70,6 @@ class MainUserViewModel @Inject constructor(private val authenticationHandler: A
|
|||
}
|
||||
.asLiveData()
|
||||
|
||||
fun onCleared() {
|
||||
userRepository.close()
|
||||
}
|
||||
|
||||
fun updateUser(path: String, value: Any) {
|
||||
MainScope().launch(ExceptionHandler.coroutine()) {
|
||||
userRepository.updateUser(path, value)
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ class StableViewModel @Inject constructor(
|
|||
var lastSection: StableSection? = null
|
||||
for (animal in unsortedAnimals) {
|
||||
val identifier = if (animal.animal.isNotEmpty() && (animal.type != "special" && animal.type != "wacky")) animal.animal else animal.key
|
||||
val lastIdentifier = if (lastAnimal.animal.isNotEmpty()) lastAnimal.animal else lastAnimal.key
|
||||
val lastIdentifier = lastAnimal.animal.ifEmpty { lastAnimal.key }
|
||||
if (animal.type == "premium") {
|
||||
if (!items.contains(lastAnimal)) {
|
||||
items.add(lastAnimal)
|
||||
|
|
|
|||
|
|
@ -102,7 +102,6 @@ fun getTranslatedClassName(resources : Resources, className : String?) : String
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalAnimationApi::class)
|
||||
@Composable
|
||||
fun AppHeaderView(
|
||||
user : Avatar?,
|
||||
|
|
|
|||
|
|
@ -4,14 +4,12 @@ import android.app.Activity
|
|||
import android.view.ViewGroup
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.ExperimentalMaterialApi
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material.ModalBottomSheetLayout
|
||||
import androidx.compose.material.ModalBottomSheetValue
|
||||
import androidx.compose.material.rememberModalBottomSheetState
|
||||
|
|
|
|||
|
|
@ -427,9 +427,7 @@ open class DragLinearLayout @JvmOverloads constructor(context: Context, attrs: A
|
|||
val absTop = top - startScrollY + currentTop
|
||||
val height = containerScrollView!!.height
|
||||
|
||||
val delta: Int
|
||||
|
||||
delta = when {
|
||||
val delta: Int = when {
|
||||
absTop < scrollSensitiveHeight -> {
|
||||
(-MAX_DRAG_SCROLL_SPEED * smootherStep(scrollSensitiveHeight.toFloat(), 0f, absTop.toFloat())).toInt()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import android.util.AttributeSet
|
|||
import android.widget.TextView
|
||||
import androidx.preference.ListPreference
|
||||
import com.habitrpg.android.habitica.R
|
||||
import com.habitrpg.android.habitica.extensions.setScaledPadding
|
||||
import com.habitrpg.common.habitica.extensions.setScaledPadding
|
||||
|
||||
class HabiticaListPreference : ListPreference {
|
||||
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) :
|
||||
|
|
|
|||
|
|
@ -6,9 +6,6 @@ import android.view.LayoutInflater
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.animation.AccelerateInterpolator
|
||||
import android.widget.ImageView
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.ViewCompat
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ class NPCBannerView(context: Context, attrs: AttributeSet?) : FrameLayout(contex
|
|||
|
||||
var shopSpriteSuffix: String? = null
|
||||
set(value) {
|
||||
field = if (value == null || value.isEmpty() || value.startsWith("_")) {
|
||||
field = if (value.isNullOrEmpty() || value.startsWith("_")) {
|
||||
value
|
||||
} else {
|
||||
"_$value"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package com.habitrpg.android.habitica.ui.views
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.ImageBitmap
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import androidx.compose.material.MaterialTheme
|
|||
import androidx.compose.material.OutlinedButton
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.mutableIntStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
|
|
@ -38,7 +38,7 @@ fun SegmentedControl(
|
|||
cornerRadius: Int = 10,
|
||||
onItemSelection: (selectedItemIndex: Int) -> Unit
|
||||
) {
|
||||
val selectedIndex = remember { mutableStateOf(defaultSelectedItemIndex) }
|
||||
val selectedIndex = remember { mutableIntStateOf(defaultSelectedItemIndex) }
|
||||
val color = MaterialTheme.colors.primary
|
||||
Row(
|
||||
modifier = Modifier
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ class Typewriter : androidx.appcompat.widget.AppCompatTextView {
|
|||
private var delay: Long = 30
|
||||
|
||||
val isAnimating: Boolean
|
||||
get() = index < stringBuilder?.length ?: 0
|
||||
get() = index < (stringBuilder?.length ?: 0)
|
||||
|
||||
constructor(context: Context) : super(context) {
|
||||
setupTextColors(context)
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue