fix sprite substitution

This commit is contained in:
Phillip Thelen 2023-04-02 10:35:38 +02:00
parent acda038190
commit 7bca210864
10 changed files with 62 additions and 46 deletions

View file

@ -11,4 +11,4 @@
android:progressTint="@color/text_brand_neon"
android:layout_gravity="center"
android:indeterminate="true" />
</FrameLayout>
</FrameLayout>

View file

@ -26,11 +26,13 @@ import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings
import com.habitrpg.android.habitica.data.ApiClient
import com.habitrpg.android.habitica.helpers.AdHandler
import com.habitrpg.android.habitica.helpers.AmplitudeManager
import com.habitrpg.android.habitica.helpers.AppConfigManager
import com.habitrpg.android.habitica.helpers.notifications.PushNotificationManager
import com.habitrpg.android.habitica.modules.AuthenticationHandler
import com.habitrpg.android.habitica.ui.activities.BaseActivity
import com.habitrpg.android.habitica.ui.activities.LoginActivity
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.common.habitica.extensions.DataBindingUtils
import com.habitrpg.common.habitica.extensions.setupCoil
import com.habitrpg.common.habitica.helpers.AnalyticsManager
import com.habitrpg.common.habitica.helpers.ExceptionHandler
@ -77,7 +79,6 @@ abstract class HabiticaBaseApplication : Application(), Application.ActivityLife
setupAdHandler()
HabiticaIconsHelper.init(this)
MarkdownParser.setup(this)
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
setupCoil()

View file

@ -286,6 +286,7 @@ class TaskRepositoryImpl(
val savedTask = apiClient.updateTask(id, unmanagedTask)
savedTask?.position = task.position
savedTask?.id = task.id
savedTask?.ownerID = task.ownerID
if (savedTask != null) {
savedTask.tags = task.tags
localRepository.save(savedTask)

View file

@ -244,7 +244,7 @@ class ClassSelectionActivity : BaseActivity() {
private fun displayClassChanged() {
val alert = HabiticaAlertDialog(this)
alert.setTitle(getString(R.string.class_changed, className))
alert.setMessage(getString(R.string.class_changed_description))
alert.setMessage(getString(R.string.class_changed_description, className))
alert.addButton(getString(R.string.complete_tutorial), true)
alert.enqueue()
}

View file

@ -65,6 +65,7 @@ import com.habitrpg.android.habitica.widget.AvatarStatsWidgetProvider
import com.habitrpg.android.habitica.widget.DailiesWidgetProvider
import com.habitrpg.android.habitica.widget.HabitButtonWidgetProvider
import com.habitrpg.android.habitica.widget.TodoListWidgetProvider
import com.habitrpg.common.habitica.extensions.DataBindingUtils
import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.common.habitica.extensions.getThemeColor
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
@ -178,6 +179,7 @@ open class MainActivity : BaseActivity(), SnackbarActivity {
}
launchTrace?.start()
super.onCreate(savedInstanceState)
DataBindingUtils.configManager = appConfigManager
if (!viewModel.isAuthenticated) {
val intent = Intent(this, IntroActivity::class.java)

View file

@ -35,9 +35,11 @@ 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.launchCatching
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.firstOrNull
import javax.inject.Inject
@AndroidEntryPoint
open class AvatarOverviewFragment :
BaseMainFragment<FragmentComposeScrollingBinding>(),
AdapterView.OnItemSelectedListener {

View file

@ -33,6 +33,7 @@ import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.RecyclerViewState
import com.habitrpg.common.habitica.helpers.launchCatching
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import javax.inject.Inject
@ -189,6 +190,16 @@ open class ShopFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>()
view.post { setGridSpanCount(view.width) }
context?.let { analyticsManager.logEvent("open_shop", bundleOf(Pair("shopIdentifier", shopIdentifier))) }
lifecycleScope.launchCatching {
inventoryRepository.getOwnedItems()
.collect { adapter?.setOwnedItems(it) }
}
lifecycleScope.launchCatching {
inventoryRepository.getInAppRewards()
.map { rewards -> rewards.map { it.key } }
.collect { adapter?.setPinnedItemKeys(it) }
}
}
open fun initializeCurrencyViews() {
@ -207,7 +218,7 @@ open class ShopFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>()
alert.addButton(R.string.choose_class, true) { _, _ ->
lifecycleScope.launch(ExceptionHandler.coroutine()) {
userRepository.changeClass(classIdentifier)
adapter?.notifyDataSetChanged()
loadMarketGear()
}
}
alert.addButton(R.string.dialog_go_back, false)
@ -232,19 +243,19 @@ open class ShopFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>()
binding?.recyclerView?.state = RecyclerViewState.FAILED
}) {
val shop1 = inventoryRepository.retrieveShopInventory(shopUrl) ?: return@launchCatching
if (shop1.identifier == Shop.MARKET) {
val user = userViewModel.user.value
val specialCategory = ShopCategory()
specialCategory.text = getString(R.string.special)
if (user?.isValid == true && user.purchased?.plan?.isActive == true) {
val item = ShopItem.makeGemItem(context?.resources)
item.limitedNumberLeft = user.purchased?.plan?.numberOfGemsLeft
specialCategory.items.add(item)
}
specialCategory.items.add(ShopItem.makeFortifyItem(context?.resources))
shop1.categories.add(specialCategory)
}
when (shop1.identifier) {
Shop.MARKET -> {
val user = userViewModel.user.value
val specialCategory = ShopCategory()
specialCategory.text = getString(R.string.special)
if (user?.isValid == true && user.purchased?.plan?.isActive == true) {
val item = ShopItem.makeGemItem(context?.resources)
item.limitedNumberLeft = user.purchased?.plan?.numberOfGemsLeft
specialCategory.items.add(item)
}
specialCategory.items.add(ShopItem.makeFortifyItem(context?.resources))
shop1.categories.add(specialCategory)
}
Shop.TIME_TRAVELERS_SHOP -> {
formatTimeTravelersShop(shop1)
}
@ -260,16 +271,6 @@ open class ShopFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>()
adapter?.setShop(shop1)
binding?.refreshLayout?.isRefreshing = false
}
lifecycleScope.launchCatching {
inventoryRepository.getOwnedItems()
.collect { adapter?.setOwnedItems(it) }
}
lifecycleScope.launchCatching {
inventoryRepository.getInAppRewards()
.map { rewards -> rewards.map { it.key } }
.collect { adapter?.setPinnedItemKeys(it) }
}
}
private fun formatTimeTravelersShop(shop: Shop): Shop {
@ -300,19 +301,17 @@ open class ShopFragment : BaseMainFragment<FragmentRefreshRecyclerviewBinding>()
private fun loadMarketGear() {
lifecycleScope.launchCatching {
val shop = inventoryRepository.retrieveMarketGear()
inventoryRepository.getOwnedEquipment()
.map { equipment -> equipment.map { it.key } }
.collect { equipment ->
for (category in shop?.categories ?: emptyList()) {
val items = category.items.asSequence().filter {
!equipment.contains(it.key)
}.sortedBy { it.locked }.toList()
category.items.clear()
category.items.addAll(items)
}
gearCategories = shop?.categories
adapter?.gearCategories = shop?.categories ?: mutableListOf()
}
val equipment = inventoryRepository.getOwnedEquipment()
.map { equipment -> equipment.map { it.key } }.firstOrNull()
for (category in shop?.categories ?: emptyList()) {
val items = category.items.asSequence().filter {
equipment?.contains(it.key) == false
}.sortedBy { it.locked }.toList()
category.items.clear()
category.items.addAll(items)
}
gearCategories = shop?.categories
adapter?.gearCategories = shop?.categories ?: mutableListOf()
}
}

View file

@ -5,6 +5,7 @@ import com.habitrpg.android.habitica.R
import com.habitrpg.common.habitica.extensions.dpToPx
class HabiticaProgressDialog(context: Context) : HabiticaAlertDialog(context) {
companion object {
fun show(context: Context?, titleID: Int): HabiticaProgressDialog? {
return show(context, context?.getString(titleID))
@ -12,8 +13,8 @@ class HabiticaProgressDialog(context: Context) : HabiticaAlertDialog(context) {
fun show(context: Context?, title: String?): HabiticaProgressDialog? {
val dialog = context?.let { HabiticaProgressDialog(it) }
context?.let { dialog?.setAdditionalContentView(R.layout.circular_progress) }
dialog?.dialogWidth = 150.dpToPx(context)
dialog?.setAdditionalContentView(R.layout.circular_progress)
dialog?.dialogWidth = 300.dpToPx(context)
dialog?.setTitle(title)
dialog?.enqueue()
return dialog

View file

@ -19,13 +19,20 @@ import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.common.habitica.extensions.DataBindingUtils
import com.habitrpg.common.habitica.extensions.loadImage
import com.habitrpg.common.habitica.helpers.launchCatching
import dagger.hilt.EntryPoint
import dagger.hilt.InstallIn
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.components.SingletonComponent
import java.util.Locale
import javax.inject.Inject
class PetSuggestHatchDialog(context: Context) : HabiticaAlertDialog(context) {
@Inject
lateinit var hatchPetUseCase: HatchPetUseCase
@EntryPoint
@InstallIn(SingletonComponent::class)
interface PetSuggestHatchDialogEntryPoint {
fun useCase(): HatchPetUseCase
}
var hatchPetUseCase: HatchPetUseCase
private lateinit var binding: DialogPetSuggestHatchBinding
@ -34,6 +41,9 @@ class PetSuggestHatchDialog(context: Context) : HabiticaAlertDialog(context) {
inflater?.let { binding = DialogPetSuggestHatchBinding.inflate(it) }
setAdditionalContentView(binding.root)
binding.shimmerView.startShimmer()
val hiltEntryPoint = EntryPointAccessors.fromApplication(context, PetSuggestHatchDialogEntryPoint::class.java)
hatchPetUseCase = hiltEntryPoint.useCase()
}
fun configure(

View file

@ -1,2 +1,2 @@
NAME=4.1.8
CODE=5821
NAME=4.2
CODE=5851