extensions.md

November 10, 2022 ยท View on GitHub

RxJava extensions

Copy extensions in the project and use as shown below.


fun Fingerprinter.fingerprintObservable(
    version: Fingerprinter.Version,
    stabilityLevel: StabilityLevel = StabilityLevel.OPTIMAL,
    hasher: Hasher = MurMur3x64x128Hasher()
) = Observable.create(ObservableOnSubscribe<String> { emitter ->
    this.getFingerprint(version, stabilityLevel, hasher) { fingerprint->
        emitter.onNext(fingerprint)
        emitter.onComplete()
    }
})

fun Fingerprinter.deviceIdObservable(version: Fingerprinter.Version) = Observable
	.create(ObservableOnSubscribe<DeviceIdResult> { emitter ->
    this.getDeviceId(version) { deviceIdResult ->
        emitter.onNext(deviceIdResult)
        emitter.onComplete()
    }
})

Usage:


val fingerprinter = FingerprinterFactory.create(context)

fingerprinter
        .fingerprintObservable(version = Fingerprinter.Version.V_5)
        .subscribe { fingerprint ->
            // Your code
        }

fingerprinter
        .deviceIdObservable(version = Fingerprinter.Version.V_5)
        .subscribe { deviceIdResult ->
            val deviceId = deviceIdResult.deviceId
            // Your code
        }


Kotlin coroutines extensions


suspend fun Fingerprinter.fingerprint(
    version: Fingerprinter.Version,
    stabilityLevel: StabilityLevel = StabilityLevel.OPTIMAL,
    hasher: Hasher = MurMur3x64x128Hasher()
): String {
    return suspendCancellableCoroutine { continuation ->
        getFingerprint(version, stabilityLevel, hasher) { fingerprint->
            continuation.resume(fingerprint)
        }
    }
}

suspend fun Fingerprinter.deviceId(version: Fingerprinter.Version): DeviceIdResult {
    return suspendCancellableCoroutine { continuation ->
        getDeviceId(version) { deviceIdResult ->
            continuation.resume(deviceIdResult)
        }
    }
}

Usage:


val fingerprinter = FingerprinterFactory.create(context)

...

launch {
    val fingerprint = fingerprinter.fingerprint(Fingerprinter.Version.V_5)
    val deviceId = fingerprinter.deviceId(Fingerprinter.Version.V_5).deviceId
}