diff --git a/Habitica/res/layout/activity_armoire.xml b/Habitica/res/layout/activity_armoire.xml
index bc8ef3dd0..a5bfd916d 100644
--- a/Habitica/res/layout/activity_armoire.xml
+++ b/Habitica/res/layout/activity_armoire.xml
@@ -203,7 +203,7 @@
android:layout_height="wrap_content"
android:text="@string/subscription_benefit_armoire_sub"
android:textColor="@color/white"
- style="@style/Body2"
+ style="@style/Body1"
android:gravity="center"
android:paddingHorizontal="48dp"
android:layout_marginTop="6dp"/>
@@ -256,8 +256,8 @@
android:layout_height="wrap_content"
android:text="@string/armoire_drop_rates"
android:textColor="@color/brand_600"
- android:layout_marginTop="22dp"
- android:layout_marginBottom="8dp"
+ android:layout_marginTop="16dp"
+ android:layout_marginBottom="16dp"
style="@style/Body2"/>
diff --git a/Habitica/res/layout/activity_death.xml b/Habitica/res/layout/activity_death.xml
index 938db55ee..2b5e2dc04 100644
--- a/Habitica/res/layout/activity_death.xml
+++ b/Habitica/res/layout/activity_death.xml
@@ -195,4 +195,10 @@
+
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 61185c294..e5c1880ef 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -1458,6 +1458,7 @@
\@Mentions in Group Plans
Subscribe to hold on with 1HP!
Your subscription gives you an extra chance at the Armoire!
+ You got a second chance with 1HP!
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
index e440be0bc..51d1e379c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
@@ -100,7 +100,13 @@ class UserRepositoryImpl(
override suspend fun revive(): User? {
val revivedUser = apiClient.revive()
+ val currentUser = localRepository.getLiveUser(currentUserID)
+ if (revivedUser != null && currentUser != null) {
+ val brokenItem = currentUser.items?.gear?.owned?.firstOrNull { equipment ->
+ revivedUser.items?.gear?.owned?.filter { it.key == equipment.key }?.size == 0
+ }
+ }
return retrieveUser(false, true)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt
index 432b3f515..e992c93da 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ArmoireActivity.kt
@@ -210,7 +210,7 @@ class ArmoireActivity : BaseActivity() {
lifecycleScope.launch(ExceptionHandler.coroutine()) {
userRepository.updateUser("stats.gp", currentGold + 100)
val buyResponse =
- inventoryRepository.buyItem(user, "armoire", 100.0, 1) ?: return@launch
+ inventoryRepository.buyItem(user, "armoire", 0.0, 1) ?: return@launch
configure(
buyResponse.armoire["type"] ?: "",
buyResponse.armoire["dropKey"] ?: "",
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt
index 4980ce5a9..3f4e943ef 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt
@@ -4,9 +4,12 @@ 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.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
@@ -35,7 +38,7 @@ import java.util.Date
import javax.inject.Inject
@AndroidEntryPoint
-class DeathActivity : BaseActivity() {
+class DeathActivity : BaseActivity(), SnackbarActivity {
private lateinit var binding: ActivityDeathBinding
@Inject
@@ -135,16 +138,15 @@ class DeathActivity : BaseActivity() {
putLong("last_sub_revive", Date().time)
}
lifecycleScope.launchCatching {
- delay(400)
+ delay(300)
binding.reviveSubscriberWrapper.startAnimation(Animations.fadeOutAnimation())
}
lifecycleScope.launch(ExceptionHandler.coroutine()) {
userRepository.updateUser("stats.hp", 1)
+ HabiticaSnackbar.showSnackbar(
+ this@DeathActivity.snackbarContainer(), getString(R.string.subscriber_benefit_success_faint), HabiticaSnackbar.SnackbarDisplayType.SUCCESS, isSubscriberBenefit = true)
+ delay(2000)
finish()
- (parent as? SnackbarActivity)?.snackbarContainer()?.let { it1 ->
- HabiticaSnackbar.showSnackbar(
- it1, getString(R.string.subscriber_benefit_used_faint), HabiticaSnackbar.SnackbarDisplayType.SUCCESS, isSubscriberBenefit = true)
- }
}
}
@@ -153,6 +155,11 @@ class DeathActivity : BaseActivity() {
lifecycleScope.launch(ExceptionHandler.coroutine()) {
userRepository.revive()
finish()
+ delay(1000)
+ (HabiticaBaseApplication.getInstance(this@DeathActivity)?.currentActivity as? SnackbarActivity)?.let {activity ->
+ HabiticaSnackbar.showSnackbar(
+ activity.snackbarContainer(), getString(R.string.subscriber_benefit_success_faint), HabiticaSnackbar.SnackbarDisplayType.SUCCESS, isSubscriberBenefit = true)
+ }
}
}
startAnimating()
@@ -186,4 +193,8 @@ class DeathActivity : BaseActivity() {
override fun onBackPressed() {
moveTaskToBack(true)
}
+
+ override fun snackbarContainer(): ViewGroup {
+ return binding.snackbarContainer
+ }
}
diff --git a/version.properties b/version.properties
index c6c4d9e12..647c06e3b 100644
--- a/version.properties
+++ b/version.properties
@@ -1,2 +1,2 @@
NAME=4.3
-CODE=6511
\ No newline at end of file
+CODE=6521
\ No newline at end of file
diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt
index 1e31df4d0..c3f1e7d53 100644
--- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt
+++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/activities/LoginActivity.kt
@@ -20,8 +20,7 @@ import dagger.hilt.android.AndroidEntryPoint
class LoginActivity : BaseActivity() {
enum class State {
INITIAL,
- OTHER,
- INPUT
+ OTHER
}
override val viewModel: LoginViewModel by viewModels()
private var currentState: State = State.INITIAL
@@ -34,32 +33,14 @@ class LoginActivity : BaseActivity() {
binding.otherButton.isVisible = true
binding.googleLoginButton.isVisible = false
binding.registerButton.isVisible = false
- binding.usernamePasswordButton.isVisible = false
- binding.usernameEditText.isVisible = false
- binding.passwordEditText.isVisible = false
- binding.loginButton.isVisible = false
}
State.OTHER -> {
binding.descriptionView.isVisible = false
binding.signInOnPhoneButton.isVisible = false
binding.otherButton.isVisible = false
binding.googleLoginButton.isVisible = true
- binding.registerButton.isVisible = binding.registerButton.isEnabled
- binding.usernamePasswordButton.isVisible = true
- binding.usernameEditText.isVisible = false
- binding.passwordEditText.isVisible = false
- binding.loginButton.isVisible = false
- }
- State.INPUT -> {
- binding.descriptionView.isVisible = false
- binding.signInOnPhoneButton.isVisible = false
- binding.otherButton.isVisible = false
- binding.googleLoginButton.isVisible = false
- binding.registerButton.isVisible = false
- binding.usernamePasswordButton.isVisible = false
- binding.usernameEditText.isVisible = true
- binding.passwordEditText.isVisible = true
- binding.loginButton.isVisible = true
+ binding.registerButton.isVisible = true
+ binding.registerButton.alpha = if (binding.registerButton.isEnabled) 1.0f else 0.7f
}
}
binding.scrollView.smoothScrollTo(0, 0)
@@ -75,20 +56,10 @@ class LoginActivity : BaseActivity() {
binding.signInOnPhoneButton.setOnClickListener { openLoginOnPhone() }
binding.otherButton.setOnClickListener { currentState = State.OTHER }
- binding.usernamePasswordButton.setOnClickListener { currentState = State.INPUT }
- binding.loginButton.setOnClickListener { loginLocal() }
binding.googleLoginButton.setOnClickListener { loginGoogle() }
binding.registerButton.setOnClickListener { openRegisterOnPhone() }
- binding.passwordEditText.transformationMethod = PasswordTransformationMethod()
- binding.usernameEditText.doOnTextChanged { text, start, before, count ->
- setLoginButtonIsEnabled()
- }
- binding.passwordEditText.doOnTextChanged { text, start, before, count ->
- setLoginButtonIsEnabled()
- }
-
currentState = State.INITIAL
}
@@ -100,37 +71,10 @@ class LoginActivity : BaseActivity() {
openRemoteActivity(DeviceCommunication.SHOW_LOGIN)
}
- private fun loginLocal() {
- val username: String = binding.usernameEditText.text.toString().trim { it <= ' ' }
- val password: String = binding.passwordEditText.text.toString()
- if (username.isEmpty() || password.isEmpty()) {
- showValidationError(getString(R.string.login_validation_error_fieldsmissing))
- return
- }
- viewModel.login(username, password) {
- stopAnimatingProgress()
- }
- startAnimatingProgress()
- }
-
private fun loginGoogle() {
viewModel.handleGoogleLogin(this, pickAccountResult)
}
- private fun showValidationError(message: String) {
- val alert = AlertDialog.Builder(this).create()
- alert.setTitle(R.string.login_validation_error_title)
- alert.setMessage(message)
- alert.setButton(AlertDialog.BUTTON_NEUTRAL, getString(R.string.ok)) { thisAlert, _ ->
- thisAlert.dismiss()
- }
- alert.show()
- }
-
- private fun setLoginButtonIsEnabled() {
- binding.loginButton.isEnabled = binding.usernameEditText.text.isNotEmpty() && binding.passwordEditText.text.isNotEmpty()
- }
-
private val pickAccountResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
val task = GoogleSignIn.getSignedInAccountFromIntent(it.data)
viewModel.handleGoogleLoginResult(this, task, recoverFromPlayServicesErrorResult)
diff --git a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/ConnectedActionChipView.kt b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/ConnectedActionChipView.kt
index 1162848a7..938f23166 100644
--- a/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/ConnectedActionChipView.kt
+++ b/wearos/src/main/java/com/habitrpg/wearos/habitica/ui/views/ConnectedActionChipView.kt
@@ -23,7 +23,7 @@ class ConnectedActionChipView(context: Context, attrs: AttributeSet? = null) :
val result = Tasks.await(capabilityClient.getCapability("open_activity", CapabilityClient.FILTER_REACHABLE))
launch(Dispatchers.Main) {
isEnabled = result.nodes.firstOrNull { it.isNearby } != null
- isVisible = isEnabled
+ alpha = if (isEnabled) 1.0f else 0.7f
}
}
}
diff --git a/wearos/src/main/res/layout/activity_login.xml b/wearos/src/main/res/layout/activity_login.xml
index 575e9a6d2..d1ed336eb 100644
--- a/wearos/src/main/res/layout/activity_login.xml
+++ b/wearos/src/main/res/layout/activity_login.xml
@@ -15,8 +15,8 @@
android:gravity="center"
android:animateLayoutChanges="true">
-
-
-
-
-
-
-
-
\ No newline at end of file
+