ariane/app/src/main/java/oppen/ariane/ui/modals_menus/overflow/OverflowPopup.kt

64 lines
2.1 KiB
Kotlin

package oppen.ariane.ui.modals_menus.overflow
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.text.SpannableStringBuilder
import android.text.style.ImageSpan
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import androidx.appcompat.widget.PopupMenu
import androidx.core.view.MenuCompat
import oppen.ariane.R
object OverflowPopup {
fun show(view: View?, onMenuOption: (menuId: Int) -> Unit){
if(view != null) {
val popup = PopupMenu(view.context, view)
val inflater: MenuInflater = popup.menuInflater
inflater.inflate(R.menu.overflow_menu, popup.menu)
popup.setOnMenuItemClickListener { menuItem ->
onMenuOption(menuItem.itemId)
true
}
MenuCompat.setGroupDividerEnabled(popup.menu, true)
//insertMenuItemIcons(view.context, popup)
popup.show()
}
}
fun insertMenuItemIcons(context: Context, popupMenu: PopupMenu) {
val menu: Menu = popupMenu.menu
if (hasIcon(menu)) {
for (i in 0 until menu.size()) {
insertMenuItemIcon(context, menu.getItem(i))
}
}
}
private fun hasIcon(menu: Menu): Boolean {
for (i in 0 until menu.size()) {
if (menu.getItem(i).icon != null) return true
}
return false
}
/**
* Converts the given MenuItem's title into a Spannable containing both its icon and title.
*/
private fun insertMenuItemIcon(context: Context, menuItem: MenuItem) {
val icon: Drawable = menuItem.icon
val iconSize = context.resources.getDimensionPixelSize(R.dimen.menu_item_icon_size)
icon.setBounds(0, 0, iconSize, iconSize)
icon.setTint(Color.WHITE)
val imageSpan = ImageSpan(icon)
val ssb = SpannableStringBuilder(" " + menuItem.title)
ssb.setSpan(imageSpan, 1, 2, 0)
menuItem.title = ssb
menuItem.icon = null
}
}