Skip to content

Instantly share code, notes, and snippets.

View murki's full-sized avatar

Miguel Juárez López murki

View GitHub Profile
{
"name": "murki X NFT",
"symbol": "MRK",
"description": "murki.eth avatar NFT",
"seller_fee_basis_points": 1000,
"image": "https://avatars.githubusercontent.com/u/216735",
"external_url": "https://twitter.com/murki_eth",
"attributes": [
{
"trait_type": "Background",
@murki
murki / PlacesActivity.kt
Last active June 10, 2021 03:59
The poor man's Dagger: Exemplifying how to implement dependency injection on Android by (ab)using ApplicationContext's getSystemService(). Here we attain inversion of control without the need of any external library. We also use Kotlin's extension methods to provide a friendlier, strongly-typed API to locate dependencies.
class PlacesActivity : AppCompatActivity() {
private lateinit var placesPresenter: PlacesPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// This is how you instantiate your Presenter while the service locator resolves all of its dependencies
// Note that the explicit type argument <PlacesPresenter> is not even necessary since Kotlin can infer the type
placesPresenter = application.getSystemService<PlacesPresenter>()
}
}
@murki
murki / fromAsync-6.java
Last active February 9, 2017 12:58
Wrapping an asynchronous API that uses listeners, by using RxJava Observable.fromAsync
public Observable<SensorEvent> observeSensorChanged(final SensorManager sensorManager, final Sensor sensor, final int samplingPeriodUs) {
return Observable.fromAsync(new Action1<AsyncEmitter<SensorEvent>>() {
@Override
public void call(final AsyncEmitter<SensorEvent> sensorEventAsyncEmitter) {
final SensorEventListener sensorListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
sensorEventAsyncEmitter.onNext(sensorEvent);
}
// IDisplayedData implementation (e.g. a Fragment)
private Subscription dataSubscription;
public void refreshData() {
// Last parameter means delayError = true
Observable<Timestamped<Data>> dataObservable = domainService.getData(this).observeOn(AndroidSchedulers.mainThread(), true);
dataSubscription = dataObservable.subscribe(dataOnNext, dataOnError, dataOnComplete);
}
@Override
// NetworkRepository.java
@RxLogObservable
public Observable<Data> getData() {
// implementation
}
// DiskRepository.java
@RxLogObservable
public Observable<Timestamped<Data>> getData() {
// implementation
// DomainService.java
@RxLogObservable
public Observable<Data> getMergedData() {
return Observable.mergeDelayError( // <-- don't interrupt stream
diskRepository.getData().subscribeOn(Schedulers.io()),
networkRepository.getData()
.doOnNext(new Action1<Data>() {
@Override
public void call(Data data) {
diskRepository.saveData(data);
@murki
murki / fromAsync-4.java
Last active August 29, 2016 20:59
Consuming an reactive version of SensorManager that has been wrapped using RxJava
public class SensorRxActivity extends Activity {
private static final String LOG_TAG = SensorRxActivity.class.getName();
private SensorManager sensorManager;
private Sensor accelerometer;
private Subscription sensorChangedSubscription;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
public Observable<SensorEvent> naiveObserveSensorChanged(final SensorManager sensorManager, final Sensor sensor, final int samplingPreiodUs) {
return Observable.create(new Observable.OnSubscribe<SensorEvent>() {
@Override
public void call(final Subscriber<? super SensorEvent> subscriber) {
final SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// (3) - checking for subscribers before emitting values
if (!subscriber.isUnsubscribed()) {
subscriber.onNext(event);
Observable<SensorEvent> naiveObserveSensorChanged(final SensorManager sensorManager, final Sensor sensor, final int samplingPreiodUs) {
return Observable.create(new Observable.OnSubscribe<SensorEvent>() {
@Override
public void call(final Subscriber<? super SensorEvent> subscriber) {
SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
subscriber.onNext(event);
}
public class SensorActivity extends Activity {
private static final String LOG_TAG = SensorActivity.class.getName();
private SensorManager sensorManager;
private Sensor accelerometer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);