diff --git a/res/layout/chat_bubble.xml b/res/layout/chat_bubble.xml
index 7f523dc9f..efada4367 100644
--- a/res/layout/chat_bubble.xml
+++ b/res/layout/chat_bubble.xml
@@ -141,30 +141,21 @@
android:layout_marginBottom="12dp"/>
+ android:text="@string/open"/>
-
-
Retry
Cancel
Accept
+ Open
Continue
About
Deny
diff --git a/src/android/org/linphone/chat/ChatBubbleViewHolder.java b/src/android/org/linphone/chat/ChatBubbleViewHolder.java
index 77b56c37a..bc8aecdd8 100644
--- a/src/android/org/linphone/chat/ChatBubbleViewHolder.java
+++ b/src/android/org/linphone/chat/ChatBubbleViewHolder.java
@@ -55,8 +55,7 @@ public class ChatBubbleViewHolder {
public RelativeLayout fileTransferLayout;
public ProgressBar fileTransferProgressBar;
public Button fileTransferAction;
- public TextView fileExtensionLabel;
- public TextView fileNameLabel;
+ public TextView openFileButton;
public CheckBox delete;
@@ -83,8 +82,7 @@ public class ChatBubbleViewHolder {
fileTransferLayout = view.findViewById(R.id.file_transfer_layout);
fileTransferProgressBar = view.findViewById(R.id.progress_bar);
fileTransferAction = view.findViewById(R.id.file_transfer_action);
- fileExtensionLabel = view.findViewById(R.id.file_extension);
- fileNameLabel = view.findViewById(R.id.file_name);
+ openFileButton = view.findViewById(R.id.open_file);
delete = view.findViewById(R.id.delete_message);
}
diff --git a/src/android/org/linphone/chat/ChatEventsAdapter.java b/src/android/org/linphone/chat/ChatEventsAdapter.java
index 0540de03e..867260093 100644
--- a/src/android/org/linphone/chat/ChatEventsAdapter.java
+++ b/src/android/org/linphone/chat/ChatEventsAdapter.java
@@ -136,11 +136,10 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene
holder.delete.setVisibility(View.GONE);
holder.messageText.setVisibility(View.GONE);
holder.messageImage.setVisibility(View.GONE);
- holder.fileExtensionLabel.setVisibility(View.GONE);
- holder.fileNameLabel.setVisibility(View.GONE);
holder.fileTransferLayout.setVisibility(View.GONE);
holder.fileTransferProgressBar.setProgress(0);
holder.fileTransferAction.setEnabled(true);
+ holder.openFileButton.setVisibility(View.GONE);
holder.messageStatus.setVisibility(View.INVISIBLE);
holder.messageSendingInProgress.setVisibility(View.GONE);
holder.imdmLayout.setVisibility(View.INVISIBLE);
@@ -252,11 +251,16 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene
String appData = message.getAppdata();
if (externalBodyUrl != null) { // Incoming file transfer
if (appData != null) { // Download already done, just display the result
- holder.messageImage.setVisibility(View.VISIBLE);
- loadBitmap(appData, holder.messageImage);
- holder.messageImage.setTag(appData);
+ holder.messageText.setVisibility(View.VISIBLE);
+ holder.messageText.setText(fileTransferContent.getName());
+
+ displayDownloadedFile(message, holder);
} else { // Attachment not yet downloaded
+ holder.messageText.setVisibility(View.VISIBLE);
+ holder.messageText.setText(fileTransferContent.getName());
+
holder.fileTransferLayout.setVisibility(View.VISIBLE);
+ holder.fileTransferProgressBar.setVisibility(View.GONE);
holder.fileTransferAction.setText(mContext.getString(R.string.accept));
holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
@Override
@@ -278,9 +282,7 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene
}
} else if (fileTransferContent != null) { // Outgoing file transfer
if (appData != null) {
- holder.messageImage.setVisibility(View.VISIBLE);
- loadBitmap(appData, holder.messageImage);
- holder.messageImage.setTag(appData);
+ displayDownloadedFile(message, holder);
if (message.getState() == ChatMessage.State.InProgress) {
holder.messageSendingInProgress.setVisibility(View.GONE);
@@ -476,32 +478,7 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- Intent intent = new Intent(Intent.ACTION_VIEW);
- File file = null;
- Uri contentUri = null;
- String imageUri = (String)v.getTag();
- if (imageUri.startsWith("file://")) {
- imageUri = imageUri.substring("file://".length());
- file = new File(imageUri);
- contentUri = FileProvider.getUriForFile(mContext, "org.linphone.provider", file);
- } else if (imageUri.startsWith("content://")) {
- contentUri = Uri.parse(imageUri);
- } else {
- file = new File(imageUri);
- contentUri = FileProvider.getUriForFile(mContext, "org.linphone.provider", file);
- }
- 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);
- mContext.startActivity(intent);
+ openFile((String)v.getTag());
}
});
}
@@ -551,6 +528,52 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene
return null;
}
+ private void openFile(String path) {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ File file = null;
+ Uri contentUri = null;
+ if (path.startsWith("file://")) {
+ path = path.substring("file://".length());
+ file = new File(path);
+ contentUri = FileProvider.getUriForFile(mContext, "org.linphone.provider", file);
+ } else if (path.startsWith("content://")) {
+ contentUri = Uri.parse(path);
+ } else {
+ file = new File(path);
+ contentUri = FileProvider.getUriForFile(mContext, "org.linphone.provider", file);
+ }
+ 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);
+ mContext.startActivity(intent);
+ }
+
+ private void displayDownloadedFile(ChatMessage message, ChatBubbleViewHolder holder) {
+ String appData = message.getAppdata();
+ if (LinphoneUtils.isExtensionImage(appData)) {
+ holder.messageImage.setVisibility(View.VISIBLE);
+ loadBitmap(appData, holder.messageImage);
+ holder.messageImage.setTag(appData);
+ } else {
+ holder.openFileButton.setVisibility(View.VISIBLE);
+ holder.openFileButton.setTag(appData);
+ holder.openFileButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ openFile((String)v.getTag());
+ }
+ });
+ }
+ }
+
@Override
public void onFileTransferRecv(ChatMessage message, Content content, Buffer buffer) {
@@ -567,11 +590,11 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene
if (holder == null) return;
if (offset == total) {
+ holder.fileTransferProgressBar.setVisibility(View.GONE);
holder.fileTransferLayout.setVisibility(View.GONE);
- holder.messageImage.setVisibility(View.VISIBLE);
- loadBitmap(message.getAppdata(), holder.messageImage);
- holder.messageImage.setTag(message.getAppdata());
+ displayDownloadedFile(message, holder);
} else {
+ holder.fileTransferProgressBar.setVisibility(View.VISIBLE);
holder.fileTransferProgressBar.setProgress(offset * 100 / total);
}
}
diff --git a/src/android/org/linphone/chat/ChatFragment.java b/src/android/org/linphone/chat/ChatFragment.java
index 21d7ad0a6..15e31bd70 100644
--- a/src/android/org/linphone/chat/ChatFragment.java
+++ b/src/android/org/linphone/chat/ChatFragment.java
@@ -52,7 +52,6 @@ import android.support.v4.content.FileProvider;
import android.text.Editable;
import android.text.Spanned;
import android.text.TextWatcher;
-import android.text.method.LinkMovementMethod;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
@@ -104,13 +103,10 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.ref.WeakReference;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Calendar;
import java.util.List;
import java.util.Locale;
-import java.util.regex.Pattern;
import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION;
import static org.linphone.fragments.FragmentsAvailable.CHAT;
@@ -1365,8 +1361,8 @@ public class ChatFragment extends Fragment implements OnClickListener, ChatMessa
holder.delete.setVisibility(View.GONE);
holder.messageText.setVisibility(View.GONE);
holder.messageImage.setVisibility(View.GONE);
- holder.fileExtensionLabel.setVisibility(View.GONE);
- holder.fileNameLabel.setVisibility(View.GONE);
+ //holder.fileExtensionLabel.setVisibility(View.GONE);
+ holder.openFileButton.setVisibility(View.GONE);
holder.fileTransferLayout.setVisibility(View.GONE);
holder.fileTransferProgressBar.setProgress(0);
holder.fileTransferAction.setEnabled(true);
@@ -1553,8 +1549,8 @@ public class ChatFragment extends Fragment implements OnClickListener, ChatMessa
if(message.getAppdata() != null && holder.fileTransferLayout.getVisibility() != View.VISIBLE){
if(LinphoneUtils.isExtensionImage(message.getAppdata())){
- holder.fileExtensionLabel.setVisibility(View.GONE);
- holder.fileNameLabel.setVisibility(View.GONE);
+ //holder.fileExtensionLabel.setVisibility(View.GONE);
+ holder.openFileButton.setVisibility(View.GONE);
}else {
String extension = (LinphoneUtils.getExtensionFromFileName(message.getAppdata()));
if(extension != null)
@@ -1565,10 +1561,10 @@ public class ChatFragment extends Fragment implements OnClickListener, ChatMessa
if (extension.length() > 4)
extension = extension.substring(0, 3);
- holder.fileExtensionLabel.setText(extension);
+ /*holder.fileExtensionLabel.setText(extension);
holder.fileExtensionLabel.setVisibility(View.VISIBLE);
- holder.fileNameLabel.setText(LinphoneUtils.getNameFromFilePath(message.getAppdata()));
- holder.fileNameLabel.setVisibility(View.VISIBLE);
+ holder.openFileButton.setText(LinphoneUtils.getNameFromFilePath(message.getAppdata()));
+ holder.openFileButton.setVisibility(View.VISIBLE);
holder.fileExtensionLabel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@@ -1600,7 +1596,7 @@ public class ChatFragment extends Fragment implements OnClickListener, ChatMessa
if (type != null) {
intent.setDataAndType(contentUri, type);
} else {
- intent.setDataAndType(contentUri, "*/*");
+ intent.setDataAndType(contentUri, "");
}
intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(intent);
@@ -1608,7 +1604,7 @@ public class ChatFragment extends Fragment implements OnClickListener, ChatMessa
LinphoneActivity.instance().displayCustomToast(getString(R.string.error_opening_file), Toast.LENGTH_LONG);
}
}
- });
+ });*/
}
}