diff --git a/res/values/non_localizable_custom.xml b/res/values/non_localizable_custom.xml
index d938030fe..437890f35 100644
--- a/res/values/non_localizable_custom.xml
+++ b/res/values/non_localizable_custom.xml
@@ -68,10 +68,8 @@
linphone-android@belledonne-communications.com
false
-
- linphone-android-photo-temp.jpg
- linphone-android-photo-%s.jpg
-
+ linphone-android-photo-temp
+ linphone-android-photo-%s
false
false
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4f55d9a5b..5711011d1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -20,7 +20,6 @@
dd/MM, HH:mm
dd/MM
HH:mm
- linphone-mms-%s.jpg
Username
diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java
index de94d40de..6c5cdafd8 100644
--- a/src/org/linphone/ChatFragment.java
+++ b/src/org/linphone/ChatFragment.java
@@ -710,7 +710,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
editList.setVisibility(View.VISIBLE);
isEditMode = true;
redrawMessageList();
- //TODO refaire la liste
}
if(id == R.id.start_call){
LinphoneActivity.instance().setAddresGoToDialerAndCall(sipUri, LinphoneUtils.getUsernameFromAddress(sipUri), null);
@@ -909,7 +908,12 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
- bm.compress(Bitmap.CompressFormat.PNG, 100, stream);
+ String extension = LinphoneUtils.getExtensionFromFileName(path);
+ if (extension != null && extension.toLowerCase(Locale.getDefault()).equals("png")) {
+ bm.compress(Bitmap.CompressFormat.PNG, 100, stream);
+ } else {
+ bm.compress(Bitmap.CompressFormat.JPEG, 100, stream);
+ }
byte[] byteArray = stream.toByteArray();
return byteArray;
}
@@ -921,8 +925,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
}
mUploadingImageStream = new ByteArrayInputStream(result);
- LinphoneContent content = LinphoneCoreFactory.instance().createLinphoneContent("image", "jpeg", result, null);
String fileName = path.substring(path.lastIndexOf("/") + 1);
+ String extension = LinphoneUtils.getExtensionFromFileName(fileName);
+ LinphoneContent content = LinphoneCoreFactory.instance().createLinphoneContent("image", extension, result, null);
content.setName(fileName);
LinphoneChatMessage message = chatRoom.createFileTransferMessage(content);
diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java
index 6efc2a469..6d5c1139e 100644
--- a/src/org/linphone/LinphoneManager.java
+++ b/src/org/linphone/LinphoneManager.java
@@ -29,10 +29,12 @@ import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
@@ -79,6 +81,7 @@ import android.annotation.TargetApi;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
+import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -102,6 +105,7 @@ import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.Vibrator;
import android.provider.MediaStore;
+import android.provider.MediaStore.Images;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.telephony.TelephonyManager;
@@ -284,6 +288,40 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
public void setUploadingImageStream(ByteArrayInputStream array){
this.mUploadingImageStream = array;
}
+
+ private void storeImage(LinphoneChatMessage msg) {
+ if (msg == null || msg.getFileTransferInformation() == null || msg.getAppData() == null) return;
+ File file = new File(Environment.getExternalStorageDirectory(), msg.getAppData());
+ Bitmap bm = BitmapFactory.decodeFile(file.getPath());
+ if (bm == null) return;
+
+ ContentValues values = new ContentValues();
+ values.put(Images.Media.TITLE, file.getName());
+ String extension = msg.getFileTransferInformation().getSubtype();
+ values.put(Images.Media.MIME_TYPE, "image/" + extension);
+ ContentResolver cr = getContext().getContentResolver();
+ Uri path = cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
+
+ OutputStream stream;
+ try {
+ stream = cr.openOutputStream(path);
+ if (extension != null && extension.toLowerCase(Locale.getDefault()).equals("png")) {
+ bm.compress(Bitmap.CompressFormat.PNG, 100, stream);
+ } else {
+ bm.compress(Bitmap.CompressFormat.JPEG, 100, stream);
+ }
+
+ stream.close();
+ file.delete();
+ bm.recycle();
+
+ msg.setAppData(path.toString());
+ } catch (FileNotFoundException e) {
+ Log.e(e);
+ } catch (IOException e) {
+ Log.e(e);
+ }
+ }
@Override
public void onLinphoneChatMessageStateChanged(LinphoneChatMessage msg, LinphoneChatMessage.State state) {
@@ -292,17 +330,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
mUploadPendingFileMessage = null;
mUploadingImageStream = null;
} else {
- File file = new File(Environment.getExternalStorageDirectory(), msg.getAppData());
- try {
- Bitmap bm = BitmapFactory.decodeFile(file.getPath());
- if (bm != null) {
- String url = MediaStore.Images.Media.insertImage(getContext().getContentResolver(), file.getPath(), file.getName(), null);
- msg.setAppData(url);
- file.delete();
- }
- } catch (FileNotFoundException e) {
- Log.e(e);
- }
+ storeImage(msg);
removePendingMessage(msg);
}
}
diff --git a/src/org/linphone/LinphoneUtils.java b/src/org/linphone/LinphoneUtils.java
index 8d3668418..42661832b 100644
--- a/src/org/linphone/LinphoneUtils.java
+++ b/src/org/linphone/LinphoneUtils.java
@@ -455,5 +455,14 @@ public final class LinphoneUtils {
Log.e(e);
}
}
+
+ public static String getExtensionFromFileName(String fileName) {
+ String extension = null;
+ int i = fileName.lastIndexOf('.');
+ if (i > 0) {
+ extension = fileName.substring(i+1);
+ }
+ return extension;
+ }
}
diff --git a/src/org/linphone/ui/BubbleChat.java b/src/org/linphone/ui/BubbleChat.java
index 50b3d4ea6..712c31933 100644
--- a/src/org/linphone/ui/BubbleChat.java
+++ b/src/org/linphone/ui/BubbleChat.java
@@ -173,7 +173,8 @@ public class BubbleChat implements LinphoneChatMessage.LinphoneChatMessageListen
public void onClick(View v) {
if (mContext.getPackageManager().checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, mContext.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
v.setEnabled(false);
- String filename = context.getString(R.string.temp_photo_name_with_date).replace("%s", String.valueOf(System.currentTimeMillis()));
+ String extension = nativeMessage.getFileTransferInformation().getSubtype();
+ String filename = context.getString(R.string.temp_photo_name_with_date).replace("%s", String.valueOf(System.currentTimeMillis())) + "." + extension;
File file = new File(Environment.getExternalStorageDirectory(), filename);
nativeMessage.setAppData(filename);
LinphoneManager.getInstance().addDownloadMessagePending(nativeMessage);