Loading api/current.txt +11 −11 Original line number Diff line number Diff line Loading @@ -15718,7 +15718,7 @@ package android.media { method public void restoreKeys(byte[], byte[]); method public void setOnEventListener(android.media.MediaDrm.OnEventListener); method public void setOnExpirationUpdateListener(android.media.MediaDrm.OnExpirationUpdateListener, android.os.Handler); method public void setOnKeysChangeListener(android.media.MediaDrm.OnKeysChangeListener, android.os.Handler); method public void setOnKeyStatusChangeListener(android.media.MediaDrm.OnKeyStatusChangeListener, android.os.Handler); method public void setPropertyByteArray(java.lang.String, byte[]); method public void setPropertyString(java.lang.String, java.lang.String); field public static final int EVENT_KEY_EXPIRED = 3; // 0x3 Loading @@ -15726,11 +15726,6 @@ package android.media { field public static final deprecated int EVENT_PROVISION_REQUIRED = 1; // 0x1 field public static final int EVENT_SESSION_RECLAIMED = 5; // 0x5 field public static final int EVENT_VENDOR_DEFINED = 4; // 0x4 field public static final int KEY_STATUS_EXPIRED = 1; // 0x1 field public static final int KEY_STATUS_INTERNAL_ERROR = 4; // 0x4 field public static final int KEY_STATUS_OUTPUT_NOT_ALLOWED = 2; // 0x2 field public static final int KEY_STATUS_PENDING = 3; // 0x3 field public static final int KEY_STATUS_USABLE = 0; // 0x0 field public static final int KEY_TYPE_OFFLINE = 2; // 0x2 field public static final int KEY_TYPE_RELEASE = 3; // 0x3 field public static final int KEY_TYPE_STREAMING = 1; // 0x1 Loading @@ -15739,9 +15734,6 @@ package android.media { field public static final java.lang.String PROPERTY_DEVICE_UNIQUE_ID = "deviceUniqueId"; field public static final java.lang.String PROPERTY_VENDOR = "vendor"; field public static final java.lang.String PROPERTY_VERSION = "version"; field public static final int REQUEST_TYPE_INITIAL = 0; // 0x0 field public static final int REQUEST_TYPE_RELEASE = 2; // 0x2 field public static final int REQUEST_TYPE_RENEWAL = 1; // 0x1 } public final class MediaDrm.CryptoSession { Loading @@ -15755,11 +15747,19 @@ package android.media { method public byte[] getData(); method public java.lang.String getDefaultUrl(); method public int getRequestType(); field public static final int REQUEST_TYPE_INITIAL = 0; // 0x0 field public static final int REQUEST_TYPE_RELEASE = 2; // 0x2 field public static final int REQUEST_TYPE_RENEWAL = 1; // 0x1 } public static final class MediaDrm.KeyStatus { method public byte[] getKeyId(); method public int getStatusCode(); field public static final int STATUS_EXPIRED = 1; // 0x1 field public static final int STATUS_INTERNAL_ERROR = 4; // 0x4 field public static final int STATUS_OUTPUT_NOT_ALLOWED = 2; // 0x2 field public static final int STATUS_PENDING = 3; // 0x3 field public static final int STATUS_USABLE = 0; // 0x0 } public static final class MediaDrm.MediaDrmStateException extends java.lang.IllegalStateException { Loading @@ -15774,8 +15774,8 @@ package android.media { method public abstract void onExpirationUpdate(android.media.MediaDrm, byte[], long); } public static abstract interface MediaDrm.OnKeysChangeListener { method public abstract void onKeysChange(android.media.MediaDrm, byte[], java.util.List<android.media.MediaDrm.KeyStatus>, boolean); public static abstract interface MediaDrm.OnKeyStatusChangeListener { method public abstract void onKeyStatusChange(android.media.MediaDrm, byte[], java.util.List<android.media.MediaDrm.KeyStatus>, boolean); } public static final class MediaDrm.ProvisionRequest { api/system-current.txt +11 −11 Original line number Diff line number Diff line Loading @@ -16940,7 +16940,7 @@ package android.media { method public void restoreKeys(byte[], byte[]); method public void setOnEventListener(android.media.MediaDrm.OnEventListener); method public void setOnExpirationUpdateListener(android.media.MediaDrm.OnExpirationUpdateListener, android.os.Handler); method public void setOnKeysChangeListener(android.media.MediaDrm.OnKeysChangeListener, android.os.Handler); method public void setOnKeyStatusChangeListener(android.media.MediaDrm.OnKeyStatusChangeListener, android.os.Handler); method public void setPropertyByteArray(java.lang.String, byte[]); method public void setPropertyString(java.lang.String, java.lang.String); method public void unprovisionDevice(); Loading @@ -16949,11 +16949,6 @@ package android.media { field public static final deprecated int EVENT_PROVISION_REQUIRED = 1; // 0x1 field public static final int EVENT_SESSION_RECLAIMED = 5; // 0x5 field public static final int EVENT_VENDOR_DEFINED = 4; // 0x4 field public static final int KEY_STATUS_EXPIRED = 1; // 0x1 field public static final int KEY_STATUS_INTERNAL_ERROR = 4; // 0x4 field public static final int KEY_STATUS_OUTPUT_NOT_ALLOWED = 2; // 0x2 field public static final int KEY_STATUS_PENDING = 3; // 0x3 field public static final int KEY_STATUS_USABLE = 0; // 0x0 field public static final int KEY_TYPE_OFFLINE = 2; // 0x2 field public static final int KEY_TYPE_RELEASE = 3; // 0x3 field public static final int KEY_TYPE_STREAMING = 1; // 0x1 Loading @@ -16962,9 +16957,6 @@ package android.media { field public static final java.lang.String PROPERTY_DEVICE_UNIQUE_ID = "deviceUniqueId"; field public static final java.lang.String PROPERTY_VENDOR = "vendor"; field public static final java.lang.String PROPERTY_VERSION = "version"; field public static final int REQUEST_TYPE_INITIAL = 0; // 0x0 field public static final int REQUEST_TYPE_RELEASE = 2; // 0x2 field public static final int REQUEST_TYPE_RENEWAL = 1; // 0x1 } public final class MediaDrm.CryptoSession { Loading @@ -16978,11 +16970,19 @@ package android.media { method public byte[] getData(); method public java.lang.String getDefaultUrl(); method public int getRequestType(); field public static final int REQUEST_TYPE_INITIAL = 0; // 0x0 field public static final int REQUEST_TYPE_RELEASE = 2; // 0x2 field public static final int REQUEST_TYPE_RENEWAL = 1; // 0x1 } public static final class MediaDrm.KeyStatus { method public byte[] getKeyId(); method public int getStatusCode(); field public static final int STATUS_EXPIRED = 1; // 0x1 field public static final int STATUS_INTERNAL_ERROR = 4; // 0x4 field public static final int STATUS_OUTPUT_NOT_ALLOWED = 2; // 0x2 field public static final int STATUS_PENDING = 3; // 0x3 field public static final int STATUS_USABLE = 0; // 0x0 } public static final class MediaDrm.MediaDrmStateException extends java.lang.IllegalStateException { Loading @@ -16997,8 +16997,8 @@ package android.media { method public abstract void onExpirationUpdate(android.media.MediaDrm, byte[], long); } public static abstract interface MediaDrm.OnKeysChangeListener { method public abstract void onKeysChange(android.media.MediaDrm, byte[], java.util.List<android.media.MediaDrm.KeyStatus>, boolean); public static abstract interface MediaDrm.OnKeyStatusChangeListener { method public abstract void onKeyStatusChange(android.media.MediaDrm, byte[], java.util.List<android.media.MediaDrm.KeyStatus>, boolean); } public static final class MediaDrm.ProvisionRequest { media/java/android/media/MediaDrm.java +85 −80 Original line number Diff line number Diff line Loading @@ -110,10 +110,10 @@ public final class MediaDrm { private static final String PERMISSION = android.Manifest.permission.ACCESS_DRM_CERTIFICATES; private EventHandler mEventHandler; private EventHandler mOnKeysChangeEventHandler; private EventHandler mOnKeyStatusChangeEventHandler; private EventHandler mOnExpirationUpdateEventHandler; private OnEventListener mOnEventListener; private OnKeysChangeListener mOnKeysChangeListener; private OnKeyStatusChangeListener mOnKeyStatusChangeListener; private OnExpirationUpdateListener mOnExpirationUpdateListener; private long mNativeContext; Loading Loading @@ -297,8 +297,8 @@ public final class MediaDrm { * @param handler the handler on which the listener should be invoked, or * null if the listener should be invoked on the calling thread's looper. */ public void setOnKeysChangeListener( @Nullable OnKeysChangeListener listener, @Nullable Handler handler) { public void setOnKeyStatusChangeListener( @Nullable OnKeyStatusChangeListener listener, @Nullable Handler handler) { if (listener != null) { Looper looper = handler != null ? handler.getLooper() : Looper.myLooper(); if (looper != null) { Loading @@ -307,14 +307,14 @@ public final class MediaDrm { } } } mOnKeysChangeListener = listener; mOnKeyStatusChangeListener = listener; } /** * Interface definition for a callback to be invoked when the keys in a drm * session change states. */ public interface OnKeysChangeListener public interface OnKeyStatusChangeListener { /** * Called when the keys in a session change status, such as when the license Loading @@ -328,64 +328,64 @@ public final class MediaDrm { * which may trigger an attempt to resume playback on the media stream * if it is currently blocked waiting for a key. */ void onKeysChange( void onKeyStatusChange( @NonNull MediaDrm md, @NonNull byte[] sessionId, @NonNull List<KeyStatus> keyInformation, boolean hasNewUsableKey); } /** * Defines the status of a key. * A KeyStatus for each key in a session is provided to the * {@link OnKeyStatusChangeListener#onKeyStatusChange} * listener. */ public static final class KeyStatus { private final byte[] mKeyId; private final int mStatusCode; /** * The key is currently usable to decrypt media data */ public static final int KEY_STATUS_USABLE = 0; public static final int STATUS_USABLE = 0; /** * The key is no longer usable to decrypt media data because its * expiration time has passed. */ public static final int KEY_STATUS_EXPIRED = 1; public static final int STATUS_EXPIRED = 1; /** * The key is not currently usable to decrypt media data because its * output requirements cannot currently be met. */ public static final int KEY_STATUS_OUTPUT_NOT_ALLOWED = 2; public static final int STATUS_OUTPUT_NOT_ALLOWED = 2; /** * The status of the key is not yet known and is being determined. * The status will be updated with the actual status when it has * been determined. */ public static final int KEY_STATUS_PENDING = 3; public static final int STATUS_PENDING = 3; /** * The key is not currently usable to decrypt media data because of an * internal error in processing unrelated to input parameters. This error * is not actionable by an app. */ public static final int KEY_STATUS_INTERNAL_ERROR = 4; public static final int STATUS_INTERNAL_ERROR = 4; /** @hide */ @IntDef({ KEY_STATUS_USABLE, KEY_STATUS_EXPIRED, KEY_STATUS_OUTPUT_NOT_ALLOWED, KEY_STATUS_PENDING, KEY_STATUS_INTERNAL_ERROR, STATUS_USABLE, STATUS_EXPIRED, STATUS_OUTPUT_NOT_ALLOWED, STATUS_PENDING, STATUS_INTERNAL_ERROR, }) @Retention(RetentionPolicy.SOURCE) public @interface KeyStatusCode {} /** * Defines the status of a key. * A KeyStatus for each key in a session is provided to the * {@link OnKeysChangeListener#onKeysChange} * listener. */ public static final class KeyStatus { private final byte[] mKeyId; private final int mStatusCode; KeyStatus(@NonNull byte[] keyId, @KeyStatusCode int statusCode) { mKeyId = keyId; mStatusCode = statusCode; Loading @@ -393,6 +393,9 @@ public final class MediaDrm { /** * Returns the status code for the key * @return one of {@link #STATUS_USABLE}, {@link #STATUS_EXPIRED}, * {@link #STATUS_OUTPUT_NOT_ALLOWED}, {@link #STATUS_PENDING} * or {@link #STATUS_INTERNAL_ERROR}. */ @KeyStatusCode public int getStatusCode() { return mStatusCode; } Loading Loading @@ -484,7 +487,7 @@ public final class MediaDrm { private static final int DRM_EVENT = 200; private static final int EXPIRATION_UPDATE = 201; private static final int KEYS_CHANGE = 202; private static final int KEY_STATUS_CHANGE = 202; private class EventHandler extends Handler { Loading Loading @@ -522,8 +525,8 @@ public final class MediaDrm { } return; case KEYS_CHANGE: if (mOnKeysChangeListener != null) { case KEY_STATUS_CHANGE: if (mOnKeyStatusChangeListener != null) { if (msg.obj != null && msg.obj instanceof Parcel) { Parcel parcel = (Parcel)msg.obj; byte[] sessionId = parcel.createByteArray(); Loading @@ -531,9 +534,9 @@ public final class MediaDrm { List<KeyStatus> keyStatusList = keyStatusListFromParcel(parcel); boolean hasNewUsableKey = (parcel.readInt() != 0); Log.i(TAG, "Drm keys change"); mOnKeysChangeListener.onKeysChange(mMediaDrm, sessionId, keyStatusList, hasNewUsableKey); Log.i(TAG, "Drm key status changed"); mOnKeyStatusChangeListener.onKeyStatusChange(mMediaDrm, sessionId, keyStatusList, hasNewUsableKey); } } } Loading Loading @@ -640,6 +643,14 @@ public final class MediaDrm { @Retention(RetentionPolicy.SOURCE) public @interface KeyType {} /** * Contains the opaque data an app uses to request keys from a license server */ public static final class KeyRequest { private byte[] mData; private String mDefaultUrl; private int mRequestType; /** * Key request type is initial license request */ Loading @@ -664,14 +675,6 @@ public final class MediaDrm { @Retention(RetentionPolicy.SOURCE) public @interface RequestType {} /** * Contains the opaque data an app uses to request keys from a license server */ public static final class KeyRequest { private byte[] mData; private String mDefaultUrl; private int mRequestType; KeyRequest() {} /** Loading Loading @@ -707,6 +710,8 @@ public final class MediaDrm { /** * Get the type of the request * @return one of {@link #REQUEST_TYPE_INITIAL}, * {@link #REQUEST_TYPE_RENEWAL} or {@link #REQUEST_TYPE_RELEASE} */ @RequestType public int getRequestType() { return mRequestType; } Loading media/jni/android_media_MediaDrm.cpp +11 −11 Original line number Diff line number Diff line Loading @@ -99,7 +99,7 @@ struct EventTypes { struct EventWhat { jint kWhatDrmEvent; jint kWhatExpirationUpdate; jint kWhatKeysChange; jint kWhatKeyStatusChange; } gEventWhat; struct KeyTypes { Loading Loading @@ -221,7 +221,7 @@ void JNIDrmListener::notify(DrmPlugin::EventType eventType, int extra, jwhat = gEventWhat.kWhatExpirationUpdate; break; case DrmPlugin::kDrmPluginEventKeysChange: jwhat = gEventWhat.kWhatKeysChange; jwhat = gEventWhat.kWhatKeyStatusChange; break; default: ALOGE("Invalid event DrmPlugin::EventType %d, ignored", (int)eventType); Loading Loading @@ -609,8 +609,8 @@ static void android_media_MediaDrm_native_init(JNIEnv *env) { gEventWhat.kWhatDrmEvent = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "EXPIRATION_UPDATE", "I"); gEventWhat.kWhatExpirationUpdate = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "KEYS_CHANGE", "I"); gEventWhat.kWhatKeysChange = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "KEY_STATUS_CHANGE", "I"); gEventWhat.kWhatKeyStatusChange = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "KEY_TYPE_STREAMING", "I"); gKeyTypes.kKeyTypeStreaming = env->GetStaticIntField(clazz, field); Loading @@ -619,13 +619,6 @@ static void android_media_MediaDrm_native_init(JNIEnv *env) { GET_STATIC_FIELD_ID(field, clazz, "KEY_TYPE_RELEASE", "I"); gKeyTypes.kKeyTypeRelease = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_INITIAL", "I"); gKeyRequestTypes.kKeyRequestTypeInitial = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_RENEWAL", "I"); gKeyRequestTypes.kKeyRequestTypeRenewal = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_RELEASE", "I"); gKeyRequestTypes.kKeyRequestTypeRelease = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "CERTIFICATE_TYPE_NONE", "I"); gCertificateTypes.kCertificateTypeNone = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "CERTIFICATE_TYPE_X509", "I"); Loading @@ -636,6 +629,13 @@ static void android_media_MediaDrm_native_init(JNIEnv *env) { GET_FIELD_ID(gFields.keyRequest.defaultUrl, clazz, "mDefaultUrl", "Ljava/lang/String;"); GET_FIELD_ID(gFields.keyRequest.requestType, clazz, "mRequestType", "I"); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_INITIAL", "I"); gKeyRequestTypes.kKeyRequestTypeInitial = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_RENEWAL", "I"); gKeyRequestTypes.kKeyRequestTypeRenewal = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_RELEASE", "I"); gKeyRequestTypes.kKeyRequestTypeRelease = env->GetStaticIntField(clazz, field); FIND_CLASS(clazz, "android/media/MediaDrm$ProvisionRequest"); GET_FIELD_ID(gFields.provisionRequest.data, clazz, "mData", "[B"); GET_FIELD_ID(gFields.provisionRequest.defaultUrl, clazz, "mDefaultUrl", "Ljava/lang/String;"); Loading Loading
api/current.txt +11 −11 Original line number Diff line number Diff line Loading @@ -15718,7 +15718,7 @@ package android.media { method public void restoreKeys(byte[], byte[]); method public void setOnEventListener(android.media.MediaDrm.OnEventListener); method public void setOnExpirationUpdateListener(android.media.MediaDrm.OnExpirationUpdateListener, android.os.Handler); method public void setOnKeysChangeListener(android.media.MediaDrm.OnKeysChangeListener, android.os.Handler); method public void setOnKeyStatusChangeListener(android.media.MediaDrm.OnKeyStatusChangeListener, android.os.Handler); method public void setPropertyByteArray(java.lang.String, byte[]); method public void setPropertyString(java.lang.String, java.lang.String); field public static final int EVENT_KEY_EXPIRED = 3; // 0x3 Loading @@ -15726,11 +15726,6 @@ package android.media { field public static final deprecated int EVENT_PROVISION_REQUIRED = 1; // 0x1 field public static final int EVENT_SESSION_RECLAIMED = 5; // 0x5 field public static final int EVENT_VENDOR_DEFINED = 4; // 0x4 field public static final int KEY_STATUS_EXPIRED = 1; // 0x1 field public static final int KEY_STATUS_INTERNAL_ERROR = 4; // 0x4 field public static final int KEY_STATUS_OUTPUT_NOT_ALLOWED = 2; // 0x2 field public static final int KEY_STATUS_PENDING = 3; // 0x3 field public static final int KEY_STATUS_USABLE = 0; // 0x0 field public static final int KEY_TYPE_OFFLINE = 2; // 0x2 field public static final int KEY_TYPE_RELEASE = 3; // 0x3 field public static final int KEY_TYPE_STREAMING = 1; // 0x1 Loading @@ -15739,9 +15734,6 @@ package android.media { field public static final java.lang.String PROPERTY_DEVICE_UNIQUE_ID = "deviceUniqueId"; field public static final java.lang.String PROPERTY_VENDOR = "vendor"; field public static final java.lang.String PROPERTY_VERSION = "version"; field public static final int REQUEST_TYPE_INITIAL = 0; // 0x0 field public static final int REQUEST_TYPE_RELEASE = 2; // 0x2 field public static final int REQUEST_TYPE_RENEWAL = 1; // 0x1 } public final class MediaDrm.CryptoSession { Loading @@ -15755,11 +15747,19 @@ package android.media { method public byte[] getData(); method public java.lang.String getDefaultUrl(); method public int getRequestType(); field public static final int REQUEST_TYPE_INITIAL = 0; // 0x0 field public static final int REQUEST_TYPE_RELEASE = 2; // 0x2 field public static final int REQUEST_TYPE_RENEWAL = 1; // 0x1 } public static final class MediaDrm.KeyStatus { method public byte[] getKeyId(); method public int getStatusCode(); field public static final int STATUS_EXPIRED = 1; // 0x1 field public static final int STATUS_INTERNAL_ERROR = 4; // 0x4 field public static final int STATUS_OUTPUT_NOT_ALLOWED = 2; // 0x2 field public static final int STATUS_PENDING = 3; // 0x3 field public static final int STATUS_USABLE = 0; // 0x0 } public static final class MediaDrm.MediaDrmStateException extends java.lang.IllegalStateException { Loading @@ -15774,8 +15774,8 @@ package android.media { method public abstract void onExpirationUpdate(android.media.MediaDrm, byte[], long); } public static abstract interface MediaDrm.OnKeysChangeListener { method public abstract void onKeysChange(android.media.MediaDrm, byte[], java.util.List<android.media.MediaDrm.KeyStatus>, boolean); public static abstract interface MediaDrm.OnKeyStatusChangeListener { method public abstract void onKeyStatusChange(android.media.MediaDrm, byte[], java.util.List<android.media.MediaDrm.KeyStatus>, boolean); } public static final class MediaDrm.ProvisionRequest {
api/system-current.txt +11 −11 Original line number Diff line number Diff line Loading @@ -16940,7 +16940,7 @@ package android.media { method public void restoreKeys(byte[], byte[]); method public void setOnEventListener(android.media.MediaDrm.OnEventListener); method public void setOnExpirationUpdateListener(android.media.MediaDrm.OnExpirationUpdateListener, android.os.Handler); method public void setOnKeysChangeListener(android.media.MediaDrm.OnKeysChangeListener, android.os.Handler); method public void setOnKeyStatusChangeListener(android.media.MediaDrm.OnKeyStatusChangeListener, android.os.Handler); method public void setPropertyByteArray(java.lang.String, byte[]); method public void setPropertyString(java.lang.String, java.lang.String); method public void unprovisionDevice(); Loading @@ -16949,11 +16949,6 @@ package android.media { field public static final deprecated int EVENT_PROVISION_REQUIRED = 1; // 0x1 field public static final int EVENT_SESSION_RECLAIMED = 5; // 0x5 field public static final int EVENT_VENDOR_DEFINED = 4; // 0x4 field public static final int KEY_STATUS_EXPIRED = 1; // 0x1 field public static final int KEY_STATUS_INTERNAL_ERROR = 4; // 0x4 field public static final int KEY_STATUS_OUTPUT_NOT_ALLOWED = 2; // 0x2 field public static final int KEY_STATUS_PENDING = 3; // 0x3 field public static final int KEY_STATUS_USABLE = 0; // 0x0 field public static final int KEY_TYPE_OFFLINE = 2; // 0x2 field public static final int KEY_TYPE_RELEASE = 3; // 0x3 field public static final int KEY_TYPE_STREAMING = 1; // 0x1 Loading @@ -16962,9 +16957,6 @@ package android.media { field public static final java.lang.String PROPERTY_DEVICE_UNIQUE_ID = "deviceUniqueId"; field public static final java.lang.String PROPERTY_VENDOR = "vendor"; field public static final java.lang.String PROPERTY_VERSION = "version"; field public static final int REQUEST_TYPE_INITIAL = 0; // 0x0 field public static final int REQUEST_TYPE_RELEASE = 2; // 0x2 field public static final int REQUEST_TYPE_RENEWAL = 1; // 0x1 } public final class MediaDrm.CryptoSession { Loading @@ -16978,11 +16970,19 @@ package android.media { method public byte[] getData(); method public java.lang.String getDefaultUrl(); method public int getRequestType(); field public static final int REQUEST_TYPE_INITIAL = 0; // 0x0 field public static final int REQUEST_TYPE_RELEASE = 2; // 0x2 field public static final int REQUEST_TYPE_RENEWAL = 1; // 0x1 } public static final class MediaDrm.KeyStatus { method public byte[] getKeyId(); method public int getStatusCode(); field public static final int STATUS_EXPIRED = 1; // 0x1 field public static final int STATUS_INTERNAL_ERROR = 4; // 0x4 field public static final int STATUS_OUTPUT_NOT_ALLOWED = 2; // 0x2 field public static final int STATUS_PENDING = 3; // 0x3 field public static final int STATUS_USABLE = 0; // 0x0 } public static final class MediaDrm.MediaDrmStateException extends java.lang.IllegalStateException { Loading @@ -16997,8 +16997,8 @@ package android.media { method public abstract void onExpirationUpdate(android.media.MediaDrm, byte[], long); } public static abstract interface MediaDrm.OnKeysChangeListener { method public abstract void onKeysChange(android.media.MediaDrm, byte[], java.util.List<android.media.MediaDrm.KeyStatus>, boolean); public static abstract interface MediaDrm.OnKeyStatusChangeListener { method public abstract void onKeyStatusChange(android.media.MediaDrm, byte[], java.util.List<android.media.MediaDrm.KeyStatus>, boolean); } public static final class MediaDrm.ProvisionRequest {
media/java/android/media/MediaDrm.java +85 −80 Original line number Diff line number Diff line Loading @@ -110,10 +110,10 @@ public final class MediaDrm { private static final String PERMISSION = android.Manifest.permission.ACCESS_DRM_CERTIFICATES; private EventHandler mEventHandler; private EventHandler mOnKeysChangeEventHandler; private EventHandler mOnKeyStatusChangeEventHandler; private EventHandler mOnExpirationUpdateEventHandler; private OnEventListener mOnEventListener; private OnKeysChangeListener mOnKeysChangeListener; private OnKeyStatusChangeListener mOnKeyStatusChangeListener; private OnExpirationUpdateListener mOnExpirationUpdateListener; private long mNativeContext; Loading Loading @@ -297,8 +297,8 @@ public final class MediaDrm { * @param handler the handler on which the listener should be invoked, or * null if the listener should be invoked on the calling thread's looper. */ public void setOnKeysChangeListener( @Nullable OnKeysChangeListener listener, @Nullable Handler handler) { public void setOnKeyStatusChangeListener( @Nullable OnKeyStatusChangeListener listener, @Nullable Handler handler) { if (listener != null) { Looper looper = handler != null ? handler.getLooper() : Looper.myLooper(); if (looper != null) { Loading @@ -307,14 +307,14 @@ public final class MediaDrm { } } } mOnKeysChangeListener = listener; mOnKeyStatusChangeListener = listener; } /** * Interface definition for a callback to be invoked when the keys in a drm * session change states. */ public interface OnKeysChangeListener public interface OnKeyStatusChangeListener { /** * Called when the keys in a session change status, such as when the license Loading @@ -328,64 +328,64 @@ public final class MediaDrm { * which may trigger an attempt to resume playback on the media stream * if it is currently blocked waiting for a key. */ void onKeysChange( void onKeyStatusChange( @NonNull MediaDrm md, @NonNull byte[] sessionId, @NonNull List<KeyStatus> keyInformation, boolean hasNewUsableKey); } /** * Defines the status of a key. * A KeyStatus for each key in a session is provided to the * {@link OnKeyStatusChangeListener#onKeyStatusChange} * listener. */ public static final class KeyStatus { private final byte[] mKeyId; private final int mStatusCode; /** * The key is currently usable to decrypt media data */ public static final int KEY_STATUS_USABLE = 0; public static final int STATUS_USABLE = 0; /** * The key is no longer usable to decrypt media data because its * expiration time has passed. */ public static final int KEY_STATUS_EXPIRED = 1; public static final int STATUS_EXPIRED = 1; /** * The key is not currently usable to decrypt media data because its * output requirements cannot currently be met. */ public static final int KEY_STATUS_OUTPUT_NOT_ALLOWED = 2; public static final int STATUS_OUTPUT_NOT_ALLOWED = 2; /** * The status of the key is not yet known and is being determined. * The status will be updated with the actual status when it has * been determined. */ public static final int KEY_STATUS_PENDING = 3; public static final int STATUS_PENDING = 3; /** * The key is not currently usable to decrypt media data because of an * internal error in processing unrelated to input parameters. This error * is not actionable by an app. */ public static final int KEY_STATUS_INTERNAL_ERROR = 4; public static final int STATUS_INTERNAL_ERROR = 4; /** @hide */ @IntDef({ KEY_STATUS_USABLE, KEY_STATUS_EXPIRED, KEY_STATUS_OUTPUT_NOT_ALLOWED, KEY_STATUS_PENDING, KEY_STATUS_INTERNAL_ERROR, STATUS_USABLE, STATUS_EXPIRED, STATUS_OUTPUT_NOT_ALLOWED, STATUS_PENDING, STATUS_INTERNAL_ERROR, }) @Retention(RetentionPolicy.SOURCE) public @interface KeyStatusCode {} /** * Defines the status of a key. * A KeyStatus for each key in a session is provided to the * {@link OnKeysChangeListener#onKeysChange} * listener. */ public static final class KeyStatus { private final byte[] mKeyId; private final int mStatusCode; KeyStatus(@NonNull byte[] keyId, @KeyStatusCode int statusCode) { mKeyId = keyId; mStatusCode = statusCode; Loading @@ -393,6 +393,9 @@ public final class MediaDrm { /** * Returns the status code for the key * @return one of {@link #STATUS_USABLE}, {@link #STATUS_EXPIRED}, * {@link #STATUS_OUTPUT_NOT_ALLOWED}, {@link #STATUS_PENDING} * or {@link #STATUS_INTERNAL_ERROR}. */ @KeyStatusCode public int getStatusCode() { return mStatusCode; } Loading Loading @@ -484,7 +487,7 @@ public final class MediaDrm { private static final int DRM_EVENT = 200; private static final int EXPIRATION_UPDATE = 201; private static final int KEYS_CHANGE = 202; private static final int KEY_STATUS_CHANGE = 202; private class EventHandler extends Handler { Loading Loading @@ -522,8 +525,8 @@ public final class MediaDrm { } return; case KEYS_CHANGE: if (mOnKeysChangeListener != null) { case KEY_STATUS_CHANGE: if (mOnKeyStatusChangeListener != null) { if (msg.obj != null && msg.obj instanceof Parcel) { Parcel parcel = (Parcel)msg.obj; byte[] sessionId = parcel.createByteArray(); Loading @@ -531,9 +534,9 @@ public final class MediaDrm { List<KeyStatus> keyStatusList = keyStatusListFromParcel(parcel); boolean hasNewUsableKey = (parcel.readInt() != 0); Log.i(TAG, "Drm keys change"); mOnKeysChangeListener.onKeysChange(mMediaDrm, sessionId, keyStatusList, hasNewUsableKey); Log.i(TAG, "Drm key status changed"); mOnKeyStatusChangeListener.onKeyStatusChange(mMediaDrm, sessionId, keyStatusList, hasNewUsableKey); } } } Loading Loading @@ -640,6 +643,14 @@ public final class MediaDrm { @Retention(RetentionPolicy.SOURCE) public @interface KeyType {} /** * Contains the opaque data an app uses to request keys from a license server */ public static final class KeyRequest { private byte[] mData; private String mDefaultUrl; private int mRequestType; /** * Key request type is initial license request */ Loading @@ -664,14 +675,6 @@ public final class MediaDrm { @Retention(RetentionPolicy.SOURCE) public @interface RequestType {} /** * Contains the opaque data an app uses to request keys from a license server */ public static final class KeyRequest { private byte[] mData; private String mDefaultUrl; private int mRequestType; KeyRequest() {} /** Loading Loading @@ -707,6 +710,8 @@ public final class MediaDrm { /** * Get the type of the request * @return one of {@link #REQUEST_TYPE_INITIAL}, * {@link #REQUEST_TYPE_RENEWAL} or {@link #REQUEST_TYPE_RELEASE} */ @RequestType public int getRequestType() { return mRequestType; } Loading
media/jni/android_media_MediaDrm.cpp +11 −11 Original line number Diff line number Diff line Loading @@ -99,7 +99,7 @@ struct EventTypes { struct EventWhat { jint kWhatDrmEvent; jint kWhatExpirationUpdate; jint kWhatKeysChange; jint kWhatKeyStatusChange; } gEventWhat; struct KeyTypes { Loading Loading @@ -221,7 +221,7 @@ void JNIDrmListener::notify(DrmPlugin::EventType eventType, int extra, jwhat = gEventWhat.kWhatExpirationUpdate; break; case DrmPlugin::kDrmPluginEventKeysChange: jwhat = gEventWhat.kWhatKeysChange; jwhat = gEventWhat.kWhatKeyStatusChange; break; default: ALOGE("Invalid event DrmPlugin::EventType %d, ignored", (int)eventType); Loading Loading @@ -609,8 +609,8 @@ static void android_media_MediaDrm_native_init(JNIEnv *env) { gEventWhat.kWhatDrmEvent = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "EXPIRATION_UPDATE", "I"); gEventWhat.kWhatExpirationUpdate = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "KEYS_CHANGE", "I"); gEventWhat.kWhatKeysChange = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "KEY_STATUS_CHANGE", "I"); gEventWhat.kWhatKeyStatusChange = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "KEY_TYPE_STREAMING", "I"); gKeyTypes.kKeyTypeStreaming = env->GetStaticIntField(clazz, field); Loading @@ -619,13 +619,6 @@ static void android_media_MediaDrm_native_init(JNIEnv *env) { GET_STATIC_FIELD_ID(field, clazz, "KEY_TYPE_RELEASE", "I"); gKeyTypes.kKeyTypeRelease = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_INITIAL", "I"); gKeyRequestTypes.kKeyRequestTypeInitial = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_RENEWAL", "I"); gKeyRequestTypes.kKeyRequestTypeRenewal = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_RELEASE", "I"); gKeyRequestTypes.kKeyRequestTypeRelease = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "CERTIFICATE_TYPE_NONE", "I"); gCertificateTypes.kCertificateTypeNone = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "CERTIFICATE_TYPE_X509", "I"); Loading @@ -636,6 +629,13 @@ static void android_media_MediaDrm_native_init(JNIEnv *env) { GET_FIELD_ID(gFields.keyRequest.defaultUrl, clazz, "mDefaultUrl", "Ljava/lang/String;"); GET_FIELD_ID(gFields.keyRequest.requestType, clazz, "mRequestType", "I"); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_INITIAL", "I"); gKeyRequestTypes.kKeyRequestTypeInitial = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_RENEWAL", "I"); gKeyRequestTypes.kKeyRequestTypeRenewal = env->GetStaticIntField(clazz, field); GET_STATIC_FIELD_ID(field, clazz, "REQUEST_TYPE_RELEASE", "I"); gKeyRequestTypes.kKeyRequestTypeRelease = env->GetStaticIntField(clazz, field); FIND_CLASS(clazz, "android/media/MediaDrm$ProvisionRequest"); GET_FIELD_ID(gFields.provisionRequest.data, clazz, "mData", "[B"); GET_FIELD_ID(gFields.provisionRequest.defaultUrl, clazz, "mDefaultUrl", "Ljava/lang/String;"); Loading