diff options
Diffstat (limited to '')
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 |