Skip to content

Instantly share code, notes, and snippets.

@shakil807g
Forked from colinrtwhite/Extensions.kt
Created October 17, 2018 18:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shakil807g/6cc8d46a8117321cd06bfdcd3fbd44b7 to your computer and use it in GitHub Desktop.
Save shakil807g/6cc8d46a8117321cd06bfdcd3fbd44b7 to your computer and use it in GitHub Desktop.
fun <T> unsafeLazy(initializer: () -> T) = lazy(LazyThreadSafetyMode.NONE, initializer)
@JvmOverloads @Dimension(unit = Dimension.PX) fun Number.dpToPx(
metrics: DisplayMetrics = Resources.getSystem().displayMetrics
): Float {
return toFloat() * metrics.density
}
@JvmOverloads @Dimension(unit = Dimension.DP) fun Number.pxToDp(
metrics: DisplayMetrics = Resources.getSystem().displayMetrics
): Float {
return toFloat() / metrics.density
}
@ColorInt fun Context.getColorCompat(@ColorRes colorRes: Int): Int {
return ContextCompat.getColor(this, colorRes)
}
fun Context.getDrawableCompat(@DrawableRes drawableRes: Int): Drawable {
return AppCompatResources.getDrawable(this, drawableRes)!!
}
@CheckResult fun Drawable.tint(@ColorInt color: Int): Drawable {
val tintedDrawable = DrawableCompat.wrap(this).mutate()
DrawableCompat.setTint(tintedDrawable, color)
return tintedDrawable
}
@CheckResult fun Drawable.tint(context: Context, @ColorRes color: Int): Drawable {
return tint(context.getColorCompat(color))
}
fun Context.toActivity(): Activity? {
var context = this
while (context is ContextWrapper) {
if (context is Activity) {
return context
}
context = context.baseContext
}
return null
}
fun Context.openWebPage(url: String): Boolean {
// Format the URI properly.
val uri = url.toWebUri()
// Try using Chrome Custom Tabs.
try {
val intent = CustomTabsIntent.Builder()
.setToolbarColor(getColorCompat(R.color.primary))
.setShowTitle(true)
.build()
intent.launchUrl(this, uri)
return true
} catch (ignored: Exception) {}
// Fall back to launching a default web browser intent.
try {
val intent = Intent(Intent.ACTION_VIEW, uri)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
return true
}
} catch (ignored: Exception) {}
// We were unable to show the web page.
return false
}
fun String.toWebUri(): Uri {
return (if (startsWith("http://") || startsWith("https://")) this else "https://$this").toUri()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment