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 {