From 506c56eee0e691f827b9b2917c494231902f9562 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 6 Jul 2012 15:52:08 +0200 Subject: [PATCH] Chat scroll to last message + specif date display for messages received/sent today --- res/values/custom.xml | 2 ++ src/org/linphone/ChatFragment.java | 12 +++++++++--- src/org/linphone/ui/BubbleChat.java | 23 ++++++++++++++++++++++- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/res/values/custom.xml b/res/values/custom.xml index 547d150aa..a5c050b2e 100644 --- a/res/values/custom.xml +++ b/res/values/custom.xml @@ -2,6 +2,8 @@ HH:mm:ss d MMM + few seconds ago + HH:mm:ss Linphone 2 Linphone diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index 463b92801..31a5a162b 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -83,6 +83,12 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneO List messagesList = LinphoneActivity.instance().getChatMessages(sipUri); messagesScrollView = (ScrollView) view.findViewById(R.id.chatScrollView); + messagesScrollView.post(new Runnable() { + @Override + public void run() { + scrollToEnd(); + } + }); previousMessageID = -1; for (ChatMessage msg : messagesList) { @@ -92,7 +98,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneO LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) chatRoom = lc.createChatRoom(sipUri); - + return view; } @@ -129,7 +135,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneO LinphoneActivity.instance().onMessageSent(sipUri, messageToSend); } - displayMessage(previousMessageID + 1, messageToSend, "few seconds ago", false, messagesLayout); + displayMessage(previousMessageID + 1, messageToSend, getString(R.string.now_date_format), false, messagesLayout); scrollToEnd(); } } @@ -145,7 +151,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneO @Override public void onMessageReceived(LinphoneAddress from, String message) { - displayMessage(previousMessageID + 1, message, "few seconds ago", true, messagesLayout); + displayMessage(previousMessageID + 1, message, getString(R.string.now_date_format), true, messagesLayout); scrollToEnd(); } } diff --git a/src/org/linphone/ui/BubbleChat.java b/src/org/linphone/ui/BubbleChat.java index e7259a028..89dd2996b 100644 --- a/src/org/linphone/ui/BubbleChat.java +++ b/src/org/linphone/ui/BubbleChat.java @@ -83,15 +83,36 @@ public class BubbleChat { private String timestampToHumanDate(Context context, String timestamp) { try { - SimpleDateFormat dateFormat = new SimpleDateFormat(context.getResources().getString(R.string.messages_date_format)); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(Long.parseLong(timestamp)); + + SimpleDateFormat dateFormat; + if (isToday(cal)) { + dateFormat = new SimpleDateFormat(context.getResources().getString(R.string.today_date_format)); + } else { + dateFormat = new SimpleDateFormat(context.getResources().getString(R.string.messages_date_format)); + } + return dateFormat.format(cal.getTime()); } catch (NumberFormatException nfe) { return timestamp; } } + private boolean isToday(Calendar cal) { + return isSameDay(cal, Calendar.getInstance()); + } + + private boolean isSameDay(Calendar cal1, Calendar cal2) { + if (cal1 == null || cal2 == null) { + return false; + } + + return (cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA) && + cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && + cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR)); + } + private int pixelsToDpi(Context context, int pixels) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) pixels, context.getResources().getDisplayMetrics()); }