Skip to content

Instantly share code, notes, and snippets.

@ercnksgl
ercnksgl / DisallowParentSwipeOnItemTouchListener.kt
Created November 20, 2022 18:49
ViewPager inside RecyclerView Scroll issue
package com.ercnksgl.testapp.util
import android.view.MotionEvent
import androidx.recyclerview.widget.RecyclerView
import kotlin.math.abs
class DisallowParentSwipeOnItemTouchListener : RecyclerView.OnItemTouchListener {
var startPoint = 0f
override fun onInterceptTouchEvent(
rv: RecyclerView,
@ercnksgl
ercnksgl / activity_main.xml
Created September 22, 2022 14:43
activity_main layout for DiffUtils test app
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
@ercnksgl
ercnksgl / MainActivity.kt
Created September 22, 2022 14:42
MainActivity for DiffUtils test app
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView
import com.ercnksgl.diffutlisapp.R
import com.google.android.material.button.MaterialButton
class MainActivity : AppCompatActivity() {
private val itemAdapter = ItemAdapter()
private val list = arrayListOf<Item>()
@ercnksgl
ercnksgl / ItemAdapter.kt
Created September 22, 2022 14:28
ItemAdapter for DiffUtils test app
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
class ItemAdapter : RecyclerView.Adapter<ItemAdapter.ViewHolder>() {
private var list = emptyList<Item>()
@ercnksgl
ercnksgl / DiffUtils.kt
Created September 22, 2022 14:16
DiffUtils.kt for DiffUtils tutorial
import androidx.recyclerview.widget.DiffUtil
class CustomDiffUtils<T>(
private val oldList: List<T>,
private val newList: List<T>
) : DiffUtil.Callback() {
override fun getOldListSize() = oldList.size
override fun getNewListSize() = newList.size
@ercnksgl
ercnksgl / ApiError.kt
Last active September 20, 2022 12:47
ApiError for sealed classes
import androidx.annotation.StringRes
import com.ercnksgl.sealedtest.R
sealed class ApiError {
data class ServerError(
val errorBody: String? = null
) : ApiError()
@ercnksgl
ercnksgl / NetworkUtils.kt
Last active September 20, 2022 13:50
NetworkUtils.kt for sealed class
import com.ercnksgl.sealedtest.data.network.Result
import com.ercnksgl.sealedtest.data.network.response.ApiError
import com.ercnksgl.sealedtest.data.network.response.ApiError.UnexpectedError
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import retrofit2.Response
class NetworkUtils {
suspend fun <T : Any> request(onRequest: suspend () -> Response<T>): Result<T> =
@ercnksgl
ercnksgl / Result.kt
Created September 19, 2022 18:12
Sealed Result Object
import com.ercnksgl.sealedtest.data.network.response.ApiError
sealed class Result<out T : Any> {
data class Success<out T : Any>(val data: T) : Result<T>()
data class Error(val error: ApiError) : Result<Nothing>()
}
@ercnksgl
ercnksgl / MessageType.kt
Created September 18, 2022 11:11
The enum to customize the view.
import androidx.annotation.ColorRes
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import com.ercnksgl.enumtestapp.R
enum class MessageType(
@StringRes val titleResId: Int,
@DrawableRes val iconResId: Int,
@ColorRes val cardColorResId: Int,
@ColorRes val titleColorResId: Int
@ercnksgl
ercnksgl / DateUtilities.kt
Last active September 16, 2022 08:48
Relative time differences function
fun getRelativeTimeDifference(resources: Resources, time: LocalDateTime): String {
val now = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()
val timeDifference = now - time.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()
return when {
timeDifference < DateUtils.MINUTE_IN_MILLIS -> resources.getString(R.string.just_now)
timeDifference < DateUtils.HOUR_IN_MILLIS -> {
val minute = (timeDifference / DateUtils.MINUTE_IN_MILLIS).toInt()
resources.getString(R.string.minutes_ago, minute)
}
timeDifference < DateUtils.DAY_IN_MILLIS -> {