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.util.HashMap; 20d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiimport java.util.Iterator; 21d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 22d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/** 230e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * An entity class that is used to pass information to an online DRM server. An instance of this 240e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * class is passed to the {@link DrmManagerClient#acquireDrmInfo acquireDrmInfo()} method to get an 250e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * instance of a {@link DrmInfo}. 26d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 27d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 28d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic class DrmInfoRequest { 295c96c65f692f8c2297d213c88450dd601d2b5c1fGloria Wang // Changes in following constants should be in sync with DrmInfoRequest.h 30d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 310e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Acquires DRM server registration information. 32d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 33d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public static final int TYPE_REGISTRATION_INFO = 1; 340e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber /** 352980a213752d6e30edd4c689489cb4a2c3006252Gloria Wang * Acquires information for unregistering the DRM server. 362980a213752d6e30edd4c689489cb4a2c3006252Gloria Wang */ 37d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public static final int TYPE_UNREGISTRATION_INFO = 2; 380e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber /** 392980a213752d6e30edd4c689489cb4a2c3006252Gloria Wang * Acquires rights information. 402980a213752d6e30edd4c689489cb4a2c3006252Gloria Wang */ 41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public static final int TYPE_RIGHTS_ACQUISITION_INFO = 3; 420e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber /** 432980a213752d6e30edd4c689489cb4a2c3006252Gloria Wang * Acquires the progress of the rights acquisition. 442980a213752d6e30edd4c689489cb4a2c3006252Gloria Wang */ 45d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public static final int TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO = 4; 46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 47d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 480e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Key that is used to pass the unique session ID for the account or the user. 49d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 50d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public static final String ACCOUNT_ID = "account_id"; 51d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 52d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 530e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Key that is used to pass the unique session ID for the subscription. 54d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 55d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public static final String SUBSCRIPTION_ID = "subscription_id"; 56d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 57d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private final int mInfoType; 58d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private final String mMimeType; 59d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private final HashMap<String, Object> mRequestInformation = new HashMap<String, Object>(); 60d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 61d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 620e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Creates a <code>DrmInfoRequest</code> object with type and MIME type. 63d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 640e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param infoType Type of information. 650e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param mimeType MIME type. 66d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 67d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public DrmInfoRequest(int infoType, String mimeType) { 68d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mInfoType = infoType; 69d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mMimeType = mimeType; 706c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong if (!isValid()) { 716c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong final String msg = "infoType: " + infoType + "," + 726c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong "mimeType: " + mimeType; 736c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong throw new IllegalArgumentException(msg); 746c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong } 75d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 76d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 77d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 780e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves the MIME type associated with this object. 79d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 800e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return The MIME type. 81d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 82d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public String getMimeType() { 83d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mMimeType; 84d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 85d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 86d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 870e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves the information type associated with this object. 88d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 890e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return The information type. 90d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 91d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public int getInfoType() { 92d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mInfoType; 93d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 94d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 95d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 960e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Adds optional information as key-value pairs to this object. 97d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 980e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param key The key to add. 990e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param value The value to add. 100d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 101d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public void put(String key, Object value) { 102d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi mRequestInformation.put(key, value); 103d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 104d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 105d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1060e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves the value of a given key. 1070e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * 1080e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @param key The key whose value is being retrieved. 109d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1100e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return The value of the key that is being retrieved. Returns null if the key cannot be 1110e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * found. 112d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 113d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public Object get(String key) { 114d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mRequestInformation.get(key); 115d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 116d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 117d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1180e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves an iterator object that you can use to iterate over the keys associated with 1190e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * this <code>DrmInfoRequest</code> object. 120d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1210e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return The iterator object. 122d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 123d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public Iterator<String> keyIterator() { 124d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mRequestInformation.keySet().iterator(); 125d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 126d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 127d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 1280e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * Retrieves an iterator object that you can use to iterate over the values associated with 1290e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * this <code>DrmInfoRequest</code> object. 130d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 1310e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * @return The iterator object. 132d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 133d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public Iterator<Object> iterator() { 134d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return mRequestInformation.values().iterator(); 135d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 136d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 137d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 138d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns whether this instance is valid or not 139d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 140d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return 141d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * true if valid 142d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * false if invalid 143d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 144d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi boolean isValid() { 145d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return (null != mMimeType && !mMimeType.equals("") 146d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi && null != mRequestInformation && isValidType(mInfoType)); 147d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 148d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 149d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /* package */ static boolean isValidType(int infoType) { 150d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi boolean isValid = false; 151d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 152d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi switch (infoType) { 153d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi case TYPE_REGISTRATION_INFO: 154d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi case TYPE_UNREGISTRATION_INFO: 155d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi case TYPE_RIGHTS_ACQUISITION_INFO: 156d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi case TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO: 157d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi isValid = true; 158d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi break; 159d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 160d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi return isValid; 161d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi } 162d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi} 163d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 164