diff --git a/Habitica/res/layout/activity_main_content.xml b/Habitica/res/layout/activity_main_content.xml
index a575dd7e5..803ea4575 100644
--- a/Habitica/res/layout/activity_main_content.xml
+++ b/Habitica/res/layout/activity_main_content.xml
@@ -63,7 +63,7 @@
android:maxLines="1"
android:singleLine="true"
android:layout_alignParentStart="true"
- style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
+ style="@style/ToolbarTitle"
tools:text="Habitica"
android:background="@drawable/teams_title_bg"
android:paddingHorizontal="@dimen/spacing_large"
diff --git a/Habitica/res/layout/activity_task_form.xml b/Habitica/res/layout/activity_task_form.xml
index c0d324029..102ab012e 100644
--- a/Habitica/res/layout/activity_task_form.xml
+++ b/Habitica/res/layout/activity_task_form.xml
@@ -17,6 +17,7 @@
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="@style/Toolbar"
+ style="@style/ToolbarTitleStyle"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"/>
diff --git a/Habitica/res/layout/subscription_details.xml b/Habitica/res/layout/subscription_details.xml
index 2e1674e8f..228baf133 100644
--- a/Habitica/res/layout/subscription_details.xml
+++ b/Habitica/res/layout/subscription_details.xml
@@ -171,8 +171,9 @@
android:layout_height="wrap_content"
android:text="@string/months_subscribed"
android:gravity="center"
- android:fontFamily="sans-serif-medium"
- android:textColor="@color/text_secondary"/>
+ android:fontFamily="sans-serif"
+ android:textStyle="bold"
+ android:textSize="12sp"/>
+ android:fontFamily="sans-serif"
+ android:textStyle="bold"
+ android:textSize="12sp"/>
@@ -210,18 +212,20 @@
android:layout_height="wrap_content">
diff --git a/Habitica/res/navigation/navigation.xml b/Habitica/res/navigation/navigation.xml
index 1379c226f..3e7cadb5b 100644
--- a/Habitica/res/navigation/navigation.xml
+++ b/Habitica/res/navigation/navigation.xml
@@ -124,6 +124,17 @@
android:id="@+id/openEquipmentDetail"
app:destination="@id/equipmentDetailFragment" />
+
+
+
+
@color/brand_400
@color/brand_400
+ @color/white
@color/gray_600
@color/gray_500
@color/gray_400
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index e4e655bf1..5ba2d3c47 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -1287,6 +1287,12 @@
Status
Regular Access
Message flagged %d times.
+ Amazon
+ Apple Pay
+ Google Pay
+ PayPal
+ Stripe
+ Shadow muted, hidden
- You
- You, %d other
diff --git a/Habitica/res/values/styles.xml b/Habitica/res/values/styles.xml
index 2c7df74cd..044d6aea9 100644
--- a/Habitica/res/values/styles.xml
+++ b/Habitica/res/values/styles.xml
@@ -1,1019 +1,1031 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/MainNavigationController.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/MainNavigationController.kt
index a5d4089c1..34debe48a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/MainNavigationController.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/helpers/MainNavigationController.kt
@@ -26,6 +26,10 @@ object MainNavigationController {
this.controllerReference = WeakReference(navController)
}
+ fun updateLabel(destinationID: Int, label: String) {
+ navController?.findDestination(destinationID)?.label = label
+ }
+
fun navigate(transactionId: Int, args: Bundle? = null) {
if (abs((lastNavigation?.time ?: 0) - Date().time) > 500) {
lastNavigation = Date()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt
index 8f112448c..9c937752e 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/BaseActivity.kt
@@ -158,7 +158,6 @@ abstract class BaseActivity : AppCompatActivity() {
"green" -> R.style.MainAppTheme_Green
"teal" -> R.style.MainAppTheme_Teal
"blue" -> R.style.MainAppTheme_Blue
- "taskform" -> R.style.MainAppTheme_TaskForm
else -> R.style.MainAppTheme
}
)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt
index ad1ea0e88..a81db69e3 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt
@@ -127,7 +127,7 @@ class FullProfileActivity : BaseActivity() {
binding.blockedDisclaimerView.visibility =
if (isUserBlocked()) View.VISIBLE else View.GONE
- isModerator = it?.hasPermission(Permission.USER_SUPPORT) == true
+ isModerator = it?.hasPermission(Permission.MODERATOR) == true
binding.adminStatusView.isVisible = isModerator
if (isModerator) {
val member = socialRepository.retrieveMember(userID, true)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt
index 9a4415b15..2e8ff7f6f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/NavigationDrawerFragment.kt
@@ -428,7 +428,14 @@ class NavigationDrawerFragment : DialogFragment() {
HabiticaDrawerItem(
R.id.avatarOverviewFragment,
SIDEBAR_AVATAR,
- context.getString(R.string.sidebar_avatar_equipment)
+ context.getString(R.string.sidebar_avatar)
+ )
+ )
+ items.add(
+ HabiticaDrawerItem(
+ R.id.equipmentOverviewFragment,
+ SIDEBAR_EQUIPMENT,
+ context.getString(R.string.sidebar_equipment)
)
)
items.add(
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt
index a2befc053..0b6ea96b1 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/AvatarOverviewFragment.kt
@@ -34,7 +34,7 @@ import com.habitrpg.android.habitica.ui.views.EquipmentOverviewView
import com.habitrpg.android.habitica.ui.views.SegmentedControl
import javax.inject.Inject
-class AvatarOverviewFragment : BaseMainFragment(),
+open class AvatarOverviewFragment : BaseMainFragment(),
AdapterView.OnItemSelectedListener {
@Inject
@@ -42,6 +42,8 @@ class AvatarOverviewFragment : BaseMainFragment
override var binding: FragmentComposeScrollingBinding? = null
+ protected var showCustomization = true
+
override fun createBinding(
inflater: LayoutInflater,
container: ViewGroup?
@@ -59,7 +61,9 @@ class AvatarOverviewFragment : BaseMainFragment
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
HabiticaTheme {
- AvatarOverviewView(userViewModel, { type, category ->
+ AvatarOverviewView(userViewModel,
+ showCustomization, !showCustomization,
+ { type, category ->
displayCustomizationFragment(type, category)
}, { type, equipped, isCostume ->
displayEquipmentFragment(type, equipped, isCostume)
@@ -101,6 +105,8 @@ class AvatarOverviewFragment : BaseMainFragment
@Composable
fun AvatarOverviewView(userViewModel: MainUserViewModel,
+ showCustomization: Boolean = true,
+ showEquipment: Boolean = true,
onCustomizationTap: (String, String?) -> Unit,
onEquipmentTap: (String, String?, Boolean) -> Unit
) {
@@ -109,65 +115,82 @@ fun AvatarOverviewView(userViewModel: MainUserViewModel,
Modifier
.padding(horizontal = 8.dp)
.padding(bottom = 16.dp)) {
- Row(Modifier.padding(horizontal = 12.dp, vertical = 15.dp),
- verticalAlignment = Alignment.CenterVertically) {
- Text(
- stringResource(R.string.avatar_size),
- style = HabiticaTheme.typography.subtitle2,
- color = HabiticaTheme.colors.textSecondary
- )
- Spacer(modifier = Modifier.weight(1f))
- SegmentedControl(items = listOf(stringResource(R.string.avatar_size_slim), stringResource(R.string.avatar_size_broad
- )), defaultSelectedItemIndex = if (user?.preferences?.size == "slim") 0 else 1, onItemSelection = {
- userViewModel.updateUser("preferences.size", if (it == 0) "slim" else "broad")
- })
+ if (showCustomization) {
+ Row(
+ Modifier.padding(horizontal = 12.dp, vertical = 15.dp),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Text(
+ stringResource(R.string.avatar_size),
+ style = HabiticaTheme.typography.subtitle2,
+ color = HabiticaTheme.colors.textSecondary
+ )
+ Spacer(modifier = Modifier.weight(1f))
+ SegmentedControl(items = listOf(
+ stringResource(R.string.avatar_size_slim), stringResource(
+ R.string.avatar_size_broad
+ )
+ ),
+ defaultSelectedItemIndex = if (user?.preferences?.size == "slim") 0 else 1,
+ onItemSelection = {
+ userViewModel.updateUser(
+ "preferences.size",
+ if (it == 0) "slim" else "broad"
+ )
+ })
+ }
+ AvatarCustomizationOverviewView(user?.preferences, onCustomizationTap)
}
- AvatarCustomizationOverviewView(user?.preferences, onCustomizationTap)
- Row(
- Modifier
- .padding(horizontal = 12.dp)
- .padding(top = 15.dp),
- verticalAlignment = Alignment.CenterVertically) {
- Text(stringResource(R.string.equipped), style = HabiticaTheme.typography.subtitle2,
- color = HabiticaTheme.colors.textSecondary)
- Spacer(modifier = Modifier.weight(1f))
- Text(
- stringResource(R.string.equip_automatically),
- style = HabiticaTheme.typography.body2,
- color = HabiticaTheme.colors.textPrimary
- )
- Switch(checked = user?.preferences?.autoEquip == true, onCheckedChange = {
- userViewModel.updateUser("preferences.autoEquip", it)
- })
- }
- EquipmentOverviewView(user?.items?.gear?.equipped, { type, equipped ->
- onEquipmentTap(type, equipped, false)
- })
- Row(
- Modifier
- .padding(horizontal = 12.dp)
- .padding(top = 15.dp),
- verticalAlignment = Alignment.CenterVertically
- ) {
- Text(
- stringResource(R.string.costume),
- style = HabiticaTheme.typography.subtitle2,
- color = HabiticaTheme.colors.textSecondary
- )
- Spacer(modifier = Modifier.weight(1f))
- Text(
- stringResource(R.string.wear_costume),
- style = HabiticaTheme.typography.body2,
- color = HabiticaTheme.colors.textPrimary
- )
- Switch(checked = user?.preferences?.costume == true, onCheckedChange = {
- userViewModel.updateUser("preferences.costume", it)
- })
- }
- AnimatedVisibility(visible = user?.preferences?.costume == true) {
- EquipmentOverviewView(user?.items?.gear?.costume, { type, equipped ->
- onEquipmentTap(type, equipped, true)
+ if (showEquipment) {
+ Row(
+ Modifier
+ .padding(horizontal = 12.dp)
+ .padding(top = 15.dp),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Text(
+ stringResource(R.string.equipped), style = HabiticaTheme.typography.subtitle2,
+ color = HabiticaTheme.colors.textSecondary
+ )
+ Spacer(modifier = Modifier.weight(1f))
+ Text(
+ stringResource(R.string.equip_automatically),
+ style = HabiticaTheme.typography.body2,
+ color = HabiticaTheme.colors.textPrimary
+ )
+ Switch(checked = user?.preferences?.autoEquip == true, onCheckedChange = {
+ userViewModel.updateUser("preferences.autoEquip", it)
+ })
+ }
+ EquipmentOverviewView(user?.items?.gear?.equipped, { type, equipped ->
+ onEquipmentTap(type, equipped, false)
})
+ Row(
+ Modifier
+ .padding(horizontal = 12.dp)
+ .padding(top = 15.dp),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Text(
+ stringResource(R.string.costume),
+ style = HabiticaTheme.typography.subtitle2,
+ color = HabiticaTheme.colors.textSecondary
+ )
+ Spacer(modifier = Modifier.weight(1f))
+ Text(
+ stringResource(R.string.wear_costume),
+ style = HabiticaTheme.typography.body2,
+ color = HabiticaTheme.colors.textPrimary
+ )
+ Switch(checked = user?.preferences?.costume == true, onCheckedChange = {
+ userViewModel.updateUser("preferences.costume", it)
+ })
+ }
+ AnimatedVisibility(visible = user?.preferences?.costume == true) {
+ EquipmentOverviewView(user?.items?.gear?.costume, { type, equipped ->
+ onEquipmentTap(type, equipped, true)
+ })
+ }
}
}
}
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/EquipmentOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/EquipmentOverviewFragment.kt
new file mode 100644
index 000000000..6c2b7b01e
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/customization/EquipmentOverviewFragment.kt
@@ -0,0 +1,10 @@
+package com.habitrpg.android.habitica.ui.fragments.inventory.customization
+
+import android.os.Bundle
+
+class EquipmentOverviewFragment : AvatarOverviewFragment() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ showCustomization = false
+ super.onCreate(savedInstanceState)
+ }
+}
\ No newline at end of file
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
index 7957e3f65..cfa976006 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
@@ -26,6 +26,7 @@ import com.habitrpg.android.habitica.components.UserComponent
import com.habitrpg.android.habitica.databinding.FragmentViewpagerBinding
import com.habitrpg.android.habitica.extensions.setTintWith
import com.habitrpg.android.habitica.helpers.AmplitudeManager
+import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.launchCatching
import com.habitrpg.android.habitica.ui.activities.TaskFormActivity
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
@@ -420,6 +421,7 @@ class TasksFragment : BaseMainFragment(), SearchView.O
private fun updateBoardDisplay() {
if (viewModel.ownerTitle.isNotBlank()) {
activity?.title = viewModel.ownerTitle
+ MainNavigationController.updateLabel(R.id.tasksFragment, viewModel.ownerTitle.toString())
}
viewModel.userViewModel.currentTeamPlan.value = viewModel.teamPlans[viewModel.ownerID.value]
lifecycleScope.launchCatching {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt
index da19135d9..3043d3b6a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/ChatRecyclerViewHolder.kt
@@ -212,7 +212,11 @@ class ChatRecyclerMessageViewHolder(
}
if ((chatMessage?.flagCount ?: 0) > 0) {
- binding.flagCountTextview.text = context.getString(R.string.message_flagged, (chatMessage?.flagCount ?: 0))
+ binding.flagCountTextview.text = if (chatMessage?.flagCount == 10) {
+ context.getString(R.string.shadow_muted_hidden)
+ } else {
+ context.resources.getQuantityString(R.plurals.flagged_count, (chatMessage?.flagCount ?: 0))
+ }
binding.flagCountTextview.isVisible = true
if (chatMessage?.flagCount == 1) {
binding.flagCountTextview.setTextColor(ContextCompat.getColor(context, R.color.text_orange))
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt
index 89c0c9bd1..b15384319 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/AppHeaderView.kt
@@ -228,20 +228,33 @@ fun AppHeaderView(
ClassIcon(className = user?.stats?.habitClass, hasClass = user?.hasClass ?: false, modifier = Modifier.padding(4.dp))
user?.let { UserLevelText(it) }
Spacer(Modifier.weight(1f))
- if (user is User && user.isSubscribed) {
+ if (user is User) {
+ if (user.isSubscribed) {
+ CurrencyText(
+ "hourglasses",
+ user.hourglassCount.toDouble(),
+ modifier = Modifier
+ .padding(end = 12.dp)
+ .clickable {
+ MainNavigationController.navigate(R.id.subscriptionPurchaseActivity)
+ }, decimals = 0
+ )
+ }
CurrencyText(
- "hourglasses",
- user.hourglassCount.toDouble(),
- modifier = Modifier
- .padding(end = 12.dp)
- .clickable {
- MainNavigationController.navigate(R.id.subscriptionPurchaseActivity)
- }, decimals = 0)
+ "gold",
+ user?.stats?.gp ?: 0.0,
+ modifier = Modifier.padding(end = 12.dp),
+ decimals = 0
+ )
+ CurrencyText(
+ "gems",
+ user?.gemCount?.toDouble() ?: 0.0,
+ modifier = Modifier.clickable {
+ MainNavigationController.navigate(R.id.gemPurchaseActivity)
+ },
+ decimals = 0
+ )
}
- CurrencyText("gold", user?.stats?.gp ?: 0.0, modifier = Modifier.padding(end = 12.dp), decimals = 0)
- CurrencyText("gems", user?.gemCount?.toDouble() ?: 0.0, modifier = Modifier.clickable {
- MainNavigationController.navigate(R.id.gemPurchaseActivity)
- }, decimals = 0)
}
}
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt
index 2c4a4e32b..bbf37d22c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/CurrencyText.kt
@@ -22,7 +22,7 @@ fun CurrencyText(
currency: String,
value: Double,
modifier: Modifier = Modifier,
- decimals: Int = 2,
+ decimals: Int = 0,
minForAbbrevation: Int = 0,
animated: Boolean = true
) {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt
index 2928f2560..2efa75606 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/equipment/EquipmentOverviewView.kt
@@ -192,10 +192,16 @@ fun AvatarCustomizationOverviewView(
Row(horizontalArrangement = Arrangement.SpaceBetween, modifier = Modifier.fillMaxWidth()) {
OverviewItem(
stringResource(R.string.avatar_wheelchair),
- preferences?.chair?.let { if (it.startsWith("handleless")) "chair_$it" else it })
+ preferences?.chair?.let { if (it.startsWith("handleless")) "chair_$it" else it },
+ Modifier.clickable {
+ onCustomizationTap("chair", null)
+ })
OverviewItem(
stringResource(R.string.avatar_background),
- preferences?.background.let { "background_$it" })
+ preferences?.background.let { "background_$it" },
+ Modifier.clickable {
+ onCustomizationTap("background", null)
+ })
Box(Modifier.size(70.dp))
Box(Modifier.size(70.dp))
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt
index 03e3d67fd..a41101502 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/navigation/HabiticaBottomNavigationView.kt
@@ -65,6 +65,7 @@ class HabiticaBottomNavigationView @JvmOverloads constructor(
set(value) {
if (field == value) return
field = value
+ binding.addButton.isEnabled = value
val animator = ObjectAnimator.ofFloat(0f, 1.0f)
if (field) {
binding.addButtonBackground.animate()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt
index 561c335ab..aa5542b0a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt
@@ -79,11 +79,26 @@ class SubscriptionDetailsView : LinearLayout {
}
when (plan.paymentMethod) {
- "Amazon Payments" -> binding.paymentProcessorImageView.setImageResource(R.drawable.payment_amazon)
- "Apple" -> binding.paymentProcessorImageView.setImageResource(R.drawable.payment_apple)
- "Google" -> binding.paymentProcessorImageView.setImageResource(R.drawable.payment_google)
- "PayPal" -> binding.paymentProcessorImageView.setImageResource(R.drawable.payment_paypal)
- "Stripe" -> binding.paymentProcessorImageView.setImageResource(R.drawable.payment_stripe)
+ "Amazon Payments" -> {
+ binding.paymentProcessorImageView.setImageResource(R.drawable.payment_amazon)
+ binding.subscriptionPaymentMethodTextview.text = context.getString(R.string.amazon)
+ }
+ "Apple" -> {
+ binding.paymentProcessorImageView.setImageResource(R.drawable.payment_apple)
+ binding.subscriptionPaymentMethodTextview.text = context.getString(R.string.apple_pay)
+ }
+ "Google" -> {
+ binding.paymentProcessorImageView.setImageResource(R.drawable.payment_google)
+ binding.subscriptionPaymentMethodTextview.text = context.getString(R.string.google_pay)
+ }
+ "PayPal" -> {
+ binding.paymentProcessorImageView.setImageResource(R.drawable.payment_paypal)
+ binding.subscriptionPaymentMethodTextview.text = context.getString(R.string.paypal)
+ }
+ "Stripe" -> {
+ binding.paymentProcessorImageView.setImageResource(R.drawable.payment_stripe)
+ binding.subscriptionPaymentMethodTextview.text = context.getString(R.string.stripe_payment)
+ }
else -> {
if (plan.isGiftedSub) {
binding.paymentProcessorImageView.setImageResource(R.drawable.payment_gift)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt
index 1ba7edea0..f957feb1b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/HabitScoringButtonsView.kt
@@ -84,7 +84,7 @@ private fun HabitScoringSelection(
if (it) Color(context.getThemeColor(R.attr.colorTintedBackground)) else colorResource(R.color.text_dimmed)
}
val textColor = selectedState.animateColor {
- if (it) MaterialTheme.colors.primary else colorResource(R.color.text_secondary)
+ if (it) MaterialTheme.colors.primary else colorResource(R.color.text_ternary)
}
val borderColor = selectedState.animateColor {
if (it) MaterialTheme.colors.primary else colorResource(R.color.text_dimmed)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt
index ea38382e3..bfdb4dbea 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/tasks/form/TaskDifficultyButtons.kt
@@ -82,7 +82,7 @@ private fun TaskDifficultySelection(
if (it) Color(context.getThemeColor(R.attr.colorTintedBackground)) else MaterialTheme.colors.primary
}
val textColor = selectedState.animateColor {
- if (it) MaterialTheme.colors.primary else colorResource(R.color.text_secondary)
+ if (it) MaterialTheme.colors.primary else colorResource(R.color.text_ternary)
}
Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(6.dp), modifier = modifier) {
Box(
diff --git a/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt b/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt
index 317babbbd..050acfaf4 100644
--- a/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt
+++ b/common/src/main/java/com/habitrpg/common/habitica/helpers/NumberAbbreviator.kt
@@ -12,7 +12,7 @@ object NumberAbbreviator {
}
fun abbreviate(context: Context?, number: Double, numberOfDecimals: Int = 2, minForAbbrevation: Int = 0): String {
- val decimalCount = if (number > -1 && number < 1 && numberOfDecimals == 0) 1 else numberOfDecimals
+ val decimalCount = if (number != 0.0 && number > -1 && number < 1 && numberOfDecimals == 0) 1 else numberOfDecimals
var usedNumber = number
var counter = 0
while (usedNumber >= 1000 && number >= minForAbbrevation) {
diff --git a/common/src/main/res/values/colors.xml b/common/src/main/res/values/colors.xml
index a6bc60c39..bd871cd19 100644
--- a/common/src/main/res/values/colors.xml
+++ b/common/src/main/res/values/colors.xml
@@ -95,6 +95,7 @@
#794b00
#7f3300
+ #30283D
#3D2828
#3D2828
#28373D
@@ -103,6 +104,7 @@
#3D3528
#3D3028
+ #201C26
#261C1C
#261C1C
#191D21
@@ -115,6 +117,7 @@
@color/yellow_100
@color/blue_100
+ @color/gray_50
@color/gray_50
@color/gray_100
@color/gray_200
diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml
index f41d9112f..85de45c26 100644
--- a/common/src/main/res/values/strings.xml
+++ b/common/src/main/res/values/strings.xml
@@ -65,6 +65,10 @@
- %d Reward
- %d Rewards
+
+ - Flagged %d tim2
+ - Flagged %d times, hidden
+
Create a Task
Complete a Task
Create %s
diff --git a/version.properties b/version.properties
index 50e2eef34..70bad34fa 100644
--- a/version.properties
+++ b/version.properties
@@ -1,2 +1,2 @@
NAME=4.1
-CODE=4891
\ No newline at end of file
+CODE=4901
\ No newline at end of file