Fix the reload of host image sent when we edit chat list

This commit is contained in:
Erwan Croze 2016-11-24 14:12:16 +01:00
parent a82f9e9218
commit 3206a55ddf

View file

@ -133,7 +133,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
private TextWatcher textWatcher; private TextWatcher textWatcher;
private ViewTreeObserver.OnGlobalLayoutListener keyboardListener; private ViewTreeObserver.OnGlobalLayoutListener keyboardListener;
private ChatMessageAdapter adapter; private ChatMessageAdapter adapter;
private LinphoneCoreListenerBase mListener; private LinphoneCoreListenerBase mListener;
private ByteArrayInputStream mUploadingImageStream; private ByteArrayInputStream mUploadingImageStream;
private boolean newChatConversation = false; private boolean newChatConversation = false;
@ -158,7 +158,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
//Initialize UI //Initialize UI
defaultBitmap = BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.chat_picture_over); defaultBitmap = BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.chat_picture_over);
contactName = (TextView) view.findViewById(R.id.contact_name); contactName = (TextView) view.findViewById(R.id.contact_name);
messagesList = (ListView) view.findViewById(R.id.chat_message_list); messagesList = (ListView) view.findViewById(R.id.chat_message_list);
searchContactField = (EditText) view.findViewById(R.id.search_contact_field); searchContactField = (EditText) view.findViewById(R.id.search_contact_field);
@ -230,7 +230,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
cr.markAsRead(); cr.markAsRead();
LinphoneActivity.instance().updateMissedChatCount(); LinphoneActivity.instance().updateMissedChatCount();
adapter.addMessage(cr.getHistory(1)[0]); adapter.addMessage(cr.getHistory(1)[0]);
String externalBodyUrl = message.getExternalBodyUrl(); String externalBodyUrl = message.getExternalBodyUrl();
LinphoneContent fileTransferContent = message.getFileTransferInformation(); LinphoneContent fileTransferContent = message.getFileTransferInformation();
if (externalBodyUrl != null || fileTransferContent != null) { if (externalBodyUrl != null || fileTransferContent != null) {
@ -238,7 +238,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
} }
} }
} }
@Override @Override
public void isComposingReceived(LinphoneCore lc, LinphoneChatRoom room) { public void isComposingReceived(LinphoneCore lc, LinphoneChatRoom room) {
if (chatRoom != null && room != null && chatRoom.getPeerAddress().asStringUriOnly().equals(room.getPeerAddress().asStringUriOnly())) { if (chatRoom != null && room != null && chatRoom.getPeerAddress().asStringUriOnly().equals(room.getPeerAddress().asStringUriOnly())) {
@ -367,7 +367,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
} }
} }
} }
private void redrawMessageList() { private void redrawMessageList() {
if (adapter != null) { if (adapter != null) {
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
@ -475,10 +475,10 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
//Hide keybord //Hide keybord
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(message.getWindowToken(), 0); imm.hideSoftInputFromWindow(message.getWindowToken(), 0);
super.onPause(); super.onPause();
} }
@Override @Override
public void onDestroy() { public void onDestroy() {
if (adapter != null) { if (adapter != null) {
@ -495,7 +495,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
message.addTextChangedListener(textWatcher); message.addTextChangedListener(textWatcher);
addVirtualKeyboardVisiblityListener(); addVirtualKeyboardVisiblityListener();
@ -568,7 +568,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
@Override @Override
public void onClick(View v) { public void onClick(View v) {
int id = v.getId(); int id = v.getId();
if (id == R.id.back_to_call) { if (id == R.id.back_to_call) {
LinphoneActivity.instance().resetClassicMenuLayoutAndGoBackToCallIfStillRunning(); LinphoneActivity.instance().resetClassicMenuLayoutAndGoBackToCallIfStillRunning();
return; return;
@ -739,13 +739,13 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
break; break;
} }
} }
String txt = null; String txt = null;
if (message != null) { if (message != null) {
txt = message.getText(); txt = message.getText();
} }
if (txt != null) { if (txt != null) {
ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = android.content.ClipData.newPlainText("Message", txt); ClipData clip = android.content.ClipData.newPlainText("Message", txt);
clipboard.setPrimaryClip(clip); clipboard.setPrimaryClip(clip);
LinphoneActivity.instance().displayCustomToast(getString(R.string.text_copied_to_clipboard), Toast.LENGTH_SHORT); LinphoneActivity.instance().displayCustomToast(getString(R.string.text_copied_to_clipboard), Toast.LENGTH_SHORT);
@ -760,14 +760,14 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
imageToUploadUri = Uri.fromFile(file); imageToUploadUri = Uri.fromFile(file);
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageToUploadUri); captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageToUploadUri);
cameraIntents.add(captureIntent); cameraIntents.add(captureIntent);
Intent galleryIntent = new Intent(); Intent galleryIntent = new Intent();
galleryIntent.setType("image/*"); galleryIntent.setType("image/*");
galleryIntent.setAction(Intent.ACTION_PICK); galleryIntent.setAction(Intent.ACTION_PICK);
Intent chooserIntent = Intent.createChooser(galleryIntent, getString(R.string.image_picker_title)); Intent chooserIntent = Intent.createChooser(galleryIntent, getString(R.string.image_picker_title));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{})); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{}));
startActivityForResult(chooserIntent, ADD_PHOTO); startActivityForResult(chooserIntent, ADD_PHOTO);
} }
@ -865,13 +865,13 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ADD_PHOTO && resultCode == Activity.RESULT_OK) { if (requestCode == ADD_PHOTO && resultCode == Activity.RESULT_OK) {
String fileToUploadPath = null; String fileToUploadPath = null;
if (data != null && data.getData() != null) { if (data != null && data.getData() != null) {
fileToUploadPath = getRealPathFromURI(data.getData()); fileToUploadPath = getRealPathFromURI(data.getData());
} else if (imageToUploadUri != null) { } else if (imageToUploadUri != null) {
fileToUploadPath = imageToUploadUri.getPath(); fileToUploadPath = imageToUploadUri.getPath();
} }
if (fileToUploadPath != null) { if (fileToUploadPath != null) {
//showPopupMenuAskingImageSize(fileToUploadPath); //showPopupMenuAskingImageSize(fileToUploadPath);
sendImageMessage(fileToUploadPath,0); sendImageMessage(fileToUploadPath,0);
@ -947,7 +947,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
for (ContactAddress c : searchAdapter.contacts) { for (ContactAddress c : searchAdapter.contacts) {
String address = c.address; String address = c.address;
if (address.startsWith("sip:")) address = address.substring(4); if (address.startsWith("sip:")) address = address.substring(4);
if (c.contact.getFullName().toLowerCase(Locale.getDefault()).startsWith(search.toLowerCase(Locale.getDefault())) if (c.contact.getFullName().toLowerCase(Locale.getDefault()).startsWith(search.toLowerCase(Locale.getDefault()))
|| address.toLowerCase(Locale.getDefault()).startsWith(search.toLowerCase(Locale.getDefault()))) { || address.toLowerCase(Locale.getDefault()).startsWith(search.toLowerCase(Locale.getDefault()))) {
result.add(c); result.add(c);
} }
@ -974,7 +974,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
public ImageView messageStatus; public ImageView messageStatus;
public ProgressBar messageSendingInProgress; public ProgressBar messageSendingInProgress;
public ImageView contactPictureMask; public ImageView contactPictureMask;
public ViewHolder(View view) { public ViewHolder(View view) {
id = view.getId(); id = view.getId();
bubbleLayout = (RelativeLayout) view.findViewById(R.id.bubble); bubbleLayout = (RelativeLayout) view.findViewById(R.id.bubble);
@ -994,17 +994,17 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
@Override @Override
public void onLinphoneChatMessageStateChanged(LinphoneChatMessage msg, State state) { public void onLinphoneChatMessageStateChanged(LinphoneChatMessage msg, State state) {
} }
@Override @Override
public void onLinphoneChatMessageFileTransferReceived(LinphoneChatMessage msg, LinphoneContent content, LinphoneBuffer buffer) { public void onLinphoneChatMessageFileTransferReceived(LinphoneChatMessage msg, LinphoneContent content, LinphoneBuffer buffer) {
} }
@Override @Override
public void onLinphoneChatMessageFileTransferSent(LinphoneChatMessage msg, LinphoneContent content, int offset, int size, LinphoneBuffer bufferToFill) { public void onLinphoneChatMessageFileTransferSent(LinphoneChatMessage msg, LinphoneContent content, int offset, int size, LinphoneBuffer bufferToFill) {
} }
@Override @Override
@ -1012,7 +1012,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
if (msg.getStorageId() == id) fileTransferProgressBar.setProgress(offset * 100 / total); if (msg.getStorageId() == id) fileTransferProgressBar.setProgress(offset * 100 / total);
} }
} }
ArrayList<LinphoneChatMessage> history; ArrayList<LinphoneChatMessage> history;
Context context; Context context;
@ -1021,7 +1021,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
history = new ArrayList<LinphoneChatMessage>(); history = new ArrayList<LinphoneChatMessage>();
refreshHistory(); refreshHistory();
} }
public void destroy() { public void destroy() {
if (history != null) { if (history != null) {
history.clear(); history.clear();
@ -1072,9 +1072,13 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
holder = new ViewHolder(view); holder = new ViewHolder(view);
view.setTag(holder); view.setTag(holder);
} }
if (holder.id == message.getStorageId()) { if (holder.id == message.getStorageId()) {
if (holder.messageImage.getTag() != null && holder.messageImage.getTag().equals(message.getAppData())) { // Horrible workaround to not reload image on edit chat list
if (holder.messageImage.getTag() != null
&& (holder.messageImage.getTag().equals(message.getAppData())
|| ((String) holder.messageImage.getTag()).substring(7).equals(message.getAppData()))
){
sameMessage = true; sameMessage = true;
} }
} else { } else {
@ -1086,7 +1090,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
LinphoneChatMessage.State status = message.getStatus(); LinphoneChatMessage.State status = message.getStatus();
String externalBodyUrl = message.getExternalBodyUrl(); String externalBodyUrl = message.getExternalBodyUrl();
LinphoneContent fileTransferContent = message.getFileTransferInformation(); LinphoneContent fileTransferContent = message.getFileTransferInformation();
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);
@ -1095,7 +1099,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
holder.fileTransferAction.setEnabled(true); holder.fileTransferAction.setEnabled(true);
holder.messageStatus.setVisibility(View.INVISIBLE); holder.messageStatus.setVisibility(View.INVISIBLE);
holder.messageSendingInProgress.setVisibility(View.GONE); holder.messageSendingInProgress.setVisibility(View.GONE);
String displayName = message.getFrom().getDisplayName(); String displayName = message.getFrom().getDisplayName();
if (displayName == null) { if (displayName == null) {
displayName = message.getFrom().getUserName(); displayName = message.getFrom().getUserName();
@ -1122,22 +1126,22 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
holder.contactPicture.setImageResource(R.drawable.avatar); holder.contactPicture.setImageResource(R.drawable.avatar);
} }
holder.contactName.setText(timestampToHumanDate(context, message.getTime()) + " - " + displayName); holder.contactName.setText(timestampToHumanDate(context, message.getTime()) + " - " + displayName);
if (status == LinphoneChatMessage.State.NotDelivered) { if (status == LinphoneChatMessage.State.NotDelivered) {
holder.messageStatus.setVisibility(View.VISIBLE); holder.messageStatus.setVisibility(View.VISIBLE);
holder.messageStatus.setImageResource(R.drawable.chat_message_not_delivered); holder.messageStatus.setImageResource(R.drawable.chat_message_not_delivered);
} else if (status == LinphoneChatMessage.State.InProgress) { } else if (status == LinphoneChatMessage.State.InProgress) {
holder.messageSendingInProgress.setVisibility(View.VISIBLE); holder.messageSendingInProgress.setVisibility(View.VISIBLE);
} }
if (externalBodyUrl != null || fileTransferContent != null) { if (externalBodyUrl != null || fileTransferContent != null) {
String appData = message.getAppData(); String appData = message.getAppData();
if (message.isOutgoing() && appData != null) { if (message.isOutgoing() && appData != null) {
holder.messageImage.setVisibility(View.VISIBLE); holder.messageImage.setVisibility(View.VISIBLE);
if (!sameMessage) { if (!sameMessage) {
loadBitmap(appData, holder.messageImage); loadBitmap(message.getAppData(), holder.messageImage);
holder.messageImage.setTag(appData); holder.messageImage.setTag(message.getAppData());
} }
if (LinphoneManager.getInstance().getMessageUploadPending() != null && LinphoneManager.getInstance().getMessageUploadPending().getStorageId() == message.getStorageId()) { if (LinphoneManager.getInstance().getMessageUploadPending() != null && LinphoneManager.getInstance().getMessageUploadPending().getStorageId() == message.getStorageId()) {
@ -1162,7 +1166,10 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
LinphoneManager.removeListener(holder); LinphoneManager.removeListener(holder);
holder.fileTransferLayout.setVisibility(View.GONE); holder.fileTransferLayout.setVisibility(View.GONE);
holder.messageImage.setVisibility(View.VISIBLE); holder.messageImage.setVisibility(View.VISIBLE);
if (!sameMessage) loadBitmap(appData, holder.messageImage); if (!sameMessage) {
loadBitmap(appData, holder.messageImage);
holder.messageImage.setTag(message.getAppData());
}
} }
} }
} }
@ -1176,7 +1183,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
holder.messageText.setVisibility(View.VISIBLE); holder.messageText.setVisibility(View.VISIBLE);
} }
} }
if (message.isOutgoing()) { if (message.isOutgoing()) {
holder.fileTransferAction.setText(getString(R.string.cancel)); holder.fileTransferAction.setText(getString(R.string.cancel));
holder.fileTransferAction.setOnClickListener(new View.OnClickListener() { holder.fileTransferAction.setOnClickListener(new View.OnClickListener() {
@ -1212,7 +1219,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
} }
}); });
} }
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
if (message.isOutgoing()) { if (message.isOutgoing()) {
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
@ -1237,7 +1244,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
holder.contactPictureMask.setImageResource(R.drawable.avatar_chat_mask); holder.contactPictureMask.setImageResource(R.drawable.avatar_chat_mask);
} }
holder.bubbleLayout.setLayoutParams(layoutParams); holder.bubbleLayout.setLayoutParams(layoutParams);
if (isEditMode) { if (isEditMode) {
holder.delete.setVisibility(View.VISIBLE); holder.delete.setVisibility(View.VISIBLE);
holder.delete.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { holder.delete.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@ -1268,7 +1275,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
holder.delete.setChecked(false); holder.delete.setChecked(false);
} }
} }
return view; return view;
} }
@ -1446,13 +1453,13 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
private class ViewHolder { private class ViewHolder {
public TextView name; public TextView name;
public TextView address; public TextView address;
public ViewHolder(View view) { public ViewHolder(View view) {
name = (TextView) view.findViewById(R.id.contact_name); name = (TextView) view.findViewById(R.id.contact_name);
address = (TextView) view.findViewById(R.id.contact_address); address = (TextView) view.findViewById(R.id.contact_address);
} }
} }
private List<ContactAddress> contacts; private List<ContactAddress> contacts;
private LayoutInflater mInflater; private LayoutInflater mInflater;
@ -1504,7 +1511,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
View view = null; View view = null;
ContactAddress contact; ContactAddress contact;
ViewHolder holder = null; ViewHolder holder = null;
do { do {
contact = getItem(position); contact = getItem(position);
} while (contact == null); } while (contact == null);