Skip to content

Commit 291de12

Browse files
committed
adding a floating contextual menu at event type manager activity
1 parent a8dc1a2 commit 291de12

3 files changed

Lines changed: 78 additions & 11 deletions

File tree

app/src/main/kotlin/com/simplemobiletools/calendar/pro/adapters/ManageEventTypesAdapter.kt

Lines changed: 54 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
11
package com.simplemobiletools.calendar.pro.adapters
22

3-
import android.view.Menu
4-
import android.view.View
5-
import android.view.ViewGroup
3+
import android.view.*
4+
import android.widget.PopupMenu
65
import com.simplemobiletools.calendar.pro.R
76
import com.simplemobiletools.calendar.pro.activities.SimpleActivity
8-
import com.simplemobiletools.calendar.pro.extensions.config
97
import com.simplemobiletools.calendar.pro.extensions.eventsHelper
108
import com.simplemobiletools.calendar.pro.helpers.REGULAR_EVENT_TYPE_ID
119
import com.simplemobiletools.calendar.pro.interfaces.DeleteEventTypesListener
1210
import com.simplemobiletools.calendar.pro.models.EventType
1311
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
1412
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
1513
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
16-
import com.simplemobiletools.commons.extensions.getProperBackgroundColor
17-
import com.simplemobiletools.commons.extensions.setFillWithStroke
18-
import com.simplemobiletools.commons.extensions.toast
14+
import com.simplemobiletools.commons.extensions.*
1915
import com.simplemobiletools.commons.models.RadioItem
2016
import com.simplemobiletools.commons.views.MyRecyclerView
2117
import kotlinx.android.synthetic.main.item_event_type.view.*
22-
import java.util.*
2318

2419
class ManageEventTypesAdapter(
2520
activity: SimpleActivity, val eventTypes: ArrayList<EventType>, val listener: DeleteEventTypesListener?, recyclerView: MyRecyclerView,
@@ -31,10 +26,19 @@ class ManageEventTypesAdapter(
3126

3227
override fun getActionMenuId() = R.menu.cab_event_type
3328

34-
override fun prepareActionMode(menu: Menu) {}
29+
override fun prepareActionMode(menu: Menu) {
30+
menu.apply {
31+
findItem(R.id.cab_edit).isVisible = isOneItemSelected()
32+
}
33+
}
3534

3635
override fun actionItemPressed(id: Int) {
36+
if (selectedKeys.isEmpty()) {
37+
return
38+
}
39+
3740
when (id) {
41+
R.id.cab_edit -> itemClick.invoke(getSelectedItems().first())
3842
R.id.cab_delete -> askConfirmDelete()
3943
}
4044
}
@@ -73,9 +77,50 @@ class ManageEventTypesAdapter(
7377
event_type_title.text = eventType.getDisplayTitle()
7478
event_type_color.setFillWithStroke(eventType.color, activity.getProperBackgroundColor())
7579
event_type_title.setTextColor(textColor)
80+
81+
overflow_menu_icon.drawable.apply {
82+
mutate()
83+
setTint(activity.getProperTextColor())
84+
}
85+
86+
overflow_menu_icon.setOnClickListener {
87+
showPopupMenu(overflow_menu_anchor, eventType)
88+
}
7689
}
7790
}
7891

92+
private fun showPopupMenu(view: View, eventType: EventType) {
93+
val theme = activity.getPopupMenuTheme()
94+
val contextTheme = ContextThemeWrapper(activity, theme)
95+
96+
PopupMenu(contextTheme, view, Gravity.END).apply {
97+
inflate(getActionMenuId())
98+
setOnMenuItemClickListener { item ->
99+
val eventTypeId = eventType.id!!.toInt()
100+
when (item.itemId) {
101+
R.id.cab_edit -> {
102+
executeItemMenuOperation(eventTypeId) {
103+
itemClick(eventType)
104+
}
105+
}
106+
R.id.cab_delete -> {
107+
executeItemMenuOperation(eventTypeId) {
108+
askConfirmDelete()
109+
}
110+
}
111+
}
112+
true
113+
}
114+
show()
115+
}
116+
}
117+
118+
private fun executeItemMenuOperation(eventTypeId: Int, callback: () -> Unit) {
119+
finishActMode()
120+
selectedKeys.add(eventTypeId)
121+
callback()
122+
}
123+
79124
private fun askConfirmDelete() {
80125
val eventTypes = eventTypes.filter { selectedKeys.contains(it.id?.toInt()) }.map { it.id } as ArrayList<Long>
81126

app/src/main/res/layout/item_event_type.xml

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
android:layout_width="match_parent"
1515
android:layout_height="wrap_content"
1616
android:background="?attr/selectableItemBackground"
17-
android:padding="@dimen/activity_margin">
17+
android:paddingStart="@dimen/activity_margin">
1818

1919
<com.simplemobiletools.commons.views.MyTextView
2020
android:id="@+id/event_type_title"
@@ -30,10 +30,27 @@
3030
android:id="@+id/event_type_color"
3131
android:layout_width="@dimen/color_sample_size"
3232
android:layout_height="@dimen/color_sample_size"
33-
android:layout_alignParentEnd="true"
3433
android:layout_centerVertical="true"
3534
android:layout_marginEnd="@dimen/medium_margin"
35+
android:layout_toStartOf="@+id/overflow_menu_icon"
3636
android:clickable="false" />
3737

38+
<ImageView
39+
android:id="@+id/overflow_menu_icon"
40+
android:layout_width="wrap_content"
41+
android:layout_height="wrap_content"
42+
android:layout_alignParentTop="true"
43+
android:layout_alignParentEnd="true"
44+
android:layout_centerVertical="true"
45+
android:background="?attr/selectableItemBackgroundBorderless"
46+
android:padding="@dimen/activity_margin"
47+
android:src="@drawable/ic_three_dots_vector" />
48+
49+
<View
50+
android:id="@+id/overflow_menu_anchor"
51+
style="@style/OverflowMenuAnchorStyle"
52+
android:layout_alignParentEnd="true"
53+
android:layout_centerVertical="true" />
54+
3855
</RelativeLayout>
3956
</FrameLayout>

app/src/main/res/menu/cab_event_type.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<menu xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto">
4+
<item
5+
android:id="@+id/cab_edit"
6+
android:icon="@drawable/ic_edit_vector"
7+
android:title="@string/edit"
8+
app:showAsAction="ifRoom" />
49
<item
510
android:id="@+id/cab_delete"
611
android:icon="@drawable/ic_delete_vector"

0 commit comments

Comments
 (0)