diff --git a/Habitica/res/layout/activity_create_challenge.xml b/Habitica/res/layout/activity_create_challenge.xml
index a899c876c..18f8bbda0 100644
--- a/Habitica/res/layout/activity_create_challenge.xml
+++ b/Habitica/res/layout/activity_create_challenge.xml
@@ -4,8 +4,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".ui.activities.PrefsActivity"
- android:orientation="vertical">
+ android:orientation="vertical"
+ android:background="@color/content_background">
+ app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
Purchasing Gems supports our small team at Habitica
Month Released
The password was incorrect
+
+ Habitica Official
+ Academics
+ Advocacy + Causes
+ Creativity
+ Entertainment
+ Finance
+ Health + Fitness
+ Hobbies + Occupations
+ Location-based
+ Mental Health + Self Care
+ Getting Organized
+ Self Improvement
+ Spirituality
+ Time Management + Accountability
diff --git a/Habitica/res/values/values.xml b/Habitica/res/values/values.xml
index 0bf3d4ef4..8ad4f79ff 100644
--- a/Habitica/res/values/values.xml
+++ b/Habitica/res/values/values.xml
@@ -234,6 +234,41 @@
- compact
- minimal
-
+
false
+
+
+ - habitica_official
+ - academics
+ - advocacy_causes
+ - creativity
+ - entertainment
+ - finance
+ - health_fitness
+ - hobbies_occupations
+ - location_based
+ - mental_health
+ - getting_organized
+ - self_improvement
+ - spirituality'
+ - time_management'
+
+
+
+ - @string/habitica_official
+ - @string/academics
+ - @string/advocacy_causes
+ - @string/creativity
+ - @string/entertainment
+ - @string/finance
+ - @string/health_fitness
+ - @string/hobbies_occupations
+ - @string/location_based
+ - @string/mental_health
+ - @string/getting_organized
+ - @string/self_improvement
+ - @string/spirituality
+ - @string/time_management
+
+
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskGroupPlan.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskGroupPlan.kt
index 94b841a33..49e2191da 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskGroupPlan.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/tasks/TaskGroupPlan.kt
@@ -18,7 +18,7 @@ open class TaskGroupPlan : RealmObject(), BaseObject {
var assigningUsername: String? = null
var assignedUsers: RealmList = RealmList()
- var approvalRequested: Boolean = false
- var approvalApproved: Boolean = false
- var approvalRequired: Boolean = false
+ var approvalRequested: Boolean? = false
+ var approvalApproved: Boolean? = false
+ var approvalRequired: Boolean? = false
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt
index a075717f5..6a030c68a 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/ChallengeFormActivity.kt
@@ -16,7 +16,6 @@ import android.widget.EditText
import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.widget.AppCompatCheckedTextView
-import androidx.appcompat.widget.Toolbar
import androidx.lifecycle.lifecycleScope
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
@@ -219,8 +218,7 @@ class ChallengeFormActivity : BaseActivity() {
super.onCreate(savedInstanceState)
- val toolbar = findViewById(R.id.toolbar)
- setSupportActionBar(toolbar)
+ setupToolbar(findViewById(R.id.toolbar))
val intent = intent
val bundle = intent.extras
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
index c8bd511eb..d798a68f2 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt
@@ -366,7 +366,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop
observable = inventoryRepository.purchaseQuest(shopItem.key).cast(Any::class.java)
} else if (shopItem.purchaseType == "debuffPotion") {
observable = userRepository.useSkill(shopItem.key, null).cast(Any::class.java)
- } else if (shopItem.purchaseType == "customization" || shopItem.purchaseType == "background" || shopItem.purchaseType == "customizationSet") {
+ } else if (shopItem.purchaseType == "customization" || shopItem.purchaseType == "background" || shopItem.purchaseType == "backgrounds" || shopItem.purchaseType == "customizationSet") {
observable = userRepository.unlockPath(item.unlockPath ?: "", item.value).cast(Any::class.java)
} else if (shopItem.purchaseType == "debuffPotion") {
observable = userRepository.useSkill(shopItem.key, null).cast(Any::class.java)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt
index cc6047130..ea720791c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/yesterdailies/YesterdailyDialog.kt
@@ -36,6 +36,7 @@ class YesterdailyDialog private constructor(
) : HabiticaAlertDialog(context) {
private lateinit var yesterdailiesList: LinearLayout
+
init {
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as? LayoutInflater
val view = inflater?.inflate(R.layout.dialog_yesterdaily, null)
@@ -94,21 +95,29 @@ class YesterdailyDialog private constructor(
task.completed = !task.completed
configureTaskView(taskView, task)
- if (task.checklist?.size ?: 0 > 0) {
+ if ((task.checklist?.size ?: 0) > 0) {
val checklistContainer = taskView.findViewById(R.id.checklistView)
checklistContainer.removeAllViews()
for (item in task.checklist ?: emptyList()) {
- val checklistView = inflater.inflate(R.layout.checklist_item_row, checklistContainer, false) as ViewGroup
+ val checklistView = inflater.inflate(
+ R.layout.checklist_item_row,
+ checklistContainer,
+ false
+ ) as ViewGroup
configureChecklistView(checklistView, task, item)
checklistContainer.addView(checklistView)
}
}
}
- if (task.checklist?.size ?: 0 > 0) {
+ if ((task.checklist?.size ?: 0) > 0) {
val checklistContainer = taskView.findViewById(R.id.checklistView)
for (item in task.checklist ?: emptyList()) {
- val checklistView = inflater.inflate(R.layout.checklist_item_row, checklistContainer, false) as ViewGroup
+ val checklistView = inflater.inflate(
+ R.layout.checklist_item_row,
+ checklistContainer,
+ false
+ ) as ViewGroup
configureChecklistView(checklistView, task, item)
checklistContainer.addView(checklistView)
}
@@ -128,12 +137,14 @@ class YesterdailyDialog private constructor(
val checkboxHolder = checklistView.findViewById(R.id.checkBoxHolder) as? ViewGroup
checkboxHolder?.setOnClickListener { _ ->
item.completed = !item.completed
- taskRepository.scoreChecklistItem(task.id ?: "", item.id ?: "").subscribe({ }, RxErrorHandler.handleEmptyError())
+ taskRepository.scoreChecklistItem(task.id ?: "", item.id ?: "")
+ .subscribe({ }, RxErrorHandler.handleEmptyError())
configureChecklistView(checklistView, task, item)
}
checklistView.setOnClickListener {
item.completed = !item.completed
- taskRepository.scoreChecklistItem(task.id ?: "", item.id ?: "").subscribe({ }, RxErrorHandler.handleEmptyError())
+ taskRepository.scoreChecklistItem(task.id ?: "", item.id ?: "")
+ .subscribe({ }, RxErrorHandler.handleEmptyError())
configureChecklistView(checklistView, task, item)
}
checkboxHolder?.setBackgroundResource(
@@ -225,8 +236,12 @@ class YesterdailyDialog private constructor(
return@filter true
}
.firstElement()
+ .map {
+ it.filter { !it.isGroupTask }
+ }
.zipWith(
- taskRepository.getTasksFlowable(TaskType.DAILY, null, emptyArray()).firstElement()
+ taskRepository.getTasksFlowable(TaskType.DAILY, null, emptyArray())
+ .firstElement()
.map {
val taskMap = mutableMapOf()
it.forEachIndexed { index, task -> taskMap[task.id ?: ""] = index }
@@ -239,10 +254,22 @@ class YesterdailyDialog private constructor(
{ tasks ->
val additionalData = HashMap()
additionalData["task count"] = tasks.size
- AmplitudeManager.sendEvent("show cron", AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR, AmplitudeManager.EVENT_HITTYPE_EVENT, additionalData)
+ AmplitudeManager.sendEvent(
+ "show cron",
+ AmplitudeManager.EVENT_CATEGORY_BEHAVIOUR,
+ AmplitudeManager.EVENT_HITTYPE_EVENT,
+ additionalData
+ )
if (tasks.isNotEmpty()) {
- displayedDialog = WeakReference(showDialog(activity, userRepository, taskRepository, tasks))
+ displayedDialog = WeakReference(
+ showDialog(
+ activity,
+ userRepository,
+ taskRepository,
+ tasks
+ )
+ )
} else {
lastCronRun = Date()
userRepository.runCron()
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt
index bea720fa2..117bfcea9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/utils/TaskSerializer.kt
@@ -129,8 +129,8 @@ class TaskSerializer : JsonSerializer, JsonDeserializer {
if (approvalObject.has("requested")) group.approvalRequested = approvalObject.getAsJsonPrimitive("requested").asBooleanOrFalse
if (approvalObject.has("approved")) group.approvalApproved = approvalObject.getAsJsonPrimitive("approved").asBooleanOrFalse
if (approvalObject.has("required")) group.approvalRequired = approvalObject.getAsJsonPrimitive("required").asBooleanOrFalse
- task.group = group
}
+ task.group = group
}
// Work around since Realm does not support Arrays of ints
getMonthlyDays(json, task)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt
index dd6d02080..bbab794b2 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/widget/AvatarStatsWidgetProvider.kt
@@ -5,7 +5,6 @@ import android.appwidget.AppWidgetManager
import android.content.ComponentName
import android.content.Context
import android.content.Intent
-import android.os.Build
import android.view.View
import android.view.ViewGroup
import android.widget.RemoteViews
@@ -95,8 +94,7 @@ class AvatarStatsWidgetProvider : BaseWidgetProvider() {
columns: Int,
rows: Int
): RemoteViews {
- showAvatar[widgetId] =
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) columns > 4 else columns > 3
+ showAvatar[widgetId] = columns > 3
if (showAvatar[widgetId] == true) {
remoteViews.setViewVisibility(R.id.avatar_view, View.VISIBLE)
} else {