aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/SettingsActivity.kt
blob: 4543074ef9b0fec94f7332194706d8f7f4d868f5 (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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package com.pitchedapps.frost

import android.os.Bundle
import ca.allanwang.kau.kpref.KPrefActivity
import ca.allanwang.kau.kpref.KPrefAdapterBuilder
import ca.allanwang.kau.utils.*
import ca.allanwang.kau.views.RippleCanvas
import com.pitchedapps.frost.utils.EXTRA_COOKIES
import com.pitchedapps.frost.utils.Prefs
import com.pitchedapps.frost.utils.Theme
import com.pitchedapps.frost.utils.cookies

/**
 * Created by Allan Wang on 2017-06-06.
 */
class SettingsActivity : KPrefActivity() {
    override fun onCreateKPrefs(savedInstanceState: android.os.Bundle?): KPrefAdapterBuilder.() -> Unit = {
        textColor = { Prefs.textColor }
        accentColor = { Prefs.textColor }
        header(R.string.settings)
        text<Int>(title = R.string.theme, itemBuilder = {
            onClick = {
                itemView, innerContent, item ->
                this@SettingsActivity.materialDialog {
                    title(R.string.theme)
                    items(Theme.values().map { this@SettingsActivity.string(it.textRes) })
                    itemsCallbackSingleChoice(item.pref, {
                        _, _, which, _ ->
                        if (item.pref != which) {
                            item.pref = which
                            reload()
                            themeExterior()
                        }
                        true
                    })
                }
                true
            }
            getter = { Prefs.theme }
            setter = { Prefs.theme = it }
        }, textGetter = { this@SettingsActivity.string(Theme(it).textRes) })
        colorPicker(title = R.string.text_color, itemBuilder = {
            getter = { Prefs.customTextColor }
            setter = { Prefs.customTextColor = it; reload() }
            enabler = { Prefs.isCustomTheme }
            onDisabledClick = { itemView, _, _ ->
                itemView.snackbar(R.string.requires_custom_theme)
                true
            }
        }, colorBuilder = {
            allowCustomAlpha = false
            allowCustom = true
        })

        colorPicker(title = R.string.background_color, itemBuilder = {
            getter = { Prefs.customBackgroundColor }
            setter = { Prefs.customBackgroundColor = it; bgCanvas.ripple(it, duration = 500L) }
            enabler = { Prefs.isCustomTheme }
            onDisabledClick = { itemView, _, _ ->
                itemView.snackbar(R.string.requires_custom_theme)
                true
            }
        }, colorBuilder = {
            allowCustomAlpha = true
            allowCustom = true
        })

        colorPicker(title = R.string.header_color, itemBuilder = {
            getter = { Prefs.customHeaderColor }
            setter = {
                Prefs.customHeaderColor = it
                val darkerColor = it.darken()
                this@SettingsActivity.navigationBarColor = darkerColor
                toolbarCanvas.ripple(darkerColor, RippleCanvas.MIDDLE, RippleCanvas.END, duration = 500L)
            }
            enabler = { Prefs.isCustomTheme }
            onDisabledClick = { itemView, _, _ ->
                itemView.snackbar(R.string.requires_custom_theme)
                true
            }
        }, colorBuilder = {
            allowCustomAlpha = true
            allowCustom = true
        })

        colorPicker(title = R.string.icon_color, itemBuilder = {
            getter = { Prefs.customIconColor }
            setter = { Prefs.customIconColor = it; toolbar.setTitleTextColor(it) }
            enabler = { Prefs.isCustomTheme }
            onDisabledClick = { itemView, _, _ ->
                itemView.snackbar(R.string.requires_custom_theme)
                true
            }
        }, colorBuilder = {
            allowCustomAlpha = false
            allowCustom = true
        })
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        themeExterior(false)
    }

    fun themeExterior(animate: Boolean = true) {
        if (animate) bgCanvas.fade(Prefs.bgColor)
        else bgCanvas.set(Prefs.bgColor)
        val darkAccent = Prefs.headerColor.darken()
        if (animate) toolbarCanvas.ripple(darkAccent, RippleCanvas.MIDDLE, RippleCanvas.END)
        else toolbarCanvas.set(darkAccent)
        this.navigationBarColor = darkAccent
    }

    private fun relativeDuration(canvas: RippleCanvas): Long = Math.hypot(canvas.height.toDouble(), canvas.width.toDouble() / 2).toLong()

    override fun onBackPressed() {
        startActivitySlideOut(MainActivity::class.java, clearStack = true, intentBuilder = {
            putParcelableArrayListExtra(EXTRA_COOKIES, cookies())
        })
    }
}