From 2fe3422895c19d93fdb515b72ae497f4263e77bc Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Sat, 16 Sep 2017 20:53:49 -0400 Subject: Feature/contextual overlays (#295) * Update theme * Update theme * Compile compacts * Update changelog * Update theme * Add overlay context items and their bindings * Replace default with null and add changelog --- .../com/pitchedapps/frost/enums/OverlayContext.kt | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 app/src/main/kotlin/com/pitchedapps/frost/enums/OverlayContext.kt (limited to 'app/src/main/kotlin/com/pitchedapps/frost/enums') diff --git a/app/src/main/kotlin/com/pitchedapps/frost/enums/OverlayContext.kt b/app/src/main/kotlin/com/pitchedapps/frost/enums/OverlayContext.kt new file mode 100644 index 00000000..cc71b19e --- /dev/null +++ b/app/src/main/kotlin/com/pitchedapps/frost/enums/OverlayContext.kt @@ -0,0 +1,65 @@ +package com.pitchedapps.frost.enums + +import android.content.Context +import android.view.Menu +import android.view.MenuItem +import ca.allanwang.kau.utils.toDrawable +import com.mikepenz.iconics.typeface.IIcon +import com.pitchedapps.frost.R +import com.pitchedapps.frost.facebook.FbItem +import com.pitchedapps.frost.web.FrostWebViewCore + +/** + * Created by Allan Wang on 2017-09-16. + * + * Options for [WebOverlayActivityBase] to give more info as to what kind of + * overlay is present. + * + * For now, this is able to add new menu options upon first load + */ +enum class OverlayContext(private val menuItem: FrostMenuItem?) { + + NOTIFICATION(FrostMenuItem(R.id.action_notification, FbItem.NOTIFICATIONS.icon, R.string.notifications) { webview -> + webview.loadUrl(FbItem.NOTIFICATIONS.url, true) + }), + MESSAGE(FrostMenuItem(R.id.action_messages, FbItem.MESSAGES.icon, R.string.messages) { webview -> + webview.loadUrl(FbItem.MESSAGES.url, true) + }); + + /** + * Inject the [menuItem] in the order that they are given at the front of the menu + */ + fun onMenuCreate(context: Context, menu: Menu) { + menuItem?.addToMenu(context, menu, 0) + } + + companion object { + + val values = OverlayContext.values() //save one instance + /** + * Execute selection call for an item by id + * Returns [true] if selection was consumed, [false] otherwise + */ + fun onOptionsItemSelected(webview: FrostWebViewCore, id: Int): Boolean { + val consumer = values.firstOrNull { id == it.menuItem?.id } ?: return false + consumer.menuItem!!.onClick(webview) + return true + } + } +} + +/** + * Frame for an injectable menu item + */ +class FrostMenuItem( + val id: Int, + val iicon: IIcon, + val stringRes: Int, + val showAsAction: Int = MenuItem.SHOW_AS_ACTION_ALWAYS, + val onClick: (webview: FrostWebViewCore) -> Unit) { + fun addToMenu(context: Context, menu: Menu, index: Int) { + val item = menu.add(Menu.NONE, id, index, stringRes) + item.icon = iicon.toDrawable(context, 18) + item.setShowAsAction(showAsAction) + } +} \ No newline at end of file -- cgit v1.2.3