DrmInfoRequest.java revision 5c96c65f692f8c2297d213c88450dd601d2b5c1f
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/**
23d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * This is an entity class used to pass required parameters to get
24d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * the necessary information to communicate with online DRM server
25d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi *
26d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * An instance of this class is passed to {@link DrmManagerClient#acquireDrmInfo(DrmInfoRequest)}
27d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * to get the instance of {@link DrmInfo}
28d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi *
29d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */
30d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic class DrmInfoRequest {
315c96c65f692f8c2297d213c88450dd601d2b5c1fGloria Wang    // Changes in following constants should be in sync with DrmInfoRequest.h
32d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
33d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * Constants defines the type of {@link DrmInfoRequest}
34d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
35d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static final int TYPE_REGISTRATION_INFO = 1;
36d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static final int TYPE_UNREGISTRATION_INFO = 2;
37d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static final int TYPE_RIGHTS_ACQUISITION_INFO = 3;
38d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static final int TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO = 4;
39d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * Key to pass the unique id for the account or the user
42d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
43d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static final String ACCOUNT_ID = "account_id";
44d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
45d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * Key to pass the unique id used for subscription
47d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
48d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static final String SUBSCRIPTION_ID = "subscription_id";
49d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
50d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private final int mInfoType;
51d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private final String mMimeType;
52d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    private final HashMap<String, Object> mRequestInformation = new HashMap<String, Object>();
53d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
54d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
55d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * constructor to create DrmInfoRequest object with type and mimetype
56d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
57d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @param infoType Type of information
58d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @param mimeType MIME type
59d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
60d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public DrmInfoRequest(int infoType, String mimeType) {
61d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        mInfoType = infoType;
62d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        mMimeType = mimeType;
63d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
64d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
65d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
66d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * Returns the mimetype associated with this object
67d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
68d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @return MIME type
69d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
70d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public String getMimeType() {
71d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mMimeType;
72d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
73d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
74d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
75d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * Returns Information type associated with this instance
76d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
77d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @return Information type
78d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
79d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public int getInfoType() {
80d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mInfoType;
81d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
82d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
83d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
84d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * Adds optional information as <key, value> pair to this object.
85d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
86d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @param key Key to add
87d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @param value Value to add
88d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
89d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public void put(String key, Object value) {
90d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        mRequestInformation.put(key, value);
91d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
92d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
93d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
94d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * Retrieves the value of given key, if not found returns null
95d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
96d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @param key Key whose value to be retrieved
97d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @return The value or null
98d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
99d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public Object get(String key) {
100d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mRequestInformation.get(key);
101d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
102d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
103d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
104d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * Returns Iterator object to walk through the keys associated with this instance
105d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
106d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @return Iterator object
107d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
108d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public Iterator<String> keyIterator() {
109d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mRequestInformation.keySet().iterator();
110d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
111d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
112d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
113d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * Returns Iterator object to walk through the values associated with this instance
114d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
115d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @return Iterator object
116d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
117d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public Iterator<Object> iterator() {
118d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return mRequestInformation.values().iterator();
119d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
120d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
121d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
122d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * Returns whether this instance is valid or not
123d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
124d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     * @return
125d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *     true if valid
126d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *     false if invalid
127d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
128d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    boolean isValid() {
129d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return (null != mMimeType && !mMimeType.equals("")
130d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi                && null != mRequestInformation && isValidType(mInfoType));
131d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
132d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
133d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /* package */ static boolean isValidType(int infoType) {
134d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        boolean isValid = false;
135d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
136d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        switch (infoType) {
137d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        case TYPE_REGISTRATION_INFO:
138d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        case TYPE_UNREGISTRATION_INFO:
139d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        case TYPE_RIGHTS_ACQUISITION_INFO:
140d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        case TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO:
141d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            isValid = true;
142d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi            break;
143d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        }
144d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        return isValid;
145d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
146d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}
147d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
148