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; 21d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 22d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/** 230e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * An entity class that wraps the license information retrieved from the online DRM server. 240e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber *<p> 250e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * A caller can instantiate a {@link DrmRights} object by first invoking the 260e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * {@link DrmManagerClient#processDrmInfo(DrmInfo)} method and then using the resulting 270e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * {@link ProcessedData} object to invoke the {@link DrmRights#DrmRights(ProcessedData, String)} 280e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * constructor. 290e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber *<p> 300e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * A caller can also instantiate a {@link DrmRights} object by using the 310e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * {@link DrmRights#DrmRights(String, String)} constructor, which takes a path to a file 320e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * containing rights information instead of a <code>ProcessedData</code>. 335cb68c86ccb34d42bd4fb59128043037f74763a3James Dong *<p> 345cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * Please note that the account id and subscription id is not mandatory by all DRM agents 355cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * or plugins. When account id or subscription id is not required by the specific DRM 365cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * agent or plugin, they can be either null, or an empty string, or any other don't-care 375cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * string value. 38d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 39d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic class DrmRights { 41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private byte[] mData; 42d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private String mMimeType; 435cb68c86ccb34d42bd4fb59128043037f74763a3James Dong private String mAccountId; 445cb68c86ccb34d42bd4fb59128043037f74763a3James Dong private String mSubscriptionId; 45d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 470e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Creates a <code>DrmRights</code> object with the given parameters. 48d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 490e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param rightsFilePath Path to the file containing rights information. 505cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * @param mimeType MIME type. Must not be null or an empty string. 51d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 52d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmRights(String rightsFilePath, String mimeType) { 53d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi File file = new File(rightsFilePath); 54d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi instantiate(file, mimeType); 55d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 56d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 57d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 580e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Creates a <code>DrmRights</code> object with the given parameters. 59d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 600e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param rightsFilePath Path to the file containing rights information. 615cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * @param mimeType MIME type. Must not be null or an empty string. 620e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param accountId Account ID of the user. 63d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 64d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmRights(String rightsFilePath, String mimeType, String accountId) { 65d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi this(rightsFilePath, mimeType); 66d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 675cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mAccountId = accountId; 68d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 69d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 70d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 710e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Creates a <code>DrmRights</code> object with the given parameters. 72d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 730e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param rightsFilePath Path to the file containing rights information. 745cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * @param mimeType MIME type. Must not be null or an empty string. 750e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param accountId Account ID of the user. 760e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param subscriptionId Subscription ID of the user. 77d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 78d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmRights( 79d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String rightsFilePath, String mimeType, String accountId, String subscriptionId) { 80d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi this(rightsFilePath, mimeType); 81d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 825cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mAccountId = accountId; 835cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mSubscriptionId = subscriptionId; 84d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 85d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 86d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 870e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Creates a <code>DrmRights</code> object with the given parameters. 88d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 890e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param rightsFile File containing rights information. 905cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * @param mimeType MIME type. Must not be null or an empty string. 91d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 92d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmRights(File rightsFile, String mimeType) { 93d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi instantiate(rightsFile, mimeType); 94d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 95d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 96d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private void instantiate(File rightsFile, String mimeType) { 97d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi try { 98d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mData = DrmUtils.readBytes(rightsFile); 99d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } catch (IOException e) { 100d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi e.printStackTrace(); 101d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 102d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 103d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mMimeType = mimeType; 1046c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong if (!isValid()) { 1056c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong final String msg = "mimeType: " + mMimeType + "," + 1066c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong "data: " + mData; 1076c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong throw new IllegalArgumentException(msg); 1086c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong } 109d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 110d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 111d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1120e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Creates a <code>DrmRights</code> object with the given parameters. 113d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 114b7e7bdfe784959ac8615851c2741eb9518a5afcfGloria Wang * @param data A {@link ProcessedData} object containing rights information. 1155cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * Must not be null. 1165cb68c86ccb34d42bd4fb59128043037f74763a3James Dong * @param mimeType The MIME type. It must not be null or an empty string. 117d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 118d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmRights(ProcessedData data, String mimeType) { 1195cb68c86ccb34d42bd4fb59128043037f74763a3James Dong if (data == null) { 1205cb68c86ccb34d42bd4fb59128043037f74763a3James Dong throw new IllegalArgumentException("data is null"); 121d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 122d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 1235cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mData = data.getData(); 1245cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mAccountId = data.getAccountId(); 1255cb68c86ccb34d42bd4fb59128043037f74763a3James Dong mSubscriptionId = data.getSubscriptionId(); 126d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mMimeType = mimeType; 1275cb68c86ccb34d42bd4fb59128043037f74763a3James Dong 1286c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong if (!isValid()) { 1296c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong final String msg = "mimeType: " + mMimeType + "," + 1306c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong "data: " + mData; 1316c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong throw new IllegalArgumentException(msg); 1326c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong } 133d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 134d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 135d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1360e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves the rights data associated with this <code>DrmRights</code> object. 137d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1380e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return A <code>byte</code> array representing the rights data. 139d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 140d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public byte[] getData() { 141d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mData; 142d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 143d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 144d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1450e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves the MIME type associated with this <code>DrmRights</code> object. 146d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1470e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return The MIME type. 148d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 149d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public String getMimeType() { 150d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mMimeType; 151d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 152d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 153d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1540e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves the account ID associated with this <code>DrmRights</code> object. 155d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1560e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return The account ID. 157d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 158d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public String getAccountId() { 159d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mAccountId; 160d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 161d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 162d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1630e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves the subscription ID associated with this <code>DrmRights</code> object. 164d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1650e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return The subscription ID. 166d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 167d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public String getSubscriptionId() { 168d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mSubscriptionId; 169d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 170d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 171d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1720e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Determines whether this instance is valid or not. 173d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1740e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return True if valid; false if invalid. 175d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 176d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /*package*/ boolean isValid() { 177d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return (null != mMimeType && !mMimeType.equals("") 178d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi && null != mData && mData.length > 0); 179d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 180d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi} 181d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 182