diff --git a/app/src/main/java/ru/practicum/android/diploma/util/DebounceExtension.kt b/app/src/main/java/ru/practicum/android/diploma/util/DebounceExtension.kt new file mode 100644 index 0000000000..d0e2479f70 --- /dev/null +++ b/app/src/main/java/ru/practicum/android/diploma/util/DebounceExtension.kt @@ -0,0 +1,40 @@ +package ru.practicum.android.diploma.util + +import android.view.View +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import ru.practicum.android.diploma.util.DebounceExtension.Companion.HALF_SECOND + +class DebounceExtension( + private val delayMillis: Long, + private val action: () -> Unit +) { + companion object { + const val HALF_SECOND = 500L + } + private var debounceJob: Job? = null + fun debounce() { + debounceJob?.cancel() + debounceJob = CoroutineScope(Dispatchers.Main).launch { + delay(delayMillis) + action.invoke() + } + } +} + +fun View.setDebouncedClickListener( + delayMillis: Long = HALF_SECOND, + onClick: () -> Unit +) { + var debounceJob: Job? = null + setOnClickListener { + debounceJob?.cancel() + debounceJob = CoroutineScope(Dispatchers.Main).launch { + delay(delayMillis) + onClick() + } + } +} diff --git a/app/src/main/java/ru/practicum/android/diploma/util/NetworkUtils.kt b/app/src/main/java/ru/practicum/android/diploma/util/NetworkUtils.kt new file mode 100644 index 0000000000..15c3e5e800 --- /dev/null +++ b/app/src/main/java/ru/practicum/android/diploma/util/NetworkUtils.kt @@ -0,0 +1,21 @@ + +package ru.practicum.android.diploma.util + +import android.content.Context +import android.net.ConnectivityManager +import android.net.NetworkCapabilities + +fun isInternetAvailable(context: Context): Boolean { + val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + val capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork) + var result = false + if (capabilities != null) { + result = when { + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true + else -> false + } + } + return result +}