Loading api/current.txt +10 −5 Original line number Original line Diff line number Diff line Loading @@ -25683,11 +25683,11 @@ package android.media { field public static final int SEEK_PREVIOUS_SYNC = 0; // 0x0 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(); ctor public MediaPlayer2.DrmEventCallback(); method public void onDrmConfig(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaDrm); 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 @Nullable public abstract 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 @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[]); 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 { 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 { 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 build(); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setInitData(@Nullable byte[]); 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 setKeySetId(@Nullable byte[]); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setKeyType(int); 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 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 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 { public static class MediaPlayer2.EventCallback { media/apex/java/android/media/MediaPlayer2.java +80 −24 Original line number Original line 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. * 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 { public static final class Builder { private UUID mUUID; private final UUID mUUID; private byte[] mKeySetId; private byte[] mKeySetId; private byte[] mInitData; private byte[] mInitData; private String mMimeType; private String mMimeType; Loading @@ -3450,15 +3458,11 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { private Map<String, String> mOptionalParameters; private Map<String, String> mOptionalParameters; /** /** * Set UUID of the crypto scheme selected to decrypt content. An UUID can be retrieved * @param uuid UUID of the crypto scheme selected to decrypt content. An UUID can be * from the source listening to {@link MediaPlayer2.DrmEventCallback#onDrmInfo}. * retrieved from the source listening to {@link DrmEventCallback#onDrmInfo}. * * @param uuid of selected crypto scheme * @return this */ */ public @NonNull Builder setUuid(@NonNull UUID uuid) { public Builder(@NonNull UUID uuid) { this.mUUID = 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 * @return an immutable {@link DrmPreparationInfo} based on settings of this builder * settings of this builder */ */ public @NonNull MediaPlayer2.DrmPreparationInfo build() { @NonNull return new MediaPlayer2.DrmPreparationInfo(mUUID, mKeySetId, mInitData, mMimeType, public DrmPreparationInfo build() { mKeyType, mOptionalParameters); 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 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 * Interface definition for callbacks to be invoked when the player has the corresponding * DRM events. * DRM events. */ */ public static class DrmEventCallback { public static abstract class DrmEventCallback { /** /** * Called to indicate DRM info is available. Return a {@link DrmPreparationInfo} object that * 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 * @return a {@link DrmPreparationInfo} object to initialize DRM playback, or null to skip * DRM initialization * DRM initialization */ */ public @Nullable DrmPreparationInfo onDrmInfo(@NonNull MediaPlayer2 mp, @Nullable @NonNull DataSourceDesc dsd, @NonNull DrmInfo drmInfo) { public abstract DrmPreparationInfo onDrmInfo(@NonNull MediaPlayer2 mp, return null; @NonNull DataSourceDesc dsd, @NonNull DrmInfo drmInfo); } /** /** * Called to give the app the opportunity to configure DRM before the session is created. * 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 * throwing an {@link RuntimeException} from this callback would trigger an * {@link EventCallback#onError}. * {@link EventCallback#onError}. */ */ public @NonNull byte[] onDrmKeyRequest(@NonNull MediaPlayer2 mp, @NonNull @NonNull DataSourceDesc dsd, @NonNull MediaDrm.KeyRequest request) { public abstract byte[] onDrmKeyRequest(@NonNull MediaPlayer2 mp, return new byte[0]; @NonNull DataSourceDesc dsd, @NonNull MediaDrm.KeyRequest request); } /** /** * Called to notify the client that {@code mp} is ready to decrypt DRM protected data source * 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. * Registers the callback to be invoked for various DRM events. * * * This is a synchronous call. * * @param eventCallback the callback that will be run * @param eventCallback the callback that will be run * @param executor the executor through which the callback should be invoked * @param executor the executor through which the callback should be invoked */ */ // This is a synchronous call. public void setDrmEventCallback(@NonNull @CallbackExecutor Executor executor, public void setDrmEventCallback(@NonNull @CallbackExecutor Executor executor, @NonNull DrmEventCallback eventCallback) { @NonNull DrmEventCallback eventCallback) { if (eventCallback == null) { if (eventCallback == null) { Loading @@ -3677,8 +3732,9 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { /** /** * Clear the {@link DrmEventCallback}. * Clear the {@link DrmEventCallback}. * * This is a synchronous call. */ */ // This is a synchronous call. public void clearDrmEventCallback() { public void clearDrmEventCallback() { synchronized (mDrmEventCallbackLock) { synchronized (mDrmEventCallbackLock) { mDrmEventCallback = null; mDrmEventCallback = null; Loading Loading
api/current.txt +10 −5 Original line number Original line Diff line number Diff line Loading @@ -25683,11 +25683,11 @@ package android.media { field public static final int SEEK_PREVIOUS_SYNC = 0; // 0x0 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(); ctor public MediaPlayer2.DrmEventCallback(); method public void onDrmConfig(@NonNull android.media.MediaPlayer2, @NonNull android.media.DataSourceDesc, @NonNull android.media.MediaDrm); 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 @Nullable public abstract 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 @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[]); 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 { 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 { 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 build(); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setInitData(@Nullable byte[]); 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 setKeySetId(@Nullable byte[]); method @NonNull public android.media.MediaPlayer2.DrmPreparationInfo.Builder setKeyType(int); 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 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 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 { public static class MediaPlayer2.EventCallback {
media/apex/java/android/media/MediaPlayer2.java +80 −24 Original line number Original line 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. * 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 { public static final class Builder { private UUID mUUID; private final UUID mUUID; private byte[] mKeySetId; private byte[] mKeySetId; private byte[] mInitData; private byte[] mInitData; private String mMimeType; private String mMimeType; Loading @@ -3450,15 +3458,11 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { private Map<String, String> mOptionalParameters; private Map<String, String> mOptionalParameters; /** /** * Set UUID of the crypto scheme selected to decrypt content. An UUID can be retrieved * @param uuid UUID of the crypto scheme selected to decrypt content. An UUID can be * from the source listening to {@link MediaPlayer2.DrmEventCallback#onDrmInfo}. * retrieved from the source listening to {@link DrmEventCallback#onDrmInfo}. * * @param uuid of selected crypto scheme * @return this */ */ public @NonNull Builder setUuid(@NonNull UUID uuid) { public Builder(@NonNull UUID uuid) { this.mUUID = 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 * @return an immutable {@link DrmPreparationInfo} based on settings of this builder * settings of this builder */ */ public @NonNull MediaPlayer2.DrmPreparationInfo build() { @NonNull return new MediaPlayer2.DrmPreparationInfo(mUUID, mKeySetId, mInitData, mMimeType, public DrmPreparationInfo build() { mKeyType, mOptionalParameters); 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 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 * Interface definition for callbacks to be invoked when the player has the corresponding * DRM events. * DRM events. */ */ public static class DrmEventCallback { public static abstract class DrmEventCallback { /** /** * Called to indicate DRM info is available. Return a {@link DrmPreparationInfo} object that * 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 * @return a {@link DrmPreparationInfo} object to initialize DRM playback, or null to skip * DRM initialization * DRM initialization */ */ public @Nullable DrmPreparationInfo onDrmInfo(@NonNull MediaPlayer2 mp, @Nullable @NonNull DataSourceDesc dsd, @NonNull DrmInfo drmInfo) { public abstract DrmPreparationInfo onDrmInfo(@NonNull MediaPlayer2 mp, return null; @NonNull DataSourceDesc dsd, @NonNull DrmInfo drmInfo); } /** /** * Called to give the app the opportunity to configure DRM before the session is created. * 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 * throwing an {@link RuntimeException} from this callback would trigger an * {@link EventCallback#onError}. * {@link EventCallback#onError}. */ */ public @NonNull byte[] onDrmKeyRequest(@NonNull MediaPlayer2 mp, @NonNull @NonNull DataSourceDesc dsd, @NonNull MediaDrm.KeyRequest request) { public abstract byte[] onDrmKeyRequest(@NonNull MediaPlayer2 mp, return new byte[0]; @NonNull DataSourceDesc dsd, @NonNull MediaDrm.KeyRequest request); } /** /** * Called to notify the client that {@code mp} is ready to decrypt DRM protected data source * 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. * Registers the callback to be invoked for various DRM events. * * * This is a synchronous call. * * @param eventCallback the callback that will be run * @param eventCallback the callback that will be run * @param executor the executor through which the callback should be invoked * @param executor the executor through which the callback should be invoked */ */ // This is a synchronous call. public void setDrmEventCallback(@NonNull @CallbackExecutor Executor executor, public void setDrmEventCallback(@NonNull @CallbackExecutor Executor executor, @NonNull DrmEventCallback eventCallback) { @NonNull DrmEventCallback eventCallback) { if (eventCallback == null) { if (eventCallback == null) { Loading @@ -3677,8 +3732,9 @@ public class MediaPlayer2 implements AutoCloseable, AudioRouting { /** /** * Clear the {@link DrmEventCallback}. * Clear the {@link DrmEventCallback}. * * This is a synchronous call. */ */ // This is a synchronous call. public void clearDrmEventCallback() { public void clearDrmEventCallback() { synchronized (mDrmEventCallbackLock) { synchronized (mDrmEventCallbackLock) { mDrmEventCallback = null; mDrmEventCallback = null; Loading