Skip to content

Instantly share code, notes, and snippets.

View hardik-trivedi's full-sized avatar

Hardik Trivedi hardik-trivedi

View GitHub Profile
@hardik-trivedi
hardik-trivedi / EspressoDrawableMatcher.kt
Last active January 28, 2022 17:08
This drawable matcher helps you to assert that ImageView has specific drawable set. This is to be used in Espresso test cases for your Android app
/**
* Credit https://github.com/dbottillo/Blog/blob/espresso_match_imageview/app/src/androidTest/java/com/danielebottillo/blog/config/DrawableMatcher.java
* Original Author: https://github.com/dbottillo
* Converted to Kotlin by Hardik Trivedi
*/
class DrawableMatcher internal constructor(private val expectedId: Int) :
TypeSafeMatcher<View>(View::class.java) {
private var resourceName: String? = null
override fun matchesSafely(target: View): Boolean {
@hardik-trivedi
hardik-trivedi / OSInformation.kt
Created December 5, 2020 17:59
Usage of expect/actual keyword in KMM
:shared:commonMain:OSInformation.kt
expect fun getOSInformation(): String
:shared:androidMain:OSInformation.kt
actual fun getOSInformation(): String {
print(Build.VERSION_CODES::class.java.fields)
return "${Build.VERSION_CODES::class.java.fields[Build.VERSION.SDK_INT].name} ${Build.VERSION.SDK_INT}"
}
:shared:iOSMain:OSInformation.kt
@hardik-trivedi
hardik-trivedi / CountryListApiManager.swift
Last active December 5, 2020 18:00
Demonstrating how NovelCovidApiClient can be used in iOS
import Foundation
import shared
struct CountryListApiManager: CountryListApiManaging {
let client: NovelCovidApiClient
init(client: NovelCovidApiClient) {
self.client = client
}
@hardik-trivedi
hardik-trivedi / CountryListViewModel.kt
Last active December 5, 2020 18:01
Android ViewModel class using Shared NovelCovidApiClient
class CountryListViewModel(private val apiClient: NovelCovidApiClient) : ViewModel() {
val countries: LiveData<List<CountryItem>> = liveData {
emit(apiClient.getAffectedCountries())
}
}
@hardik-trivedi
hardik-trivedi / NovelCovidApiClient.kt
Last active December 5, 2020 18:01
Shared networking client class written using Kotlin which internally uses Ktor
class NovelCovidApiClient() {
companion object {
private const val URL = "https://corona.lmao.ninja/v2/countries"
}
private val httpApiClient: HttpClient = HttpClient {
install(JsonFeature) {
val json = kotlinx.serialization.json.Json { ignoreUnknownKeys = true }
serializer = KotlinxSerializer(json)
}
@hardik-trivedi
hardik-trivedi / build.gradle.kts
Created December 5, 2020 11:45
KMM :shared module build.gradle.kts
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
plugins {
kotlin("multiplatform")
id("com.android.library")
id("kotlin-android-extensions")
kotlin("plugin.serialization") version "1.4.10"
}
group = "com.hardiktrivedi.kmmnovelcovid"
version = "1.0-SNAPSHOT"
@hardik-trivedi
hardik-trivedi / DelegatedPreferences.kt
Created August 1, 2017 09:48
Kotlin : SharedPreferences using delegated property
import android.annotation.SuppressLint
import android.content.Context
import android.content.SharedPreferences
import com.hardiktrivedi.gdg_pune_kotlin_workshop.R
import kotlin.reflect.KProperty
class PreferenceExtension<T>(val context: Context, val key: String, val defaultValue: T) {
val prefs: SharedPreferences by lazy { context.getSharedPreferences(context.getString(R.string.app_name), Context.MODE_PRIVATE) }
operator fun getValue(thisRef: Any?, property: KProperty<*>): T {