From b673af2ba0b46e7444f536fbc7429f9ef74560fb Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 10 Feb 2014 22:45:59 +0100 Subject: [PATCH] reworked notification a bit --- res/drawable-hdpi/notification.png | Bin 0 -> 932 bytes res/drawable-xhdpi/notification.png | Bin 0 -> 1508 bytes res/drawable-xxhdpi/notification.png | Bin 0 -> 1899 bytes res/drawable/notification.png | Bin 3847 -> 0 bytes src/de/gultsch/chat/entities/Account.java | 2 - .../gultsch/chat/entities/Conversation.java | 21 +++++++++- src/de/gultsch/chat/entities/Message.java | 13 +++++++ .../chat/services/XmppConnectionService.java | 11 +++--- .../gultsch/chat/ui/ConversationActivity.java | 36 +++++++++--------- .../gultsch/chat/ui/ConversationFragment.java | 8 ++++ src/de/gultsch/chat/utils/UIHelper.java | 32 ++++++++++------ 11 files changed, 86 insertions(+), 37 deletions(-) create mode 100644 res/drawable-hdpi/notification.png create mode 100644 res/drawable-xhdpi/notification.png create mode 100644 res/drawable-xxhdpi/notification.png delete mode 100644 res/drawable/notification.png diff --git a/res/drawable-hdpi/notification.png b/res/drawable-hdpi/notification.png new file mode 100644 index 0000000000000000000000000000000000000000..4a978d43a7a2f78d5c9de48f673fad9b76ce14c1 GIT binary patch literal 932 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 literal 0 HcmV?d00001 diff --git a/res/drawable/notification.png b/res/drawable/notification.png deleted file mode 100644 index dcda28dc6efbeca8d58ab658707f650fed394ef9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3847 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 diff --git a/src/de/gultsch/chat/entities/Account.java b/src/de/gultsch/chat/entities/Account.java index bd2e14c6..0f7bfd52 100644 --- a/src/de/gultsch/chat/entities/Account.java +++ b/src/de/gultsch/chat/entities/Account.java @@ -60,10 +60,8 @@ public class Account extends AbstractEntity{ public void setOption(int option, boolean value) { if (value) { this.options = (this.options | 1 << option); - Log.d("xmppService","enabling option "+this.options); } else { this.options = (this.options & 0 << option); - Log.d("xmppService","disabeling option "+this.options); } } diff --git a/src/de/gultsch/chat/entities/Conversation.java b/src/de/gultsch/chat/entities/Conversation.java index 8be35aa4..bddd1356 100644 --- a/src/de/gultsch/chat/entities/Conversation.java +++ b/src/de/gultsch/chat/entities/Conversation.java @@ -6,6 +6,7 @@ import java.util.List; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; +import android.util.Log; public class Conversation extends AbstractEntity { @@ -71,6 +72,20 @@ public class Conversation extends AbstractEntity { return messages; } + public boolean isRead() { + if (this.messages == null) return true; + return this.messages.get(this.messages.size() - 1).isRead(); + } + + public void markRead() { + Log.d("xmppService", "inside mark read method"); + if (this.messages == null) return; + for(int i = this.messages.size() -1; i >= 0; --i) { + if (messages.get(i).isRead()) return; + this.messages.get(i).markRead(); + } + } + public String getLatestMessage() { if ((this.messages == null)||(this.messages.size()==0)) { return null; @@ -121,7 +136,9 @@ public class Conversation extends AbstractEntity { public void setContact(Contact contact) { this.contact = contact; - this.contactUuid = contact.getUuid(); + if (contact!=null) { + this.contactUuid = contact.getUuid(); + } } public void setAccount(Account account) { @@ -151,7 +168,7 @@ public class Conversation extends AbstractEntity { ContentValues values = new ContentValues(); values.put(UUID, uuid); values.put(NAME, name); - values.put(CONTACT, contact.getUuid()); + values.put(CONTACT, contactUuid); values.put(ACCOUNT, accountUuid); values.put(CONTACTJID, contactJid); values.put(CREATED, created); diff --git a/src/de/gultsch/chat/entities/Message.java b/src/de/gultsch/chat/entities/Message.java index 4349e341..d53e93c1 100644 --- a/src/de/gultsch/chat/entities/Message.java +++ b/src/de/gultsch/chat/entities/Message.java @@ -30,6 +30,7 @@ public class Message extends AbstractEntity { protected long timeSent; protected int encryption; protected int status; + protected boolean read = true; protected transient Conversation conversation = null; @@ -115,4 +116,16 @@ public class Message extends AbstractEntity { this.status = status; } + public boolean isRead() { + return this.read; + } + + public void markRead() { + this.read = true; + } + + public void markUnread() { + this.read = false; + } + } diff --git a/src/de/gultsch/chat/services/XmppConnectionService.java b/src/de/gultsch/chat/services/XmppConnectionService.java index 1160754e..5a43f99f 100644 --- a/src/de/gultsch/chat/services/XmppConnectionService.java +++ b/src/de/gultsch/chat/services/XmppConnectionService.java @@ -86,6 +86,7 @@ public class XmppConnectionService extends Service { forwarded = packet.findChild("sent").findChild( "forwarded"); status = Message.STATUS_SEND; + notify = false; } else { return; // massage has no body and is not carbon. just // skip @@ -128,6 +129,9 @@ public class XmppConnectionService extends Service { } Message message = new Message(conversation, counterPart, body, Message.ENCRYPTION_NONE, status); + if(notify) { + message.markUnread(); + } conversation.getMessages().add(message); databaseBackend.createMessage(message); if (convChangedListener != null) { @@ -398,6 +402,7 @@ public class XmppConnectionService extends Service { Account account = accountLookupTable.get(conv.getAccountUuid()); conv.setAccount(account); conv.setContact(findContact(account, conv.getContactJid())); + conv.setMessages(databaseBackend.getMessages(conv, 50)); } } return this.conversations; @@ -406,11 +411,7 @@ public class XmppConnectionService extends Service { public List getAccounts() { return this.accounts; } - - public List getMessages(Conversation conversation) { - return databaseBackend.getMessages(conversation, 100); - } - + public Contact findContact(Account account, String jid) { return databaseBackend.findContact(account, jid); } diff --git a/src/de/gultsch/chat/ui/ConversationActivity.java b/src/de/gultsch/chat/ui/ConversationActivity.java index ed328c46..66cec2e7 100644 --- a/src/de/gultsch/chat/ui/ConversationActivity.java +++ b/src/de/gultsch/chat/ui/ConversationActivity.java @@ -16,6 +16,7 @@ import android.app.FragmentTransaction; import android.app.NotificationManager; import android.content.Context; import android.content.Intent; +import android.graphics.Typeface; import android.support.v4.widget.SlidingPaneLayout; import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener; import android.util.Log; @@ -138,9 +139,20 @@ public class ConversationActivity extends XmppActivity { view = (View) inflater.inflate( R.layout.conversation_list_row, null); } - ((TextView) view.findViewById(R.id.conversation_name)) - .setText(getItem(position).getName()); - ((TextView) view.findViewById(R.id.conversation_lastmsg)).setText(getItem(position).getLatestMessage()); + Conversation conv = getItem(position); + TextView convName = (TextView) view.findViewById(R.id.conversation_name); + convName.setText(conv.getName()); + TextView convLastMsg = (TextView) view.findViewById(R.id.conversation_lastmsg); + convLastMsg.setText(conv.getLatestMessage()); + + if(!conv.isRead()) { + convName.setTypeface(null,Typeface.BOLD); + convLastMsg.setTypeface(null,Typeface.BOLD); + } else { + convName.setTypeface(null,Typeface.NORMAL); + convLastMsg.setTypeface(null,Typeface.NORMAL); + } + ((TextView) view.findViewById(R.id.conversation_lastupdate)) .setText(UIHelper.readableTimeDifference(getItem(position).getLatestMessageDate())); @@ -208,6 +220,10 @@ public class ConversationActivity extends XmppActivity { getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setTitle(getSelectedConversation().getName()); invalidateOptionsMenu(); + if (!getSelectedConversation().isRead()) { + getSelectedConversation().markRead(); + updateConversationList(); + } } } @@ -310,16 +326,6 @@ public class ConversationActivity extends XmppActivity { } } - /*@Override - protected void onPause() { - super.onPause(); - if (xmppConnectionServiceBound) { - xmppConnectionService.removeOnConversationListChangedListener(); - unbindService(mConnection); - xmppConnectionServiceBound = false; - } - }*/ - @Override protected void onStop() { Log.d("gultsch","called on stop in conversation activity"); @@ -346,10 +352,6 @@ public class ConversationActivity extends XmppActivity { conversationList.addAll(xmppConnectionService .getConversations()); - for(Conversation conversation : conversationList) { - conversation.setMessages(xmppConnectionService.getMessages(conversation)); - } - this.updateConversationList(); } diff --git a/src/de/gultsch/chat/ui/ConversationFragment.java b/src/de/gultsch/chat/ui/ConversationFragment.java index e6cb9196..7305bcfb 100644 --- a/src/de/gultsch/chat/ui/ConversationFragment.java +++ b/src/de/gultsch/chat/ui/ConversationFragment.java @@ -180,6 +180,10 @@ public class ConversationFragment extends Fragment { activity.getActionBar().setDisplayHomeAsUpEnabled(true); activity.getActionBar().setTitle(conversation.getName()); activity.invalidateOptionsMenu(); + if (!conversation.isRead()) { + conversation.markRead(); + activity.updateConversationList(); + } } } } @@ -194,6 +198,10 @@ public class ConversationFragment extends Fragment { activity.getActionBar().setDisplayHomeAsUpEnabled(true); activity.getActionBar().setTitle(conversation.getName()); activity.invalidateOptionsMenu(); + if (!conversation.isRead()) { + conversation.markRead(); + activity.updateConversationList(); + } } } diff --git a/src/de/gultsch/chat/utils/UIHelper.java b/src/de/gultsch/chat/utils/UIHelper.java index 75c91682..8e6d8e5f 100644 --- a/src/de/gultsch/chat/utils/UIHelper.java +++ b/src/de/gultsch/chat/utils/UIHelper.java @@ -4,39 +4,31 @@ import java.io.FileDescriptor; import java.io.FileNotFoundException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; import de.gultsch.chat.R; import de.gultsch.chat.entities.Contact; import de.gultsch.chat.entities.Conversation; +import de.gultsch.chat.entities.Message; import de.gultsch.chat.ui.ConversationActivity; import android.app.Activity; -import android.app.AlertDialog; import android.app.Notification; import android.app.PendingIntent; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; -import android.content.res.AssetFileDescriptor; import android.content.res.Resources; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.net.Uri; import android.preference.PreferenceManager; -import android.provider.ContactsContract; -import android.provider.ContactsContract.CommonDataKinds; import android.provider.ContactsContract.Contacts; -import android.provider.ContactsContract.Intents; import android.support.v4.app.NotificationCompat; import android.support.v4.app.TaskStackBuilder; -import android.util.DisplayMetrics; import android.util.Log; -import android.view.View; -import android.view.View.OnClickListener; import android.widget.QuickContactBadge; public class UIHelper { @@ -100,7 +92,25 @@ public class UIHelper { .getName(), (int) res .getDimension(android.R.dimen.notification_large_icon_width))); mBuilder.setContentTitle(conversation.getName()); - mBuilder.setContentText(conversation.getLatestMessage()); + mBuilder.setTicker(conversation.getLatestMessage().trim()); + StringBuilder bigText = new StringBuilder(); + List messages = conversation.getMessages(); + String firstLine = ""; + for(int i = messages.size() -1; i >= 0; --i) { + if (!messages.get(i).isRead()) { + if (i == messages.size() -1 ) { + firstLine = messages.get(i).getBody().trim(); + bigText.append(firstLine); + } else { + firstLine = messages.get(i).getBody().trim(); + bigText.insert(0, firstLine+"\n"); + } + } else { + break; + } + } + mBuilder.setContentText(firstLine); + mBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(bigText.toString())); mBuilder.setSmallIcon(R.drawable.notification); mBuilder.setLights(0xffffffff, 2000, 4000); if (ringtone != null) {