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
|
package ca.allanwang.kau.utils
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.graphics.drawable.Drawable
import android.net.ConnectivityManager
import android.os.Handler
import android.support.annotation.*
import android.support.v4.content.ContextCompat
import android.util.TypedValue
import android.widget.Toast
import ca.allanwang.kau.R
import com.afollestad.materialdialogs.MaterialDialog
import com.pitchedapps.frost.utils.ChangelogAdapter
import com.pitchedapps.frost.utils.parse
import java.util.*
/**
* Created by Allan Wang on 2017-06-03.
*/
fun Activity.restart(extras: ((Intent) -> Unit)? = null) {
val i = Intent(this, this::class.java)
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
extras?.invoke(i)
startActivity(i)
overridePendingTransition(0, 0) //No transitions
finish()
overridePendingTransition(0, 0)
}
//Toast helpers
fun Context.toast(@StringRes id: Int, duration: Int = Toast.LENGTH_LONG) = toast(this.string(id), duration)
fun Context.toast(text: String, duration: Int = Toast.LENGTH_LONG) {
Toast.makeText(this, text, duration).show()
}
//Resource retrievers
fun Context.string(@StringRes id: Int): String = getString(id)
fun Context.string(@StringRes id: Int, fallback: String?): String? = if (id > 0) string(id) else fallback
fun Context.string(holder: StringHolder?): String? = holder?.getString(this)
fun Context.color(@ColorRes id: Int): Int = ContextCompat.getColor(this, id)
fun Context.integer(@IntegerRes id: Int): Int = resources.getInteger(id)
fun Context.dimen(@DimenRes id: Int): Float = resources.getDimension(id)
fun Context.drawable(@DrawableRes id: Int): Drawable = ContextCompat.getDrawable(this, id)
//Attr retrievers
fun Context.resolveColor(@AttrRes attr: Int, fallback: Int = 0): Int {
val a = theme.obtainStyledAttributes(intArrayOf(attr))
try {
return a.getColor(0, fallback)
} finally {
a.recycle()
}
}
fun Context.resolveBoolean(@AttrRes attr: Int, fallback: Boolean = false): Boolean {
val a = theme.obtainStyledAttributes(intArrayOf(attr))
try {
return a.getBoolean(0, fallback)
} finally {
a.recycle()
}
}
fun Context.resolveString(@AttrRes attr: Int, fallback: String = ""): String {
val v = TypedValue()
return if (theme.resolveAttribute(attr, v, true)) v.string.toString() else fallback
}
fun Context.showChangelog(@XmlRes xmlRes: Int) {
val mHandler = Handler()
Thread(Runnable {
val items = parse(this, xmlRes)
mHandler.post(object : TimerTask() {
override fun run() {
MaterialDialog.Builder(this@showChangelog)
.title(R.string.kau_changelog)
.positiveText(R.string.kau_great)
.adapter(ChangelogAdapter(items), null)
.show()
}
})
}).start()
}
fun Context.isNetworkAvailable(): Boolean {
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val activeNetworkInfo = connectivityManager.activeNetworkInfo
return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting
}
|