creating the Alarms adapter

This commit is contained in:
tibbi
2018-03-04 11:21:36 +01:00
parent 4f9624a232
commit db1012d255
12 changed files with 224 additions and 14 deletions

View File

@ -0,0 +1,81 @@
package com.simplemobiletools.clock.adapters
import android.view.Menu
import android.view.View
import android.view.ViewGroup
import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.activities.SimpleActivity
import com.simplemobiletools.clock.extensions.formatAlarmTime
import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.views.MyRecyclerView
import kotlinx.android.synthetic.main.item_alarm.view.*
import java.util.*
class AlarmsAdapter(activity: SimpleActivity, var alarms: ArrayList<Alarm>, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) :
MyRecyclerViewAdapter(activity, recyclerView, null, itemClick) {
override fun getActionMenuId() = R.menu.cab_alarms
override fun prepareActionMode(menu: Menu) {}
override fun prepareItemSelection(view: View) {}
override fun markItemSelection(select: Boolean, view: View?) {
view?.alarm_frame?.isSelected = select
}
override fun actionItemPressed(id: Int) {
if (selectedPositions.isEmpty()) {
return
}
when (id) {
R.id.cab_delete -> deleteItems()
}
}
override fun getSelectableItemCount() = alarms.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_alarm, parent)
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
val alarm = alarms[position]
val view = holder.bindView(alarm, true) { itemView, layoutPosition ->
setupView(itemView, alarm)
}
bindViewHolder(holder, position, view)
}
override fun getItemCount() = alarms.size
fun updateItems(newItems: ArrayList<Alarm>) {
alarms = newItems
notifyDataSetChanged()
finishActMode()
}
private fun deleteItems() {
val alarmsToRemove = ArrayList<Alarm>()
selectedPositions.sortedDescending().forEach {
val alarm = alarms[it]
alarmsToRemove.add(alarm)
}
alarms.removeAll(alarmsToRemove)
removeSelectedItems()
}
private fun setupView(view: View, alarm: Alarm) {
view.apply {
alarm_time.text = alarm.timeInMinutes.formatAlarmTime()
alarm_time.setTextColor(textColor)
alarm_days.text = "Mon, Tue, Wed, Thu, Fri"
alarm_days.setTextColor(textColor)
alarm_switch.isChecked = alarm.isEnabled
alarm_switch.setColors(textColor, primaryColor, backgroundColor)
}
}
}

View File

@ -36,7 +36,7 @@ class TimeZonesAdapter(activity: SimpleActivity, var timeZones: ArrayList<MyTime
}
when (id) {
R.id.cab_remove -> removeItems()
R.id.cab_delete -> deleteItems()
}
}
@ -45,9 +45,9 @@ class TimeZonesAdapter(activity: SimpleActivity, var timeZones: ArrayList<MyTime
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_time_zone, parent)
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
val contact = timeZones[position]
val view = holder.bindView(contact, true) { itemView, layoutPosition ->
setupView(itemView, contact)
val timeZone = timeZones[position]
val view = holder.bindView(timeZone, true) { itemView, layoutPosition ->
setupView(itemView, timeZone)
}
bindViewHolder(holder, position, view)
}
@ -64,7 +64,7 @@ class TimeZonesAdapter(activity: SimpleActivity, var timeZones: ArrayList<MyTime
notifyDataSetChanged()
}
private fun removeItems() {
private fun deleteItems() {
val timeZonesToRemove = ArrayList<MyTimeZone>()
val timeZoneIDsToRemove = ArrayList<String>()
selectedPositions.sortedDescending().forEach {

View File

@ -0,0 +1,8 @@
package com.simplemobiletools.clock.extensions
fun Int.formatAlarmTime(): String {
val hours = this / 60
val minutes = this % 60
val format = "%02d:%02d"
return String.format(format, hours, minutes)
}

View File

@ -6,6 +6,9 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.activities.SimpleActivity
import com.simplemobiletools.clock.adapters.AlarmsAdapter
import com.simplemobiletools.clock.extensions.dbHelper
import com.simplemobiletools.commons.extensions.updateTextColors
import kotlinx.android.synthetic.main.fragment_alarm.view.*
@ -29,6 +32,21 @@ class AlarmFragment : Fragment() {
fabClicked()
}
}
setupAlarms()
}
private fun setupAlarms() {
val alarms = context!!.dbHelper.getAlarms()
val currAdapter = view.alarms_list.adapter
if (currAdapter == null) {
val alarmsAdapter = AlarmsAdapter(activity as SimpleActivity, alarms, view.alarms_list) {
}
view.alarms_list.adapter = alarmsAdapter
} else {
(currAdapter as AlarmsAdapter).updateItems(alarms)
}
}
private fun fabClicked() {

View File

@ -121,13 +121,12 @@ class ClockFragment : Fragment() {
val timeZones = context!!.getAllTimeZonesModified().filter { selectedTimeZoneIDs.contains(it.id) } as ArrayList<MyTimeZone>
val currAdapter = view.time_zones_list.adapter
if (currAdapter == null) {
TimeZonesAdapter(activity as SimpleActivity, timeZones, view.time_zones_list) {
val timeZonesAdapter = TimeZonesAdapter(activity as SimpleActivity, timeZones, view.time_zones_list) {
EditTimeZoneDialog(activity as SimpleActivity, it as MyTimeZone) {
updateTimeZones()
}
}.apply {
view.time_zones_list.adapter = this
}
view.time_zones_list.adapter = timeZonesAdapter
} else {
(currAdapter as TimeZonesAdapter).updateItems(timeZones)
}

View File

@ -2,9 +2,13 @@ package com.simplemobiletools.clock.helpers
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.commons.extensions.getIntValue
import com.simplemobiletools.commons.extensions.getStringValue
import java.util.*
class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) {
private val ALARMS_TABLE_NAME = "contacts"
@ -41,11 +45,11 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
private fun insertInitialAlarms(db: SQLiteDatabase) {
val weekDays = MONDAY_BIT or TUESDAY_BIT or WEDNESDAY_BIT or THURSDAY_BIT or FRIDAY_BIT
val weekDaysAlarm = Alarm(420, weekDays, false, false, "", "")
val weekDaysAlarm = Alarm(0, 420, weekDays, false, false, "", "")
insertAlarm(weekDaysAlarm, db)
val weekEnd = SATURDAY_BIT or SUNDAY_BIT
val weekEndAlarm = Alarm(540, weekEnd, false, false, "", "")
val weekEndAlarm = Alarm(0, 540, weekEnd, false, false, "", "")
insertAlarm(weekEndAlarm, db)
}
@ -64,4 +68,35 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont
put(COL_LABEL, alarm.label)
}
}
fun getAlarms(): ArrayList<Alarm> {
val alarms = ArrayList<Alarm>()
val cols = arrayOf(COL_ID, COL_TIME_IN_MINUTES, COL_DAYS, COL_IS_ENABLED, COL_VIBRATE, COL_SOUND_URI, COL_LABEL)
var cursor: Cursor? = null
try {
cursor = mDb.query(ALARMS_TABLE_NAME, cols, null, null, null, null, null)
if (cursor?.moveToFirst() == true) {
do {
try {
val id = cursor.getIntValue(COL_ID)
val timeInMinutes = cursor.getIntValue(COL_TIME_IN_MINUTES)
val days = cursor.getIntValue(COL_DAYS)
val isEnabled = cursor.getIntValue(COL_IS_ENABLED) == 1
val vibrate = cursor.getIntValue(COL_VIBRATE) == 1
val soundUri = cursor.getStringValue(COL_SOUND_URI)
val label = cursor.getStringValue(COL_LABEL)
val alarm = Alarm(id, timeInMinutes, days, isEnabled, vibrate, soundUri, label)
alarms.add(alarm)
} catch (e: Exception) {
continue
}
} while (cursor.moveToNext())
}
} finally {
cursor?.close()
}
return alarms
}
}

View File

@ -1,3 +1,3 @@
package com.simplemobiletools.clock.models
data class Alarm(val timeInMinutes: Int, var days: Int, val isEnabled: Boolean, val vibrate: Boolean, val soundUri: String, val label: String)
data class Alarm(val id: Int, val timeInMinutes: Int, var days: Int, val isEnabled: Boolean, val vibrate: Boolean, val soundUri: String, val label: String)