diff --git a/res/values-FR/strings.xml b/res/values-FR/strings.xml index 3cfb91d18..905f4678e 100644 --- a/res/values-FR/strings.xml +++ b/res/values-FR/strings.xml @@ -373,6 +373,7 @@ Actif en arrière plan + Afficher Télécharger Téléchargement échoué. Vérifiez votre connexion internet ou reéssayez plus tard. diff --git a/res/values/strings.xml b/res/values/strings.xml index f4783bbf7..ccae74cb9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -421,6 +421,7 @@ Background mode + Show Download Download failed. Please check your internet access or try again later. diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index 13d85795c..5744320b6 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -288,11 +288,11 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC LinphoneChatMessage[] history = chatRoom.getHistory(); for (int i = 0; i < history.length; i++) { LinphoneChatMessage msg = history[i]; + boolean show = i >= history.length - messagesFilterLimit; if (msg.getExternalBodyUrl() != null) { - Bitmap bm = BitmapFactory.decodeFile(msg.getExternalBodyUrl()); - displayImageMessage(msg.getStorageId(), bm, msg.getTime(), !msg.isOutgoing(), msg.getStatus(), messagesLayout, msg.getExternalBodyUrl(), i >= history.length - messagesFilterLimit); + displayImageMessage(msg.getStorageId(), null, msg.getTime(), !msg.isOutgoing(), msg.getStatus(), messagesLayout, msg.getExternalBodyUrl(), show); } else { - displayMessage(msg.getStorageId(), msg.getText(), msg.getTime(), !msg.isOutgoing(), msg.getStatus(), messagesLayout, i >= history.length - messagesFilterLimit); + displayMessage(msg.getStorageId(), msg.getText(), msg.getTime(), !msg.isOutgoing(), msg.getStatus(), messagesLayout, show); } } messagesArePresentButHidden = true; @@ -375,7 +375,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC private void displayMessage(int id, String message, long time, boolean isIncoming, LinphoneChatMessage.State status, RelativeLayout layout, boolean show) { id = checkId(id); - BubbleChat bubble = new BubbleChat(layout.getContext(), id, message, null, time, isIncoming, status, previousMessageID); + BubbleChat bubble = new BubbleChat(layout.getContext(), id, message, null, time, isIncoming, status, null, previousMessageID); if (!isIncoming) { lastSentMessageBubble = bubble; } @@ -395,46 +395,63 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC private void displayImageMessage(int id, Bitmap image, long time, boolean isIncoming, LinphoneChatMessage.State status, RelativeLayout layout, final String url, boolean show) { id = checkId(id); - BubbleChat bubble = new BubbleChat(layout.getContext(), id, null, image, time, isIncoming, status, previousMessageID); + BubbleChat bubble = new BubbleChat(layout.getContext(), id, null, image, time, isIncoming, status, url, previousMessageID); if (!isIncoming) { lastSentMessageBubble = bubble; } final View v = bubble.getView(); final int finalId = id; - bubble.setDownloadImageButtonListener(new OnClickListener() { - @Override - public void onClick(View view) { - new Thread(new Runnable() { - @Override - public void run() { - final Bitmap bm = ChatFragment.downloadImage(url); - if (bm != null) { - if (useLinphoneMessageStorage) { - saveImage(bm, finalId, null); + + if (url.startsWith("http")) { // Download + bubble.setShowOrDownloadText(getString(R.string.download_image)); + bubble.setShowOrDownloadImageButtonListener(new OnClickListener() { + @Override + public void onClick(View view) { + new Thread(new Runnable() { + @Override + public void run() { + final Bitmap bm = ChatFragment.downloadImage(url); + if (bm != null) { + if (useLinphoneMessageStorage) { + saveImage(bm, finalId, null); + } else { + LinphoneActivity.instance().getChatStorage().saveImage(finalId, bm); + } + mHandler.post(new Runnable() { + @Override + public void run() { + ((ImageView)v.findViewById(R.id.image)).setImageBitmap(bm); + v.findViewById(R.id.image).setVisibility(View.VISIBLE); + v.findViewById(R.id.download).setVisibility(View.GONE); + } + }); } else { - LinphoneActivity.instance().getChatStorage().saveImage(finalId, bm); + mHandler.post(new Runnable() { + @Override + public void run() { + LinphoneActivity.instance().displayCustomToast(getString(R.string.download_image_failed), Toast.LENGTH_LONG); + } + }); } - mHandler.post(new Runnable() { - @Override - public void run() { - ((ImageView)v.findViewById(R.id.image)).setImageBitmap(bm); - v.findViewById(R.id.image).setVisibility(View.VISIBLE); - v.findViewById(R.id.download).setVisibility(View.GONE); - } - }); - } else { - mHandler.post(new Runnable() { - @Override - public void run() { - LinphoneActivity.instance().displayCustomToast(getString(R.string.download_image_failed), Toast.LENGTH_LONG); - } - }); } + }).start(); + } + }); + } else { // Show + bubble.setShowOrDownloadText(getString(R.string.show_image)); + bubble.setShowOrDownloadImageButtonListener(new OnClickListener() { + @Override + public void onClick(View view) { + Bitmap bm = BitmapFactory.decodeFile(url); + if (bm != null) { + ((ImageView)v.findViewById(R.id.image)).setImageBitmap(bm); + v.findViewById(R.id.image).setVisibility(View.VISIBLE); + v.findViewById(R.id.download).setVisibility(View.GONE); } - }).start(); - } - }); + } + }); + } if (!show) v.setVisibility(View.GONE); @@ -657,7 +674,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC mHandler.post(new Runnable() { @Override public void run() { - displayImageMessage(id, fbm, message.getTime(), true, null, messagesLayout, fbm == null ? "" : message.getExternalBodyUrl()); + displayImageMessage(id, fbm, message.getTime(), true, null, messagesLayout, message.getExternalBodyUrl()); } }); } diff --git a/src/org/linphone/ui/BubbleChat.java b/src/org/linphone/ui/BubbleChat.java index 9689f67df..14c899001 100644 --- a/src/org/linphone/ui/BubbleChat.java +++ b/src/org/linphone/ui/BubbleChat.java @@ -28,8 +28,10 @@ import org.linphone.core.LinphoneChatMessage; import android.annotation.SuppressLint; import android.content.Context; +import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; +import android.net.Uri; import android.text.Html; import android.text.Spannable; import android.text.SpannableStringBuilder; @@ -87,7 +89,7 @@ public class BubbleChat { private ImageView statusView; private Button download; - public BubbleChat(Context context, int id, String message, Bitmap image, long time, boolean isIncoming, LinphoneChatMessage.State status, int previousID) { + public BubbleChat(final Context context, int id, String message, Bitmap image, long time, boolean isIncoming, LinphoneChatMessage.State status, final String url, int previousID) { view = new RelativeLayout(context); LayoutParams layoutParams = new LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); @@ -148,6 +150,16 @@ public class BubbleChat { } else if (imageView != null) { imageView.setVisibility(View.GONE); } + if (imageView != null) { + imageView.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(Uri.parse("file://" + url), "image/*"); + context.startActivity(intent); + } + }); + } download = (Button) layout.findViewById(R.id.download); if (download != null && image == null && message == null) { @@ -272,9 +284,15 @@ public class BubbleChat { return Html.fromHtml(text); } - public void setDownloadImageButtonListener(OnClickListener onClickListener) { + public void setShowOrDownloadImageButtonListener(OnClickListener onClickListener) { if (download != null) { download.setOnClickListener(onClickListener); } } + + public void setShowOrDownloadText(String buttonName) { + if (download != null) { + download.setText(buttonName); + } + } }