DrmInfoRequest.java revision 5c96c65f692f8c2297d213c88450dd601d2b5c1f
1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (C) 2010 The Android Open Source Project
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Licensed under the Apache License, Version 2.0 (the "License");
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * you may not use this file except in compliance with the License.
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * You may obtain a copy of the License at
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *      http://www.apache.org/licenses/LICENSE-2.0
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Unless required by applicable law or agreed to in writing, software
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distributed under the License is distributed on an "AS IS" BASIS,
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * See the License for the specific language governing permissions and
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * limitations under the License.
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpackage android.drm;
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport java.util.HashMap;
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimport java.util.Iterator;
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is an entity class used to pass required parameters to get
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the necessary information to communicate with online DRM server
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * An instance of this class is passed to {@link DrmManagerClient#acquireDrmInfo(DrmInfoRequest)}
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to get the instance of {@link DrmInfo}
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpublic class DrmInfoRequest {
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    // Changes in following constants should be in sync with DrmInfoRequest.h
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Constants defines the type of {@link DrmInfoRequest}
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public static final int TYPE_REGISTRATION_INFO = 1;
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public static final int TYPE_UNREGISTRATION_INFO = 2;
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public static final int TYPE_RIGHTS_ACQUISITION_INFO = 3;
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public static final int TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO = 4;
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Key to pass the unique id for the account or the user
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public static final String ACCOUNT_ID = "account_id";
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Key to pass the unique id used for subscription
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public static final String SUBSCRIPTION_ID = "subscription_id";
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    private final int mInfoType;
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    private final String mMimeType;
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    private final HashMap<String, Object> mRequestInformation = new HashMap<String, Object>();
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * constructor to create DrmInfoRequest object with type and mimetype
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @param infoType Type of information
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @param mimeType MIME type
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public DrmInfoRequest(int infoType, String mimeType) {
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        mInfoType = infoType;
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        mMimeType = mimeType;
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Returns the mimetype associated with this object
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @return MIME type
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public String getMimeType() {
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return mMimeType;
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Returns Information type associated with this instance
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @return Information type
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public int getInfoType() {
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return mInfoType;
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Adds optional information as <key, value> pair to this object.
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @param key Key to add
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @param value Value to add
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public void put(String key, Object value) {
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        mRequestInformation.put(key, value);
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Retrieves the value of given key, if not found returns null
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @param key Key whose value to be retrieved
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @return The value or null
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public Object get(String key) {
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return mRequestInformation.get(key);
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Returns Iterator object to walk through the keys associated with this instance
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @return Iterator object
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public Iterator<String> keyIterator() {
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return mRequestInformation.keySet().iterator();
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Returns Iterator object to walk through the values associated with this instance
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @return Iterator object
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    public Iterator<Object> iterator() {
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return mRequestInformation.values().iterator();
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /**
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * Returns whether this instance is valid or not
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     * @return
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *     true if valid
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     *     false if invalid
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     */
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    boolean isValid() {
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return (null != mMimeType && !mMimeType.equals("")
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                && null != mRequestInformation && isValidType(mInfoType));
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    /* package */ static boolean isValidType(int infoType) {
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        boolean isValid = false;
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        switch (infoType) {
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        case TYPE_REGISTRATION_INFO:
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        case TYPE_UNREGISTRATION_INFO:
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        case TYPE_RIGHTS_ACQUISITION_INFO:
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        case TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO:
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            isValid = true;
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            break;
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        }
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return isValid;
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org