diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/adapters/AlarmsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/clock/adapters/AlarmsAdapter.kt new file mode 100644 index 00000000..757e7b92 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/clock/adapters/AlarmsAdapter.kt @@ -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, 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) { + alarms = newItems + notifyDataSetChanged() + finishActMode() + } + + private fun deleteItems() { + val alarmsToRemove = ArrayList() + 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) + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/adapters/TimeZonesAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/clock/adapters/TimeZonesAdapter.kt index e3882346..7023ab3b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/adapters/TimeZonesAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/adapters/TimeZonesAdapter.kt @@ -36,7 +36,7 @@ class TimeZonesAdapter(activity: SimpleActivity, var timeZones: ArrayList removeItems() + R.id.cab_delete -> deleteItems() } } @@ -45,9 +45,9 @@ class TimeZonesAdapter(activity: SimpleActivity, var timeZones: ArrayList - 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() val timeZoneIDsToRemove = ArrayList() selectedPositions.sortedDescending().forEach { diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Int.kt b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Int.kt new file mode 100644 index 00000000..4c20cf97 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Int.kt @@ -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) +} diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/AlarmFragment.kt b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/AlarmFragment.kt index 0ae9c5ad..df7c7e87 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/AlarmFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/AlarmFragment.kt @@ -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() { diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/ClockFragment.kt b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/ClockFragment.kt index 325e491a..4787df52 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/ClockFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/ClockFragment.kt @@ -121,13 +121,12 @@ class ClockFragment : Fragment() { val timeZones = context!!.getAllTimeZonesModified().filter { selectedTimeZoneIDs.contains(it.id) } as ArrayList 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) } diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/DBHelper.kt b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/DBHelper.kt index a1613df8..f3c5d653 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/DBHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/DBHelper.kt @@ -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 { + val alarms = ArrayList() + 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 + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/models/Alarm.kt b/app/src/main/kotlin/com/simplemobiletools/clock/models/Alarm.kt index b9cb7b05..e8c0b8e0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/models/Alarm.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/models/Alarm.kt @@ -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) diff --git a/app/src/main/res/layout/fragment_alarm.xml b/app/src/main/res/layout/fragment_alarm.xml index f5f8e02d..c018b778 100644 --- a/app/src/main/res/layout/fragment_alarm.xml +++ b/app/src/main/res/layout/fragment_alarm.xml @@ -1,6 +1,7 @@ @@ -10,6 +11,15 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/cab_alarms.xml b/app/src/main/res/menu/cab_alarms.xml new file mode 100644 index 00000000..af34568b --- /dev/null +++ b/app/src/main/res/menu/cab_alarms.xml @@ -0,0 +1,9 @@ + + + + diff --git a/app/src/main/res/menu/cab_timezones.xml b/app/src/main/res/menu/cab_timezones.xml index bc4ee98e..af34568b 100644 --- a/app/src/main/res/menu/cab_timezones.xml +++ b/app/src/main/res/menu/cab_timezones.xml @@ -2,8 +2,8 @@ diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index a04cd808..dbd6ca8e 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,3 +1,4 @@ 70sp + 46sp