1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.drm; 18 19import java.io.File; 20import java.io.IOException; 21import java.util.Arrays; 22 23/** 24 * An entity class that wraps the license information retrieved from the online DRM server. 25 *<p> 26 * A caller can instantiate a {@link DrmRights} object by first invoking the 27 * {@link DrmManagerClient#processDrmInfo(DrmInfo)} method and then using the resulting 28 * {@link ProcessedData} object to invoke the {@link DrmRights#DrmRights(ProcessedData, String)} 29 * constructor. 30 *<p> 31 * A caller can also instantiate a {@link DrmRights} object by using the 32 * {@link DrmRights#DrmRights(String, String)} constructor, which takes a path to a file 33 * containing rights information instead of a <code>ProcessedData</code>. 34 *<p> 35 * Please note that the account id and subscription id is not mandatory by all DRM agents 36 * or plugins. When account id or subscription id is not required by the specific DRM 37 * agent or plugin, they can be either null, or an empty string, or any other don't-care 38 * string value. 39 * 40 */ 41public class DrmRights { 42 private byte[] mData; 43 private String mMimeType; 44 private String mAccountId; 45 private String mSubscriptionId; 46 47 /** 48 * Creates a <code>DrmRights</code> object with the given parameters. 49 * 50 * @param rightsFilePath Path to the file containing rights information. 51 * @param mimeType MIME type. Must not be null or an empty string. 52 */ 53 public DrmRights(String rightsFilePath, String mimeType) { 54 File file = new File(rightsFilePath); 55 instantiate(file, mimeType); 56 } 57 58 /** 59 * Creates a <code>DrmRights</code> object with the given parameters. 60 * 61 * @param rightsFilePath Path to the file containing rights information. 62 * @param mimeType MIME type. Must not be null or an empty string. 63 * @param accountId Account ID of the user. 64 */ 65 public DrmRights(String rightsFilePath, String mimeType, String accountId) { 66 this(rightsFilePath, mimeType); 67 68 mAccountId = accountId; 69 } 70 71 /** 72 * Creates a <code>DrmRights</code> object with the given parameters. 73 * 74 * @param rightsFilePath Path to the file containing rights information. 75 * @param mimeType MIME type. Must not be null or an empty string. 76 * @param accountId Account ID of the user. 77 * @param subscriptionId Subscription ID of the user. 78 */ 79 public DrmRights( 80 String rightsFilePath, String mimeType, String accountId, String subscriptionId) { 81 this(rightsFilePath, mimeType); 82 83 mAccountId = accountId; 84 mSubscriptionId = subscriptionId; 85 } 86 87 /** 88 * Creates a <code>DrmRights</code> object with the given parameters. 89 * 90 * @param rightsFile File containing rights information. 91 * @param mimeType MIME type. Must not be null or an empty string. 92 */ 93 public DrmRights(File rightsFile, String mimeType) { 94 instantiate(rightsFile, mimeType); 95 } 96 97 private void instantiate(File rightsFile, String mimeType) { 98 try { 99 mData = DrmUtils.readBytes(rightsFile); 100 } catch (IOException e) { 101 e.printStackTrace(); 102 } 103 104 mMimeType = mimeType; 105 if (!isValid()) { 106 final String msg = "mimeType: " + mMimeType + "," + 107 "data: " + Arrays.toString(mData); 108 throw new IllegalArgumentException(msg); 109 } 110 } 111 112 /** 113 * Creates a <code>DrmRights</code> object with the given parameters. 114 * 115 * @param data A {@link ProcessedData} object containing rights information. 116 * Must not be null. 117 * @param mimeType The MIME type. It must not be null or an empty string. 118 */ 119 public DrmRights(ProcessedData data, String mimeType) { 120 if (data == null) { 121 throw new IllegalArgumentException("data is null"); 122 } 123 124 mData = data.getData(); 125 mAccountId = data.getAccountId(); 126 mSubscriptionId = data.getSubscriptionId(); 127 mMimeType = mimeType; 128 129 if (!isValid()) { 130 final String msg = "mimeType: " + mMimeType + "," + 131 "data: " + Arrays.toString(mData); 132 throw new IllegalArgumentException(msg); 133 } 134 } 135 136 /** 137 * Retrieves the rights data associated with this <code>DrmRights</code> object. 138 * 139 * @return A <code>byte</code> array representing the rights data. 140 */ 141 public byte[] getData() { 142 return mData; 143 } 144 145 /** 146 * Retrieves the MIME type associated with this <code>DrmRights</code> object. 147 * 148 * @return The MIME type. 149 */ 150 public String getMimeType() { 151 return mMimeType; 152 } 153 154 /** 155 * Retrieves the account ID associated with this <code>DrmRights</code> object. 156 * 157 * @return The account ID. 158 */ 159 public String getAccountId() { 160 return mAccountId; 161 } 162 163 /** 164 * Retrieves the subscription ID associated with this <code>DrmRights</code> object. 165 * 166 * @return The subscription ID. 167 */ 168 public String getSubscriptionId() { 169 return mSubscriptionId; 170 } 171 172 /** 173 * Determines whether this instance is valid or not. 174 * 175 * @return True if valid; false if invalid. 176 */ 177 /*package*/ boolean isValid() { 178 return (null != mMimeType && !mMimeType.equals("") 179 && null != mData && mData.length > 0); 180 } 181} 182 183