Skip to content

Instantly share code, notes, and snippets.

View sagar-viradiya's full-sized avatar
:octocat:
Focusing

Sagar Viradiya sagar-viradiya

:octocat:
Focusing
View GitHub Profile
@sagar-viradiya
sagar-viradiya / CoroutinesExtensions.kt
Created August 3, 2020 14:24
Kotlin coroutines extensions for switching thread easily
suspend inline fun <T> runOnDefault(crossinline task: suspend () -> T): T {
return withContext(Dispatchers.Default) {
task.invoke()
}
}
suspend inline fun <T> runOnIO(crossinline task: suspend () -> T): T {
return withContext(Dispatchers.IO) {
task.invoke()
}
@sagar-viradiya
sagar-viradiya / PermissionResult.kt
Last active October 2, 2019 12:21
PermissionResult sealed class
sealed class PermissionResult(val requestCode: Int) {
class PermissionGranted(requestCode: Int) : PermissionResult(requestCode)
class PermissionDenied(
requestCode: Int,
val deniedPermissions: List<String>
) : PermissionResult(requestCode)
class ShowRational(requestCode: Int) : PermissionResult(requestCode)
class PermissionDeniedPermanently(
requestCode: Int,
/**
* A static factory method to request permission from activity.
*
* @param activity an instance of [AppCompatActivity]
* @param requestId Request ID for permission request
* @param permissions Permission(s) to request
*
* @return [PermissionResult]
*
* Suspends the coroutines until result is available.
/**
* A static method to request permission from activity.
* Your activity must implement [PermissionObserver]
*
* @param activity an instance of [AppCompatActivity] which is also [PermissionObserver]
* @param requestId Request ID for permission request
* @param permissions Permission(s) to request
*
* @throws [IllegalArgumentException] if your activity doesn't implement [PermissionObserver]
*/
/**
* Interface definition for a callback to get [LiveData] of [PermissionResult]
*
* Implement this interface to get [LiveData] for observing permission request result.
*/
interface PermissionObserver {
fun setupObserver(permissionResultLiveData: LiveData<PermissionResult>)
}
@sagar-viradiya
sagar-viradiya / PermissionObserver.kt
Created June 10, 2019 18:28
Observing livedata permissions
override fun setupObserver(permissionResultLiveData: LiveData<PermissionResult>) {
permissionResultLiveData.observe(this, Observer<PermissionResult> {
when (it) {
is PermissionResult.PermissionGranted -> {
if (it.requestId == REQUEST_ID) {
//Add your logic here after user grants permission(s)
}
}
is PermissionResult.PermissionDenied -> {
if (it.requestId == REQUEST_ID) {
@sagar-viradiya
sagar-viradiya / Fragment.kt
Created June 10, 2019 18:25
Permission using livedata
PermissionManager.requestPermissions(
this,
REQUEST_ID,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_CONTACTS
)
@sagar-viradiya
sagar-viradiya / Fragment.kt
Created June 10, 2019 18:21
Eazy permission request permissions using coroutines
.
.
.
launch {
//CoroutineScope
val permissionResult = PermissionManager.requestPermissions( //Suspends the coroutine
this@Fragment,
REQUEST_ID,
Manifest.permission.ACCESS_FINE_LOCATION,
@sagar-viradiya
sagar-viradiya / SpringAnimation.kt
Last active October 31, 2018 05:11
Attaching SpringForce to SpringAnimation later
val springForce = SpringForce(0f)
.setStiffness(SpringForce.STIFFNESS_MEDIUM)
.setDampingRatio(SpringForce.DAMPING_RATIO_HIGH_BOUNCY)
val springAnimation = SpringAnimation(view, DynamicAnimation.TRANSLATION_X).setSpring(springForce)
@sagar-viradiya
sagar-viradiya / SpringAnimationExtensionUsage.kt
Last active October 31, 2018 05:08
Usage of SpringAnimation extension function
val springAnimation = SpringAnimation(view, DynamicAnimation.TRANSLATION_X)
.withSpringForceProperties {
finalPosition = 0f
stiffness = SpringForce.STIFFNESS_MEDIUM
dampingRatio = SpringForce.DAMPING_RATIO_HIGH_BOUNCY
}