mirror of
https://github.com/moparisthebest/Conversations
synced 2024-11-27 19:22:15 -05:00
added button to open images
This commit is contained in:
parent
7749103909
commit
9fc7a1b980
76
src/eu/siacs/conversations/persistance/FileBackend.java
Normal file
76
src/eu/siacs/conversations/persistance/FileBackend.java
Normal file
@ -0,0 +1,76 @@
|
||||
package eu.siacs.conversations.persistance;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.math.BigInteger;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import eu.siacs.conversations.entities.Conversation;
|
||||
|
||||
|
||||
public class FileBackend {
|
||||
|
||||
private static int IMAGE_SIZE = 1920;
|
||||
|
||||
private Context context;
|
||||
|
||||
public FileBackend(Context context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
|
||||
public File copyImageToPrivateStorage(Conversation conversation, Uri image) {
|
||||
try {
|
||||
InputStream is = context.getContentResolver().openInputStream(image);
|
||||
String prefix = context.getFilesDir().getAbsolutePath();
|
||||
String path = prefix+"/"+conversation.getAccount().getJid()+"/"+conversation.getContactJid();
|
||||
String filename =new BigInteger(""+System.currentTimeMillis()).toString(32) + ".webp";
|
||||
File file = new File(path+"/"+filename);
|
||||
file.getParentFile().mkdirs();
|
||||
file.createNewFile();
|
||||
OutputStream os = new FileOutputStream(file);
|
||||
Bitmap originalBitmap = BitmapFactory.decodeStream(is);
|
||||
is.close();
|
||||
int w = originalBitmap.getWidth();
|
||||
int h = originalBitmap.getHeight();
|
||||
boolean success;
|
||||
if (Math.max(w, h) > IMAGE_SIZE) {
|
||||
int scalledW;
|
||||
int scalledH;
|
||||
if (w<=h) {
|
||||
scalledW = (int) (w / ((double) h/IMAGE_SIZE));
|
||||
scalledH = IMAGE_SIZE;
|
||||
} else {
|
||||
scalledW = IMAGE_SIZE;
|
||||
scalledH = (int) (h / ((double) w/IMAGE_SIZE));
|
||||
}
|
||||
Bitmap scalledBitmap = Bitmap.createScaledBitmap(originalBitmap, scalledW,scalledH, true);
|
||||
success = scalledBitmap.compress(Bitmap.CompressFormat.WEBP, 75, os);
|
||||
} else {
|
||||
success = originalBitmap.compress(Bitmap.CompressFormat.WEBP, 75, os);
|
||||
}
|
||||
if (!success) {
|
||||
Log.d("xmppService","couldnt compress");
|
||||
}
|
||||
os.close();
|
||||
return file;
|
||||
} catch (FileNotFoundException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@ -27,6 +27,7 @@ import eu.siacs.conversations.entities.MucOptions;
|
||||
import eu.siacs.conversations.entities.MucOptions.OnRenameListener;
|
||||
import eu.siacs.conversations.entities.Presences;
|
||||
import eu.siacs.conversations.persistance.DatabaseBackend;
|
||||
import eu.siacs.conversations.persistance.FileBackend;
|
||||
import eu.siacs.conversations.persistance.OnPhoneContactsMerged;
|
||||
import eu.siacs.conversations.ui.OnAccountListChangedListener;
|
||||
import eu.siacs.conversations.ui.OnConversationListChangedListener;
|
||||
@ -73,6 +74,7 @@ public class XmppConnectionService extends Service {
|
||||
|
||||
protected static final String LOGTAG = "xmppService";
|
||||
public DatabaseBackend databaseBackend;
|
||||
private FileBackend fileBackend;
|
||||
|
||||
public long startDate;
|
||||
|
||||
@ -381,6 +383,11 @@ public class XmppConnectionService extends Service {
|
||||
|
||||
}
|
||||
|
||||
public FileBackend getFileBackend() {
|
||||
return this.fileBackend;
|
||||
}
|
||||
|
||||
|
||||
protected Conversation findMuc(String name, Account account) {
|
||||
for (Conversation conversation : this.conversations) {
|
||||
if (conversation.getContactJid().split("/")[0].equals(name)
|
||||
@ -522,7 +529,8 @@ public class XmppConnectionService extends Service {
|
||||
@Override
|
||||
public void onCreate() {
|
||||
ExceptionHelper.init(getApplicationContext());
|
||||
databaseBackend = DatabaseBackend.getInstance(getApplicationContext());
|
||||
this.databaseBackend = DatabaseBackend.getInstance(getApplicationContext());
|
||||
this.fileBackend = new FileBackend(getApplicationContext());
|
||||
this.accounts = databaseBackend.getAccounts();
|
||||
|
||||
this.getConversations();
|
||||
|
@ -1,5 +1,8 @@
|
||||
package eu.siacs.conversations.ui;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -8,8 +11,11 @@ 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.persistance.FileBackend;
|
||||
import eu.siacs.conversations.utils.ExceptionHelper;
|
||||
import eu.siacs.conversations.utils.PhoneHelper;
|
||||
import eu.siacs.conversations.utils.UIHelper;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.app.AlertDialog;
|
||||
@ -18,6 +24,7 @@ import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Typeface;
|
||||
import android.support.v4.widget.SlidingPaneLayout;
|
||||
@ -46,6 +53,7 @@ public class ConversationActivity extends XmppActivity {
|
||||
|
||||
public static final int REQUEST_SEND_MESSAGE = 0x75441;
|
||||
public static final int REQUEST_DECRYPT_PGP = 0x76783;
|
||||
private static final int ATTACH_FILE = 0x48502;
|
||||
|
||||
protected SlidingPaneLayout spl;
|
||||
|
||||
@ -272,6 +280,13 @@ public class ConversationActivity extends XmppActivity {
|
||||
case android.R.id.home:
|
||||
spl.openPane();
|
||||
break;
|
||||
case R.id.action_attach_file:
|
||||
Intent attachFileIntent = new Intent();
|
||||
attachFileIntent.setType("image/*");
|
||||
attachFileIntent.setAction(Intent.ACTION_GET_CONTENT);
|
||||
startActivityForResult(Intent.createChooser(attachFileIntent,
|
||||
"Attach File"), ATTACH_FILE);
|
||||
break;
|
||||
case R.id.action_add:
|
||||
startActivity(new Intent(this, ContactsActivity.class));
|
||||
break;
|
||||
@ -478,6 +493,11 @@ public class ConversationActivity extends XmppActivity {
|
||||
if (selectedFragment!=null) {
|
||||
selectedFragment.hidePgpPassphraseBox();
|
||||
}
|
||||
} else if (requestCode == ATTACH_FILE) {
|
||||
FileBackend backend = xmppConnectionService.getFileBackend();
|
||||
File file = backend.copyImageToPrivateStorage(getSelectedConversation(), data.getData());
|
||||
Log.d(LOGTAG,"new file"+file.getAbsolutePath());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,18 +13,19 @@ import android.os.Bundle;
|
||||
import android.os.Looper;
|
||||
import android.provider.ContactsContract;
|
||||
import android.provider.ContactsContract.Profile;
|
||||
import android.provider.MediaStore;
|
||||
|
||||
public class PhoneHelper {
|
||||
|
||||
public static void loadPhoneContacts(Context context, final OnPhoneContactsLoadedListener listener) {
|
||||
if (Looper.myLooper()==null) {
|
||||
|
||||
public static void loadPhoneContacts(Context context,
|
||||
final OnPhoneContactsLoadedListener listener) {
|
||||
if (Looper.myLooper() == null) {
|
||||
Looper.prepare();
|
||||
}
|
||||
final Looper mLooper = Looper.myLooper();
|
||||
final Hashtable<String, Bundle> phoneContacts = new Hashtable<String, Bundle>();
|
||||
|
||||
final String[] PROJECTION = new String[] {
|
||||
ContactsContract.Data._ID,
|
||||
|
||||
final String[] PROJECTION = new String[] { ContactsContract.Data._ID,
|
||||
ContactsContract.Data.DISPLAY_NAME,
|
||||
ContactsContract.Data.PHOTO_THUMBNAIL_URI,
|
||||
ContactsContract.Data.LOOKUP_KEY,
|
||||
@ -35,7 +36,7 @@ public class PhoneHelper {
|
||||
+ "\") AND (" + ContactsContract.CommonDataKinds.Im.PROTOCOL
|
||||
+ "=\"" + ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER
|
||||
+ "\")";
|
||||
|
||||
|
||||
CursorLoader mCursorLoader = new CursorLoader(context,
|
||||
ContactsContract.Data.CONTENT_URI, PROJECTION, SELECTION, null,
|
||||
null);
|
||||
@ -55,14 +56,14 @@ public class PhoneHelper {
|
||||
"photouri",
|
||||
cursor.getString(cursor
|
||||
.getColumnIndex(ContactsContract.Data.PHOTO_THUMBNAIL_URI)));
|
||||
contact.putString("lookup",cursor.getString(cursor
|
||||
contact.putString("lookup", cursor.getString(cursor
|
||||
.getColumnIndex(ContactsContract.Data.LOOKUP_KEY)));
|
||||
phoneContacts.put(
|
||||
cursor.getString(cursor
|
||||
.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)),
|
||||
contact);
|
||||
}
|
||||
if (listener!=null) {
|
||||
if (listener != null) {
|
||||
listener.onPhoneContactsLoaded(phoneContacts);
|
||||
}
|
||||
mLooper.quit();
|
||||
@ -77,12 +78,12 @@ public class PhoneHelper {
|
||||
Cursor mProfileCursor = activity.getContentResolver().query(
|
||||
Profile.CONTENT_URI, mProjection, null, null, null);
|
||||
|
||||
if (mProfileCursor.getCount()==0) {
|
||||
if (mProfileCursor.getCount() == 0) {
|
||||
return null;
|
||||
} else {
|
||||
mProfileCursor.moveToFirst();
|
||||
String uri = mProfileCursor.getString(1);
|
||||
if (uri==null) {
|
||||
if (uri == null) {
|
||||
return null;
|
||||
} else {
|
||||
return Uri.parse(uri);
|
||||
|
Loading…
Reference in New Issue
Block a user