diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 1047ee33d..17b7b8d70 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -242,6 +242,8 @@
Equipped
Are you sure you want to cancel this Quest? Canceling the Quest will cancel all accepted and pending invitations. The Quest will be returned to the owner’s inventory.
Are you sure? Only %1$d of your %2$d party members have joined this quest! Quests start automatically when all players have joined or rejected the invitation.
+ You have to be in a Party before starting a Quest
+ Once in a Party, you can take on Quests by yourself or invite friends to Quest with them too!
1 month ago
%d months ago
1w ago
@@ -789,6 +791,7 @@
Create
Only leader can create Challenges
Create Party
+ Create a Party
Add Local Authentication
Task Title
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt
index 9d5188afc..bfa076a30 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/inventory/ItemRecyclerAdapter.kt
@@ -2,6 +2,7 @@ package com.habitrpg.android.habitica.ui.adapter.inventory
import android.content.Context
import android.content.res.Resources
+import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
@@ -12,6 +13,7 @@ import com.habitrpg.android.habitica.extensions.layoutInflater
import com.habitrpg.android.habitica.models.inventory.*
import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.OwnedPet
+import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.ui.adapter.BaseRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.helpers.DataBindingUtils
import com.habitrpg.android.habitica.ui.menu.BottomSheetMenu
@@ -23,7 +25,7 @@ import io.reactivex.rxjava3.subjects.PublishSubject
import java.text.SimpleDateFormat
import java.util.*
-class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter() {
+class ItemRecyclerAdapter(val context: Context, val user: User?) : BaseRecyclerViewAdapter() {
var isHatching: Boolean = false
var isFeeding: Boolean = false
@@ -44,6 +46,7 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter()
private val hatchPetSubject = PublishSubject.create>()
private val feedPetSubject = PublishSubject.create()
+ private val createNewPartySubject = PublishSubject.create()
fun getSellItemFlowable(): Flowable {
return sellItemEvents.toFlowable(BackpressureStrategy.DROP)
@@ -59,6 +62,7 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter = startHatchingSubject.toFlowable(BackpressureStrategy.DROP)
val hatchPetEvents: Flowable> = hatchPetSubject.toFlowable(BackpressureStrategy.DROP)
val feedPetEvents: Flowable = feedPetSubject.toFlowable(BackpressureStrategy.DROP)
+ val startNewPartyEvents: Flowable = createNewPartySubject.toFlowable(BackpressureStrategy.DROP)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
return ItemViewHolder(ItemItemBinding.inflate(context.layoutInflater, parent, false))
@@ -173,7 +177,18 @@ class ItemRecyclerAdapter(val context: Context) : BaseRecyclerViewAdapter openMysteryItemEvents.onNext(selectedItem)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt
index 27d2f0368..f208af7a5 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemDialogFragment.kt
@@ -102,7 +102,7 @@ class ItemDialogFragment : BaseDialogFragment(), SwipeRefr
adapter = binding?.recyclerView?.adapter as? ItemRecyclerAdapter
if (adapter == null) {
context?.let {
- adapter = ItemRecyclerAdapter(context)
+ adapter = ItemRecyclerAdapter(context, user)
adapter?.isHatching = this.isHatching
adapter?.isFeeding = this.isFeeding
adapter?.fragment = this
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt
index 52e1a3262..9fbb4dcf5 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/items/ItemRecyclerFragment.kt
@@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.core.os.bundleOf
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.habitrpg.android.habitica.R
import com.habitrpg.android.habitica.components.UserComponent
@@ -16,7 +17,6 @@ import com.habitrpg.android.habitica.extensions.subscribeWithErrorHandler
import com.habitrpg.android.habitica.helpers.MainNavigationController
import com.habitrpg.android.habitica.helpers.RxErrorHandler
import com.habitrpg.android.habitica.interactors.HatchPetUseCase
-import com.habitrpg.android.habitica.interactors.NotifyUserUseCase
import com.habitrpg.android.habitica.models.inventory.*
import com.habitrpg.android.habitica.models.user.OwnedPet
import com.habitrpg.android.habitica.models.user.User
@@ -27,6 +27,7 @@ import com.habitrpg.android.habitica.ui.fragments.BaseFragment
import com.habitrpg.android.habitica.ui.helpers.EmptyItem
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.helpers.loadImage
+import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog
import com.habitrpg.android.habitica.ui.views.dialogs.OpenedMysteryitemDialog
import javax.inject.Inject
@@ -87,7 +88,7 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL
adapter = binding?.recyclerView?.adapter as? ItemRecyclerAdapter
if (adapter == null) {
context?.let {
- adapter = ItemRecyclerAdapter(context)
+ adapter = ItemRecyclerAdapter(context, user)
}
binding?.recyclerView?.adapter = adapter
@@ -132,6 +133,7 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL
)
compositeSubscription.add(adapter.startHatchingEvents.subscribeWithErrorHandler { showHatchingDialog(it) })
compositeSubscription.add(adapter.hatchPetEvents.subscribeWithErrorHandler { hatchPet(it.first, it.second) })
+ compositeSubscription.addAll(adapter.startNewPartyEvents.subscribeWithErrorHandler { createNewParty(it) })
}
}
activity?.let {
@@ -193,6 +195,44 @@ class ItemRecyclerFragment : BaseFragment(), SwipeRefreshL
}
}
+ private fun createNewParty(bundle: Bundle) {
+ val alert = context?.let { HabiticaAlertDialog(it) }//Context results?
+ alert?.setTitle(R.string.quest_party_required_title)
+ alert?.setMessage(R.string.quest_party_required_description)
+ alert?.addButton(R.string.create_a_party, true, false) { _, _ ->
+ socialRepository.createGroup(
+ bundle.getString("name"),
+ bundle.getString("description"),
+ bundle.getString("leader"),
+ "party",
+ bundle.getString("privacy"),
+ bundle.getBoolean("leaderCreateChallenge")
+ )
+ .flatMap {
+ userRepository.retrieveUser(false)
+ }
+ .subscribe(
+ {
+ if (isAdded) {
+ parentFragmentManager.popBackStack()//Needed?
+ }
+ MainNavigationController.navigate(//Same nav?
+ R.id.partyFragment,
+ bundleOf(Pair("partyID", user?.party?.id))
+ )
+ },
+ RxErrorHandler.handleEmptyError()
+ )
+
+ }
+ alert?.addButton(R.string.close, false) { _, _ ->
+ alert.dismiss()
+ }
+ alert?.show()
+
+
+ }
+
private fun loadItems() {
val itemClass: Class = when (itemType) {
"eggs" -> Egg::class.java