package android.content;
import static com.applang.Util1.*;
import java.io.File;
import java.util.Observable;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;
public class ContentResolver extends Observable
{
private static final String TAG = ContentResolver.class.getSimpleName();
public static final String CURSOR_DIR_BASE_TYPE = "vnd.android.cursor.dir";
public static final String CURSOR_ITEM_BASE_TYPE = "vnd.android.cursor.item";
public static final String RAW = "raw";
public static final String SCHEME_CONTENT = "content";
public static final String SCHEME_FILE = "file";
public ContentResolver(Context context) {
mContext = context;
}
Context mContext;
public ContentProvider acquireProvider(final Uri uri)
{
Context context = mContext;
contentProvider = new ContentProvider();
String flavor = null;
try {
if (SCHEME_CONTENT.equals(uri.getScheme())) {
flavor = uri.getAuthority();
if (flavor != null) {
Class<?> c = Class.forName(flavor + "Provider");
contentProvider = (ContentProvider) c.newInstance();
}
} else if (SCHEME_FILE.equals(uri.getScheme())) {
final File file = new File(uri.getPath());
context = new Context() {
{
setPackageInfo("", file.getParent());
}
@Override
public ContentResolver getContentResolver() {
return ContentResolver.this;
}
};
}
} catch (Exception e) {
Log.e(TAG, "acquireProvider", e);
}
context.setFlavor(flavor);
contentProvider.setContext(context);
contentProvider.onCreate();
com.applang.Util2.no_println("contentProvider", contentProvider.getClass());
return contentProvider;
}
public ContentProvider contentProvider = null;
public Cursor rawQuery(Uri uri, String...sql) {
return acquireProvider(uri).rawQuery(uri, sql);
}
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
if (selection != null && projection == null && selectionArgs == null && sortOrder == null)
return rawQuery(uri, selection);
else if (hasAuthority(uri) || projection != null || selectionArgs != null || sortOrder != null)
return acquireProvider(uri).query(uri, projection, selection, selectionArgs, sortOrder);
else
return rawQuery(uri, selection);
}
public int delete(Uri uri, String where, String[] whereArgs) {
return acquireProvider(uri).delete(uri, where, whereArgs);
}
public Uri insert(Uri uri, ContentValues initialValues) {
return acquireProvider(uri).insert(uri, initialValues);
}
public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {
return acquireProvider(uri).update(uri, values, where, whereArgs);
}
/**
* Return the MIME type of the given content URL.
*
* @param url A Uri identifying content (either a list or specific type),
* using the content:// scheme.
* @return A MIME type for the content, or null if the URL is invalid or the type is unknown
*/
public String getType(Uri uri) {
return acquireProvider(uri).getType(uri);
}
public void notifyChange(Uri uri, ContentObserver observer) {
setChanged();
notifyObservers(uri);
}
public final void registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer) {
addObserver(observer);
}
public final void unregisterContentObserver(ContentObserver observer) {
if (countObservers() > 0)
deleteObserver(observer);
}
}