From b6771b24dc5c4fe7f29bc52226ff478543aa2a56 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 18 May 2015 11:02:44 +0200 Subject: [PATCH] Improved scrollToEnd and thumbnail bitmap for chat view --- res/layout/chat.xml | 1 + src/org/linphone/ChatFragment.java | 9 +-------- src/org/linphone/ui/BubbleChat.java | 7 ++++--- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/res/layout/chat.xml b/res/layout/chat.xml index a3a38ce09..33cf7b76b 100644 --- a/res/layout/chat.xml +++ b/res/layout/chat.xml @@ -187,6 +187,7 @@ android:layout_height="match_parent" android:divider="@android:color/transparent" android:stackFromBottom="true" + android:transcriptMode="alwaysScroll" android:cacheColorHint="@color/transparent" android:dividerHeight="1dp" android:layout_above="@id/remoteComposing" diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index 08e7e9395..1cc46c137 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -210,7 +210,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC LinphoneAddress from = cr.getPeerAddress(); if (from.asStringUriOnly().equals(sipUri)) { invalidate(); - scrollToEnd(); } } @@ -507,9 +506,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } invalidate(); - Log.i("Sent message current status: " + message.getStatus()); - scrollToEnd(); } else if (!isNetworkReachable && LinphoneActivity.isInstanciated()) { LinphoneActivity.instance().displayCustomToast(getString(R.string.error_network_unreachable), Toast.LENGTH_LONG); } @@ -618,6 +615,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC private void invalidate() { adapter.refreshHistory(); adapter.notifyDataSetChanged(); + chatRoom.markAsRead(); } private void resendMessage(int id) { @@ -635,11 +633,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } } - private void scrollToEnd() { - messagesList.smoothScrollToPosition(messagesList.getCount()); - chatRoom.markAsRead(); - } - private void copyTextMessageToClipboard(int id) { String msg = LinphoneActivity.instance().getChatStorage().getTextMessageForId(chatRoom, id); if (msg != null) { diff --git a/src/org/linphone/ui/BubbleChat.java b/src/org/linphone/ui/BubbleChat.java index 7bd8513c6..7ff74ef65 100644 --- a/src/org/linphone/ui/BubbleChat.java +++ b/src/org/linphone/ui/BubbleChat.java @@ -39,6 +39,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.media.ThumbnailUtils; import android.net.Uri; import android.os.AsyncTask; import android.provider.MediaStore; @@ -343,7 +344,7 @@ public class BubbleChat { if (path.startsWith("content")) { try { - bm = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), Uri.parse(path)); + bm = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), Uri.parse(path)); } catch (FileNotFoundException e) { Log.e(e); } catch (IOException e) { @@ -356,9 +357,9 @@ public class BubbleChat { if (bm != null) { if (bm.getWidth() >= bm.getHeight() && bm.getWidth() > SIZE_MAX) { - bm = Bitmap.createScaledBitmap(bm, SIZE_MAX, (SIZE_MAX * bm.getHeight()) / bm.getWidth(), false); + bm = ThumbnailUtils.extractThumbnail(bm, SIZE_MAX, (SIZE_MAX * bm.getHeight()) / bm.getWidth()); } else if (bm.getHeight() >= bm.getWidth() && bm.getHeight() > SIZE_MAX) { - bm = Bitmap.createScaledBitmap(bm, (SIZE_MAX * bm.getWidth()) / bm.getHeight(), SIZE_MAX, false); + bm = ThumbnailUtils.extractThumbnail(bm, (SIZE_MAX * bm.getWidth()) / bm.getHeight(), SIZE_MAX); } } return bm;