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"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/file_extension"
|
||||
android:id="@+id/open_file"
|
||||
android:gravity="center"
|
||||
android:textAlignment="center"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:background="@color/colorA"
|
||||
android:padding="5dp"
|
||||
android:maxLines="1"
|
||||
style="@style/font25"
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="FILE"/>
|
||||
android:text="@string/open"/>
|
||||
|
||||
</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
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
<string name="retry">Retry</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="accept">Accept</string>
|
||||
<string name="open">Open</string>
|
||||
<string name="continue_text">Continue</string>
|
||||
<string name="about">About</string>
|
||||
<string name="deny">Deny</string>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
});*/
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue