1d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/* 2d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Copyright (C) 2010 The Android Open Source Project 3d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 4d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License"); 5d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * you may not use this file except in compliance with the License. 6d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * You may obtain a copy of the License at 7d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 8d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * http://www.apache.org/licenses/LICENSE-2.0 9d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 10d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Unless required by applicable law or agreed to in writing, software 11d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS, 12d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * See the License for the specific language governing permissions and 14d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * limitations under the License. 15d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 16d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 17d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipackage android.drm; 18d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 19d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport java.io.File; 20d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport java.io.IOException; 21e6748ce31f18782b7a47a5b2eb251efd83e7b609Andreas Gampeimport java.util.Arrays; 22d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 23d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/** 240e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * An entity class that wraps the license information retrieved from the online DRM server. 250e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber *<p> 260e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * A caller can instantiate a {@link DrmRights} object by first invoking the 270e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * {@link DrmManagerClient#processDrmInfo(DrmInfo)} method and then using the resulting 280e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * {@link ProcessedData} object to invoke the {@link DrmRights#DrmRights(ProcessedData, String)} 290e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * constructor. 300e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber *<p> 310e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * A caller can also instantiate a {@link DrmRights} object by using the 320e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * {@link DrmRights#DrmRights(String, String)} constructor, which takes a path to a file 330e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * containing rights information instead of a <code>ProcessedData</code>. 345cb68c86ccb34d42bd4fb59128043037f74763a3James Dong *<p> 355cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * Please note that the account id and subscription id is not mandatory by all DRM agents 365cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * or plugins. When account id or subscription id is not required by the specific DRM 375cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * agent or plugin, they can be either null, or an empty string, or any other don't-care 385cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * string value. 39d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic class DrmRights { 42d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private byte[] mData; 43d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private String mMimeType; 445cb68c86ccb34d42bd4fb59128043037f74763a3James Dong private String mAccountId; 455cb68c86ccb34d42bd4fb59128043037f74763a3James Dong private String mSubscriptionId; 46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 47d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 480e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Creates a <code>DrmRights</code> object with the given parameters. 49d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 500e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param rightsFilePath Path to the file containing rights information. 515cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * @param mimeType MIME type. Must not be null or an empty string. 52d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 53d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmRights(String rightsFilePath, String mimeType) { 54d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi File file = new File(rightsFilePath); 55d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi instantiate(file, mimeType); 56d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 57d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 58d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 590e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Creates a <code>DrmRights</code> object with the given parameters. 60d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 610e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param rightsFilePath Path to the file containing rights information. 625cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * @param mimeType MIME type. Must not be null or an empty string. 630e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param accountId Account ID of the user. 64d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 65d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmRights(String rightsFilePath, String mimeType, String accountId) { 66d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi this(rightsFilePath, mimeType); 67d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 685cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mAccountId = accountId; 69d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 70d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 71d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 720e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Creates a <code>DrmRights</code> object with the given parameters. 73d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 740e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param rightsFilePath Path to the file containing rights information. 755cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * @param mimeType MIME type. Must not be null or an empty string. 760e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param accountId Account ID of the user. 770e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param subscriptionId Subscription ID of the user. 78d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 79d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmRights( 80d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String rightsFilePath, String mimeType, String accountId, String subscriptionId) { 81d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi this(rightsFilePath, mimeType); 82d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 835cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mAccountId = accountId; 845cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mSubscriptionId = subscriptionId; 85d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 86d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 87d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 880e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Creates a <code>DrmRights</code> object with the given parameters. 89d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 900e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param rightsFile File containing rights information. 915cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * @param mimeType MIME type. Must not be null or an empty string. 92d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 93d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmRights(File rightsFile, String mimeType) { 94d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi instantiate(rightsFile, mimeType); 95d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 96d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 97d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private void instantiate(File rightsFile, String mimeType) { 98d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi try { 99d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mData = DrmUtils.readBytes(rightsFile); 100d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } catch (IOException e) { 101d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi e.printStackTrace(); 102d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 103d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 104d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mMimeType = mimeType; 1056c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong if (!isValid()) { 1066c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong final String msg = "mimeType: " + mMimeType + "," + 107e6748ce31f18782b7a47a5b2eb251efd83e7b609Andreas Gampe "data: " + Arrays.toString(mData); 1086c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong throw new IllegalArgumentException(msg); 1096c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong } 110d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 111d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 112d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1130e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Creates a <code>DrmRights</code> object with the given parameters. 114d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 115b7e7bdfe784959ac8615851c2741eb9518a5afcfGloria Wang * @param data A {@link ProcessedData} object containing rights information. 1165cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * Must not be null. 1175cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * @param mimeType The MIME type. It must not be null or an empty string. 118d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 119d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmRights(ProcessedData data, String mimeType) { 1205cb68c86ccb34d42bd4fb59128043037f74763a3James Dong if (data == null) { 1215cb68c86ccb34d42bd4fb59128043037f74763a3James Dong throw new IllegalArgumentException("data is null"); 122d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 123d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 1245cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mData = data.getData(); 1255cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mAccountId = data.getAccountId(); 1265cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mSubscriptionId = data.getSubscriptionId(); 127d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mMimeType = mimeType; 1285cb68c86ccb34d42bd4fb59128043037f74763a3James Dong 1296c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong if (!isValid()) { 1306c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong final String msg = "mimeType: " + mMimeType + "," + 131e6748ce31f18782b7a47a5b2eb251efd83e7b609Andreas Gampe "data: " + Arrays.toString(mData); 1326c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong throw new IllegalArgumentException(msg); 1336c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong } 134d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 135d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 136d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1370e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves the rights data associated with this <code>DrmRights</code> object. 138d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1390e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return A <code>byte</code> array representing the rights data. 140d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 141d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public byte[] getData() { 142d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mData; 143d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 144d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 145d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1460e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves the MIME type associated with this <code>DrmRights</code> object. 147d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1480e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return The MIME type. 149d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 150d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public String getMimeType() { 151d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mMimeType; 152d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 153d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 154d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1550e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves the account ID associated with this <code>DrmRights</code> object. 156d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1570e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return The account ID. 158d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 159d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public String getAccountId() { 160d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mAccountId; 161d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 162d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 163d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1640e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves the subscription ID associated with this <code>DrmRights</code> object. 165d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1660e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return The subscription ID. 167d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 168d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public String getSubscriptionId() { 169d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mSubscriptionId; 170d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 171d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 172d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1730e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Determines whether this instance is valid or not. 174d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1750e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return True if valid; false if invalid. 176d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 177d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /*package*/ boolean isValid() { 178d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return (null != mMimeType && !mMimeType.equals("") 179d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi && null != mData && mData.length > 0); 180d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 181d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi} 182d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 183