Fix editing custom rewards

This commit is contained in:
Phillip Thelen 2019-06-12 12:58:36 +02:00
parent 8eed9cb197
commit 644b4d8840
22 changed files with 108 additions and 171 deletions

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}
}

View file

@ -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;
}

View file

@ -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()) {

View file

@ -26,6 +26,9 @@ class ChallengeTasksRecyclerViewAdapter(taskFilterHelper: TaskFilterHelper?, lay
val taskList: MutableList<Task>
get() = content?.map { t -> t }?.toMutableList() ?: mutableListOf()
protected var taskOpenEventsSubject = PublishSubject.create<Task>()
val taskOpenEvents: Flowable<Task> = 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<Task> {
val viewHolder: BindableViewHolder<Task> = 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))
}

View file

@ -11,5 +11,7 @@ import io.realm.OrderedRealmCollection
class DailiesRecyclerViewHolder(data: OrderedRealmCollection<Task>?, autoUpdate: Boolean, layoutResource: Int, taskFilterHelper: TaskFilterHelper) : RealmBaseTasksRecyclerViewAdapter<DailyViewHolder>(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)
}
}

View file

@ -10,5 +10,7 @@ class HabitsRecyclerViewAdapter(data: OrderedRealmCollection<Task>?, 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)
}
}

View file

@ -18,7 +18,7 @@ import io.realm.RealmResults
abstract class RealmBaseTasksRecyclerViewAdapter<VH : BaseTaskViewHolder>(private var unfilteredData: OrderedRealmCollection<Task>?, private val hasAutoUpdates: Boolean, private val layoutResource: Int, private val taskFilterHelper: TaskFilterHelper?) : androidx.recyclerview.widget.RecyclerView.Adapter<VH>(), TaskRecyclerViewAdapter {
private var updateOnModification: Boolean = false
private var ignoreUpdates: Boolean = false
override var ignoreUpdates: Boolean = false
private val listener: OrderedRealmCollectionChangeListener<OrderedRealmCollection<Task>> by lazy {
OrderedRealmCollectionChangeListener<OrderedRealmCollection<Task>> { _, changeSet ->
if (ignoreUpdates) {
@ -50,9 +50,11 @@ abstract class RealmBaseTasksRecyclerViewAdapter<VH : BaseTaskViewHolder>(privat
private set
private var errorButtonEventsSubject = PublishSubject.create<String>()
override val errorButtonEvents = errorButtonEventsSubject.toFlowable(BackpressureStrategy.DROP)
protected var taskScoreEventsSubject = PublishSubject.create<Pair<Task, TaskDirection>>()
val taskScoreEvents: Flowable<Pair<Task, TaskDirection>> = taskScoreEventsSubject.toFlowable(BackpressureStrategy.LATEST)
override val taskScoreEvents: Flowable<Pair<Task, TaskDirection>> = taskScoreEventsSubject.toFlowable(BackpressureStrategy.LATEST)
protected var taskOpenEventsSubject = PublishSubject.create<Task>()
override val taskOpenEvents: Flowable<Task> = taskOpenEventsSubject.toFlowable(BackpressureStrategy.LATEST)
private val isDataValid: Boolean
get() = data?.isValid ?: false
@ -159,17 +161,7 @@ abstract class RealmBaseTasksRecyclerViewAdapter<VH : BaseTaskViewHolder>(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<String> {
return errorButtonEventsSubject.toFlowable(BackpressureStrategy.DROP)
}
}

View file

@ -20,9 +20,12 @@ import io.realm.OrderedRealmCollection
class RewardsRecyclerViewAdapter(private var customRewards: OrderedRealmCollection<Task>?, private val layoutResource: Int, private val user: User?) : RecyclerView.Adapter<RecyclerView.ViewHolder>(), TaskRecyclerViewAdapter {
private var inAppRewards: OrderedRealmCollection<ShopItem>? = null
private val errorButtonEvents = PublishSubject.create<String>()
val errorButtonEventsSubject = PublishSubject.create<String>()
override val errorButtonEvents = errorButtonEventsSubject.toFlowable(BackpressureStrategy.DROP)
private var taskScoreEventsSubject = PublishSubject.create<Pair<Task, TaskDirection>>()
val taskScoreEvents: Flowable<Pair<Task, TaskDirection>> = taskScoreEventsSubject.toFlowable(BackpressureStrategy.LATEST)
override val taskScoreEvents: Flowable<Pair<Task, TaskDirection>> = taskScoreEventsSubject.toFlowable(BackpressureStrategy.LATEST)
protected var taskOpenEventsSubject = PublishSubject.create<Task>()
override val taskOpenEvents: Flowable<Task> = 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<Task>?) {
updateData(data)
}
override fun getErrorButtonEvents(): Flowable<String> {
return errorButtonEvents.toFlowable(BackpressureStrategy.DROP)
}
override fun getItemCount(): Int {
var rewardCount = customRewardCount
rewardCount += inAppRewardCount

View file

@ -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<Task> 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<Task> data);
Flowable<String> getErrorButtonEvents();
}

View file

@ -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<String>
fun updateData(tasks: OrderedRealmCollection<Task>?)
fun filter()
fun notifyItemMoved(adapterPosition: Int, adapterPosition1: Int)
fun notifyDataSetChanged()
fun getItemViewType(position: Int): Int
fun getTaskIDAt(position: Int): String?
fun updateUnfilteredData(data: OrderedRealmCollection<Task>?)
val taskScoreEvents: Flowable<Pair<Task, TaskDirection>>
val taskOpenEvents: Flowable<Task>
}

View file

@ -11,6 +11,8 @@ import io.realm.OrderedRealmCollection
class TodosRecyclerViewAdapter(data: OrderedRealmCollection<Task>?, autoUpdate: Boolean, layoutResource: Int, taskFilterHelper: TaskFilterHelper) : RealmBaseTasksRecyclerViewAdapter<TodoViewHolder>(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)
}
}

View file

@ -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"

View file

@ -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<Int, TaskRecyclerViewFragment>? = 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
}
}

View file

@ -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<Task>(itemView), View.OnClickListener {
abstract class BaseTaskViewHolder constructor(itemView: View, var scoreTaskFunc: ((Task, TaskDirection) -> Unit), var openTaskFunc: ((Task) -> Unit)) : BindableViewHolder<Task>(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 {

View file

@ -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)

View file

@ -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)

View file

@ -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) }
}

View file

@ -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)
}
}

View file

@ -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)