Loading api/current.txt +10 −5 Original line number Diff line number Diff line Loading @@ -25683,11 +25683,11 @@ package android.media { field public static final int SEEK_PREVIOUS_SYNC = 0; // 0x0 } public static class MediaPlayer2.DrmEventCallback { public abstract static class MediaPlayer2.DrmEventCallback { ctor public MediaPlayer2.DrmEventCallback(); method public void onDrmConfig(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaDrm); method @Nullable public android.media.MediaPlayer2.DrmPreparationInfo onDrmInfo(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaPlayer2.DrmInfo); method @NonNull public byte[] onDrmKeyRequest(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaDrm.KeyRequest); method @Nullable public abstract android.media.MediaPlayer2.DrmPreparationInfo onDrmInfo(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaPlayer2.DrmInfo); method @NonNull public abstract byte[] onDrmKeyRequest(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaDrm.KeyRequest); method public void onDrmPrepared(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, int, @Nullable byte[]); } Loading @@ -25697,17 +25697,22 @@ package android.media { } public static final class MediaPlayer2.DrmPreparationInfo { method @Nullable public byte[] getInitData(); method @Nullable public byte[] getKeySetId(); method public int getKeyType(); method @Nullable public String getMimeType(); method @Nullable public java.util.Map<java.lang.String,java.lang.String> getOptionalParameters(); method @NonNull public java.util.UUID getUuid(); } public static final class MediaPlayer2.DrmPreparationInfo.Builder { ctor public MediaPlayer2.DrmPreparationInfo.Builder(); ctor public MediaPlayer2.DrmPreparationInfo.Builder(@NonNull java.util.UUID); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo build(); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setInitData(@Nullable byte[]); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setKeySetId(@Nullable byte[]); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setKeyType(int); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setMimeType(@Nullable String); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setOptionalParameters(@Nullable java.util.Map<java.lang.String,java.lang.String>); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setUuid(@NonNull java.util.UUID); } public static class MediaPlayer2.EventCallback { media/apex/java/android/media/MediaPlayer2.java +80 −24 Original line number Diff line number Diff line Loading @@ -3439,10 +3439,18 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { /** * Mutable builder to create a {@link MediaPlayer2.DrmPreparationInfo} object. * * {@link Builder#Builder(UUID) UUID} must not be null; {@link #setKeyType keyType} * must be one of {@link MediaDrm#KEY_TYPE_STREAMING} or {@link MediaDrm#KEY_TYPE_OFFLINE}. * <p> * When {@link #setKeyType keyType} is {@link MediaDrm#KEY_TYPE_STREAMING}, * {@link #setInitData(byte[]) initData} and {@link #setMimeType(String) mimeType} * must not be null; When {@link #setKeyType keyType} is {@link MediaDrm#KEY_TYPE_OFFLINE}, * {@link #setKeySetId(byte[]) keySetId} must not be null. */ public static final class Builder { private UUID mUUID; private final UUID mUUID; private byte[] mKeySetId; private byte[] mInitData; private String mMimeType; Loading @@ -3450,15 +3458,11 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { private Map<String, String> mOptionalParameters; /** * Set UUID of the crypto scheme selected to decrypt content. An UUID can be retrieved * from the source listening to {@link MediaPlayer2.DrmEventCallback#onDrmInfo}. * * @param uuid of selected crypto scheme * @return this * @param uuid UUID of the crypto scheme selected to decrypt content. An UUID can be * retrieved from the source listening to {@link DrmEventCallback#onDrmInfo}. */ public @NonNull Builder setUuid(@NonNull UUID uuid) { public Builder(@NonNull UUID uuid) { this.mUUID = uuid; return this; } /** Loading Loading @@ -3531,12 +3535,16 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { } /** * @return an immutable {@link MediaPlayer2.DrmPreparationInfo} representing the * settings of this builder * @return an immutable {@link DrmPreparationInfo} based on settings of this builder */ public @NonNull MediaPlayer2.DrmPreparationInfo build() { return new MediaPlayer2.DrmPreparationInfo(mUUID, mKeySetId, mInitData, mMimeType, mKeyType, mOptionalParameters); @NonNull public DrmPreparationInfo build() { final DrmPreparationInfo info = new DrmPreparationInfo(mUUID, mKeySetId, mInitData, mMimeType, mKeyType, mOptionalParameters); if (!info.isValid()) { throw new IllegalArgumentException("invalid DrmPreparationInfo"); } return info; } } Loading Loading @@ -3572,13 +3580,61 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { } return false; } /** * @return UUID of the crypto scheme selected to decrypt content. */ @NonNull public UUID getUuid() { return mUUID; } /** * @return identifier of the persisted offline key. */ @Nullable public byte[] getKeySetId() { return mKeySetId; } /** * @return container-specific DRM initialization data. */ @Nullable public byte[] getInitData() { return mInitData; } /** * @return mime type of the content */ @Nullable public String getMimeType() { return mMimeType; } /** * @return type of the key request. */ @MediaPlayer2.MediaDrmKeyType public int getKeyType() { return mKeyType; } /** * @return optional parameters to be included in the {@link MediaDrm.KeyRequest}. */ @Nullable public Map<String, String> getOptionalParameters() { return mOptionalParameters; } } /** * Interface definition for callbacks to be invoked when the player has the corresponding * DRM events. */ public static class DrmEventCallback { public static abstract class DrmEventCallback { /** * Called to indicate DRM info is available. Return a {@link DrmPreparationInfo} object that Loading @@ -3591,10 +3647,9 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { * @return a {@link DrmPreparationInfo} object to initialize DRM playback, or null to skip * DRM initialization */ public @Nullable DrmPreparationInfo onDrmInfo(@NonNull MediaPlayer2 mp, @NonNull DataSourceDesc dsd, @NonNull DrmInfo drmInfo) { return null; } @Nullable public abstract DrmPreparationInfo onDrmInfo(@NonNull MediaPlayer2 mp, @NonNull DataSourceDesc dsd, @NonNull DrmInfo drmInfo); /** * Called to give the app the opportunity to configure DRM before the session is created. Loading Loading @@ -3629,10 +3684,9 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { * throwing an {@link RuntimeException} from this callback would trigger an * {@link EventCallback#onError}. */ public @NonNull byte[] onDrmKeyRequest(@NonNull MediaPlayer2 mp, @NonNull DataSourceDesc dsd, @NonNull MediaDrm.KeyRequest request) { return new byte[0]; } @NonNull public abstract byte[] onDrmKeyRequest(@NonNull MediaPlayer2 mp, @NonNull DataSourceDesc dsd, @NonNull MediaDrm.KeyRequest request); /** * Called to notify the client that {@code mp} is ready to decrypt DRM protected data source Loading @@ -3657,10 +3711,11 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { /** * Registers the callback to be invoked for various DRM events. * * This is a synchronous call. * * @param eventCallback the callback that will be run * @param executor the executor through which the callback should be invoked */ // This is a synchronous call. public void setDrmEventCallback(@NonNull @CallbackExecutor Executor executor, @NonNull DrmEventCallback eventCallback) { if (eventCallback == null) { Loading @@ -3677,8 +3732,9 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { /** * Clear the {@link DrmEventCallback}. * * This is a synchronous call. */ // This is a synchronous call. public void clearDrmEventCallback() { synchronized (mDrmEventCallbackLock) { mDrmEventCallback = null; Loading Loading
api/current.txt +10 −5 Original line number Diff line number Diff line Loading @@ -25683,11 +25683,11 @@ package android.media { field public static final int SEEK_PREVIOUS_SYNC = 0; // 0x0 } public static class MediaPlayer2.DrmEventCallback { public abstract static class MediaPlayer2.DrmEventCallback { ctor public MediaPlayer2.DrmEventCallback(); method public void onDrmConfig(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaDrm); method @Nullable public android.media.MediaPlayer2.DrmPreparationInfo onDrmInfo(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaPlayer2.DrmInfo); method @NonNull public byte[] onDrmKeyRequest(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaDrm.KeyRequest); method @Nullable public abstract android.media.MediaPlayer2.DrmPreparationInfo onDrmInfo(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaPlayer2.DrmInfo); method @NonNull public abstract byte[] onDrmKeyRequest(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaDrm.KeyRequest); method public void onDrmPrepared(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, int, @Nullable byte[]); } Loading @@ -25697,17 +25697,22 @@ package android.media { } public static final class MediaPlayer2.DrmPreparationInfo { method @Nullable public byte[] getInitData(); method @Nullable public byte[] getKeySetId(); method public int getKeyType(); method @Nullable public String getMimeType(); method @Nullable public java.util.Map<java.lang.String,java.lang.String> getOptionalParameters(); method @NonNull public java.util.UUID getUuid(); } public static final class MediaPlayer2.DrmPreparationInfo.Builder { ctor public MediaPlayer2.DrmPreparationInfo.Builder(); ctor public MediaPlayer2.DrmPreparationInfo.Builder(@NonNull java.util.UUID); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo build(); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setInitData(@Nullable byte[]); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setKeySetId(@Nullable byte[]); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setKeyType(int); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setMimeType(@Nullable String); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setOptionalParameters(@Nullable java.util.Map<java.lang.String,java.lang.String>); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setUuid(@NonNull java.util.UUID); } public static class MediaPlayer2.EventCallback {
media/apex/java/android/media/MediaPlayer2.java +80 −24 Original line number Diff line number Diff line Loading @@ -3439,10 +3439,18 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { /** * Mutable builder to create a {@link MediaPlayer2.DrmPreparationInfo} object. * * {@link Builder#Builder(UUID) UUID} must not be null; {@link #setKeyType keyType} * must be one of {@link MediaDrm#KEY_TYPE_STREAMING} or {@link MediaDrm#KEY_TYPE_OFFLINE}. * <p> * When {@link #setKeyType keyType} is {@link MediaDrm#KEY_TYPE_STREAMING}, * {@link #setInitData(byte[]) initData} and {@link #setMimeType(String) mimeType} * must not be null; When {@link #setKeyType keyType} is {@link MediaDrm#KEY_TYPE_OFFLINE}, * {@link #setKeySetId(byte[]) keySetId} must not be null. */ public static final class Builder { private UUID mUUID; private final UUID mUUID; private byte[] mKeySetId; private byte[] mInitData; private String mMimeType; Loading @@ -3450,15 +3458,11 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { private Map<String, String> mOptionalParameters; /** * Set UUID of the crypto scheme selected to decrypt content. An UUID can be retrieved * from the source listening to {@link MediaPlayer2.DrmEventCallback#onDrmInfo}. * * @param uuid of selected crypto scheme * @return this * @param uuid UUID of the crypto scheme selected to decrypt content. An UUID can be * retrieved from the source listening to {@link DrmEventCallback#onDrmInfo}. */ public @NonNull Builder setUuid(@NonNull UUID uuid) { public Builder(@NonNull UUID uuid) { this.mUUID = uuid; return this; } /** Loading Loading @@ -3531,12 +3535,16 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { } /** * @return an immutable {@link MediaPlayer2.DrmPreparationInfo} representing the * settings of this builder * @return an immutable {@link DrmPreparationInfo} based on settings of this builder */ public @NonNull MediaPlayer2.DrmPreparationInfo build() { return new MediaPlayer2.DrmPreparationInfo(mUUID, mKeySetId, mInitData, mMimeType, mKeyType, mOptionalParameters); @NonNull public DrmPreparationInfo build() { final DrmPreparationInfo info = new DrmPreparationInfo(mUUID, mKeySetId, mInitData, mMimeType, mKeyType, mOptionalParameters); if (!info.isValid()) { throw new IllegalArgumentException("invalid DrmPreparationInfo"); } return info; } } Loading Loading @@ -3572,13 +3580,61 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { } return false; } /** * @return UUID of the crypto scheme selected to decrypt content. */ @NonNull public UUID getUuid() { return mUUID; } /** * @return identifier of the persisted offline key. */ @Nullable public byte[] getKeySetId() { return mKeySetId; } /** * @return container-specific DRM initialization data. */ @Nullable public byte[] getInitData() { return mInitData; } /** * @return mime type of the content */ @Nullable public String getMimeType() { return mMimeType; } /** * @return type of the key request. */ @MediaPlayer2.MediaDrmKeyType public int getKeyType() { return mKeyType; } /** * @return optional parameters to be included in the {@link MediaDrm.KeyRequest}. */ @Nullable public Map<String, String> getOptionalParameters() { return mOptionalParameters; } } /** * Interface definition for callbacks to be invoked when the player has the corresponding * DRM events. */ public static class DrmEventCallback { public static abstract class DrmEventCallback { /** * Called to indicate DRM info is available. Return a {@link DrmPreparationInfo} object that Loading @@ -3591,10 +3647,9 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { * @return a {@link DrmPreparationInfo} object to initialize DRM playback, or null to skip * DRM initialization */ public @Nullable DrmPreparationInfo onDrmInfo(@NonNull MediaPlayer2 mp, @NonNull DataSourceDesc dsd, @NonNull DrmInfo drmInfo) { return null; } @Nullable public abstract DrmPreparationInfo onDrmInfo(@NonNull MediaPlayer2 mp, @NonNull DataSourceDesc dsd, @NonNull DrmInfo drmInfo); /** * Called to give the app the opportunity to configure DRM before the session is created. Loading Loading @@ -3629,10 +3684,9 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { * throwing an {@link RuntimeException} from this callback would trigger an * {@link EventCallback#onError}. */ public @NonNull byte[] onDrmKeyRequest(@NonNull MediaPlayer2 mp, @NonNull DataSourceDesc dsd, @NonNull MediaDrm.KeyRequest request) { return new byte[0]; } @NonNull public abstract byte[] onDrmKeyRequest(@NonNull MediaPlayer2 mp, @NonNull DataSourceDesc dsd, @NonNull MediaDrm.KeyRequest request); /** * Called to notify the client that {@code mp} is ready to decrypt DRM protected data source Loading @@ -3657,10 +3711,11 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { /** * Registers the callback to be invoked for various DRM events. * * This is a synchronous call. * * @param eventCallback the callback that will be run * @param executor the executor through which the callback should be invoked */ // This is a synchronous call. public void setDrmEventCallback(@NonNull @CallbackExecutor Executor executor, @NonNull DrmEventCallback eventCallback) { if (eventCallback == null) { Loading @@ -3677,8 +3732,9 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { /** * Clear the {@link DrmEventCallback}. * * This is a synchronous call. */ // This is a synchronous call. public void clearDrmEventCallback() { synchronized (mDrmEventCallbackLock) { mDrmEventCallback = null; Loading