Fix RYA issues

This commit is contained in:
Phillip Thelen 2022-08-01 11:30:44 +02:00
parent 642ef76519
commit 37a307184c
16 changed files with 96 additions and 19 deletions

View file

@ -19,6 +19,7 @@
style="@style/Title1"
android:textColor="@color/white"
android:gravity="center_horizontal"
android:letterSpacing="0.05"
android:text="@string/mor_gems_title"
android:layout_margin="26dp" />
<LinearLayout
@ -74,9 +75,10 @@
<Button
android:id="@+id/purchase_button"
android:layout_width="129dp"
android:layout_height="44dp"
android:layout_height="50dp"
style="@style/HabiticaButton.White.Small"
tools:text="$0.99"
android:textSize="16sp"
android:visibility="invisible"/>
</FrameLayout>
</LinearLayout>

View file

@ -743,7 +743,7 @@
<string name="profile_send_message">Send
\nMessage</string>
<string name="gift_gems">Gift Gems</string>
<string name="see_other_options">See other Options</string>
<string name="see_other_options">See Other Options</string>
<string name="promo_subscription_buy_gems_description">Become a Subscriber to buy Gems with gold, get monthly mystery items, increased drop caps and more!</string>
<string name="promo_subscription_buy_gems_prompt">Need Gems\?</string>
<string name="preference_push_party_activity">Party Activity</string>

View file

@ -878,7 +878,7 @@
<string name="preference_push_party_activity">Party Activity</string>
<string name="promo_subscription_buy_gems_prompt">Need Gems?</string>
<string name="promo_subscription_buy_gems_description">Become a Subscriber to buy Gems with gold, get monthly mystery items, increased drop caps and more!</string>
<string name="see_other_options">See other Options</string>
<string name="see_other_options">See Other Options</string>
<string name="gift_gems">Gift Gems</string>
<string name="profile_send_message">Send\nMessage</string>
<string name="profile_gift_gems">Gift\nGems</string>
@ -1237,4 +1237,5 @@
<string name="mor_gems_title">Youll need more Gems to buy this!</string>
<string name="gems_support">Purchasing Gems supports our small team at Habitica</string>
<string name="month_released">Month Released</string>
<string name="incorrect_password">The password was incorrect</string>
</resources>

View file

@ -376,6 +376,10 @@
<item name="android:textColor">@color/brand_100</item>
</style>
<style name="DialogTheme" parent="Theme.AppCompat.DayNight.Dialog">
<item name="android:windowLightStatusBar">true</item>
</style>
<style name="AlertDialogTheme" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="colorPrimary">@color/text_brand_neon</item>
<item name="colorAccent">@color/color_accent</item>
@ -616,6 +620,7 @@
<item name="android:padding">8dp</item>
<item name="fontFamily">sans-serif-medium</item>
<item name="android:textColor">@drawable/radio_button_text_color</item>
<item name="android:textSize">16sp</item>
</style>
<style name="TagEditTextTheme">

View file

@ -25,7 +25,12 @@ import android.widget.EditText
import android.widget.LinearLayout
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceManager
import com.google.android.gms.tasks.Tasks
import com.google.android.gms.wearable.CapabilityClient
import com.google.android.gms.wearable.MessageClient
import com.google.android.gms.wearable.Wearable
import com.google.firebase.analytics.FirebaseAnalytics
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
@ -42,6 +47,8 @@ import com.habitrpg.android.habitica.ui.helpers.dismissKeyboard
import com.habitrpg.android.habitica.ui.viewmodels.AuthenticationViewModel
import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.common.habitica.models.auth.UserAuthResponse
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import javax.inject.Inject
class LoginActivity : BaseActivity() {
@ -49,6 +56,9 @@ class LoginActivity : BaseActivity() {
private lateinit var viewModel: AuthenticationViewModel
private lateinit var binding: ActivityLoginBinding
val messageClient: MessageClient by lazy { Wearable.getMessageClient(this) }
private val capabilityClient: CapabilityClient by lazy { Wearable.getCapabilityClient(this) }
@Inject
lateinit var apiClient: ApiClient
@Inject
@ -227,6 +237,23 @@ class LoginActivity : BaseActivity() {
private fun handleAuthResponse(response: UserAuthResponse) {
viewModel.handleAuthResponse(response)
lifecycleScope.launch(Dispatchers.IO) {
val info = Tasks.await(
capabilityClient.getCapability(
"receive_message",
CapabilityClient.FILTER_REACHABLE
)
)
info.nodes.forEach {
Tasks.await(
messageClient.sendMessage(
it.id,
"/auth",
"${response.id}:${response.apiToken}".toByteArray()
)
)
}
}
compositeSubscription.add(
userRepository.retrieveUser(true)
.subscribe({

View file

@ -37,6 +37,7 @@ import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaProgressDialog
import com.habitrpg.common.habitica.api.HostConfig
import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.common.habitica.extensions.layoutInflater
import retrofit2.HttpException
import javax.inject.Inject
class AccountPreferenceFragment :
@ -414,6 +415,7 @@ class AccountPreferenceFragment :
MainNavigationController.navigate(R.id.subscriptionPurchaseActivity)
}
dialog?.addCloseButton()
dialog?.show()
}
val habiticaAccountDialog = context?.let { HabiticaAccountDialog(it) }
habiticaAccountDialog?.accountAction = "delete_account"
@ -436,6 +438,13 @@ class AccountPreferenceFragment :
activity?.finish()
}) { throwable ->
dialog?.dismiss()
if (throwable is HttpException && throwable.code() == 401) {
val errorDialog = context?.let { HabiticaAlertDialog(it) }
errorDialog?.setTitle(R.string.authentication_error_title)
errorDialog?.setMessage(R.string.incorrect_password)
errorDialog?.addCloseButton()
errorDialog?.show()
}
RxErrorHandler.reportError(throwable)
}
)

View file

@ -9,6 +9,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.fragment.app.DialogFragment
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.DialogHabiticaAccountBinding
@ -23,6 +24,11 @@ class HabiticaAccountDialog(private var thisContext: Context) : DialogFragment(R
var accountUpdateConfirmed: AccountUpdateConfirmed? = null
var user: User? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.DialogTheme)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = DialogHabiticaAccountBinding.inflate(layoutInflater)
return binding.root
@ -31,6 +37,10 @@ class HabiticaAccountDialog(private var thisContext: Context) : DialogFragment(R
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
activity?.let { activity ->
ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = true
}
when (accountAction) {
"reset_account" -> setResetAccountViews()
"delete_account" -> setDeleteAccountViews()

View file

@ -7,12 +7,12 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.habitrpg.android.habitica.HabiticaBaseApplication
import com.habitrpg.android.habitica.databinding.RowShopitemBinding
import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.common.habitica.extensions.loadImage
import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper
import com.habitrpg.android.habitica.ui.views.shops.PurchaseDialog
import com.habitrpg.common.habitica.extensions.dpToPx
import com.habitrpg.common.habitica.extensions.isUsingNightModeResources
import com.habitrpg.common.habitica.extensions.loadImage
class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
private val binding = RowShopitemBinding.bind(itemView)
@ -94,6 +94,7 @@ class ShopItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), Vi
override fun onClick(view: View) {
val item = item
if (item != null && item.isValid) {
val dialog = PurchaseDialog(context, HabiticaBaseApplication.userComponent, item)
dialog.shopIdentifier = shopIdentifier
dialog.isPinned = isPinned

View file

@ -107,7 +107,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
checkGearClass()
}
"gems" == shopItem.purchaseType -> contentView = PurchaseDialogGemsContent(context)
"background" == shopItem.purchaseType -> {
"background" == shopItem.purchaseType || "backgrounds" == shopItem.purchaseType -> {
contentView = PurchaseDialogBackgroundContent(context)
}
"customization" == shopItem.purchaseType -> contentView = PurchaseDialogCustomizationContent(context)

View file

@ -3,12 +3,12 @@ package com.habitrpg.android.habitica.ui.views.shops
import android.content.Context
import android.widget.TextView
import com.habitrpg.android.habitica.databinding.PurchaseDialogBackgroundBinding
import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.shops.ShopItem
import com.habitrpg.common.habitica.extensions.layoutInflater
import com.habitrpg.common.habitica.models.Avatar
import com.habitrpg.common.habitica.views.AvatarView
import com.habitrpg.common.habitica.views.PixelArtView
import java.util.*
import java.util.EnumMap
class PurchaseDialogBackgroundContent(context: Context) : PurchaseDialogContent(context) {
val binding = PurchaseDialogBackgroundBinding.inflate(context.layoutInflater, this)
@ -24,7 +24,7 @@ class PurchaseDialogBackgroundContent(context: Context) : PurchaseDialogContent(
fun setAvatarWithBackgroundPreview(avatar: Avatar, item: ShopItem) {
val layerMap = EnumMap<AvatarView.LayerType, String>(AvatarView.LayerType::class.java)
layerMap[AvatarView.LayerType.BACKGROUND] = item.imageName
layerMap[AvatarView.LayerType.BACKGROUND] = item.imageName?.removePrefix("icon_")
binding.avatarView.setAvatar(avatar, layerMap)
}

View file

@ -28,7 +28,7 @@ class PurchaseDialogCustomizationSetContent(context: Context) : PurchaseDialogCo
imageView.layoutParams = FlexboxLayout.LayoutParams(76.dpToPx(context), 76.dpToPx(context))
binding.imageViewWrapper.addView(imageView)
}
if (item.path?.contains("facialHair") == true) {
if (item.key == "facialHair") {
binding.notesTextView.text = context.getString(R.string.facial_hair_notes)
} else {
binding.notesTextView.text = item.notes

View file

@ -190,9 +190,9 @@ class CustomizationDeserializer : JsonDeserializer<List<Customization>> {
customization.isBuyable = false
}
else -> {
val readableSetName = "SET $setCount: ${
val readableSetName = "SET ${setCount+1}: ${
getMonthName(
setName.substring(11, 13).toInt()
setName.substring(11, 13).toInt() - 1
)
} ${setName.substring(13, 17)}"
customization.customizationSetName = readableSetName

View file

@ -43,6 +43,7 @@ class TaskScoringResult(): Parcelable {
questDamage = parcel.readValue(Double::class.java.classLoader) as? Double
questItemsFound = parcel.readValue(Int::class.java.classLoader) as? Int
drop = parcel.readValue(TaskDirectionDataDrop::class.java.classLoader) as? TaskDirectionDataDrop
hasDied = parcel.readByte() != 0.toByte()
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
@ -55,6 +56,7 @@ class TaskScoringResult(): Parcelable {
parcel.writeValue(questDamage)
parcel.writeValue(questItemsFound)
parcel.writeValue(drop)
parcel.writeByte(if (hasDied) 1 else 0)
}
override fun describeContents(): Int {

View file

@ -7,7 +7,9 @@ import com.habitrpg.common.habitica.models.tasks.TasksOrder
import com.habitrpg.wearos.habitica.models.tasks.Task
import com.habitrpg.wearos.habitica.models.tasks.TaskList
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import java.util.Date
@ -17,16 +19,16 @@ import javax.inject.Singleton
@Singleton
class TaskLocalRepository @Inject constructor() {
private val tasks = mapOf(
TaskType.HABIT to MutableLiveData<List<Task>>(),
TaskType.DAILY to MutableLiveData<List<Task>>(),
TaskType.TODO to MutableLiveData<List<Task>>(),
TaskType.REWARD to MutableLiveData<List<Task>>()
TaskType.HABIT to MutableStateFlow<List<Task>?>(null),
TaskType.DAILY to MutableStateFlow<List<Task>?>(null),
TaskType.TODO to MutableStateFlow<List<Task>?>(null),
TaskType.REWARD to MutableStateFlow<List<Task>?>(null)
)
private val taskCountHelperValue = MutableLiveData<Long>()
fun getTasks(type: TaskType): Flow<List<Task>> {
return tasks[type]?.asFlow() ?: emptyFlow()
return tasks[type]!!.filterNotNull()
}
fun saveTasks(tasks: TaskList, order: TasksOrder?) {

View file

@ -3,7 +3,9 @@ package com.habitrpg.wearos.habitica.ui.views
import android.content.Context
import android.content.res.ColorStateList
import android.util.AttributeSet
import android.view.Gravity
import android.widget.RelativeLayout
import androidx.core.view.isVisible
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.databinding.TextActionChipBinding
import com.habitrpg.common.habitica.extensions.layoutInflater
@ -20,7 +22,16 @@ open class TextActionChipView @JvmOverloads constructor(context: Context, attrs:
init {
binding.chipTextview.text = attributes?.getText(R.styleable.TextActionChip_chipText)
binding.chipImageview.setImageDrawable(attributes?.getDrawable(R.styleable.TextActionChip_chipImage))
val icon = attributes?.getDrawable(R.styleable.TextActionChip_chipImage)
if (icon != null) {
binding.chipImageview.setImageDrawable(icon)
binding.chipTextview.gravity = Gravity.START
binding.chipImageview.isVisible = true
} else {
binding.chipImageview.setImageDrawable(icon)
binding.chipTextview.gravity = Gravity.START
binding.chipImageview.isVisible = false
}
attributes?.getColor(R.styleable.TextActionChip_chipColor, context.getColor(R.color.surface))?.let {
binding.wearChipButton.backgroundTintList = ColorStateList.valueOf(it)
}

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@array/android_wear_capabilities">
<string-array name="android_wear_capabilities">
<item>receive_message</item>
</string-array>
</resources>