// Path: lib-app/src/main/java/xdroid/app/ApplicationX.java
// public class ApplicationX extends Application implements ActivityStarter, ContextOwner {
//     @Override
//     public Context getContext() {
//         return this;
//     }
// 
//     @Override
//     public void startActivityForResult(Intent intent, int requestCode) {
//         startActivity(intent);
//     }
// 
//     @Override
//     protected void attachBaseContext(Context base) {
//         Global.setContext(this);
//         super.attachBaseContext(base);
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/Global.java
// public final class Global {
//     private static Context sContext;
// 
//     private Global() {
//         // disallow public access
//     }
// 
//     public static void setContext(Context context) {
//         sContext = context;
//     }
// 
//     public static Context getContext() {
//         if (sContext == null) {
//             sContext = CurrentApplicationHolder.INSTANCE;
//         }
// 
//         return notNull(sContext);
//     }
// 
//     public static Resources getResources() {
//         return notNull(getContext().getResources());
//     }
// 
//     public static Handler getUiHandler() {
//         return UiHandlerHolder.INSTANCE;
//     }
// 
//     public static Handler getBackgroundHandler() {
//         return BackgroundHandlerHolder.INSTANCE;
//     }
// 
//     static class CurrentApplicationHolder {
//         static final Application INSTANCE;
// 
//         static {
//             try {
//                 Class<?> clazz = Class.forName("android.app.ActivityThread");
//                 Method method = ReflectUtils.getMethod(clazz, "currentApplication");
//                 INSTANCE = cast(ReflectUtils.invokeStaticMethod(method));
//             } catch (Throwable ex) {
//                 throw new AssertionError(ex);
//             }
//         }
//     }
// 
//     static class UiHandlerHolder {
//         static final Handler INSTANCE = new Handler(Looper.getMainLooper());
//     }
// 
//     static class BackgroundHandlerHolder {
//         static final Handler INSTANCE = ThreadUtils.newThread(Global.class.getSimpleName(), null);
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/Singletons.java
// public static <T> void putSingleton(Class<T> clazz, T instance) {
//     if (!clazz.isInstance(instance)) {
//         throw new IllegalArgumentException();
//     }
// 
//     Object old = MAP.get(clazz);
//     if (old != null) {
//         throw new IllegalStateException();
//     }
// 
//     MAP.put(clazz, notNull(instance));
// }
// 
// Path: lib-toaster/src/main/java/xdroid/toaster/Toaster.java
// public static void toast(int stringId) {
//     sendMessage(getContext().getText(stringId), Toast.LENGTH_SHORT);
// }


import xdroid.app.ApplicationX;
import xdroid.core.Global;
import static xdroid.core.Singletons.putSingleton;
import static xdroid.toaster.Toaster.toast;
package xdroid.example;



public class ExampleApplication extends ApplicationX {
    @Override
    public void onCreate() {
        super.onCreate();

// Path: lib-app/src/main/java/xdroid/app/ApplicationX.java
// public class ApplicationX extends Application implements ActivityStarter, ContextOwner {
//     @Override
//     public Context getContext() {
//         return this;
//     }
// 
//     @Override
//     public void startActivityForResult(Intent intent, int requestCode) {
//         startActivity(intent);
//     }
// 
//     @Override
//     protected void attachBaseContext(Context base) {
//         Global.setContext(this);
//         super.attachBaseContext(base);
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/Global.java
// public final class Global {
//     private static Context sContext;
// 
//     private Global() {
//         // disallow public access
//     }
// 
//     public static void setContext(Context context) {
//         sContext = context;
//     }
// 
//     public static Context getContext() {
//         if (sContext == null) {
//             sContext = CurrentApplicationHolder.INSTANCE;
//         }
// 
//         return notNull(sContext);
//     }
// 
//     public static Resources getResources() {
//         return notNull(getContext().getResources());
//     }
// 
//     public static Handler getUiHandler() {
//         return UiHandlerHolder.INSTANCE;
//     }
// 
//     public static Handler getBackgroundHandler() {
//         return BackgroundHandlerHolder.INSTANCE;
//     }
// 
//     static class CurrentApplicationHolder {
//         static final Application INSTANCE;
// 
//         static {
//             try {
//                 Class<?> clazz = Class.forName("android.app.ActivityThread");
//                 Method method = ReflectUtils.getMethod(clazz, "currentApplication");
//                 INSTANCE = cast(ReflectUtils.invokeStaticMethod(method));
//             } catch (Throwable ex) {
//                 throw new AssertionError(ex);
//             }
//         }
//     }
// 
//     static class UiHandlerHolder {
//         static final Handler INSTANCE = new Handler(Looper.getMainLooper());
//     }
// 
//     static class BackgroundHandlerHolder {
//         static final Handler INSTANCE = ThreadUtils.newThread(Global.class.getSimpleName(), null);
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/Singletons.java
// public static <T> void putSingleton(Class<T> clazz, T instance) {
//     if (!clazz.isInstance(instance)) {
//         throw new IllegalArgumentException();
//     }
// 
//     Object old = MAP.get(clazz);
//     if (old != null) {
//         throw new IllegalStateException();
//     }
// 
//     MAP.put(clazz, notNull(instance));
// }
// 
// Path: lib-toaster/src/main/java/xdroid/toaster/Toaster.java
// public static void toast(int stringId) {
//     sendMessage(getContext().getText(stringId), Toast.LENGTH_SHORT);
// }


// Path: app/src/main/java/xdroid/example/ExampleApplication.java
import xdroid.app.ApplicationX;
import xdroid.core.Global;
import static xdroid.core.Singletons.putSingleton;
import static xdroid.toaster.Toaster.toast;

package xdroid.example;



public class ExampleApplication extends ApplicationX {
    @Override
    public void onCreate() {
        super.onCreate();

        putSingleton(ExampleSingleton.class, new ExampleSingleton(this, R.string.app_name));