mirror of
https://github.com/SimpleMobileTools/Simple-Clock.git
synced 2025-04-18 20:27:28 +02:00
- update title for timer notification in finished state to be the label if it is empty - remove duration field from the TimerEvent.Reset
149 lines
5.6 KiB
Kotlin
149 lines
5.6 KiB
Kotlin
package com.simplemobiletools.clock.adapters
|
|
|
|
import android.graphics.Color
|
|
import android.view.Menu
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import androidx.recyclerview.widget.DiffUtil
|
|
import com.simplemobiletools.clock.R
|
|
import com.simplemobiletools.clock.activities.SimpleActivity
|
|
import com.simplemobiletools.clock.extensions.getFormattedDuration
|
|
import com.simplemobiletools.clock.extensions.hideTimerNotification
|
|
import com.simplemobiletools.clock.extensions.secondsToMillis
|
|
import com.simplemobiletools.clock.models.Timer
|
|
import com.simplemobiletools.clock.models.TimerEvent
|
|
import com.simplemobiletools.clock.models.TimerState
|
|
import com.simplemobiletools.commons.adapters.MyRecyclerViewListAdapter
|
|
import com.simplemobiletools.commons.extensions.*
|
|
import com.simplemobiletools.commons.views.MyRecyclerView
|
|
import kotlinx.android.synthetic.main.item_timer.view.*
|
|
import org.greenrobot.eventbus.EventBus
|
|
|
|
class TimerAdapter(
|
|
private val simpleActivity: SimpleActivity,
|
|
recyclerView: MyRecyclerView,
|
|
onRefresh: () -> Unit,
|
|
onItemClick: (Timer) -> Unit,
|
|
) : MyRecyclerViewListAdapter<Timer>(simpleActivity, recyclerView, diffUtil, null, onItemClick, onRefresh) {
|
|
|
|
companion object {
|
|
private val diffUtil = object : DiffUtil.ItemCallback<Timer>() {
|
|
override fun areItemsTheSame(oldItem: Timer, newItem: Timer): Boolean {
|
|
return oldItem.id == newItem.id
|
|
}
|
|
|
|
override fun areContentsTheSame(oldItem: Timer, newItem: Timer): Boolean {
|
|
return oldItem == newItem
|
|
}
|
|
}
|
|
}
|
|
|
|
init {
|
|
setupDragListener(true)
|
|
}
|
|
|
|
override fun getActionMenuId() = R.menu.cab_alarms
|
|
|
|
override fun prepareActionMode(menu: Menu) {}
|
|
|
|
override fun actionItemPressed(id: Int) {
|
|
if (selectedKeys.isEmpty()) {
|
|
return
|
|
}
|
|
|
|
when (id) {
|
|
R.id.cab_delete -> deleteItems()
|
|
}
|
|
}
|
|
|
|
override fun getSelectableItemCount() = itemCount
|
|
|
|
override fun getIsItemSelectable(position: Int) = true
|
|
|
|
override fun getItemSelectionKey(position: Int) = getItem(position).id
|
|
|
|
override fun getItemKeyPosition(key: Int): Int {
|
|
var position = -1
|
|
for (i in 0 until itemCount) {
|
|
if (key == getItem(i).id) {
|
|
position = i
|
|
break
|
|
}
|
|
}
|
|
return position
|
|
}
|
|
|
|
override fun onActionModeCreated() {}
|
|
|
|
override fun onActionModeDestroyed() {}
|
|
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_timer, parent)
|
|
|
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
|
holder.bindView(getItem(position), true, true) { itemView, _ ->
|
|
setupView(itemView, getItem(position))
|
|
}
|
|
bindViewHolder(holder)
|
|
}
|
|
|
|
private fun deleteItems() {
|
|
val positions = getSelectedItemPositions()
|
|
val timersToRemove = positions.map { position ->
|
|
getItem(position)
|
|
}
|
|
removeSelectedItems(positions)
|
|
timersToRemove.forEach(::deleteTimer)
|
|
}
|
|
|
|
private fun setupView(view: View, timer: Timer) {
|
|
view.apply {
|
|
val isSelected = selectedKeys.contains(timer.id)
|
|
timer_frame.isSelected = isSelected
|
|
|
|
timer_label.setTextColor(textColor)
|
|
timer_label.setHintTextColor(textColor.adjustAlpha(0.7f))
|
|
timer_label.text = timer.label
|
|
|
|
timer_time.setTextColor(textColor)
|
|
timer_time.text = when (timer.state) {
|
|
is TimerState.Finished -> 0.getFormattedDuration()
|
|
is TimerState.Idle -> timer.seconds.getFormattedDuration()
|
|
is TimerState.Paused -> timer.state.tick.getFormattedDuration()
|
|
is TimerState.Running -> timer.state.tick.getFormattedDuration()
|
|
}
|
|
|
|
timer_reset.applyColorFilter(textColor)
|
|
timer_reset.setOnClickListener {
|
|
resetTimer(timer)
|
|
}
|
|
|
|
timer_play_pause.applyColorFilter(if (adjustedPrimaryColor == Color.WHITE) Color.BLACK else Color.WHITE)
|
|
timer_play_pause.setOnClickListener {
|
|
when (val state = timer.state) {
|
|
is TimerState.Idle -> EventBus.getDefault().post(TimerEvent.Start(timer.id!!, timer.seconds.secondsToMillis))
|
|
is TimerState.Paused -> EventBus.getDefault().post(TimerEvent.Start(timer.id!!, state.tick))
|
|
is TimerState.Running -> EventBus.getDefault().post(TimerEvent.Pause(timer.id!!, state.tick))
|
|
is TimerState.Finished -> EventBus.getDefault().post(TimerEvent.Start(timer.id!!, timer.seconds.secondsToMillis))
|
|
}
|
|
}
|
|
|
|
val state = timer.state
|
|
val resetPossible = state is TimerState.Running || state is TimerState.Paused || state is TimerState.Finished
|
|
timer_reset.beInvisibleIf(!resetPossible)
|
|
val drawableId = if (state is TimerState.Running) R.drawable.ic_pause_vector else R.drawable.ic_play_vector
|
|
val iconColor = if (adjustedPrimaryColor == Color.WHITE) Color.BLACK else Color.WHITE
|
|
timer_play_pause.setImageDrawable(simpleActivity.resources.getColoredDrawableWithColor(drawableId, iconColor))
|
|
}
|
|
}
|
|
|
|
private fun resetTimer(timer: Timer) {
|
|
EventBus.getDefault().post(TimerEvent.Reset(timer.id!!))
|
|
simpleActivity.hideTimerNotification(timer.id!!)
|
|
}
|
|
|
|
private fun deleteTimer(timer: Timer) {
|
|
EventBus.getDefault().post(TimerEvent.Delete(timer.id!!))
|
|
simpleActivity.hideTimerNotification(timer.id!!)
|
|
}
|
|
}
|