mirror of
https://github.com/sudoxnym/habitica-android.git
synced 2026-07-21 05:15:00 +00:00
Fix RYA issues
This commit is contained in:
parent
642ef76519
commit
37a307184c
16 changed files with 96 additions and 19 deletions
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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">You’ll 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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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?) {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
7
wearos/src/main/res/values/wear.xml
Normal file
7
wearos/src/main/res/values/wear.xml
Normal 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>
|
||||
Loading…
Reference in a new issue