aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/enums/OverlayContext.kt
blob: cc71b19eb5246e1dc4d1f4896b06c624451b637d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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)
    }
}