takeing pictures over intent
This commit is contained in:
parent
a8010e7133
commit
9492e28902
|
@ -1,6 +1,7 @@
|
|||
package eu.siacs.conversations.persistance;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
@ -17,7 +18,6 @@ import android.util.LruCache;
|
|||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import eu.siacs.conversations.entities.Account;
|
||||
import eu.siacs.conversations.entities.Conversation;
|
||||
import eu.siacs.conversations.entities.Message;
|
||||
|
@ -89,15 +89,25 @@ public class FileBackend {
|
|||
|
||||
public JingleFile copyImageToPrivateStorage(Message message, Uri image) {
|
||||
try {
|
||||
Log.d("xmppService","copying file: "+image.toString()+ " to internal storage");
|
||||
InputStream is = context.getContentResolver()
|
||||
InputStream is;
|
||||
if (image!=null) {
|
||||
Log.d("xmppService","copying file: "+image.toString()+ " to internal storage");
|
||||
is = context.getContentResolver()
|
||||
.openInputStream(image);
|
||||
} else {
|
||||
Log.d("xmppService","copying file from incoming to internal storage");
|
||||
is = new FileInputStream(getIncomingFile());
|
||||
}
|
||||
JingleFile file = getJingleFile(message);
|
||||
file.getParentFile().mkdirs();
|
||||
file.createNewFile();
|
||||
OutputStream os = new FileOutputStream(file);
|
||||
Bitmap originalBitmap = BitmapFactory.decodeStream(is);
|
||||
is.close();
|
||||
if (image==null) {
|
||||
Log.d("xmppService","delete incoming file");
|
||||
getIncomingFile().delete();
|
||||
}
|
||||
Bitmap scalledBitmap = resize(originalBitmap, IMAGE_SIZE);
|
||||
boolean success = scalledBitmap.compress(
|
||||
Bitmap.CompressFormat.WEBP, 75, os);
|
||||
|
@ -160,4 +170,8 @@ public class FileBackend {
|
|||
}
|
||||
f.delete();
|
||||
}
|
||||
|
||||
public File getIncomingFile() {
|
||||
return new File(context.getFilesDir().getAbsolutePath()+"/incoming");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@ package eu.siacs.conversations.services;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
|
||||
import eu.siacs.conversations.entities.Account;
|
||||
import eu.siacs.conversations.entities.Conversation;
|
||||
import eu.siacs.conversations.entities.Message;
|
||||
import eu.siacs.conversations.persistance.DatabaseBackend;
|
||||
import eu.siacs.conversations.persistance.FileBackend;
|
||||
|
||||
import android.content.ContentProvider;
|
||||
import android.content.ContentValues;
|
||||
import android.database.Cursor;
|
||||
|
@ -21,46 +21,60 @@ public class ImageProvider extends ContentProvider {
|
|||
@Override
|
||||
public ParcelFileDescriptor openFile(Uri uri, String mode)
|
||||
throws FileNotFoundException {
|
||||
DatabaseBackend databaseBackend = DatabaseBackend
|
||||
.getInstance(getContext());
|
||||
ParcelFileDescriptor pfd;
|
||||
FileBackend fileBackend = new FileBackend(getContext());
|
||||
String uuids = uri.getPath();
|
||||
Log.d("xmppService", "uuids = " + uuids);
|
||||
if (uuids == null) {
|
||||
if ("r".equals(mode)) {
|
||||
DatabaseBackend databaseBackend = DatabaseBackend
|
||||
.getInstance(getContext());
|
||||
String uuids = uri.getPath();
|
||||
Log.d("xmppService", "uuids = " + uuids+" mode="+mode);
|
||||
if (uuids == null) {
|
||||
throw new FileNotFoundException();
|
||||
}
|
||||
String[] uuidsSplited = uuids.split("/");
|
||||
if (uuidsSplited.length != 3) {
|
||||
throw new FileNotFoundException();
|
||||
}
|
||||
String conversationUuid = uuidsSplited[1];
|
||||
String messageUuid = uuidsSplited[2];
|
||||
|
||||
Conversation conversation = databaseBackend
|
||||
.findConversationByUuid(conversationUuid);
|
||||
if (conversation == null) {
|
||||
throw new FileNotFoundException("conversation " + conversationUuid
|
||||
+ " could not be found");
|
||||
}
|
||||
Message message = databaseBackend.findMessageByUuid(messageUuid);
|
||||
if (message == null) {
|
||||
throw new FileNotFoundException("message " + messageUuid
|
||||
+ " could not be found");
|
||||
}
|
||||
|
||||
Account account = databaseBackend.findAccountByUuid(conversation
|
||||
.getAccountUuid());
|
||||
if (account == null) {
|
||||
throw new FileNotFoundException("account "
|
||||
+ conversation.getAccountUuid() + " cound not be found");
|
||||
}
|
||||
message.setConversation(conversation);
|
||||
conversation.setAccount(account);
|
||||
|
||||
File file = fileBackend.getJingleFile(message);
|
||||
pfd = ParcelFileDescriptor.open(file,
|
||||
ParcelFileDescriptor.MODE_READ_ONLY);
|
||||
return pfd;
|
||||
} else if ("w".equals(mode)){
|
||||
File file = fileBackend.getIncomingFile();
|
||||
try {
|
||||
file.createNewFile();
|
||||
} catch (IOException e) {
|
||||
throw new FileNotFoundException();
|
||||
}
|
||||
pfd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
|
||||
return pfd;
|
||||
} else {
|
||||
throw new FileNotFoundException();
|
||||
}
|
||||
String[] uuidsSplited = uuids.split("/");
|
||||
if (uuidsSplited.length != 3) {
|
||||
throw new FileNotFoundException();
|
||||
}
|
||||
String conversationUuid = uuidsSplited[1];
|
||||
String messageUuid = uuidsSplited[2];
|
||||
|
||||
Conversation conversation = databaseBackend
|
||||
.findConversationByUuid(conversationUuid);
|
||||
if (conversation == null) {
|
||||
throw new FileNotFoundException("conversation " + conversationUuid
|
||||
+ " could not be found");
|
||||
}
|
||||
Message message = databaseBackend.findMessageByUuid(messageUuid);
|
||||
if (message == null) {
|
||||
throw new FileNotFoundException("message " + messageUuid
|
||||
+ " could not be found");
|
||||
}
|
||||
|
||||
Account account = databaseBackend.findAccountByUuid(conversation
|
||||
.getAccountUuid());
|
||||
if (account == null) {
|
||||
throw new FileNotFoundException("account "
|
||||
+ conversation.getAccountUuid() + " cound not be found");
|
||||
}
|
||||
message.setConversation(conversation);
|
||||
conversation.setAccount(account);
|
||||
|
||||
File file = fileBackend.getJingleFile(message);
|
||||
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file,
|
||||
ParcelFileDescriptor.MODE_READ_ONLY);
|
||||
return pfd;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -102,4 +116,7 @@ public class ImageProvider extends ContentProvider {
|
|||
+ message.getUuid());
|
||||
}
|
||||
|
||||
}
|
||||
public static Uri getIncomingContentUri() {
|
||||
return Uri.parse("content://eu.siacs.conversations.images/incoming");
|
||||
}
|
||||
}
|
|
@ -13,6 +13,7 @@ import eu.siacs.conversations.entities.Account;
|
|||
import eu.siacs.conversations.entities.Contact;
|
||||
import eu.siacs.conversations.entities.Conversation;
|
||||
import eu.siacs.conversations.entities.Message;
|
||||
import eu.siacs.conversations.services.ImageProvider;
|
||||
import eu.siacs.conversations.utils.ExceptionHelper;
|
||||
import eu.siacs.conversations.utils.UIHelper;
|
||||
import android.net.Uri;
|
||||
|
@ -352,6 +353,7 @@ public class ConversationActivity extends XmppActivity {
|
|||
|
||||
private void takePicture() {
|
||||
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, ImageProvider.getIncomingContentUri());
|
||||
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
|
||||
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
|
||||
}
|
||||
|
@ -732,6 +734,26 @@ public class ConversationActivity extends XmppActivity {
|
|||
announcePgp(getSelectedConversation().getAccount(),getSelectedConversation());
|
||||
} else if (requestCode == REQUEST_ENCRYPT_MESSAGE) {
|
||||
encryptTextMessage();
|
||||
} else if (requestCode == REQUEST_IMAGE_CAPTURE) {
|
||||
this.pendingMessage = xmppConnectionService.attachImageToConversation(getSelectedConversation(), null, new UiCallback() {
|
||||
|
||||
@Override
|
||||
public void userInputRequried(PendingIntent pi) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void success() {
|
||||
sendPendingImageMessage();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(int errorCode) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Log.d(LOGTAG,"unknown result code:"+requestCode);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue