From 644b4d8840fe0825e8dc64604bc86c3eb9fbaf9c Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 12 Jun 2019 12:58:36 +0200 Subject: [PATCH] Fix editing custom rewards --- .../habitica/events/HabitScoreEvent.java | 12 ------- .../habitica/events/TaskTappedEvent.java | 8 ----- .../events/commands/BuyRewardCommand.java | 10 ------ .../commands/SendNewInboxMessageCommand.java | 14 -------- .../events/commands/TaskCheckedCommand.java | 11 ------- .../ui/activities/ChallengeFormActivity.kt | 10 ++---- .../ChallengeTasksRecyclerViewAdapter.kt | 19 ++++++++--- .../tasks/DailiesRecyclerViewHolder.kt | 4 ++- .../tasks/HabitsRecyclerViewAdapter.kt | 4 ++- .../RealmBaseTasksRecyclerViewAdapter.kt | 18 +++------- .../tasks/RewardsRecyclerViewAdapter.kt | 27 +++++++-------- .../tasks/TaskRecyclerViewAdapter.java | 29 ---------------- .../adapter/tasks/TaskRecyclerViewAdapter.kt | 26 +++++++++++++++ .../adapter/tasks/TodosRecyclerViewAdapter.kt | 4 ++- .../tasks/TaskRecyclerViewFragment.kt | 23 ++++++++++++- .../ui/fragments/tasks/TasksFragment.kt | 33 ++++--------------- .../viewHolders/tasks/BaseTaskViewHolder.kt | 9 ++--- .../tasks/ChecklistedViewHolder.kt | 2 +- .../ui/viewHolders/tasks/DailyViewHolder.kt | 2 +- .../ui/viewHolders/tasks/HabitViewHolder.kt | 6 ++-- .../ui/viewHolders/tasks/RewardViewHolder.kt | 6 ++-- .../ui/viewHolders/tasks/TodoViewHolder.kt | 2 +- 22 files changed, 108 insertions(+), 171 deletions(-) delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/events/HabitScoreEvent.java delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/events/TaskTappedEvent.java delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/BuyRewardCommand.java delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/SendNewInboxMessageCommand.java delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/TaskCheckedCommand.java delete mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TaskRecyclerViewAdapter.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TaskRecyclerViewAdapter.kt diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/HabitScoreEvent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/events/HabitScoreEvent.java deleted file mode 100644 index ce85e2455..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/events/HabitScoreEvent.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.habitrpg.android.habitica.events; - -import com.habitrpg.android.habitica.models.tasks.Task; - -/** - * Created by Negue on 10.07.2015. - */ -public class HabitScoreEvent { - public boolean Up = false; - - public Task habit; -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/TaskTappedEvent.java b/Habitica/src/main/java/com/habitrpg/android/habitica/events/TaskTappedEvent.java deleted file mode 100644 index 820402b59..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/events/TaskTappedEvent.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.habitrpg.android.habitica.events; - -/** - * Created by Negue on 10.07.2015. - */ -public class TaskTappedEvent { - public com.habitrpg.android.habitica.models.tasks.Task Task; -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/BuyRewardCommand.java b/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/BuyRewardCommand.java deleted file mode 100644 index bdd9ff3db..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/BuyRewardCommand.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.habitrpg.android.habitica.events.commands; - -import com.habitrpg.android.habitica.models.tasks.Task; - -/** - * Created by Negue on 11.07.2015. - */ -public class BuyRewardCommand { - public Task Reward; -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/SendNewInboxMessageCommand.java b/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/SendNewInboxMessageCommand.java deleted file mode 100644 index e9d9b1696..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/SendNewInboxMessageCommand.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.habitrpg.android.habitica.events.commands; - -/** - * Created by keithholliday on 6/22/16. - */ -public class SendNewInboxMessageCommand { - public String message; - public String userToSendTo; - - public SendNewInboxMessageCommand(String userToSendTo, String message) { - this.userToSendTo = userToSendTo; - this.message = message; - } -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/TaskCheckedCommand.java b/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/TaskCheckedCommand.java deleted file mode 100644 index bee2851b3..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/events/commands/TaskCheckedCommand.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.habitrpg.android.habitica.events.commands; - -import com.habitrpg.android.habitica.models.tasks.Task; - -/** - * Created by Negue on 11.07.2015. - */ -public class TaskCheckedCommand { - public Task Task; - public boolean completed; -} 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 615e22161..e9d1310f9 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 @@ -17,7 +17,6 @@ import com.habitrpg.android.habitica.components.UserComponent import com.habitrpg.android.habitica.data.ChallengeRepository import com.habitrpg.android.habitica.data.SocialRepository import com.habitrpg.android.habitica.data.UserRepository -import com.habitrpg.android.habitica.events.TaskTappedEvent import com.habitrpg.android.habitica.extensions.notNull import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.models.social.Challenge @@ -27,11 +26,10 @@ import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.modules.AppModule import com.habitrpg.android.habitica.ui.adapter.social.challenges.ChallengeTasksRecyclerViewAdapter import com.habitrpg.android.habitica.ui.helpers.bindView -import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper +import com.habitrpg.android.habitica.ui.views.dialogs.HabiticaAlertDialog import io.reactivex.Flowable import io.reactivex.functions.Consumer -import org.greenrobot.eventbus.Subscribe import java.util.* import javax.inject.Inject import javax.inject.Named @@ -212,6 +210,7 @@ class ChallengeFormActivity : BaseActivity() { val bundle = intent.extras challengeTasks = ChallengeTasksRecyclerViewAdapter(null, 0, this, "", null, false, true) + compositeSubscription.add(challengeTasks.taskOpenEvents.subscribe { openNewTaskActivity(it.type, it) }) locationAdapter = GroupArrayAdapter(this) if (bundle != null) { @@ -238,11 +237,6 @@ class ChallengeFormActivity : BaseActivity() { super.onDestroy() } - @Subscribe - fun onEvent(tappedEvent: TaskTappedEvent) { - openNewTaskActivity(null, tappedEvent.Task) - } - private fun onAddGem() { var stringValue = createChallengePrize.text.toString() if (stringValue.isEmpty()) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.kt index 5c496822e..625fef34c 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/social/challenges/ChallengeTasksRecyclerViewAdapter.kt @@ -26,6 +26,9 @@ class ChallengeTasksRecyclerViewAdapter(taskFilterHelper: TaskFilterHelper?, lay val taskList: MutableList get() = content?.map { t -> t }?.toMutableList() ?: mutableListOf() + protected var taskOpenEventsSubject = PublishSubject.create() + val taskOpenEvents: Flowable = taskOpenEventsSubject.toFlowable(BackpressureStrategy.LATEST) + override fun injectThis(component: UserComponent) { component.inject(this) } @@ -61,10 +64,18 @@ class ChallengeTasksRecyclerViewAdapter(taskFilterHelper: TaskFilterHelper?, lay override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BindableViewHolder { val viewHolder: BindableViewHolder = when (viewType) { - TYPE_HABIT -> HabitViewHolder(getContentView(parent, R.layout.habit_item_card)) { _, _ -> } - TYPE_DAILY -> DailyViewHolder(getContentView(parent, R.layout.daily_item_card)) { _, _ -> } - TYPE_TODO -> TodoViewHolder(getContentView(parent, R.layout.todo_item_card)) { _, _ -> } - TYPE_REWARD -> RewardViewHolder(getContentView(parent, R.layout.reward_item_card)) { _, _ -> } + TYPE_HABIT -> HabitViewHolder(getContentView(parent, R.layout.habit_item_card), { _, _ -> }) { task -> + taskOpenEventsSubject.onNext(task) + } + TYPE_DAILY -> DailyViewHolder(getContentView(parent, R.layout.daily_item_card), { _, _ -> }) { task -> + taskOpenEventsSubject.onNext(task) + } + TYPE_TODO -> TodoViewHolder(getContentView(parent, R.layout.todo_item_card), { _, _ -> }) { task -> + taskOpenEventsSubject.onNext(task) + } + TYPE_REWARD -> RewardViewHolder(getContentView(parent, R.layout.reward_item_card), { _, _ -> }) { task -> + taskOpenEventsSubject.onNext(task) + } TYPE_ADD_ITEM -> AddItemViewHolder(getContentView(parent, R.layout.challenge_add_task_item), addItemSubject) else -> DividerViewHolder(getContentView(parent, R.layout.challenge_task_divider)) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt index 3d2e249e7..3b6ffa8ef 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/DailiesRecyclerViewHolder.kt @@ -11,5 +11,7 @@ import io.realm.OrderedRealmCollection class DailiesRecyclerViewHolder(data: OrderedRealmCollection?, autoUpdate: Boolean, layoutResource: Int, taskFilterHelper: TaskFilterHelper) : RealmBaseTasksRecyclerViewAdapter(data, autoUpdate, layoutResource, taskFilterHelper) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DailyViewHolder = - DailyViewHolder(getContentView(parent)) { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) } + DailyViewHolder(getContentView(parent), { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) }) { + task -> taskOpenEventsSubject.onNext(task) + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt index b2c4033fe..1e41f002f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/HabitsRecyclerViewAdapter.kt @@ -10,5 +10,7 @@ class HabitsRecyclerViewAdapter(data: OrderedRealmCollection?, autoUpdate: override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HabitViewHolder = - HabitViewHolder(getContentView(parent)) { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) } + HabitViewHolder(getContentView(parent), { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) }) { + task -> taskOpenEventsSubject.onNext(task) + } } \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RealmBaseTasksRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RealmBaseTasksRecyclerViewAdapter.kt index 6ab9d2a95..160d09d0a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RealmBaseTasksRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RealmBaseTasksRecyclerViewAdapter.kt @@ -18,7 +18,7 @@ import io.realm.RealmResults abstract class RealmBaseTasksRecyclerViewAdapter(private var unfilteredData: OrderedRealmCollection?, private val hasAutoUpdates: Boolean, private val layoutResource: Int, private val taskFilterHelper: TaskFilterHelper?) : androidx.recyclerview.widget.RecyclerView.Adapter(), TaskRecyclerViewAdapter { private var updateOnModification: Boolean = false - private var ignoreUpdates: Boolean = false + override var ignoreUpdates: Boolean = false private val listener: OrderedRealmCollectionChangeListener> by lazy { OrderedRealmCollectionChangeListener> { _, changeSet -> if (ignoreUpdates) { @@ -50,9 +50,11 @@ abstract class RealmBaseTasksRecyclerViewAdapter(privat private set private var errorButtonEventsSubject = PublishSubject.create() - + override val errorButtonEvents = errorButtonEventsSubject.toFlowable(BackpressureStrategy.DROP) protected var taskScoreEventsSubject = PublishSubject.create>() - val taskScoreEvents: Flowable> = taskScoreEventsSubject.toFlowable(BackpressureStrategy.LATEST) + override val taskScoreEvents: Flowable> = taskScoreEventsSubject.toFlowable(BackpressureStrategy.LATEST) + protected var taskOpenEventsSubject = PublishSubject.create() + override val taskOpenEvents: Flowable = taskOpenEventsSubject.toFlowable(BackpressureStrategy.LATEST) private val isDataValid: Boolean get() = data?.isValid ?: false @@ -159,17 +161,7 @@ abstract class RealmBaseTasksRecyclerViewAdapter(privat } } - override fun getIgnoreUpdates(): Boolean = ignoreUpdates - - override fun setIgnoreUpdates(ignoreUpdates: Boolean) { - this.ignoreUpdates = ignoreUpdates - } - override fun getTaskIDAt(position: Int): String { return data?.get(position)?.id ?: "" } - - override fun getErrorButtonEvents(): Flowable { - return errorButtonEventsSubject.toFlowable(BackpressureStrategy.DROP) - } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt index bbf8aba67..1c1e7789e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/RewardsRecyclerViewAdapter.kt @@ -20,9 +20,12 @@ import io.realm.OrderedRealmCollection class RewardsRecyclerViewAdapter(private var customRewards: OrderedRealmCollection?, private val layoutResource: Int, private val user: User?) : RecyclerView.Adapter(), TaskRecyclerViewAdapter { private var inAppRewards: OrderedRealmCollection? = null - private val errorButtonEvents = PublishSubject.create() + val errorButtonEventsSubject = PublishSubject.create() + override val errorButtonEvents = errorButtonEventsSubject.toFlowable(BackpressureStrategy.DROP) private var taskScoreEventsSubject = PublishSubject.create>() - val taskScoreEvents: Flowable> = taskScoreEventsSubject.toFlowable(BackpressureStrategy.LATEST) + override val taskScoreEvents: Flowable> = taskScoreEventsSubject.toFlowable(BackpressureStrategy.LATEST) + protected var taskOpenEventsSubject = PublishSubject.create() + override val taskOpenEvents: Flowable = taskOpenEventsSubject.toFlowable(BackpressureStrategy.LATEST) private val inAppRewardCount: Int get() = inAppRewards?.size ?: 0 @@ -30,13 +33,19 @@ class RewardsRecyclerViewAdapter(private var customRewards: OrderedRealmCollecti private val customRewardCount: Int get() = customRewards?.size ?: 0 + override var ignoreUpdates: Boolean + get() = false + set(_) {} + private fun getContentView(parent: ViewGroup): View { return LayoutInflater.from(parent.context).inflate(layoutResource, parent, false) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return if (viewType == VIEWTYPE_CUSTOM_REWARD) { - RewardViewHolder(getContentView(parent)) { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) } + RewardViewHolder(getContentView(parent), { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) }) { + task -> taskOpenEventsSubject.onNext(task) + } } else { ShopItemViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_shopitem, parent, false)) } @@ -65,22 +74,10 @@ class RewardsRecyclerViewAdapter(private var customRewards: OrderedRealmCollecti } } - override fun setIgnoreUpdates(ignoreUpdates: Boolean) { - - } - - override fun getIgnoreUpdates(): Boolean { - return false - } - override fun updateUnfilteredData(data: OrderedRealmCollection?) { updateData(data) } - override fun getErrorButtonEvents(): Flowable { - return errorButtonEvents.toFlowable(BackpressureStrategy.DROP) - } - override fun getItemCount(): Int { var rewardCount = customRewardCount rewardCount += inAppRewardCount diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TaskRecyclerViewAdapter.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TaskRecyclerViewAdapter.java deleted file mode 100644 index a5ca0c729..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TaskRecyclerViewAdapter.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.habitrpg.android.habitica.ui.adapter.tasks; - -import com.habitrpg.android.habitica.models.tasks.Task; - -import org.jetbrains.annotations.Nullable; - -import io.reactivex.Flowable; -import io.reactivex.Observable; -import io.realm.OrderedRealmCollection; -import io.realm.RealmResults; - -public interface TaskRecyclerViewAdapter { - - void updateData(OrderedRealmCollection tasks); - - void filter(); - - void notifyItemMoved(int adapterPosition, int adapterPosition1); - void notifyDataSetChanged(); - int getItemViewType(int position); - String getTaskIDAt(int position); - - void setIgnoreUpdates(boolean ignoreUpdates); - boolean getIgnoreUpdates(); - - void updateUnfilteredData(@Nullable OrderedRealmCollection data); - - Flowable getErrorButtonEvents(); -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TaskRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TaskRecyclerViewAdapter.kt new file mode 100644 index 000000000..ea3646180 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TaskRecyclerViewAdapter.kt @@ -0,0 +1,26 @@ +package com.habitrpg.android.habitica.ui.adapter.tasks + +import com.habitrpg.android.habitica.models.responses.TaskDirection +import com.habitrpg.android.habitica.models.tasks.Task +import io.reactivex.Flowable +import io.realm.OrderedRealmCollection + +interface TaskRecyclerViewAdapter { + var ignoreUpdates: Boolean + + val errorButtonEvents: Flowable + + fun updateData(tasks: OrderedRealmCollection?) + + fun filter() + + fun notifyItemMoved(adapterPosition: Int, adapterPosition1: Int) + fun notifyDataSetChanged() + fun getItemViewType(position: Int): Int + fun getTaskIDAt(position: Int): String? + + fun updateUnfilteredData(data: OrderedRealmCollection?) + + val taskScoreEvents: Flowable> + val taskOpenEvents: Flowable +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt index a7f9e5ee3..bcbf5a5b5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/adapter/tasks/TodosRecyclerViewAdapter.kt @@ -11,6 +11,8 @@ import io.realm.OrderedRealmCollection class TodosRecyclerViewAdapter(data: OrderedRealmCollection?, autoUpdate: Boolean, layoutResource: Int, taskFilterHelper: TaskFilterHelper) : RealmBaseTasksRecyclerViewAdapter(data, autoUpdate, layoutResource, taskFilterHelper) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TodoViewHolder = - TodoViewHolder(getContentView(parent)) { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) } + TodoViewHolder(getContentView(parent), { task, direction -> taskScoreEventsSubject.onNext(Pair(task, direction)) }) { + task -> taskOpenEventsSubject.onNext(task) + } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt index f1d8dc51d..2ee510e8e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TaskRecyclerViewFragment.kt @@ -1,6 +1,7 @@ package com.habitrpg.android.habitica.ui.fragments.tasks import android.content.Context +import android.content.Intent import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.os.Bundle @@ -26,6 +27,7 @@ import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.models.user.User import com.habitrpg.android.habitica.modules.AppModule import com.habitrpg.android.habitica.ui.activities.MainActivity +import com.habitrpg.android.habitica.ui.activities.TaskFormActivity import com.habitrpg.android.habitica.ui.adapter.tasks.* import com.habitrpg.android.habitica.ui.fragments.BaseFragment import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator @@ -111,7 +113,6 @@ open class TaskRecyclerViewFragment : BaseFragment(), androidx.swiperefreshlayou } else -> null } - compositeSubscription if (classType != Task.TYPE_REWARD) { allowReordering() @@ -123,6 +124,9 @@ open class TaskRecyclerViewFragment : BaseFragment(), androidx.swiperefreshlayou recyclerAdapter?.errorButtonEvents?.subscribe(Consumer { taskRepository.syncErroredTasks().subscribe(Consumer {}, RxErrorHandler.handleEmptyError()) }, RxErrorHandler.handleEmptyError()).notNull { compositeSubscription.add(it) } + recyclerAdapter?.taskOpenEvents?.subscribeWithErrorHandler(Consumer { + openTaskForm(it) + }) if (this.classType != null) { compositeSubscription.add(taskRepository.getTasks(this.classType ?: "", userID).firstElement().subscribe(Consumer { @@ -304,6 +308,23 @@ open class TaskRecyclerViewFragment : BaseFragment(), androidx.swiperefreshlayou } } + fun openTaskForm(task: Task) { + if (TasksFragment.displayingTaskForm) { + return + } + + val bundle = Bundle() + bundle.putString(TaskFormActivity.TASK_TYPE_KEY, task.type) + bundle.putString(TaskFormActivity.TASK_ID_KEY, task.id) + + val intent = Intent(activity, TaskFormActivity::class.java) + intent.putExtras(bundle) + TasksFragment.displayingTaskForm = true + if (isAdded) { + startActivityForResult(intent, TasksFragment.TASK_UPDATED_RESULT) + } + } + companion object { private const val CLASS_TYPE_KEY = "CLASS_TYPE_KEY" 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 b194a7867..e3848f08d 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 @@ -9,7 +9,6 @@ import com.habitrpg.android.habitica.HabiticaBaseApplication import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.components.UserComponent import com.habitrpg.android.habitica.data.TagRepository -import com.habitrpg.android.habitica.events.TaskTappedEvent import com.habitrpg.android.habitica.helpers.AmplitudeManager import com.habitrpg.android.habitica.helpers.AppConfigManager import com.habitrpg.android.habitica.helpers.RxErrorHandler @@ -19,7 +18,6 @@ import com.habitrpg.android.habitica.ui.activities.TaskFormActivity import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment import com.habitrpg.android.habitica.ui.views.tasks.TaskFilterDialog import io.reactivex.functions.Consumer -import org.greenrobot.eventbus.Subscribe import java.util.* import javax.inject.Inject @@ -36,7 +34,6 @@ class TasksFragment : BaseMainFragment() { private var refreshItem: MenuItem? = null internal var viewFragmentsDictionary: MutableMap? = WeakHashMap() - private var displayingTaskForm: Boolean = false private var filterMenuItem: MenuItem? = null private val activeFragment: TaskRecyclerViewFragment? @@ -46,7 +43,6 @@ class TasksFragment : BaseMainFragment() { savedInstanceState: Bundle?): View? { this.usesTabLayout = false this.usesBottomNavigation = true - this.displayingTaskForm = false super.onCreateView(inflater, container, savedInstanceState) val v = inflater.inflate(R.layout.fragment_viewpager, container, false) @@ -251,7 +247,7 @@ class TasksFragment : BaseMainFragment() { // endregion private fun openNewTaskActivity(type: String) { - if (this.displayingTaskForm) { + if (displayingTaskForm) { return } @@ -273,29 +269,11 @@ class TasksFragment : BaseMainFragment() { intent.putExtras(bundle) intent.flags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT if (this.isAdded) { - this.displayingTaskForm = true + displayingTaskForm = true startActivityForResult(intent, TASK_CREATED_RESULT) } } - @Subscribe - fun onEvent(event: TaskTappedEvent) { - if (this.displayingTaskForm) { - return - } - - val bundle = Bundle() - bundle.putString(TaskFormActivity.TASK_TYPE_KEY, event.Task.type) - bundle.putString(TaskFormActivity.TASK_ID_KEY, event.Task.id) - - val intent = Intent(activity, TaskFormActivity::class.java) - intent.putExtras(bundle) - this.displayingTaskForm = true - if (isAdded) { - startActivityForResult(intent, TASK_UPDATED_RESULT) - } - } - //endregion Events override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { @@ -303,10 +281,10 @@ class TasksFragment : BaseMainFragment() { when (requestCode) { TASK_CREATED_RESULT -> { - this.displayingTaskForm = false + displayingTaskForm = false onTaskCreatedResult(resultCode, data) } - TASK_UPDATED_RESULT -> this.displayingTaskForm = false + TASK_UPDATED_RESULT -> displayingTaskForm = false } } @@ -345,7 +323,8 @@ class TasksFragment : BaseMainFragment() { override fun addToBackStack(): Boolean = false companion object { + var displayingTaskForm: Boolean = false private const val TASK_CREATED_RESULT = 1 - private const val TASK_UPDATED_RESULT = 2 + const val TASK_UPDATED_RESULT = 2 } } \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt index e47b19869..393a62f32 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/BaseTaskViewHolder.kt @@ -4,7 +4,6 @@ import android.content.Context import android.view.View import android.widget.* import com.habitrpg.android.habitica.R -import com.habitrpg.android.habitica.events.TaskTappedEvent import com.habitrpg.android.habitica.extensions.notNull import com.habitrpg.android.habitica.helpers.RxErrorHandler import com.habitrpg.android.habitica.models.responses.TaskDirection @@ -20,9 +19,8 @@ import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.functions.Action import io.reactivex.functions.Consumer import io.reactivex.schedulers.Schedulers -import org.greenrobot.eventbus.EventBus -abstract class BaseTaskViewHolder constructor(itemView: View, var scoreTaskFunc: ((Task, TaskDirection) -> Unit)) : BindableViewHolder(itemView), View.OnClickListener { +abstract class BaseTaskViewHolder constructor(itemView: View, var scoreTaskFunc: ((Task, TaskDirection) -> Unit), var openTaskFunc: ((Task) -> Unit)) : BindableViewHolder(itemView), View.OnClickListener { var task: Task? = null @@ -186,10 +184,7 @@ abstract class BaseTaskViewHolder constructor(itemView: View, var scoreTaskFunc: return } - val event = TaskTappedEvent() - event.Task = task - - EventBus.getDefault().post(event) + task?.let { openTaskFunc(it) } } open fun canContainMarkdown(): Boolean { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt index bd7474077..deb9e3eec 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/ChecklistedViewHolder.kt @@ -27,7 +27,7 @@ import io.reactivex.functions.Consumer import io.reactivex.schedulers.Schedulers import org.greenrobot.eventbus.EventBus -abstract class ChecklistedViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit)) : BaseTaskViewHolder(itemView, scoreTaskFunc), CompoundButton.OnCheckedChangeListener { +abstract class ChecklistedViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit), openTaskFunc: ((Task) -> Unit)) : BaseTaskViewHolder(itemView, scoreTaskFunc, openTaskFunc), CompoundButton.OnCheckedChangeListener { private val checkboxHolder: ViewGroup by bindView(itemView, R.id.checkBoxHolder) internal val checkbox: CheckBox by bindView(itemView, R.id.checkBox) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt index 50c4523f0..83f85e4d5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/DailyViewHolder.kt @@ -7,7 +7,7 @@ import com.habitrpg.android.habitica.models.responses.TaskDirection import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.ui.helpers.bindView -class DailyViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit)) : ChecklistedViewHolder(itemView, scoreTaskFunc) { +class DailyViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit), openTaskFunc: ((Task) -> Unit)) : ChecklistedViewHolder(itemView, scoreTaskFunc, openTaskFunc) { private val streakTextView: TextView by bindView(itemView, R.id.streakTextView) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.kt index 19314c30b..2319ef8d5 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/HabitViewHolder.kt @@ -10,7 +10,7 @@ import com.habitrpg.android.habitica.models.responses.TaskDirection import com.habitrpg.android.habitica.models.tasks.Task import com.habitrpg.android.habitica.ui.helpers.bindView -class HabitViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit)) : BaseTaskViewHolder(itemView, scoreTaskFunc) { +class HabitViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit), openTaskFunc: ((Task) -> Unit)) : BaseTaskViewHolder(itemView, scoreTaskFunc, openTaskFunc) { private val btnPlusWrapper: FrameLayout by bindView(itemView, R.id.btnPlusWrapper) private val btnPlusIconView: ImageView by bindView(itemView, R.id.btnPlusIconView) @@ -85,11 +85,11 @@ class HabitViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> U super.bind(newTask, position) } - fun onPlusButtonClicked() { + private fun onPlusButtonClicked() { task?.let { scoreTaskFunc.invoke(it, TaskDirection.UP) } } - fun onMinusButtonClicked() { + private fun onMinusButtonClicked() { task?.let { scoreTaskFunc.invoke(it, TaskDirection.DOWN) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt index e37909f6d..1f413cd24 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/RewardViewHolder.kt @@ -13,9 +13,9 @@ import com.habitrpg.android.habitica.ui.ItemDetailDialog import com.habitrpg.android.habitica.ui.helpers.bindView import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper -class RewardViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit)) : BaseTaskViewHolder(itemView, scoreTaskFunc) { +class RewardViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit), openTaskFunc: ((Task) -> Unit)) : BaseTaskViewHolder(itemView, scoreTaskFunc, openTaskFunc) { - internal val buyButton: View by bindView(itemView, R.id.buyButton) + private val buyButton: View by bindView(itemView, R.id.buyButton) internal val priceLabel: TextView by bindView(itemView, R.id.priceLabel) private val goldIconView: ImageView by bindView(itemView, R.id.gold_icon) @@ -53,7 +53,7 @@ class RewardViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> dialog.setBuyListener( DialogInterface.OnClickListener { _, _ -> this.buyReward() }) dialog.show() } else { - task?.let { scoreTaskFunc(it, TaskDirection.UP) } + super.onClick(v) } } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt index c7fccf234..6acf8677d 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/viewHolders/tasks/TodoViewHolder.kt @@ -7,7 +7,7 @@ import com.habitrpg.android.habitica.models.tasks.Task import java.text.DateFormat -class TodoViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit)) : ChecklistedViewHolder(itemView, scoreTaskFunc) { +class TodoViewHolder(itemView: View, scoreTaskFunc: ((Task, TaskDirection) -> Unit), openTaskFunc: ((Task) -> Unit)) : ChecklistedViewHolder(itemView, scoreTaskFunc, openTaskFunc) { private val dateFormatter: DateFormat = android.text.format.DateFormat.getDateFormat(context)