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

Commit 01fe661a authored by RoboErik's avatar RoboErik
Browse files

Initial round of MediaSession APIs

This is far from complete but puts the basic components in place
for an app to interact with media sessions.

Change-Id: Icfe313f90ad76ae56badbe42b0e43fc5f68db36f
parent d63b4314
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -260,12 +260,17 @@ LOCAL_SRC_FILES += \
	media/java/android/media/IAudioService.aidl \
	media/java/android/media/IAudioFocusDispatcher.aidl \
	media/java/android/media/IAudioRoutesObserver.aidl \
	media/java/android/media/IMediaController.aidl \
	media/java/android/media/IMediaControllerCallback.aidl \
	media/java/android/media/IMediaHTTPConnection.aidl \
	media/java/android/media/IMediaHTTPService.aidl \
	media/java/android/media/IMediaRouterClient.aidl \
	media/java/android/media/IMediaRouterService.aidl \
	media/java/android/media/IMediaScannerListener.aidl \
	media/java/android/media/IMediaScannerService.aidl \
	media/java/android/media/IMediaSession.aidl \
	media/java/android/media/IMediaSessionCallback.aidl \
	media/java/android/media/IMediaSessionManager.aidl \
	media/java/android/media/IRemoteControlClient.aidl \
	media/java/android/media/IRemoteControlDisplay.aidl \
	media/java/android/media/IRemoteDisplayCallback.aidl \
+45 −0
Original line number Diff line number Diff line
@@ -6316,6 +6316,7 @@ package android.content {
    field public static final java.lang.String LAYOUT_INFLATER_SERVICE = "layout_inflater";
    field public static final java.lang.String LOCATION_SERVICE = "location";
    field public static final java.lang.String MEDIA_ROUTER_SERVICE = "media_router";
    field public static final java.lang.String MEDIA_SESSION_SERVICE = "media_session";
    field public static final int MODE_APPEND = 32768; // 0x8000
    field public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 8; // 0x8
    field public static final int MODE_MULTI_PROCESS = 4; // 0x4
@@ -13150,6 +13151,23 @@ package android.media {
    method public static final android.media.MediaCodecInfo getCodecInfoAt(int);
  }
  public final class MediaController {
    ctor public MediaController(android.media.MediaSessionToken);
    method public void addCallback(android.media.MediaController.Callback);
    method public void addCallback(android.media.MediaController.Callback, android.os.Handler);
    method public void removeCallback(android.media.MediaController.Callback);
    method public void sendCommand(java.lang.String, android.os.Bundle);
    method public void sendMediaButton(int);
  }
  public static abstract class MediaController.Callback {
    ctor public MediaController.Callback();
    method public void onEvent(java.lang.String, android.os.Bundle);
    method public void onMetadataUpdate(android.os.Bundle);
    method public void onPlaybackStateChange(int);
    method public void onRouteChanged(android.os.Bundle);
  }
  public final class MediaCrypto {
    ctor public MediaCrypto(java.util.UUID, byte[]) throws android.media.MediaCryptoException;
    method public static final boolean isCryptoSchemeSupported(java.util.UUID);
@@ -13716,6 +13734,33 @@ package android.media {
    method public abstract void onScanCompleted(java.lang.String, android.net.Uri);
  }
  public final class MediaSession {
    method public void addCallback(android.media.MediaSession.Callback);
    method public void addCallback(android.media.MediaSession.Callback, android.os.Handler);
    method public android.media.MediaSessionToken getSessionToken();
    method public void release();
    method public void removeCallback(android.media.MediaSession.Callback);
    method public void setPlaybackState(int);
  }
  public static abstract class MediaSession.Callback {
    ctor public MediaSession.Callback();
    method public void onCommand(java.lang.String, android.os.Bundle);
    method public void onMediaButton(android.content.Intent);
    method public void onRequestRouteChange(android.os.Bundle);
  }
  public final class MediaSessionManager {
    method public android.media.MediaSession createSession(java.lang.String);
    method public java.util.List<android.media.MediaController> getActiveSessions();
  }
  public class MediaSessionToken implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator CREATOR;
  }
  public class MediaSyncEvent {
    method public static android.media.MediaSyncEvent createEvent(int) throws java.lang.IllegalArgumentException;
    method public int getAudioSessionId();
+8 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.app;

import android.os.Build;

import com.android.internal.policy.PolicyManager;
import com.android.internal.util.Preconditions;

@@ -62,6 +63,7 @@ import android.location.ILocationManager;
import android.location.LocationManager;
import android.media.AudioManager;
import android.media.MediaRouter;
import android.media.MediaSessionManager;
import android.net.ConnectivityManager;
import android.net.IConnectivityManager;
import android.net.INetworkPolicyManager;
@@ -587,6 +589,12 @@ class ContextImpl extends Context {
            public Object createService(ContextImpl ctx) {
                return new ConsumerIrManager(ctx);
            }});

        registerService(MEDIA_SESSION_SERVICE, new ServiceFetcher() {
            public Object createService(ContextImpl ctx) {
                return new MediaSessionManager(ctx);
            }
        });
    }

    static ContextImpl getImpl(Context context) {
+12 −2
Original line number Diff line number Diff line
@@ -1989,7 +1989,8 @@ public abstract class Context {
            USER_SERVICE,
            //@hide: APP_OPS_SERVICE
            CAMERA_SERVICE,
            PRINT_SERVICE
            PRINT_SERVICE,
            MEDIA_SESSION_SERVICE,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface ServiceName {}
@@ -2349,6 +2350,15 @@ public abstract class Context {
     */
    public static final String MEDIA_ROUTER_SERVICE = "media_router";

    /**
     * Use with {@link #getSystemService} to retrieve a
     * {@link android.media.MediaSessionManager} for managing media Sessions.
     *
     * @see #getSystemService
     * @see android.media.MediaSessionManager
     */
    public static final String MEDIA_SESSION_SERVICE = "media_session";

    /**
     * Use with {@link #getSystemService} to retrieve a
     * {@link android.telephony.TelephonyManager} for handling management the
+95 −71
Original line number Diff line number Diff line
@@ -1849,6 +1849,30 @@ public class KeyEvent extends InputEvent implements Parcelable {
        }
    }

    /**
     * Whether this key is a media key, which can be send to apps that are
     * interested in media key events.
     *
     * @hide
     */
    public static final boolean isMediaKey(int keyCode) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_MEDIA_PLAY:
            case KeyEvent.KEYCODE_MEDIA_PAUSE:
            case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
            case KeyEvent.KEYCODE_MUTE:
            case KeyEvent.KEYCODE_HEADSETHOOK:
            case KeyEvent.KEYCODE_MEDIA_STOP:
            case KeyEvent.KEYCODE_MEDIA_NEXT:
            case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
            case KeyEvent.KEYCODE_MEDIA_REWIND:
            case KeyEvent.KEYCODE_MEDIA_RECORD:
            case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
                return true;
        }
        return false;
    }

    /** {@inheritDoc} */
    @Override
    public final int getDeviceId() {
Loading