diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6ba093432..592efc051 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -189,6 +189,7 @@
Read
Delivered
Resend
+ An error occurs when opening this file.
Registered
diff --git a/src/android/org/linphone/ChatFragment.java b/src/android/org/linphone/ChatFragment.java
index eb97f330d..f1cc2f8a9 100644
--- a/src/android/org/linphone/ChatFragment.java
+++ b/src/android/org/linphone/ChatFragment.java
@@ -782,7 +782,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
private void sendImageMessage(String path, int imageSize) {
if(path.contains("file://")) {
- path = path.substring(7);
+ path = path.split("file:///", 2)[1];
}
if(path.contains("%20")) {
path = path.replace("%20", "-");
@@ -815,7 +815,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
private void sendFileSharingMessage(String path, int size ) {
if (path.contains("file://")) {
- path = path.substring(7);
+ path = path.split("file:///", 2)[1];
} else if (path.contains("com.android.contacts/contacts/")) {
path = getCVSPathFromLookupUri(path).toString();
} else if (path.contains("vcard") || path.contains("vcf")) {
@@ -1676,20 +1676,29 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
contentUri = Uri.parse(imageUri);
} else {
file = new File(imageUri);
- contentUri = FileProvider.getUriForFile(getActivity(), "org.linphone.provider", file);
+ try {
+ contentUri = FileProvider.getUriForFile(getActivity(), "org.linphone.provider", file);
+ }catch(java.lang.IllegalArgumentException e){
+ Log.e("Something wrong happend : "+e);
+ contentUri = null;
+ }
}
String type = null;
- String extension = MimeTypeMap.getFileExtensionFromUrl(contentUri.toString());
- if (extension != null) {
- type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
+ if(contentUri != null) {
+ String extension = MimeTypeMap.getFileExtensionFromUrl(contentUri.toString());
+ if (extension != null) {
+ type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
+ }
+ if (type != null) {
+ intent.setDataAndType(contentUri, type);
+ } else {
+ intent.setDataAndType(contentUri, "*/*");
+ }
+ intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
+ context.startActivity(intent);
+ }else{
+ LinphoneActivity.instance().displayCustomToast(getString(R.string.error_opening_file), Toast.LENGTH_LONG);
}
- if(type != null) {
- intent.setDataAndType(contentUri, type);
- }else {
- intent.setDataAndType(contentUri, "*/*");
- }
- intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
- context.startActivity(intent);
}
});
}
@@ -1901,20 +1910,29 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
contentUri = Uri.parse(imageUri);
} else {
file = new File(imageUri);
- contentUri = FileProvider.getUriForFile(getActivity(), "org.linphone.provider", file);
+ try {
+ contentUri = FileProvider.getUriForFile(getActivity(), "org.linphone.provider", file);
+ }catch(java.lang.IllegalArgumentException e){
+ Log.e("Something wrong happend : "+e);
+ contentUri = null;
+ }
}
String type = null;
- String extension = MimeTypeMap.getFileExtensionFromUrl(contentUri.toString());
- if (extension != null) {
- type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
- }
- if(type != null) {
- intent.setDataAndType(contentUri, type);
- }else {
- intent.setDataAndType(contentUri, "*/*");
- }
- intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
- context.startActivity(intent);
+ if(contentUri != null) {
+ String extension = MimeTypeMap.getFileExtensionFromUrl(contentUri.toString());
+ if (extension != null) {
+ type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
+ }
+ if (type != null) {
+ intent.setDataAndType(contentUri, type);
+ } else {
+ intent.setDataAndType(contentUri, "*/*");
+ }
+ intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
+ context.startActivity(intent);
+ }else{
+ LinphoneActivity.instance().displayCustomToast(getString(R.string.error_opening_file), Toast.LENGTH_LONG);
+ }
}
});
}
diff --git a/src/android/org/linphone/LinphoneLauncherActivity.java b/src/android/org/linphone/LinphoneLauncherActivity.java
index b9eebb084..9784bccfb 100644
--- a/src/android/org/linphone/LinphoneLauncherActivity.java
+++ b/src/android/org/linphone/LinphoneLauncherActivity.java
@@ -126,7 +126,7 @@ public class LinphoneLauncherActivity extends Activity {
newIntent.setData(intent.getData());
if (Intent.ACTION_SEND.equals(action) && type != null) {
if (type.contains("text/")){
- if(("text/plain").equals(type) && intent.getStringExtra(Intent.EXTRA_TEXT)!= null) {
+ if(("text/plain").equals(type) && (String)intent.getStringExtra(Intent.EXTRA_TEXT)!= null) {
stringFileShared = intent.getStringExtra(Intent.EXTRA_TEXT);
newIntent.putExtra("msgShared", stringFileShared);
} else if(((Uri) intent.getExtras().get(Intent.EXTRA_STREAM)) != null){
@@ -134,19 +134,23 @@ public class LinphoneLauncherActivity extends Activity {
newIntent.putExtra("fileShared", stringFileShared);
}
}else {
- if(intent.getStringExtra(Intent.EXTRA_STREAM) != null){
+ if(((String) intent.getStringExtra(Intent.EXTRA_STREAM)) != null){
stringUriFileShared = intent.getStringExtra(Intent.EXTRA_STREAM);
}else {
fileUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
stringUriFileShared = LinphoneUtils.getRealPathFromURI(getBaseContext(), fileUri);
if(stringUriFileShared == null)
- if(fileUri.getPath().contains("/0/1/mediakey:/local")) {
+ if(fileUri.getPath().contains("/0/1/mediakey:/local") || fileUri.getPath().contains("/ORIGINAL/NONE/")) {
stringUriFileShared = LinphoneUtils.getFilePath(getBaseContext(), fileUri);
}else
stringUriFileShared = fileUri.getPath();
}
newIntent.putExtra("fileShared", stringUriFileShared);
}
+ }else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
+ if (type.startsWith("image/")) {
+ //TODO : Manage multiple files sharing
+ }
}else if( ACTION_CALL_LINPHONE.equals(action) && (intent.getStringExtra("NumberToCall") != null)) {
String numberToCall = intent.getStringExtra("NumberToCall");
if (CallActivity.isInstanciated()) {