package i2p.bote.android.util;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.OpenableColumns;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.MessagingException;
import javax.mail.Part;
import i2p.bote.Util;
import i2p.bote.email.Attachment;
public class ContentAttachment implements Attachment {
private Context mCtx;
private String mFileName;
private long mSize;
private DataHandler mDataHandler;
public ContentAttachment(Context context, final Uri uri) throws FileNotFoundException {
mCtx = context;
// Get the content resolver instance for this context
ContentResolver cr = context.getContentResolver();
Cursor returnCursor = cr.query(
uri,
new String[]{OpenableColumns.DISPLAY_NAME, OpenableColumns.SIZE},
null, null, null);
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
if (!returnCursor.moveToFirst())
throw new FileNotFoundException();
mFileName = returnCursor.getString(nameIndex);
mSize = returnCursor.getLong(sizeIndex);
returnCursor.close();
final String mimeType = cr.getType(uri);
mDataHandler = new DataHandler(new DataSource() {
@Override
public InputStream getInputStream() throws IOException {
return mCtx.getContentResolver().openInputStream(uri);
}
@Override
public OutputStream getOutputStream() throws IOException {
throw new IOException("Cannot write to attachments");
}
@Override
public String getContentType() {
return mimeType;
}
@Override
public String getName() {
return mFileName;
}
});
}
public ContentAttachment(Context context, Part part)
throws IOException, MessagingException {
mCtx = context;
mFileName = part.getFileName();
mSize = Util.getPartSize(part);
mDataHandler = part.getDataHandler();
}
@Override
public String getFileName() {
return mFileName;
}
public long getSize() {
return mSize;
}
public String getHumanReadableSize() {
return BoteHelper.getHumanReadableSize(mCtx, mSize);
}
@Override
public DataHandler getDataHandler() {
return mDataHandler;
}
@Override
public boolean clean() {
return true;
}
}