Kaynağa Gözat

Support for Androids media style

Sebastián Katzer 8 yıl önce
ebeveyn
işleme
c2a88a5eb0

+ 28 - 1
src/android/notification/Builder.java

@@ -25,10 +25,13 @@ import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
+import android.media.session.PlaybackState;
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.v4.app.NotificationCompat;
 import android.support.v4.app.NotificationCompat.MessagingStyle.Message;
+import android.support.v4.media.app.NotificationCompat.MediaStyle;
+import android.support.v4.media.session.MediaSessionCompat;
 
 import java.util.List;
 import java.util.Random;
@@ -178,6 +181,13 @@ public final class Builder {
             return;
         }
 
+        MediaSessionCompat.Token token = options.getMediaSessionToken();
+
+        if (token != null) {
+            applyMediaStyle(builder, token);
+            return;
+        }
+
         List<Bitmap> pics = options.getAttachments();
 
         if (pics.size() > 0) {
@@ -273,6 +283,23 @@ public final class Builder {
         builder.setStyle(style);
     }
 
+    /**
+     * Apply media style.
+     *
+     * @param builder Local notification builder instance.
+     * @param token   The media session token.
+     */
+    private void applyMediaStyle(NotificationCompat.Builder builder,
+                                 MediaSessionCompat.Token token) {
+        MediaStyle style;
+
+        style = new MediaStyle(builder)
+                .setMediaSession(token)
+                .setShowActionsInCompactView(1);
+
+        builder.setStyle(style);
+    }
+
     /**
      * Set intent to handle the delete event. Will clean up some persisted
      * preferences.
@@ -304,7 +331,7 @@ public final class Builder {
      * @param builder Local notification builder instance.
      */
     private void applyContentReceiver(NotificationCompat.Builder builder) {
-
+        new MediaSessionCompat(context, "").getSessionToken();
         if (clickActivity == null)
             return;
 

+ 17 - 0
src/android/notification/Options.java

@@ -27,6 +27,7 @@ import android.graphics.Color;
 import android.net.Uri;
 import android.support.v4.app.NotificationCompat;
 import android.support.v4.app.NotificationCompat.MessagingStyle.Message;
+import android.support.v4.media.session.MediaSessionCompat;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
@@ -616,6 +617,22 @@ public final class Options {
         return messages;
     }
 
+    /**
+     * Gets the token for the specified media session.
+     *
+     * @return null if there no session.
+     */
+    MediaSessionCompat.Token getMediaSessionToken() {
+        String tag = options.optString("mediaSession", null);
+
+        if (tag == null)
+            return null;
+
+        MediaSessionCompat session = new MediaSessionCompat(context, tag);
+
+        return session.getSessionToken();
+    }
+
     /**
      * Strips the hex code #FF00FF => FF00FF
      *

+ 1 - 0
www/local-notification-util.js

@@ -69,6 +69,7 @@ exports.applyPlatformSpecificOptions = function () {
         defaults.number       = 0;
         defaults.channel      = undefined;
         defaults.launch       = true;
+        defaults.mediaSession = undefined;
         break;
     }
 };