package droidkit.content;
import android.os.Bundle;
import android.support.annotation.NonNull;
import droidkit.util.Dynamic;
import droidkit.util.DynamicException;
/**
* @author Daniel Serdyukov
*/
public final class Loaders {
private static final String LC = "$LC";
private static final String LCV4 = "$LCv4";
private Loaders() {
}
@NonNull
@SuppressWarnings("unchecked")
public static <D> android.content.Loader<D> init(android.app.LoaderManager lm, int loaderId, @NonNull Bundle args,
@NonNull Object delegate) {
if (delegate instanceof android.app.LoaderManager.LoaderCallbacks) {
return lm.initLoader(loaderId, args, (android.app.LoaderManager.LoaderCallbacks<D>) delegate);
}
try {
android.app.LoaderManager.LoaderCallbacks<D> callbacks =
Dynamic.init(getCallbacksClassName(loaderId, delegate), delegate);
return lm.initLoader(loaderId, args, callbacks);
} catch (DynamicException e) {
throw new IllegalStateException("No such LoaderCallbacks", e);
}
}
@NonNull
@SuppressWarnings("unchecked")
public static <D> android.content.Loader<D> restart(android.app.LoaderManager lm, int loaderId,
@NonNull Bundle args, @NonNull Object delegate) {
if (delegate instanceof android.app.LoaderManager.LoaderCallbacks) {
return lm.restartLoader(loaderId, args, (android.app.LoaderManager.LoaderCallbacks<D>) delegate);
}
try {
android.app.LoaderManager.LoaderCallbacks<D> callbacks =
Dynamic.init(getCallbacksClassName(loaderId, delegate), delegate);
return lm.restartLoader(loaderId, args, callbacks);
} catch (DynamicException e) {
throw new IllegalStateException("No such LoaderCallbacks", e);
}
}
public static void destroy(android.app.LoaderManager lm, int loaderId) {
lm.destroyLoader(loaderId);
}
// SUPPORT_V4
@NonNull
@SuppressWarnings("unchecked")
public static <D> android.support.v4.content.Loader<D> init(android.support.v4.app.LoaderManager lm,
int loaderId, @NonNull Bundle args,
@NonNull Object delegate) {
if (delegate instanceof android.support.v4.app.LoaderManager.LoaderCallbacks) {
return lm.initLoader(loaderId, args, (android.support.v4.app.LoaderManager.LoaderCallbacks<D>) delegate);
}
try {
android.support.v4.app.LoaderManager.LoaderCallbacks<D> callbacks =
Dynamic.init(getCallbacksClassName(loaderId, delegate, true), delegate);
return lm.initLoader(loaderId, args, callbacks);
} catch (DynamicException e) {
throw new IllegalStateException("No such LoaderCallbacks", e);
}
}
@NonNull
@SuppressWarnings("unchecked")
public static <D> android.support.v4.content.Loader<D> restart(android.support.v4.app.LoaderManager lm,
int loaderId, @NonNull Bundle args,
@NonNull Object delegate) {
if (delegate instanceof android.support.v4.app.LoaderManager.LoaderCallbacks) {
return lm.restartLoader(loaderId, args, (android.support.v4.app.LoaderManager.LoaderCallbacks<D>) delegate);
}
try {
android.support.v4.app.LoaderManager.LoaderCallbacks<D> callbacks =
Dynamic.init(getCallbacksClassName(loaderId, delegate, true), delegate);
return lm.restartLoader(loaderId, args, callbacks);
} catch (DynamicException e) {
throw new IllegalStateException("No such LoaderCallbacks", e);
}
}
public static void destroy(android.support.v4.app.LoaderManager lm, int loaderId) {
lm.destroyLoader(loaderId);
}
private static String getCallbacksClassName(int loaderId, @NonNull Object delegate) {
return getCallbacksClassName(loaderId, delegate, false);
}
private static String getCallbacksClassName(int loaderId, @NonNull Object delegate, boolean support) {
return String.format("%s%s%d", delegate.getClass().getName(), support ? LCV4 : LC, loaderId);
}
}