aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/AndroidManifest.xml4
-rw-r--r--src/main/java/de/pixart/messenger/services/NotificationService.java27
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java4
-rw-r--r--src/main/res/xml/automotive_app_desc.xml4
4 files changed, 33 insertions, 6 deletions
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index b248a35e7..c4427fd75 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -35,6 +35,10 @@
android:theme="@style/ConversationsTheme"
tools:replace="android:label, android:allowBackup" >
+ <meta-data
+ android:name="com.google.android.gms.car.application"
+ android:resource="@xml/automotive_app_desc" />
+
<service android:name="de.pixart.messenger.services.XmppConnectionService" />
<receiver android:name="de.pixart.messenger.services.EventReceiver">
diff --git a/src/main/java/de/pixart/messenger/services/NotificationService.java b/src/main/java/de/pixart/messenger/services/NotificationService.java
index 79c6cd2ad..7cdc6b35b 100644
--- a/src/main/java/de/pixart/messenger/services/NotificationService.java
+++ b/src/main/java/de/pixart/messenger/services/NotificationService.java
@@ -12,6 +12,7 @@ import android.os.SystemClock;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationCompat.BigPictureStyle;
import android.support.v4.app.NotificationCompat.Builder;
+import android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v4.app.RemoteInput;
import android.support.v4.content.ContextCompat;
@@ -348,6 +349,7 @@ public class NotificationService {
final Builder mBuilder = new NotificationCompat.Builder(mXmppConnectionService);
if (messages.size() >= 1) {
final Conversation conversation = messages.get(0).getConversation();
+ final UnreadConversation.Builder mUnreadBuilder = new UnreadConversation.Builder(conversation.getName());
mBuilder.setLargeIcon(mXmppConnectionService.getAvatarService()
.get(conversation, getPixel(64)));
mBuilder.setContentTitle(conversation.getName());
@@ -357,14 +359,17 @@ public class NotificationService {
} else {
Message message;
if ((message = getImage(messages)) != null) {
- modifyForImage(mBuilder, message, messages);
+ modifyForImage(mBuilder, mUnreadBuilder, message, messages);
} else {
- modifyForTextOnly(mBuilder, messages);
+ modifyForTextOnly(mBuilder, mUnreadBuilder, messages);
}
RemoteInput remoteInput = new RemoteInput.Builder("text_reply").setLabel(UIHelper.getMessageHint(mXmppConnectionService, conversation)).build();
NotificationCompat.Action replyAction = new NotificationCompat.Action.Builder(R.drawable.ic_send_text_offline, mXmppConnectionService.getResources().getString(R.string.reply), createReplyIntent(conversation, false)).addRemoteInput(remoteInput).build();
NotificationCompat.Action wearReplyAction = new NotificationCompat.Action.Builder(R.drawable.ic_wear_reply, "Reply", createReplyIntent(conversation, true)).addRemoteInput(remoteInput).build();
mBuilder.extend(new NotificationCompat.WearableExtender().addAction(wearReplyAction));
+ mUnreadBuilder.setReplyAction(createReplyIntent(conversation, true), remoteInput);
+ mUnreadBuilder.setReadPendingIntent(createReadPendingIntent(conversation));
+ mBuilder.extend(new NotificationCompat.CarExtender().setUnreadConversation(mUnreadBuilder.build()));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mBuilder.addAction(replyAction);
}
@@ -398,8 +403,8 @@ public class NotificationService {
return mBuilder;
}
- private void modifyForImage(final Builder builder, final Message message,
- final ArrayList<Message> messages) {
+ private void modifyForImage(final Builder builder, final UnreadConversation.Builder uBuilder,
+ final Message message, final ArrayList<Message> messages) {
try {
final Bitmap bitmap = mXmppConnectionService.getFileBackend()
.getThumbnail(message, getPixel(288), false);
@@ -423,11 +428,11 @@ public class NotificationService {
}
builder.setStyle(bigPictureStyle);
} catch (final FileNotFoundException e) {
- modifyForTextOnly(builder, messages);
+ modifyForTextOnly(builder, uBuilder, messages);
}
}
- private void modifyForTextOnly(final Builder builder, final ArrayList<Message> messages) {
+ private void modifyForTextOnly(final Builder builder, final UnreadConversation.Builder uBuilder, final ArrayList<Message> messages) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
NotificationCompat.MessagingStyle messagingStyle = new NotificationCompat.MessagingStyle(mXmppConnectionService.getString(R.string.me));
Conversation conversation = messages.get(0).getConversation();
@@ -437,6 +442,8 @@ public class NotificationService {
for (Message message : messages) {
String sender = message.getStatus() == Message.STATUS_RECEIVED ? UIHelper.getMessageDisplayName(message) : null;
messagingStyle.addMessage(UIHelper.getMessagePreview(mXmppConnectionService, message).first, message.getTimeSent(), sender);
+ uBuilder.addMessage(UIHelper.getMessagePreview(mXmppConnectionService, message).first);
+ uBuilder.setLatestTimestamp(message.getTimeSent());
}
builder.setStyle(messagingStyle);
} else {
@@ -566,6 +573,14 @@ public class NotificationService {
return PendingIntent.getService(mXmppConnectionService, id, intent, 0);
}
+ private PendingIntent createReadPendingIntent(Conversation conversation) {
+ final Intent intent = new Intent(mXmppConnectionService, XmppConnectionService.class);
+ intent.setAction(XmppConnectionService.ACTION_MARK_AS_READ);
+ intent.putExtra("uuid", conversation.getUuid());
+ intent.setPackage(mXmppConnectionService.getPackageName());
+ return PendingIntent.getService(mXmppConnectionService, conversation.getUuid().hashCode() % 247527, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ }
+
private PendingIntent createDisableForeground() {
final Intent intent = new Intent(mXmppConnectionService,
XmppConnectionService.class);
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index d843ed2bd..0422b533c 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -153,6 +153,7 @@ public class XmppConnectionService extends Service {
}
public static final String ACTION_REPLY_TO_CONVERSATION = "reply_to_conversations";
+ public static final String ACTION_MARK_AS_READ = "mark_as_read";
public static final String ACTION_CLEAR_NOTIFICATION = "clear_notification";
public static final String ACTION_DISABLE_FOREGROUND = "disable_foreground";
public static final String ACTION_TRY_AGAIN = "try_again";
@@ -676,6 +677,9 @@ public class XmppConnectionService extends Service {
}
}
break;
+ case ACTION_MARK_AS_READ:
+ markRead(c, true);
+ break;
case AudioManager.RINGER_MODE_CHANGED_ACTION:
if (xaOnSilentMode()) {
refreshAllPresences();
diff --git a/src/main/res/xml/automotive_app_desc.xml b/src/main/res/xml/automotive_app_desc.xml
new file mode 100644
index 000000000..ef8093892
--- /dev/null
+++ b/src/main/res/xml/automotive_app_desc.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<automotiveApp>
+ <uses name="notification" />
+</automotiveApp> \ No newline at end of file