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