Commit 81afb227 authored by Grigory Fedorov's avatar Grigory Fedorov

Message notifications made more complicated and informing. Head up notifications added.

parent c48d5522
...@@ -5,6 +5,9 @@ import android.content.Intent; ...@@ -5,6 +5,9 @@ import android.content.Intent;
import android.media.AudioManager; import android.media.AudioManager;
import android.net.Uri; import android.net.Uri;
import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.StyleSpan;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
import com.xabber.android.data.SettingsManager; import com.xabber.android.data.SettingsManager;
...@@ -54,6 +57,8 @@ public class MessageNotificationCreator { ...@@ -54,6 +57,8 @@ public class MessageNotificationCreator {
notificationBuilder = new NotificationCompat.Builder(application); notificationBuilder = new NotificationCompat.Builder(application);
notificationBuilder.setContentTitle(getTitle(message, messageCount)); notificationBuilder.setContentTitle(getTitle(message, messageCount));
notificationBuilder.setContentText(getText(message, showText)); notificationBuilder.setContentText(getText(message, showText));
notificationBuilder.setSubText(message.getAccount());
if (showText) { if (showText) {
notificationBuilder.setTicker(message.getText()); notificationBuilder.setTicker(message.getText());
} }
...@@ -66,6 +71,9 @@ public class MessageNotificationCreator { ...@@ -66,6 +71,9 @@ public class MessageNotificationCreator {
notificationBuilder.setContentIntent(getIntent(message)); notificationBuilder.setContentIntent(getIntent(message));
notificationBuilder.setCategory(NotificationCompat.CATEGORY_MESSAGE);
notificationBuilder.setPriority(NotificationCompat.PRIORITY_HIGH);
addEffects(messageItem); addEffects(messageItem);
return notificationBuilder.build(); return notificationBuilder.build();
...@@ -73,22 +81,47 @@ public class MessageNotificationCreator { ...@@ -73,22 +81,47 @@ public class MessageNotificationCreator {
private CharSequence getTitle(MessageNotification message, int messageCount) { private CharSequence getTitle(MessageNotification message, int messageCount) {
if (isFromOneContact()) { if (isFromOneContact()) {
return RosterManager.getInstance().getName(message.getAccount(), message.getUser()); return getSingleContactTitle(message, messageCount);
} else { } else {
String messageText = StringUtils.getQuantityString( return getMultiContactTitle(messageCount);
application.getResources(), R.array.chat_message_quantity, messageCount); }
}
private CharSequence getSingleContactTitle(MessageNotification message, int messageCount) {
if (messageCount > 1) {
return application.getString(R.string.chat_messages_from_contact,
messageCount, getTextForMessages(messageCount), getContactName(message));
} else {
return getContactName(message);
}
}
private String getContactName(MessageNotification message) {
return RosterManager.getInstance().getName(message.getAccount(), message.getUser());
}
private CharSequence getMultiContactTitle(int messageCount) {
String messageText = getTextForMessages(messageCount);
String contactText = StringUtils.getQuantityString(application.getResources(), String contactText = StringUtils.getQuantityString(application.getResources(),
R.array.chat_contact_quantity, messageNotifications.size()); R.array.chat_contact_quantity, messageNotifications.size());
return application.getString(R.string.chat_status, return application.getString(R.string.chat_status,
messageCount, messageText, messageNotifications.size(), contactText); messageCount, messageText, messageNotifications.size(), contactText);
} }
private String getTextForMessages(int messageCount) {
return StringUtils.getQuantityString(
application.getResources(), R.array.chat_message_quantity, messageCount);
} }
private CharSequence getText(MessageNotification message, boolean showText) { private CharSequence getText(MessageNotification message, boolean showText) {
if (showText && isFromOneContact()) { if (!showText) {
return message.getAccount();
}
if (isFromOneContact()) {
return message.getText(); return message.getText();
} else { } else {
return ""; return getContactNameAndMessage(message);
} }
} }
...@@ -111,18 +144,40 @@ public class MessageNotificationCreator { ...@@ -111,18 +144,40 @@ public class MessageNotificationCreator {
return messageNotifications.size() == 1; return messageNotifications.size() == 1;
} }
private NotificationCompat.BigTextStyle getStyle(MessageNotification message, int messageCount) { private NotificationCompat.Style getStyle(MessageNotification message, int messageCount) {
if (messageCount == 1) { if (isFromOneContact()) {
String title = RosterManager.getInstance().getName(message.getAccount(), message.getUser()); NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle();
String text = message.getText(); bigTextStyle.setBigContentTitle(getSingleContactTitle(message, messageCount));
bigTextStyle.bigText(message.getText());
bigTextStyle.setSummaryText(message.getAccount());
NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle();
bigTextStyle.setBigContentTitle(title);
bigTextStyle.bigText(text);
return bigTextStyle; return bigTextStyle;
} else {
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
inboxStyle.setBigContentTitle(getMultiContactTitle(messageCount));
for (int i = 1; i <= messageNotifications.size(); i++) {
MessageNotification messageNotification = messageNotifications.get(messageNotifications.size() - i);
inboxStyle.addLine(getContactNameAndMessage(messageNotification));
} }
return null;
inboxStyle.setSummaryText(message.getAccount());
return inboxStyle;
}
}
private Spannable getContactNameAndMessage(MessageNotification messageNotification) {
String userName = getContactName(messageNotification);
String contactAndMessage = application.getString(
R.string.chat_contact_and_message, userName, messageNotification.getText());
Spannable spannableString = new SpannableString(contactAndMessage);
spannableString.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, userName.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
} }
private PendingIntent getIntent(MessageNotification message) { private PendingIntent getIntent(MessageNotification message) {
......
...@@ -157,8 +157,10 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan ...@@ -157,8 +157,10 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
persistentNotificationBuilder.setContentTitle(application.getString(R.string.application_name)); persistentNotificationBuilder.setContentTitle(application.getString(R.string.application_name));
persistentNotificationBuilder.setDeleteIntent(clearNotifications); persistentNotificationBuilder.setDeleteIntent(clearNotifications);
persistentNotificationBuilder.setOngoing(true); persistentNotificationBuilder.setOngoing(true);
persistentNotificationBuilder.setColor(COLOR_MATERIAL_RED_500);
persistentNotificationBuilder.setWhen(System.currentTimeMillis()); persistentNotificationBuilder.setWhen(System.currentTimeMillis());
persistentNotificationBuilder.setCategory(NotificationCompat.CATEGORY_SERVICE);
persistentNotificationBuilder.setPriority(NotificationCompat.PRIORITY_LOW);
} }
@Override @Override
...@@ -357,8 +359,14 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan ...@@ -357,8 +359,14 @@ public class NotificationManager implements OnInitializedListener, OnAccountChan
persistentIntent = ContactList.createPersistentIntent(application); persistentIntent = ContactList.createPersistentIntent(application);
} }
persistentNotificationBuilder.setSmallIcon(connected > 0 ? R.drawable.ic_stat_light_bulb_big if (connected > 0) {
: R.drawable.ic_stat_light_bulb_big_off); persistentNotificationBuilder.setColor(COLOR_MATERIAL_RED_500);
persistentNotificationBuilder.setSmallIcon(R.drawable.ic_stat_light_bulb_big);
} else {
persistentNotificationBuilder.setColor(NotificationCompat.COLOR_DEFAULT);
persistentNotificationBuilder.setSmallIcon(R.drawable.ic_stat_light_bulb_big_off);
}
persistentNotificationBuilder.setContentText(getConnectionState(waiting, connecting, connected, accountList.size())); persistentNotificationBuilder.setContentText(getConnectionState(waiting, connecting, connected, accountList.size()));
persistentNotificationBuilder.setContentIntent(PendingIntent.getActivity(application, 0, persistentIntent, persistentNotificationBuilder.setContentIntent(PendingIntent.getActivity(application, 0, persistentIntent,
PendingIntent.FLAG_UPDATE_CURRENT)); PendingIntent.FLAG_UPDATE_CURRENT));
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png --> <!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png -->
<string name="account_quantity_1">учетной записи</string> <string name="account_quantity_1">учетной записи</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png --> <!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png -->
...@@ -28,6 +28,10 @@ ...@@ -28,6 +28,10 @@
<string name="chat_message_quantity_5">сообщений</string> <string name="chat_message_quantity_5">сообщений</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_message.png --> <!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_message.png -->
<string name="chat_status">%1$d %2$s от %3$d %4$s</string> <string name="chat_status">%1$d %2$s от %3$d %4$s</string>
<string name="chat_messages_from_contact">%1$d %2$s от %3$s</string>
<string name="chat_contact_and_message">%1$s: %2$s</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png --> <!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png -->
<string name="connection_state_connected_1">%1$d из %2$d %3$s подключена </string> <string name="connection_state_connected_1">%1$d из %2$d %3$s подключена </string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png --> <!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png -->
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"> <resources>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png --> <!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png -->
<string name="account_quantity_1">account</string> <string name="account_quantity_1">account</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png --> <!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png -->
...@@ -28,6 +28,10 @@ ...@@ -28,6 +28,10 @@
<string name="chat_message_quantity_5">-</string> <string name="chat_message_quantity_5">-</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_message.png --> <!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_message.png -->
<string name="chat_status">%1$d %2$s from %3$d %4$s</string> <string name="chat_status">%1$d %2$s from %3$d %4$s</string>
<string name="chat_messages_from_contact">%1$d %2$s from %3$s</string>
<string name="chat_contact_and_message">%1$s: %2$s</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png --> <!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png -->
<string name="connection_state_connected_1">%1$d of %2$d %3$s online</string> <string name="connection_state_connected_1">%1$d of %2$d %3$s online</string>
<!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png --> <!-- http://dl.dropbox.com/u/1029995/com.xabber.android/notification_bar_connected.png -->
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment