package im.actor.runtime; import com.google.j2objc.annotations.AutoreleasePool; import im.actor.runtime.actors.ThreadPriority; import im.actor.runtime.os.OSType; import im.actor.runtime.power.WakeLock; import im.actor.runtime.threading.Dispatcher; import im.actor.runtime.threading.AtomicIntegerCompat; import im.actor.runtime.threading.AtomicLongCompat; import im.actor.runtime.threading.ImmediateDispatcher; import im.actor.runtime.threading.ThreadLocalCompat; import im.actor.runtime.threading.WeakReferenceCompat; public class Runtime { private static final DispatcherRuntime dispatcherRuntime = new DispatcherRuntimeProvider(); private static final ThreadingRuntime threadingRuntime = new ThreadingRuntimeProvider(); private static final MainThreadRuntimeProvider mainThreadRuntime = new MainThreadRuntimeProvider(); private static final LifecycleRuntime lifecycleRuntime = new LifecycleRuntimeProvider(); private static final LocaleRuntime localeRuntime = new LocaleRuntimeProvider(); public static OSType getSystemType() { return mainThreadRuntime.getOSType(); } public static LocaleRuntime getLocaleRuntime() { return localeRuntime; } public static Dispatcher createDispatcher(String name) { return threadingRuntime.createDispatcher(name); } public static ImmediateDispatcher createImmediateDispatcher(String name, ThreadPriority priority) { return threadingRuntime.createImmediateDispatcher(name, priority); } public static long getActorTime() { return threadingRuntime.getActorTime(); } public static long getCurrentTime() { return threadingRuntime.getCurrentTime(); } public static long getCurrentSyncedTime() { return threadingRuntime.getSyncedCurrentTime(); } public static AtomicIntegerCompat createAtomicInt(int init) { return threadingRuntime.createAtomicInt(init); } public static AtomicLongCompat createAtomicLong(long init) { return threadingRuntime.createAtomicLong(init); } public static <T> ThreadLocalCompat<T> createThreadLocal() { return threadingRuntime.createThreadLocal(); } public static <T> WeakReferenceCompat<T> createWeakReference(T val) { return threadingRuntime.createWeakReference(val); } public static boolean isSingleThread() { return mainThreadRuntime.isSingleThread(); } public static int getCoresCount() { return threadingRuntime.getCoresCount(); } public static void checkMainThread() { if (RuntimeEnvironment.isProduction()) { // Do Nothing in production mode return; } if (mainThreadRuntime.isSingleThread()) { return; } if (!mainThreadRuntime.isMainThread()) { throw new RuntimeException("Unable to perform operation not from Main Thread"); } } public static boolean isMainThread() { return mainThreadRuntime.isSingleThread() || mainThreadRuntime.isMainThread(); } @AutoreleasePool public static void postToMainThread(Runnable runnable) { mainThreadRuntime.postToMainThread(runnable); } @AutoreleasePool public static void dispatch(Runnable runnable) { dispatcherRuntime.dispatch(runnable); } public static void killApp() { lifecycleRuntime.killApp(); } public static WakeLock makeWakeLock() { return lifecycleRuntime.makeWakeLock(); } }