Skip to content

Instantly share code, notes, and snippets.

View TheBotBox's full-sized avatar
🖥️
coding

TheBotBox TheBotBox

🖥️
coding
View GitHub Profile
inline fun <reified T:AppCompatActivity> AppCompatActivity.startActivity() =
Intent (this, T::class.java)
inline fun <reified T : AppCompatActivity> Activity.startActivityEtx() =
Intent(this, T::class.java)
.apply {
startActivity(this)
}
fun Context.hasNetwork(): Boolean {
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val activeNetwork = connectivityManager.activeNetwork ?: return false
val capabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false
return when {
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
else -> false
inline fun <reified E : Throwable> tryAndCatch(blockTry: () -> Unit, blockCatch: (E) -> Unit) {
try {
blockTry()
} catch (e: Exception) {
blockCatch(e as E)
}
}
fun EditText.onTextChanged(listener: (String) -> Unit) {
this.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) { listener(s.toString()) }
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
})
}
fun EditText.onDone(callback: (String) -> Unit) {
setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
callback.invoke(text.toString())
true
}
false
}
}
val <T> T.makeExhaustive: T
get() = this
fun AppCompatActivity.hasPermissions(vararg permissions: String): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
permissions.all { singlePermission ->
applicationContext.checkSelfPermission(singlePermission) == PackageManager.PERMISSION_GRANTED
}
else true
fun Activity.requestPermissions(vararg permissions: String, @IntRange(from = 0) requestCode: Int) =
ActivityCompat.requestPermissions(this, permissions, requestCode)
inline fun <reified T> Any.ofType(block: (T) -> Unit) {
if (this is T) {
block(this as T)
}
}