Skip to content

Instantly share code, notes, and snippets.

View Sloy's full-sized avatar

Rafa Vázquez Sloy

View GitHub Profile
@Sloy
Sloy / MockParcel.java
Created February 26, 2015 12:50
MockParcel for testing Parcelables implementations with the new Android's Unit testing support (http://tools.android.com/tech-docs/unit-testing-support). Only String and Long read/write implemented here. Add mock methods for other types.
import android.os.Parcel;
import java.util.ArrayList;
import java.util.List;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doAnswer;
@Sloy
Sloy / local.settings.gradle.kts
Last active October 25, 2022 10:56
Replacing libraries with local projects in Gradle. More https://publicobject.com/2021/03/11/includebuild/
val CaptainCrunch = Lib("../android-common--lib-android-captain-crunch", "com.adevinta.android:captaincrunch" to ":captaincrunch")
val AndroidExtensions = Lib("../android-common--lib-android-extensions", "com.adevinta.android:android-extensions" to ":android-extensions")
val Barista = Lib("../Barista", "com.schibsted.spain:barista" to ":library")
val AbTestingRunner = Lib(
"../android-common--lib-abtesting-runner",
"com.adevinta.android:abtesting" to ":abtesting",
"com.adevinta.android:abtesting-apptimize" to ":abtesting-apptimize",
"com.adevinta.android:abtesting-optimizely" to ":abtesting-optimizely",
"com.adevinta.android:abtesting-debug" to ":abtesting-debug",
"com.adevinta.android:abtesting-debugdrawer" to ":abtesting-debugdrawer",
@Sloy
Sloy / dart-futures.dart
Created May 7, 2021 09:49
Playing with dart async/await delayed
void main() async {
Stopwatch stopwatch = new Stopwatch()..start();
var p1 = delay(Duration(seconds: 2));
var p2 = delay(Duration(seconds: 4));
await p1;
await p2;
print('Executed in ${stopwatch.elapsed}');
@Sloy
Sloy / FirebaseLiveData.kt
Created September 12, 2017 18:55
Using LiveData with Firebase Database on Kotlin
class FirebaseLiveData(
private val reference: DatabaseReference
) : LiveData<DataSnapshot>() {
private var eventListener: ValueEventListener? = null
override fun onActive() {
super.onActive()
logd("onActive $reference")
eventListener = reference.addValueEventListener(FValueEventListener(
import com.google.firebase.perf.FirebasePerformance
object FirebasePerformanceWrapper {
fun <T> trace(name: String, block: () -> T): T {
val trace = runCatching { FirebasePerformance.getInstance().newTrace(name) }.getOrNull()
trace?.start()
val result = block()
trace?.stop()
return result
@Sloy
Sloy / FirebaseCoroutinesExtensions.kt
Last active January 20, 2021 11:48
Reading Firebase Database as Kotlin coroutines
/*
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
WARNING!!!
NO, SERIOUSLY. REAL WARNING!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class SyncAsync {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
@Sloy
Sloy / FirestoreLiveData.kt
Created January 14, 2018 11:28
Kotlin wrappers for observing Firebase Firestore database queries and documents using LiveData
fun Query.observeLiveData(): FirestoreQueryLiveData {
return FirestoreQueryLiveData(this)
}
fun DocumentReference.observeLiveData(): FirestoreDocumentLiveData {
return FirestoreDocumentLiveData(this)
}
class FirestoreQueryLiveData(
@Sloy
Sloy / Most changed java files
Created July 24, 2019 10:55
Print the 10 Java files most changed since a given date
git log --after={2019-06-01} --pretty=format: --name-only | sort | uniq -c | sort -rg | grep "\.java" | head -10
@Sloy
Sloy / LiveDataExtensions.kt
Created February 6, 2018 11:08
Kotlin extensions for LiveData
package com.sloydev.macookbuk.infrastructure.extensions
import android.arch.lifecycle.*
fun <T, R> LiveData<T>.map(transformation: (T) -> R): LiveData<R> {
return Transformations.map(this, transformation)
}
fun <A, B, C> LiveData<A>.zipWith(other: LiveData<B>, zipFunc: (A, B) -> C): LiveData<C> {
return ZippedLiveData<A, B, C>(this, other, zipFunc)