Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
XML 11.16 KB | None | 0 0
  1. package com.limelife.android.screens.main.tabFragments.tasks.adapters
  2.  
  3. import android.content.Context
  4. import android.view.LayoutInflater
  5. import android.view.MotionEvent
  6. import android.view.View
  7. import android.view.ViewGroup
  8. import android.widget.FrameLayout
  9. import android.widget.RelativeLayout
  10. import android.widget.TimePicker
  11. import androidx.core.content.ContextCompat
  12. import androidx.recyclerview.widget.DiffUtil
  13. import androidx.recyclerview.widget.RecyclerView
  14. import com.bumptech.glide.Glide
  15. import com.bumptech.glide.load.engine.DiskCacheStrategy
  16. import com.bumptech.glide.request.RequestOptions
  17. import com.limelife.android.R
  18. import com.limelife.android.data.api.response.Task
  19. import com.limelife.android.screens.main.tabFragments.tasks.entities.TaskRow
  20. import com.limelife.android.utils.hide
  21. import com.limelife.android.utils.invisible
  22. import com.limelife.android.utils.show
  23. import com.limelife.android.utils.views.SwipeMenuLayout
  24. import com.limelife.android.utils.views.UnitUtils
  25. import com.limelife.android.utils.views.expandablePanelView.SlidingUpPanelLayout
  26. import io.reactivex.subjects.PublishSubject
  27. import kotlinx.android.synthetic.main.adapter_task.view.*
  28. import timber.log.Timber
  29.  
  30. class TaskAdapter(
  31.         private val context: Context,
  32.         private val selectTaskSubject: PublishSubject<TaskRow>,
  33.         private val putInDoneSubject: PublishSubject<TaskRow>,
  34.         private val putInDeleteSubject: PublishSubject<TaskRow>
  35. ) : RecyclerView.Adapter<TaskAdapter.ViewHolder>() {
  36.  
  37.     private var isSwiping = false
  38.     private var tasks = mutableListOf<Task>()
  39.  
  40.     fun setTasksData(newTasks: MutableList<Task>) {
  41.         val diffCallback = TasksDiffCallback(tasks, newTasks)
  42.         val diffResult = DiffUtil.calculateDiff(diffCallback)
  43.         tasks.clear()
  44.         tasks.addAll(newTasks)
  45.         diffResult.dispatchUpdatesTo(this)
  46.         notifyDataSetChanged()
  47.     }
  48.  
  49.     fun getTaskList(): MutableList<Task> {
  50.         return tasks
  51.     }
  52.  
  53.     override fun getItemCount(): Int = tasks.size
  54.  
  55.     override fun getItemId(position: Int): Long {
  56.         return tasks[position].taskId?.toLong() ?: position.toLong()
  57.     }
  58.  
  59.     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder =
  60.             ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.adapter_task, parent, false))
  61.  
  62.     override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(tasks[position])
  63.  
  64.     inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
  65.         fun bind(item: Task) {
  66.             itemView.let {
  67.                 setTaskDetails(item)
  68.                 setTaskSwipeActions(item)
  69.                 itemView.taskVisibleContent.setOnClickListener {
  70.                     selectTaskSubject.onNext(TaskRow(adapterPosition, item))
  71.                     itemView.taskSwipeLayout.close(false)
  72.                     itemView.taskVisibleContent.background = ContextCompat.getDrawable(context, R.drawable.border_task_filled_1)
  73.                 }
  74.             }
  75.             itemView.taskSwipeLayout.close(false)
  76.  
  77.             if (itemView.taskSwipeLayout.isClosed) {
  78.                 itemView.taskVisibleContent.background = ContextCompat.getDrawable(context, R.drawable.border_task_filled_1)
  79.             }
  80.         }
  81.  
  82.         fun closeSwipe() {
  83.             itemView.taskSwipeLayout.close(false)
  84.         }
  85.  
  86.         private fun setTaskDetails(item: Task) {
  87.             itemView.tvTaskTitle.text = item.title
  88.             if (!item.shortContext.isNullOrEmpty()) {
  89.                 itemView.tvTaskDescription.text = item.shortContext
  90.             } else {
  91.                 itemView.tvTaskDescription.text = context.getString(R.string.subtitle)
  92.             }
  93.  
  94.             if (!item.icon.isNullOrEmpty()) {
  95.                 val options = RequestOptions()
  96.                 options.centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL)
  97.                 Glide.with(context)
  98.                         .load(item.icon)
  99.                         .apply(options)
  100.                         .into(itemView.ivTaskIcon)
  101.             }
  102.         }
  103.  
  104.         /*
  105.         android:layout_marginBottom="@dimen/space_10dp"
  106.                         android:layout_marginEnd="@dimen/space_10dp"
  107.                         android:layout_marginStart="@dimen/space_20dp"
  108.          */
  109.         private fun setTaskSwipeActions(item: Task) {
  110. //            val paramsWithoutMarginRight = itemView.taskVisibleContent.layoutParams as FrameLayout.LayoutParams
  111. //            paramsWithoutMarginRight.setMargins(
  112. //                    0,
  113. //                    0,
  114. //                    0,
  115. //                    0)
  116. //
  117. //            itemView.taskVisibleContent.layoutParams = paramsWithoutMarginRight
  118. //            val paramsWithMarginRight = itemView.taskVisibleContent.layoutParams as FrameLayout.LayoutParams
  119. //            paramsWithMarginRight.setMargins(
  120. //                    UnitUtils.dip2px(context, 20F),
  121. //                    0,
  122. //                    UnitUtils.dip2px(context, 10F),
  123. //                    UnitUtils.dip2px(context, 10F))
  124.  
  125.             itemView.swipeOptionDone.setOnClickListener {}
  126.  
  127.             itemView.swipeOptionDelete.setOnClickListener {}
  128.  
  129.             var left =0
  130.             itemView.taskSwipeLayout.setSwipeListener(object : SwipeMenuLayout.SwipeListener {
  131.                 override fun onClosed(view: SwipeMenuLayout?) {
  132.  
  133.                     var params = itemView.maskLayout.layoutParams as RelativeLayout.LayoutParams
  134.                     params.marginStart = UnitUtils.dip2px(context,20F)
  135.                     itemView.maskLayout.layoutParams= params
  136.                     //itemView.maskLayout.left =UnitUtils.dip2px(context,20F)
  137.                     //itemView.maskLayout.right =itemView.taskSwipeLayout.right
  138.  
  139.                     //itemView.maskLayout.right =itemView.maskLayout.left+itemView.maskLayout.measuredWidth
  140.                     //itemView.additionalMenuView.translationX = UnitUtils.dip2px(context,10F).toFloat()
  141.                     //itemView.additionalMenuView.invisible()
  142.  
  143.                     //itemView.taskVisibleContent.setPadding(itemView.taskVisibleContent.paddingLeft, itemView.taskVisibleContent.paddingTop, UnitUtils.dip2px(context, 10F), itemView.taskVisibleContent.paddingBottom)
  144.                     //itemView.taskVisibleContent.background = ContextCompat.getDrawable(context, R.drawable.border_task_filled_1)
  145.                     //itemView.taskVisibleContent.layoutParams = paramsWithoutMarginRight
  146.                     isSwiping = false
  147.                     item.swipeStatus = false
  148.                    // Timber.e("offset clise ${slideOffset}")
  149.                 }
  150.  
  151.                 override fun onOpened(view: SwipeMenuLayout?) {
  152.                     //itemView.maskLayout.left =slideOffset.toInt()
  153.  
  154.                     //itemView.maskLayout.right =itemView.taskSwipeLayout.right
  155.  
  156.                     //Timber.e("itemWidth ${itemView.maskLayout.width}")
  157.                     //itemView.additionalMenuView.show()
  158.                     //itemView.taskVisibleContent.setPadding(itemView.taskVisibleContent.paddingLeft, itemView.taskVisibleContent.paddingTop, 0, itemView.taskVisibleContent.paddingBottom)
  159.                    // itemView.taskVisibleContent.background = ContextCompat.getDrawable(context, R.drawable.border_task_white_filled_right_corners_rounded_1)
  160.                     //itemView.taskVisibleContent.layoutParams = paramsWithoutMarginRight
  161.                     isSwiping = false
  162.                     item.swipeStatus = true
  163.                 }
  164.  
  165.                 override fun onSlide(view: SwipeMenuLayout?, slideOffset: Float) {
  166.  
  167.                     var params = itemView.maskLayout.layoutParams as RelativeLayout.LayoutParams
  168.                     params.marginStart = itemView.front_layout.left + UnitUtils.dip2px(context,20F)
  169.                     itemView.maskLayout.layoutParams= params
  170. //                    itemView.maskLayout.layout(
  171. //                        itemView.front_layout.left + UnitUtils.dip2px(context,20F),
  172. //                        itemView.maskLayout.top,
  173. //                        itemView.taskSwipeLayout.right,
  174. //                        itemView.maskLayout.bottom
  175. //                        )
  176.  
  177.  
  178.                     Timber.e("${itemView.taskSwipeLayout.right}")
  179.  
  180. //                    if(itemView.maskLayout.right> itemView.maskLayout.left +itemView.maskLayout.measuredWidth +UnitUtils.dip2px(context,20F)){
  181. //                        itemView.maskLayout.right=itemView.maskLayout.left +itemView.maskLayout.measuredWidth +UnitUtils.dip2px(context,20F)
  182. //                    }
  183.                     //itemView.maskLayout.requestLayout()
  184.                     //itemView.maskLayout.layout(itemView.taskVisibleContent.left,itemView.maskLayout.top,itemView.maskLayout.right,itemView.maskLayout.bottom)
  185.                     //itemView.maskLayout.translationX = slideOffset * 100
  186.                     //itemView.maskLayout.offsetLeftAndRight(((slideOffset *  itemView.maskLayout.width)/100).toInt())
  187.                     Timber.e("offset slide ${slideOffset}")
  188.                     if (!isSwiping)
  189.  
  190.                         //itemView.additionalMenuView.show()
  191.                    // itemView.additionalMenuView.translationX = UnitUtils.dip2px(context,-10F).toFloat()
  192.                        //itemView.taskVisibleContent.layoutParams = paramsWithoutMarginRight
  193.                         //itemView.taskVisibleContent.setPadding(itemView.taskVisibleContent.paddingLeft, itemView.taskVisibleContent.paddingTop, 0, itemView.taskVisibleContent.paddingBottom)
  194.                     //itemView.taskVisibleContent.background = ContextCompat.getDrawable(context, R.drawable.border_task_white_filled_right_corners_rounded_1)
  195.                     isSwiping = true
  196.                 }
  197.             })
  198.  
  199.             val lastIndex = tasks.lastIndex
  200.  
  201.             itemView.swipeOptionDone.setOnTouchListener { _, event ->
  202.                 when (event.action) {
  203.                     MotionEvent.ACTION_UP -> {
  204.                         if (adapterPosition != -1) {
  205.                             if (adapterPosition == lastIndex || adapterPosition > lastIndex - 6) {
  206.                                 putInDoneSubject.onNext(TaskRow(adapterPosition, tasks[adapterPosition], isLastTask = true))
  207.                             } else {
  208.                                 putInDoneSubject.onNext(TaskRow(adapterPosition, tasks[adapterPosition]))
  209.                             }
  210.                         }
  211.                     }
  212.                 }
  213.                 false
  214.             }
  215.  
  216.             itemView.swipeOptionDelete.setOnTouchListener { _, event ->
  217.                 when (event.action) {
  218.                     MotionEvent.ACTION_UP -> {
  219.                         if (adapterPosition != -1) {
  220.                             if (adapterPosition == lastIndex || adapterPosition > lastIndex - 6) {
  221.                                 putInDeleteSubject.onNext(TaskRow(adapterPosition, tasks[adapterPosition], isLastTask = true))
  222.                             } else {
  223.                                 putInDeleteSubject.onNext(TaskRow(adapterPosition, tasks[adapterPosition]))
  224.                             }
  225.                         }
  226.                     }
  227.                 }
  228.                 false
  229.             }
  230.         }
  231.     }
  232. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement