Improved incoming file transfer layout when file isn't an image
This commit is contained in:
parent
aa0b9bd186
commit
ff5088eaa6
5 changed files with 76 additions and 67 deletions
|
@ -141,30 +141,21 @@
|
||||||
android:layout_marginBottom="12dp"/>
|
android:layout_marginBottom="12dp"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/file_extension"
|
android:id="@+id/open_file"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:textAlignment="center"
|
android:textAlignment="center"
|
||||||
android:layout_centerHorizontal="true"
|
android:layout_centerHorizontal="true"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
|
android:background="@color/colorA"
|
||||||
|
android:padding="5dp"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
style="@style/font25"
|
style="@style/font25"
|
||||||
android:layout_width="150dp"
|
android:layout_width="150dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="FILE"/>
|
android:text="@string/open"/>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/file_name"
|
|
||||||
android:layout_below="@+id/relativeLayoutCentered"
|
|
||||||
android:gravity="center_horizontal"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:maxLines="1"
|
|
||||||
style="@style/font24"
|
|
||||||
android:layout_width="150dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text=""/>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
<string name="retry">Retry</string>
|
<string name="retry">Retry</string>
|
||||||
<string name="cancel">Cancel</string>
|
<string name="cancel">Cancel</string>
|
||||||
<string name="accept">Accept</string>
|
<string name="accept">Accept</string>
|
||||||
|
<string name="open">Open</string>
|
||||||
<string name="continue_text">Continue</string>
|
<string name="continue_text">Continue</string>
|
||||||
<string name="about">About</string>
|
<string name="about">About</string>
|
||||||
<string name="deny">Deny</string>
|
<string name="deny">Deny</string>
|
||||||
|
|
|
@ -55,8 +55,7 @@ public class ChatBubbleViewHolder {
|
||||||
public RelativeLayout fileTransferLayout;
|
public RelativeLayout fileTransferLayout;
|
||||||
public ProgressBar fileTransferProgressBar;
|
public ProgressBar fileTransferProgressBar;
|
||||||
public Button fileTransferAction;
|
public Button fileTransferAction;
|
||||||
public TextView fileExtensionLabel;
|
public TextView openFileButton;
|
||||||
public TextView fileNameLabel;
|
|
||||||
|
|
||||||
public CheckBox delete;
|
public CheckBox delete;
|
||||||
|
|
||||||
|
@ -83,8 +82,7 @@ public class ChatBubbleViewHolder {
|
||||||
fileTransferLayout = view.findViewById(R.id.file_transfer_layout);
|
fileTransferLayout = view.findViewById(R.id.file_transfer_layout);
|
||||||
fileTransferProgressBar = view.findViewById(R.id.progress_bar);
|
fileTransferProgressBar = view.findViewById(R.id.progress_bar);
|
||||||
fileTransferAction = view.findViewById(R.id.file_transfer_action);
|
fileTransferAction = view.findViewById(R.id.file_transfer_action);
|
||||||
fileExtensionLabel = view.findViewById(R.id.file_extension);
|
openFileButton = view.findViewById(R.id.open_file);
|
||||||
fileNameLabel = view.findViewById(R.id.file_name);
|
|
||||||
|
|
||||||
delete = view.findViewById(R.id.delete_message);
|
delete = view.findViewById(R.id.delete_message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,11 +136,10 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene
|
||||||
holder.delete.setVisibility(View.GONE);
|
holder.delete.setVisibility(View.GONE);
|
||||||
holder.messageText.setVisibility(View.GONE);
|
holder.messageText.setVisibility(View.GONE);
|
||||||
holder.messageImage.setVisibility(View.GONE);
|
holder.messageImage.setVisibility(View.GONE);
|
||||||
holder.fileExtensionLabel.setVisibility(View.GONE);
|
|
||||||
holder.fileNameLabel.setVisibility(View.GONE);
|
|
||||||
holder.fileTransferLayout.setVisibility(View.GONE);
|
holder.fileTransferLayout.setVisibility(View.GONE);
|
||||||
holder.fileTransferProgressBar.setProgress(0);
|
holder.fileTransferProgressBar.setProgress(0);
|
||||||
holder.fileTransferAction.setEnabled(true);
|
holder.fileTransferAction.setEnabled(true);
|
||||||
|
holder.openFileButton.setVisibility(View.GONE);
|
||||||
holder.messageStatus.setVisibility(View.INVISIBLE);
|
holder.messageStatus.setVisibility(View.INVISIBLE);
|
||||||
holder.messageSendingInProgress.setVisibility(View.GONE);
|
holder.messageSendingInProgress.setVisibility(View.GONE);
|
||||||
holder.imdmLayout.setVisibility(View.INVISIBLE);
|
holder.imdmLayout.setVisibility(View.INVISIBLE);
|
||||||
|
@ -252,11 +251,16 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene
|
||||||
String appData = message.getAppdata();
|
String appData = message.getAppdata();
|
||||||
if (externalBodyUrl != null) { // Incoming file transfer
|
if (externalBodyUrl != null) { // Incoming file transfer
|
||||||
if (appData != null) { // Download already done, just display the result
|
if (appData != null) { // Download already done, just display the result
|
||||||
holder.messageImage.setVisibility(View.VISIBLE);
|
holder.messageText.setVisibility(View.VISIBLE);
|
||||||
loadBitmap(appData, holder.messageImage);
|
holder.messageText.setText(fileTransferContent.getName());
|
||||||
holder.messageImage.setTag(appData);
|
|
||||||
|
displayDownloadedFile(message, holder);
|
||||||
} else { // Attachment not yet downloaded
|
} else { // Attachment not yet downloaded
|
||||||
|
holder.messageText.setVisibility(View.VISIBLE);
|
||||||
|
holder.messageText.setText(fileTransferContent.getName());
|
||||||
|
|
||||||
holder.fileTransferLayout.setVisibility(View.VISIBLE);
|
holder.fileTransferLayout.setVisibility(View.VISIBLE);
|
||||||
|
holder.fileTransferProgressBar.setVisibility(View.GONE);
|
||||||
holder.fileTransferAction.setText(mContext.getString(R.string.accept));
|
holder.fileTransferAction.setText(mContext.getString(R.string.accept));
|
||||||
holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
|
holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -278,9 +282,7 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene
|
||||||
}
|
}
|
||||||
} else if (fileTransferContent != null) { // Outgoing file transfer
|
} else if (fileTransferContent != null) { // Outgoing file transfer
|
||||||
if (appData != null) {
|
if (appData != null) {
|
||||||
holder.messageImage.setVisibility(View.VISIBLE);
|
displayDownloadedFile(message, holder);
|
||||||
loadBitmap(appData, holder.messageImage);
|
|
||||||
holder.messageImage.setTag(appData);
|
|
||||||
|
|
||||||
if (message.getState() == ChatMessage.State.InProgress) {
|
if (message.getState() == ChatMessage.State.InProgress) {
|
||||||
holder.messageSendingInProgress.setVisibility(View.GONE);
|
holder.messageSendingInProgress.setVisibility(View.GONE);
|
||||||
|
@ -476,32 +478,7 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene
|
||||||
imageView.setOnClickListener(new View.OnClickListener() {
|
imageView.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
openFile((String)v.getTag());
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -551,6 +528,52 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene
|
||||||
return null;
|
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
|
@Override
|
||||||
public void onFileTransferRecv(ChatMessage message, Content content, Buffer buffer) {
|
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 (holder == null) return;
|
||||||
|
|
||||||
if (offset == total) {
|
if (offset == total) {
|
||||||
|
holder.fileTransferProgressBar.setVisibility(View.GONE);
|
||||||
holder.fileTransferLayout.setVisibility(View.GONE);
|
holder.fileTransferLayout.setVisibility(View.GONE);
|
||||||
holder.messageImage.setVisibility(View.VISIBLE);
|
displayDownloadedFile(message, holder);
|
||||||
loadBitmap(message.getAppdata(), holder.messageImage);
|
|
||||||
holder.messageImage.setTag(message.getAppdata());
|
|
||||||
} else {
|
} else {
|
||||||
|
holder.fileTransferProgressBar.setVisibility(View.VISIBLE);
|
||||||
holder.fileTransferProgressBar.setProgress(offset * 100 / total);
|
holder.fileTransferProgressBar.setProgress(offset * 100 / total);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,6 @@ import android.support.v4.content.FileProvider;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
import android.text.method.LinkMovementMethod;
|
|
||||||
import android.view.ContextMenu;
|
import android.view.ContextMenu;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
@ -104,13 +103,10 @@ import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION;
|
import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION;
|
||||||
import static org.linphone.fragments.FragmentsAvailable.CHAT;
|
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.delete.setVisibility(View.GONE);
|
||||||
holder.messageText.setVisibility(View.GONE);
|
holder.messageText.setVisibility(View.GONE);
|
||||||
holder.messageImage.setVisibility(View.GONE);
|
holder.messageImage.setVisibility(View.GONE);
|
||||||
holder.fileExtensionLabel.setVisibility(View.GONE);
|
//holder.fileExtensionLabel.setVisibility(View.GONE);
|
||||||
holder.fileNameLabel.setVisibility(View.GONE);
|
holder.openFileButton.setVisibility(View.GONE);
|
||||||
holder.fileTransferLayout.setVisibility(View.GONE);
|
holder.fileTransferLayout.setVisibility(View.GONE);
|
||||||
holder.fileTransferProgressBar.setProgress(0);
|
holder.fileTransferProgressBar.setProgress(0);
|
||||||
holder.fileTransferAction.setEnabled(true);
|
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(message.getAppdata() != null && holder.fileTransferLayout.getVisibility() != View.VISIBLE){
|
||||||
if(LinphoneUtils.isExtensionImage(message.getAppdata())){
|
if(LinphoneUtils.isExtensionImage(message.getAppdata())){
|
||||||
holder.fileExtensionLabel.setVisibility(View.GONE);
|
//holder.fileExtensionLabel.setVisibility(View.GONE);
|
||||||
holder.fileNameLabel.setVisibility(View.GONE);
|
holder.openFileButton.setVisibility(View.GONE);
|
||||||
}else {
|
}else {
|
||||||
String extension = (LinphoneUtils.getExtensionFromFileName(message.getAppdata()));
|
String extension = (LinphoneUtils.getExtensionFromFileName(message.getAppdata()));
|
||||||
if(extension != null)
|
if(extension != null)
|
||||||
|
@ -1565,10 +1561,10 @@ public class ChatFragment extends Fragment implements OnClickListener, ChatMessa
|
||||||
if (extension.length() > 4)
|
if (extension.length() > 4)
|
||||||
extension = extension.substring(0, 3);
|
extension = extension.substring(0, 3);
|
||||||
|
|
||||||
holder.fileExtensionLabel.setText(extension);
|
/*holder.fileExtensionLabel.setText(extension);
|
||||||
holder.fileExtensionLabel.setVisibility(View.VISIBLE);
|
holder.fileExtensionLabel.setVisibility(View.VISIBLE);
|
||||||
holder.fileNameLabel.setText(LinphoneUtils.getNameFromFilePath(message.getAppdata()));
|
holder.openFileButton.setText(LinphoneUtils.getNameFromFilePath(message.getAppdata()));
|
||||||
holder.fileNameLabel.setVisibility(View.VISIBLE);
|
holder.openFileButton.setVisibility(View.VISIBLE);
|
||||||
holder.fileExtensionLabel.setOnClickListener(new OnClickListener() {
|
holder.fileExtensionLabel.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
@ -1600,7 +1596,7 @@ public class ChatFragment extends Fragment implements OnClickListener, ChatMessa
|
||||||
if (type != null) {
|
if (type != null) {
|
||||||
intent.setDataAndType(contentUri, type);
|
intent.setDataAndType(contentUri, type);
|
||||||
} else {
|
} else {
|
||||||
intent.setDataAndType(contentUri, "*/*");
|
intent.setDataAndType(contentUri, "");
|
||||||
}
|
}
|
||||||
intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
|
intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
|
||||||
context.startActivity(intent);
|
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);
|
LinphoneActivity.instance().displayCustomToast(getString(R.string.error_opening_file), Toast.LENGTH_LONG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue