Skip to content

Commit 249bb19

Browse files
committed
resolve of PR
2 parents e3bfad8 + 7c0049b commit 249bb19

20 files changed

+587
-121
lines changed

app/src/main/kotlin/org/fossify/clock/activities/MainActivity.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ import org.fossify.clock.BuildConfig
1313
import org.fossify.clock.R
1414
import org.fossify.clock.adapters.ViewPagerAdapter
1515
import org.fossify.clock.databinding.ActivityMainBinding
16-
import org.fossify.clock.extensions.*
16+
import org.fossify.clock.extensions.config
17+
import org.fossify.clock.extensions.getEnabledAlarms
18+
import org.fossify.clock.extensions.rescheduleEnabledAlarms
19+
import org.fossify.clock.extensions.updateWidgets
1720
import org.fossify.clock.helpers.*
1821
import org.fossify.commons.databinding.BottomTablayoutItemBinding
1922
import org.fossify.commons.extensions.*
@@ -127,7 +130,11 @@ class MainActivity : SimpleActivity() {
127130
private fun setupOptionsMenu() {
128131
binding.mainToolbar.setOnMenuItemClickListener { menuItem ->
129132
when (menuItem.itemId) {
130-
R.id.sort -> getViewPagerAdapter()?.showAlarmSortDialog()
133+
R.id.sort -> when (binding.viewPager.currentItem) {
134+
TAB_ALARM_INDEX -> getViewPagerAdapter()?.showAlarmSortDialog()
135+
TAB_TIMER_INDEX -> getViewPagerAdapter()?.showTimerSortDialog()
136+
}
137+
131138
R.id.more_apps_from_us -> launchMoreAppsFromUsIntent()
132139
R.id.settings -> launchSettings()
133140
R.id.about -> launchAbout()
@@ -139,7 +146,7 @@ class MainActivity : SimpleActivity() {
139146

140147
private fun refreshMenuItems() {
141148
binding.mainToolbar.menu.apply {
142-
findItem(R.id.sort).isVisible = binding.viewPager.currentItem == getTabIndex(TAB_ALARM)
149+
findItem(R.id.sort).isVisible = binding.viewPager.currentItem == getTabIndex(TAB_ALARM) || binding.viewPager.currentItem == getTabIndex(TAB_TIMER)
143150
findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(org.fossify.commons.R.bool.hide_google_relations)
144151
}
145152
}

app/src/main/kotlin/org/fossify/clock/adapters/AlarmsAdapter.kt

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package org.fossify.clock.adapters
22

3+
import android.annotation.SuppressLint
34
import android.view.Menu
5+
import android.view.MotionEvent
46
import android.view.View
57
import android.view.ViewGroup
8+
import androidx.recyclerview.widget.ItemTouchHelper
9+
import androidx.recyclerview.widget.RecyclerView
610
import org.fossify.clock.R
711
import org.fossify.clock.activities.SimpleActivity
812
import org.fossify.clock.databinding.ItemAlarmBinding
@@ -14,17 +18,32 @@ import org.fossify.clock.interfaces.ToggleAlarmInterface
1418
import org.fossify.clock.models.Alarm
1519
import org.fossify.commons.adapters.MyRecyclerViewAdapter
1620
import org.fossify.commons.dialogs.ConfirmationDialog
21+
import org.fossify.commons.extensions.applyColorFilter
1722
import org.fossify.commons.extensions.beVisibleIf
1823
import org.fossify.commons.extensions.toast
24+
import org.fossify.commons.helpers.SORT_BY_CUSTOM
25+
import org.fossify.commons.interfaces.ItemMoveCallback
26+
import org.fossify.commons.interfaces.ItemTouchHelperContract
27+
import org.fossify.commons.interfaces.StartReorderDragListener
1928
import org.fossify.commons.views.MyRecyclerView
2029

2130
class AlarmsAdapter(
2231
activity: SimpleActivity, var alarms: ArrayList<Alarm>, val toggleAlarmInterface: ToggleAlarmInterface,
2332
recyclerView: MyRecyclerView, itemClick: (Any) -> Unit,
24-
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
33+
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick), ItemTouchHelperContract {
34+
35+
private var startReorderDragListener: StartReorderDragListener
2536

2637
init {
2738
setupDragListener(true)
39+
val touchHelper = ItemTouchHelper(ItemMoveCallback(this))
40+
touchHelper.attachToRecyclerView(recyclerView)
41+
42+
startReorderDragListener = object : StartReorderDragListener {
43+
override fun requestDrag(viewHolder: RecyclerView.ViewHolder) {
44+
touchHelper.startDrag(viewHolder)
45+
}
46+
}
2847
}
2948

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

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

52-
override fun onActionModeCreated() {}
71+
@SuppressLint("NotifyDataSetChanged")
72+
override fun onActionModeCreated() {
73+
notifyDataSetChanged()
74+
}
75+
76+
@SuppressLint("NotifyDataSetChanged")
77+
override fun onActionModeDestroyed() {
78+
notifyDataSetChanged()
79+
}
80+
81+
override fun onRowClear(myViewHolder: ViewHolder?) {}
5382

54-
override fun onActionModeDestroyed() {}
83+
override fun onRowSelected(myViewHolder: ViewHolder?) {}
5584

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

6089
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
6190
val alarm = alarms[position]
62-
holder.bindView(alarm, true, true) { itemView, layoutPosition ->
63-
setupView(itemView, alarm)
91+
holder.bindView(alarm, true, true) { itemView, _ ->
92+
setupView(itemView, alarm, holder)
6493
}
6594
bindViewHolder(holder)
6695
}
6796

6897
override fun getItemCount() = alarms.size
6998

99+
@SuppressLint("NotifyDataSetChanged")
70100
fun updateItems(newItems: ArrayList<Alarm>) {
71101
alarms = newItems
72102
notifyDataSetChanged()
@@ -87,10 +117,19 @@ class AlarmsAdapter(
87117

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

90-
private fun setupView(view: View, alarm: Alarm) {
120+
@SuppressLint("ClickableViewAccessibility")
121+
private fun setupView(view: View, alarm: Alarm, holder: ViewHolder) {
91122
val isSelected = selectedKeys.contains(alarm.id)
92123
ItemAlarmBinding.bind(view).apply {
93124
alarmHolder.isSelected = isSelected
125+
alarmDragHandle.beVisibleIf(selectedKeys.isNotEmpty())
126+
alarmDragHandle.applyColorFilter(textColor)
127+
alarmDragHandle.setOnTouchListener { _, event ->
128+
if (event.action == MotionEvent.ACTION_DOWN) {
129+
startReorderDragListener.requestDrag(holder)
130+
}
131+
false
132+
}
94133
alarmTime.text = activity.getFormattedTime(alarm.timeInMinutes * 60, false, true)
95134
alarmTime.setTextColor(textColor)
96135

@@ -137,4 +176,19 @@ class AlarmsAdapter(
137176
}
138177
}
139178
}
179+
180+
override fun onRowMoved(fromPosition: Int, toPosition: Int) {
181+
alarms.swap(fromPosition, toPosition)
182+
notifyItemMoved(fromPosition, toPosition)
183+
saveAlarmsCustomOrder(alarms)
184+
if (activity.config.alarmSort != SORT_BY_CUSTOM) {
185+
activity.config.alarmSort = SORT_BY_CUSTOM
186+
}
187+
}
188+
189+
private fun saveAlarmsCustomOrder(alarms: ArrayList<Alarm>) {
190+
val alarmsCustomSortingIds = alarms.map { it.id }
191+
192+
activity.config.alarmsCustomSorting = alarmsCustomSortingIds.joinToString { it.toString() }
193+
}
140194
}

app/src/main/kotlin/org/fossify/clock/adapters/StopwatchAdapter.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.fossify.clock.adapters
22

3+
import android.annotation.SuppressLint
34
import android.view.Menu
45
import android.view.View
56
import android.view.ViewGroup
@@ -52,6 +53,7 @@ class StopwatchAdapter(activity: SimpleActivity, var laps: ArrayList<Lap>, recyc
5253

5354
override fun getItemCount() = laps.size
5455

56+
@SuppressLint("NotifyDataSetChanged")
5557
fun updateItems(newItems: ArrayList<Lap>) {
5658
lastLapId = 0
5759
laps = newItems.clone() as ArrayList<Lap>

app/src/main/kotlin/org/fossify/clock/adapters/TimeZonesAdapter.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.fossify.clock.adapters
22

3+
import android.annotation.SuppressLint
34
import android.view.Menu
45
import android.view.View
56
import android.view.ViewGroup
@@ -67,12 +68,14 @@ class TimeZonesAdapter(activity: SimpleActivity, var timeZones: ArrayList<MyTime
6768

6869
override fun getItemCount() = timeZones.size
6970

71+
@SuppressLint("NotifyDataSetChanged")
7072
fun updateItems(newItems: ArrayList<MyTimeZone>) {
7173
timeZones = newItems
7274
notifyDataSetChanged()
7375
finishActMode()
7476
}
7577

78+
@SuppressLint("NotifyDataSetChanged")
7679
fun updateTimes() {
7780
notifyDataSetChanged()
7881
}

0 commit comments

Comments
 (0)