Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 60 additions & 6 deletions app/src/main/kotlin/org/fossify/clock/adapters/AlarmsAdapter.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package org.fossify.clock.adapters

import android.annotation.SuppressLint
import android.view.Menu
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import org.fossify.clock.R
import org.fossify.clock.activities.SimpleActivity
import org.fossify.clock.databinding.ItemAlarmBinding
Expand All @@ -14,17 +18,32 @@ import org.fossify.clock.interfaces.ToggleAlarmInterface
import org.fossify.clock.models.Alarm
import org.fossify.commons.adapters.MyRecyclerViewAdapter
import org.fossify.commons.dialogs.ConfirmationDialog
import org.fossify.commons.extensions.applyColorFilter
import org.fossify.commons.extensions.beVisibleIf
import org.fossify.commons.extensions.toast
import org.fossify.commons.helpers.SORT_BY_CUSTOM
import org.fossify.commons.interfaces.ItemMoveCallback
import org.fossify.commons.interfaces.ItemTouchHelperContract
import org.fossify.commons.interfaces.StartReorderDragListener
import org.fossify.commons.views.MyRecyclerView

class AlarmsAdapter(
activity: SimpleActivity, var alarms: ArrayList<Alarm>, val toggleAlarmInterface: ToggleAlarmInterface,
recyclerView: MyRecyclerView, itemClick: (Any) -> Unit,
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick), ItemTouchHelperContract {

private var startReorderDragListener: StartReorderDragListener

init {
setupDragListener(true)
val touchHelper = ItemTouchHelper(ItemMoveCallback(this))
touchHelper.attachToRecyclerView(recyclerView)

startReorderDragListener = object : StartReorderDragListener {
override fun requestDrag(viewHolder: RecyclerView.ViewHolder) {
touchHelper.startDrag(viewHolder)
}
}
}

override fun getActionMenuId() = R.menu.cab_alarms
Expand All @@ -49,24 +68,35 @@ class AlarmsAdapter(

override fun getItemKeyPosition(key: Int) = alarms.indexOfFirst { it.id == key }

override fun onActionModeCreated() {}
@SuppressLint("NotifyDataSetChanged")
override fun onActionModeCreated() {
notifyDataSetChanged()
}

@SuppressLint("NotifyDataSetChanged")
override fun onActionModeDestroyed() {
notifyDataSetChanged()
}

override fun onRowClear(myViewHolder: ViewHolder?) {}

override fun onActionModeDestroyed() {}
override fun onRowSelected(myViewHolder: ViewHolder?) {}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return createViewHolder(ItemAlarmBinding.inflate(layoutInflater, parent, false).root)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val alarm = alarms[position]
holder.bindView(alarm, true, true) { itemView, layoutPosition ->
setupView(itemView, alarm)
holder.bindView(alarm, true, true) { itemView, _ ->
setupView(itemView, alarm, holder)
}
bindViewHolder(holder)
}

override fun getItemCount() = alarms.size

@SuppressLint("NotifyDataSetChanged")
fun updateItems(newItems: ArrayList<Alarm>) {
alarms = newItems
notifyDataSetChanged()
Expand All @@ -87,10 +117,19 @@ class AlarmsAdapter(

private fun getSelectedItems() = alarms.filter { selectedKeys.contains(it.id) } as ArrayList<Alarm>

private fun setupView(view: View, alarm: Alarm) {
@SuppressLint("ClickableViewAccessibility")
private fun setupView(view: View, alarm: Alarm, holder: ViewHolder) {
val isSelected = selectedKeys.contains(alarm.id)
ItemAlarmBinding.bind(view).apply {
alarmHolder.isSelected = isSelected
alarmDragHandle.beVisibleIf(selectedKeys.isNotEmpty())
alarmDragHandle.applyColorFilter(textColor)
alarmDragHandle.setOnTouchListener { _, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
startReorderDragListener.requestDrag(holder)
}
false
}
alarmTime.text = activity.getFormattedTime(alarm.timeInMinutes * 60, false, true)
alarmTime.setTextColor(textColor)

Expand Down Expand Up @@ -137,4 +176,19 @@ class AlarmsAdapter(
}
}
}

override fun onRowMoved(fromPosition: Int, toPosition: Int) {
alarms.swap(fromPosition, toPosition)
notifyItemMoved(fromPosition, toPosition)
saveAlarmsCustomOrder(alarms)
if (activity.config.alarmSort != SORT_BY_CUSTOM) {
activity.config.alarmSort = SORT_BY_CUSTOM
}
}

private fun saveAlarmsCustomOrder(alarms: ArrayList<Alarm>) {
val alarmsCustomSortingIds = alarms.map { it.id }

activity.config.alarmsCustomSorting = alarmsCustomSortingIds.joinToString { it.toString() }
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.fossify.clock.adapters

import android.annotation.SuppressLint
import android.view.Menu
import android.view.View
import android.view.ViewGroup
Expand Down Expand Up @@ -52,6 +53,7 @@ class StopwatchAdapter(activity: SimpleActivity, var laps: ArrayList<Lap>, recyc

override fun getItemCount() = laps.size

@SuppressLint("NotifyDataSetChanged")
fun updateItems(newItems: ArrayList<Lap>) {
lastLapId = 0
laps = newItems.clone() as ArrayList<Lap>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.fossify.clock.adapters

import android.annotation.SuppressLint
import android.view.Menu
import android.view.View
import android.view.ViewGroup
Expand Down Expand Up @@ -67,12 +68,14 @@ class TimeZonesAdapter(activity: SimpleActivity, var timeZones: ArrayList<MyTime

override fun getItemCount() = timeZones.size

@SuppressLint("NotifyDataSetChanged")
fun updateItems(newItems: ArrayList<MyTimeZone>) {
timeZones = newItems
notifyDataSetChanged()
finishActMode()
}

@SuppressLint("NotifyDataSetChanged")
fun updateTimes() {
notifyDataSetChanged()
}
Expand Down
Loading
Loading