linting fixes

This commit is contained in:
Phillip Thelen 2023-12-21 14:17:06 +01:00
parent ba5f49fe69
commit 88f2ee7d8e
173 changed files with 304 additions and 769 deletions

View file

@ -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"

View file

@ -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"

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -23,4 +23,4 @@
android:layout_gravity="start"
tools:layout="@layout/drawer_main"/>
</androidx.drawerlayout.widget.DrawerLayout>
</androidx.drawerlayout.widget.DrawerLayout>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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"

View file

@ -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>

View file

@ -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"

View file

@ -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>

View file

@ -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>

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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 {

View file

@ -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)
}
}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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) {

View file

@ -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) {

View file

@ -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)
}

View file

@ -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
}

View file

@ -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(

View file

@ -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(

View file

@ -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)

View file

@ -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

View file

@ -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 =

View file

@ -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 }

View file

@ -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>() {

View file

@ -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>() {

View file

@ -15,9 +15,6 @@ class CustomizationSet {
customization.price?.let { total += it }
}
}
if (total >= price) {
return true
}
return false
return total >= price
}
}

View file

@ -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
}
}

View file

@ -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)
}
}

View file

@ -170,8 +170,7 @@ class GiftOneGetOneHabiticaPromotion(startDate: Date?, endDate: Date?) : Habitic
fragment.binding?.promptButton?.setOnClickListener {
fragment.context?.let { context ->
SubscriptionFragment.showGiftSubscriptionDialog(
context,
true
context
)
}
}

View file

@ -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;

View file

@ -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
}
}

View file

@ -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

View file

@ -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) {

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)
}

View file

@ -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

View file

@ -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()
}

View file

@ -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()

View file

@ -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
}

View file

@ -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

View file

@ -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

View file

@ -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)
}
}

View file

@ -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 {

View file

@ -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()

View file

@ -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

View file

@ -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
}
}
}

View file

@ -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

View file

@ -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 {

View file

@ -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>() {

View file

@ -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

View file

@ -734,7 +734,6 @@ class NavigationDrawerFragment : DialogFragment() {
}
}
@OptIn(ExperimentalTime::class)
fun updatePromo() {
activePromo = configManager.activePromo()
val promoItem = getItemWithIdentifier(SIDEBAR_PROMO) ?: return

View file

@ -46,7 +46,7 @@ class ReportBottomSheetFragment : BottomSheetDialogFragment() {
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
): View {
binding = FragmentReportMessageBinding.inflate(inflater, container, false)
return binding.root
}

View file

@ -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)
}

View file

@ -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

View file

@ -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

View file

@ -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 ->

View file

@ -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

View file

@ -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

View file

@ -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 {

View file

@ -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

View file

@ -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()

View file

@ -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()

View file

@ -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 weve 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 weve 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 ->

View file

@ -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

View file

@ -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)
}

View file

@ -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) { _, _ -> }

View file

@ -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)

View file

@ -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

View file

@ -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
}

View file

@ -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(

View file

@ -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

View file

@ -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
/**

View file

@ -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

View file

@ -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

View file

@ -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),

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -102,7 +102,6 @@ fun getTranslatedClassName(resources : Resources, className : String?) : String
}
}
@OptIn(ExperimentalAnimationApi::class)
@Composable
fun AppHeaderView(
user : Avatar?,

View file

@ -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

View file

@ -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()
}

View file

@ -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) :

View file

@ -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

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -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