All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.robolectric.shadows.util.AppSingletonizer Maven / Gradle / Ivy

The newest version!
package org.robolectric.shadows.util;

import android.app.Application;
import android.content.Context;
import org.robolectric.shadows.ShadowApplication;
import org.robolectric.shadow.api.Shadow;

import static org.robolectric.Shadows.shadowOf;

public abstract class AppSingletonizer {
  private final Class clazz;

  public AppSingletonizer(Class clazz) {
    this.clazz = clazz;
  }

  synchronized public T getInstance(Context context) {
    Application applicationContext = (Application) context.getApplicationContext();
    ShadowApplication shadowApplication = (ShadowApplication) shadowOf(applicationContext);
    T instance = get(shadowApplication);
    if (instance == null) {
      instance = createInstance(applicationContext);
      set(shadowApplication, instance);
    }
    return instance;
  }

  protected abstract T get(ShadowApplication shadowApplication);

  protected abstract void set(ShadowApplication shadowApplication, T instance);

  protected T createInstance(Application applicationContext) {
    return Shadow.newInstanceOf(clazz);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy