From 377314a69f233b002e2d00feb9277988abca29b0 Mon Sep 17 00:00:00 2001 From: hoangtc Date: Tue, 31 Jul 2018 08:29:15 -0700 Subject: [PATCH] Remove unnecessary DefaultKeyStatus, DefaultKeyRequest and DefaultProvisionRequest. Currently, we have KeyStatus, KeyRequest and ProvisionRequest as interface, so we can use custom implementation for purpose such as wrapping native objects. However, these interfaces and the corresponding default classes are only used to bundle data, and in all existing implementation (including native code), it's just as efficient to just use the Java default implementation. Therefore we can just get rid of the interfaces, and change the interfaces into classes with the default implementation. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=206765389 --- .../android/exoplayer2/drm/ExoMediaDrm.java | 56 +++---------------- .../exoplayer2/drm/FrameworkMediaDrm.java | 47 ++++++++++------ 2 files changed, 38 insertions(+), 65 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java index 2699559c5f..78994a9b80 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java @@ -105,101 +105,63 @@ public interface ExoMediaDrm { boolean hasNewUsableKey); } - /** - * @see android.media.MediaDrm.KeyStatus - */ - interface KeyStatus { - /** Returns the status code for the key. */ - int getStatusCode(); - /** Returns the id for the key. */ - byte[] getKeyId(); - } - - /** - * Default implementation of {@link KeyStatus}. - */ - final class DefaultKeyStatus implements KeyStatus { + /** @see android.media.MediaDrm.KeyStatus */ + final class KeyStatus { private final int statusCode; private final byte[] keyId; - DefaultKeyStatus(int statusCode, byte[] keyId) { + public KeyStatus(int statusCode, byte[] keyId) { this.statusCode = statusCode; this.keyId = keyId; } - @Override public int getStatusCode() { return statusCode; } - @Override public byte[] getKeyId() { return keyId; } } - /** - * @see android.media.MediaDrm.KeyRequest - */ - interface KeyRequest { - byte[] getData(); - String getDefaultUrl(); - } - - /** - * Default implementation of {@link KeyRequest}. - */ - final class DefaultKeyRequest implements KeyRequest { + /** @see android.media.MediaDrm.KeyRequest */ + final class KeyRequest { private final byte[] data; private final String defaultUrl; - public DefaultKeyRequest(byte[] data, String defaultUrl) { + public KeyRequest(byte[] data, String defaultUrl) { this.data = data; this.defaultUrl = defaultUrl; } - @Override public byte[] getData() { return data; } - @Override public String getDefaultUrl() { return defaultUrl; } } - /** - * @see android.media.MediaDrm.ProvisionRequest - */ - interface ProvisionRequest { - byte[] getData(); - String getDefaultUrl(); - } - - /** - * Default implementation of {@link ProvisionRequest}. - */ - final class DefaultProvisionRequest implements ProvisionRequest { + /** @see android.media.MediaDrm.ProvisionRequest */ + final class ProvisionRequest { private final byte[] data; private final String defaultUrl; - public DefaultProvisionRequest(byte[] data, String defaultUrl) { + public ProvisionRequest(byte[] data, String defaultUrl) { this.data = data; this.defaultUrl = defaultUrl; } - @Override public byte[] getData() { return data; } - @Override public String getDefaultUrl() { return defaultUrl; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java index c87e82f972..842c5669d9 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java @@ -94,20 +94,26 @@ public final class FrameworkMediaDrm implements ExoMediaDrm keyInfo, boolean hasNewUsableKey) { - List exoKeyInfo = new ArrayList<>(); - for (MediaDrm.KeyStatus keyStatus : keyInfo) { - exoKeyInfo.add(new DefaultKeyStatus(keyStatus.getStatusCode(), keyStatus.getKeyId())); - } - listener.onKeyStatusChange(FrameworkMediaDrm.this, sessionId, exoKeyInfo, - hasNewUsableKey); - } - }, null); + + mediaDrm.setOnKeyStatusChangeListener( + listener == null + ? null + : new MediaDrm.OnKeyStatusChangeListener() { + @Override + public void onKeyStatusChange( + @NonNull MediaDrm md, + @NonNull byte[] sessionId, + @NonNull List keyInfo, + boolean hasNewUsableKey) { + List exoKeyInfo = new ArrayList<>(); + for (MediaDrm.KeyStatus keyStatus : keyInfo) { + exoKeyInfo.add(new KeyStatus(keyStatus.getStatusCode(), keyStatus.getKeyId())); + } + listener.onKeyStatusChange( + FrameworkMediaDrm.this, sessionId, exoKeyInfo, hasNewUsableKey); + } + }, + null); } @Override @@ -121,8 +127,13 @@ public final class FrameworkMediaDrm implements ExoMediaDrm optionalParameters) throws NotProvisionedException { + public KeyRequest getKeyRequest( + byte[] scope, + byte[] init, + String mimeType, + int keyType, + HashMap optionalParameters) + throws NotProvisionedException { // Prior to L the Widevine CDM required data to be extracted from the PSSH atom. Some Amazon // devices also required data to be extracted from the PSSH atom for PlayReady. @@ -155,7 +166,7 @@ public final class FrameworkMediaDrm implements ExoMediaDrm