122c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinpackage com.xtremelabs.robolectric.internal; 290651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard 390651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richardimport android.app.Application; 490651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richardimport android.content.Context; 533873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzimport com.xtremelabs.robolectric.shadows.ShadowApplication; 690651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard 7e7a41c9b39233781c97dd599ff61024f0510e308Christian Williamsimport static com.xtremelabs.robolectric.Robolectric.newInstanceOf; 8e7a41c9b39233781c97dd599ff61024f0510e308Christian Williamsimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 9e7a41c9b39233781c97dd599ff61024f0510e308Christian Williams 1086335af816f048e32aad504aed0af63a73097a5fChristian Williams & Ryan Richardpublic abstract class AppSingletonizer<T> { 1190651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard private Class<T> clazz; 1290651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard 1390651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard public AppSingletonizer(Class<T> clazz) { 1490651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard this.clazz = clazz; 1590651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard } 1690651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard 1790651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard synchronized public T getInstance(Context context) { 1886335af816f048e32aad504aed0af63a73097a5fChristian Williams & Ryan Richard Application applicationContext = (Application) context.getApplicationContext(); 19e7a41c9b39233781c97dd599ff61024f0510e308Christian Williams ShadowApplication shadowApplication = (ShadowApplication) shadowOf(applicationContext); 2003ce698c2bb5b203761ce51694d2fa104be4a40dTyler Schultz T instance = get(shadowApplication); 2190651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard if (instance == null) { 2286335af816f048e32aad504aed0af63a73097a5fChristian Williams & Ryan Richard instance = createInstance(applicationContext); 2303ce698c2bb5b203761ce51694d2fa104be4a40dTyler Schultz set(shadowApplication, instance); 2490651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard } 2590651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard return instance; 2690651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard } 2790651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard 2803ce698c2bb5b203761ce51694d2fa104be4a40dTyler Schultz protected abstract T get(ShadowApplication shadowApplication); 2986335af816f048e32aad504aed0af63a73097a5fChristian Williams & Ryan Richard 3003ce698c2bb5b203761ce51694d2fa104be4a40dTyler Schultz protected abstract void set(ShadowApplication shadowApplication, T instance); 3186335af816f048e32aad504aed0af63a73097a5fChristian Williams & Ryan Richard 3286335af816f048e32aad504aed0af63a73097a5fChristian Williams & Ryan Richard protected T createInstance(Application applicationContext) { 33e7a41c9b39233781c97dd599ff61024f0510e308Christian Williams return newInstanceOf(clazz); 3490651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard } 3590651a8499bcc859bd5c88a56a1d76c584e6bdfbChristian Williams & Ryan Richard} 36