DrmInfoRequest.java revision 2980a213752d6e30edd4c689489cb4a2c3006252
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;
70d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
71d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
72d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
730e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Retrieves the MIME type associated with this object.
74d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
750e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * @return The MIME type.
76d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
77d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public String getMimeType() {
78d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mMimeType;
79d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
80d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
81d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
820e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Retrieves the information type associated with this object.
83d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
840e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * @return The information type.
85d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
86d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public int getInfoType() {
87d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mInfoType;
88d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
89d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
90d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
910e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Adds optional information as key-value pairs to this object.
92d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
930e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * @param key The key to add.
940e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * @param value The value to add.
95d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
96d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public void put(String key, Object value) {
97d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        mRequestInformation.put(key, value);
98d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
99d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
100d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
1010e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Retrieves the value of a given key.
1020e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     *
1030e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * @param key The key whose value is being retrieved.
104d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
1050e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * @return The value of the key that is being retrieved. Returns null if the key cannot be
1060e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * found.
107d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
108d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public Object get(String key) {
109d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mRequestInformation.get(key);
110d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
111d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
112d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
1130e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Retrieves an iterator object that you can use to iterate over the keys associated with
1140e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * this <code>DrmInfoRequest</code> object.
115d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
1160e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * @return The iterator object.
117d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
118d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public Iterator<String> keyIterator() {
119d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mRequestInformation.keySet().iterator();
120d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
121d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
122d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
1230e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Retrieves an iterator object that you can use to iterate over the values associated with
1240e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * this <code>DrmInfoRequest</code> object.
125d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
1260e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * @return The iterator object.
127d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
128d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public Iterator<Object> iterator() {
129d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mRequestInformation.values().iterator();
130d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
131d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
132d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
133d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * Returns whether this instance is valid or not
134d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
135d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @return
136d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *     true if valid
137d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *     false if invalid
138d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
139d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    boolean isValid() {
140d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return (null != mMimeType && !mMimeType.equals("")
141d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                && null != mRequestInformation && isValidType(mInfoType));
142d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
143d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
144d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /* package */ static boolean isValidType(int infoType) {
145d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        boolean isValid = false;
146d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
147d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        switch (infoType) {
148d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        case TYPE_REGISTRATION_INFO:
149d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        case TYPE_UNREGISTRATION_INFO:
150d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        case TYPE_RIGHTS_ACQUISITION_INFO:
151d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        case TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO:
152d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            isValid = true;
153d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            break;
154d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        }
155d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return isValid;
156d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
157d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}
158d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
159