// Path: lib-core/src/main/java/xdroid/core/ActivityStarter.java
// public interface ActivityStarter {
//     void startActivity(Intent intent);
// 
//     void startActivityForResult(Intent intent, int requestCode);
// }
// 
// Path: lib-core/src/main/java/xdroid/core/ContextOwner.java
// public interface ContextOwner {
//     Context getContext();
// }
// 
// 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);
//     }
// }


import android.app.Application;
import android.content.Context;
import android.content.Intent;
import xdroid.core.ActivityStarter;
import xdroid.core.ContextOwner;
import xdroid.core.Global;
package xdroid.app;



/**
 * @author Oleksii Kropachov (o.kropachov@shamanland.com)
 */
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) {
// Path: lib-core/src/main/java/xdroid/core/ActivityStarter.java
// public interface ActivityStarter {
//     void startActivity(Intent intent);
// 
//     void startActivityForResult(Intent intent, int requestCode);
// }
// 
// Path: lib-core/src/main/java/xdroid/core/ContextOwner.java
// public interface ContextOwner {
//     Context getContext();
// }
// 
// 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-app/src/main/java/xdroid/app/ApplicationX.java
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import xdroid.core.ActivityStarter;
import xdroid.core.ContextOwner;
import xdroid.core.Global;

package xdroid.app;



/**
 * @author Oleksii Kropachov (o.kropachov@shamanland.com)
 */
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);