Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a7cf21b4 authored by Jaewan Kim's avatar Jaewan Kim
Browse files

MediaSession2: Move MediaSessionService2.MediaNotification to updatable

Test: Run all MediaComponents tests once
Change-Id: Ieb38e1181f2ed9e96c3218ca0fdc3c1d13424af7
parent fd673f32
Loading
Loading
Loading
Loading
+18 −17
Original line number Diff line number Diff line
@@ -21,10 +21,12 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Notification;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaSession2.ControllerInfo;
import android.media.update.ApiLoader;
import android.media.update.MediaSessionService2Provider;
import android.media.update.MediaSessionService2Provider.MediaNotificationProvider;
import android.os.IBinder;

/**
@@ -165,7 +167,6 @@ public abstract class MediaSessionService2 extends Service {
     * @param state playback state
     * @return a {@link MediaNotification}. If it's {@code null}, notification wouldn't be shown.
     */
    // TODO(jaewan): Also add metadata
    public MediaNotification onUpdateNotification(PlaybackState2 state) {
        return mProvider.onUpdateNotification_impl(state);
    }
@@ -204,31 +205,31 @@ public abstract class MediaSessionService2 extends Service {
     * foreground service to keep playback running in the background. It's highly recommended to
     * show media style notification here.
     */
    // TODO(jaewan): Should we also move this to updatable?
    public static class MediaNotification {
        public final int id;
        public final Notification notification;

        private MediaNotification(int id, @NonNull Notification notification) {
            this.id = id;
            this.notification = notification;
        }
        private final MediaNotificationProvider mProvider;

        /**
         * Create a {@link MediaNotification}.
         * Default constructor
         *
         * @param context context
         * @param notificationId notification id to be used for
         *      {@link android.app.NotificationManager#notify(int, Notification)}.
         * @param notification a notification to make session service foreground service. Media
         *      style notification is recommended here.
         * @return
         */
        public static MediaNotification create(int notificationId,
                @NonNull Notification notification) {
            if (notification == null) {
                throw new IllegalArgumentException("Notification cannot be null");
        public MediaNotification(@NonNull Context context,
                int notificationId, @NonNull Notification notification) {
            mProvider = ApiLoader.getProvider(context)
                    .createMediaSessionService2MediaNotification(
                            context, this, notificationId, notification);
        }
            return new MediaNotification(notificationId, notification);

        public int getNotificationId() {
            return mProvider.getNotificationId_impl();
        }

        public Notification getNotification() {
            return mProvider.getNotification_impl();
        }
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.media.update;

import android.annotation.SystemApi;
import android.app.Notification;
import android.content.Intent;
import android.media.MediaSession2;
import android.media.MediaSessionService2.MediaNotification;
@@ -33,4 +34,9 @@ public interface MediaSessionService2Provider {
    // Service
    void onCreate_impl();
    IBinder onBind_impl(Intent intent);

    interface MediaNotificationProvider {
        int getNotificationId_impl();
        Notification getNotification_impl();
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.media.update;

import android.annotation.Nullable;
import android.app.Notification;
import android.content.Context;
import android.media.DataSourceDesc;
import android.media.MediaBrowser2;
@@ -34,6 +35,7 @@ import android.media.MediaSession2;
import android.media.MediaSession2.PlaylistParams;
import android.media.MediaSession2.SessionCallback;
import android.media.MediaSessionService2;
import android.media.MediaSessionService2.MediaNotification;
import android.media.PlaybackState2;
import android.media.Rating2;
import android.media.SessionPlayer2;
@@ -44,6 +46,7 @@ import android.media.update.MediaSession2Provider.CommandGroupProvider;
import android.media.update.MediaSession2Provider.CommandProvider;
import android.media.update.MediaSession2Provider.ControllerInfoProvider;
import android.media.update.MediaSession2Provider.PlaylistParamsProvider;
import android.media.update.MediaSessionService2Provider.MediaNotificationProvider;
import android.os.Bundle;
import android.os.IInterface;
import android.util.AttributeSet;
@@ -89,6 +92,8 @@ public interface StaticProvider {
            SessionToken2 token, Executor executor, BrowserCallback callback);

    MediaSessionService2Provider createMediaSessionService2(MediaSessionService2 instance);
    MediaNotificationProvider createMediaSessionService2MediaNotification(Context context,
            MediaNotification mediaNotification, int notificationId, Notification notification);

    MediaSessionService2Provider createMediaLibraryService2(MediaLibraryService2 instance);
    BuilderBaseProvider<MediaLibrarySession, MediaLibrarySessionCallback>