package org.openintents.filemanager;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.linnaeus.activity.R;
import org.openintents.filemanager.util.MimeTypeParser;
import org.openintents.filemanager.util.MimeTypes;
import org.xmlpull.v1.XmlPullParserException;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.res.XmlResourceParser;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.provider.MediaStore.Images;
import android.util.Log;
public class FileManagerProvider extends ContentProvider {
private static final String MIME_TYPE_PREFIX = "content://org.openintents.filemanager/mimetype/";
private static final String TAG = "FileManagerProvider";
public static final String AUTHORITY = "org.openintents.filemanager";
private MimeTypes mMimeTypes;
@Override
public boolean onCreate() {
getMimeTypes();
return true;
}
/**
*
*/
private void getMimeTypes() {
MimeTypeParser mtp = new MimeTypeParser();
XmlResourceParser in = getContext().getResources().getXml(
R.xml.mimetypes);
try {
mMimeTypes = mtp.fromXmlResource(in);
} catch (XmlPullParserException e) {
Log
.e(
TAG,
"PreselectedChannelsActivity: XmlPullParserException",
e);
throw new RuntimeException(
"PreselectedChannelsActivity: XmlPullParserException");
} catch (IOException e) {
Log.e(TAG, "PreselectedChannelsActivity: IOException", e);
throw new RuntimeException(
"PreselectedChannelsActivity: IOException");
}
}
@Override
public int delete(Uri uri, String s, String[] as) {
// not supported
return 0;
}
@Override
public String getType(Uri uri) {
// return file extension (uri.lastIndexOf("."))
return mMimeTypes.getMimeType(uri.toString());
}
@Override
public Uri insert(Uri uri, ContentValues contentvalues) {
// not supported
return null;
}
@Override
public Cursor query(Uri uri, String[] as, String s, String[] as1, String s1) {
if (uri.toString().startsWith(
MIME_TYPE_PREFIX)) {
MatrixCursor c = new MatrixCursor(new String[] { Images.Media.DATA,
Images.Media.MIME_TYPE });
// data = absolute path = uri - content://authority/mimetype
String data = uri.toString().substring(20 + AUTHORITY.length());
String mimeType = mMimeTypes.getMimeType(data);
c.addRow(new String[] { data, mimeType });
return c;
} else {
throw new RuntimeException("Unsupported uri");
}
}
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode)
throws FileNotFoundException {
if (uri.toString().startsWith(
MIME_TYPE_PREFIX)) {
int m = ParcelFileDescriptor.MODE_READ_ONLY;
if (mode.equalsIgnoreCase("rw"))
m = ParcelFileDescriptor.MODE_READ_WRITE;
File f = new File(uri.toString().substring(20 + AUTHORITY.length()));
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(f, m);
return pfd;
} else {
throw new RuntimeException("Unsupported uri");
}
}
@Override
public int update(Uri uri, ContentValues contentvalues, String s,
String[] as) {
// not supported
return 0;
}
}