DrmInfoRequest.java revision 2980a213752d6e30edd4c689489cb4a2c3006252
1923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project/*
2443c360d0afdbab091994244f045f4756feaf2b4Jean-Baptiste Queru * Copyright (C) 2010 The Android Open Source Project
30fd625bcfdfac1c10e7bd7f9088bf425fec08989Jean Chalard *
4923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * you may not use this file except in compliance with the License.
6923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * You may obtain a copy of the License at
70fd625bcfdfac1c10e7bd7f9088bf425fec08989Jean Chalard *
8923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
90fd625bcfdfac1c10e7bd7f9088bf425fec08989Jean Chalard *
10923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * See the License for the specific language governing permissions and
14923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * limitations under the License.
15923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project */
16923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
17923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Projectpackage android.drm;
18923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
196b1f500da451de56932a8b2a99c63857994ece85Jean Chalardimport java.util.HashMap;
20887f11ee43ad621aa6ad93d535ab7f48dec73fc7Tadashi G. Takaokaimport java.util.Iterator;
213708787fe91227083d2a1874fa41493d3bc9fe10Tadashi G. Takaoka
22ca7ec2097ca6af1505c1e6aa8b81b6068ba46daesatok/**
23887f11ee43ad621aa6ad93d535ab7f48dec73fc7Tadashi G. Takaoka * An entity class that is used to pass information to an online DRM server. An instance of this
24c83359f9746ca6f0269a1a7017b585c1a5cab9b8Jean Chalard * class is passed to the {@link DrmManagerClient#acquireDrmInfo acquireDrmInfo()} method to get an
25923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project * instance of a {@link DrmInfo}.
26923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project *
27923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project */
28923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Projectpublic class DrmInfoRequest {
29923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    // Changes in following constants should be in sync with DrmInfoRequest.h
308fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    /**
31887f11ee43ad621aa6ad93d535ab7f48dec73fc7Tadashi G. Takaoka     * Acquires DRM server registration information.
328fbd55229243cb66c03d5ea1f79dfb39f596590dsatok     */
33887f11ee43ad621aa6ad93d535ab7f48dec73fc7Tadashi G. Takaoka    public static final int TYPE_REGISTRATION_INFO = 1;
3401ab7c8b59a7f12862fbd95fb252e56719f1757fsatok    /**
358fbd55229243cb66c03d5ea1f79dfb39f596590dsatok     * Acquires information for unregistering the DRM server.
3601ab7c8b59a7f12862fbd95fb252e56719f1757fsatok     */
37be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard    public static final int TYPE_UNREGISTRATION_INFO = 2;
38be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard    /**
39be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard     * Acquires rights information.
40be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard     */
414a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani    public static final int TYPE_RIGHTS_ACQUISITION_INFO = 3;
42be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard    /**
434a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani     * Acquires the progress of the rights acquisition.
441c551251106e506c70fad7ba0cb8b1e2a7dff3a9Amith Yamasani     */
45117fc18ed46496c81596f8207bba30a09c7317d1Jean Chalard    public static final int TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO = 4;
4601ab7c8b59a7f12862fbd95fb252e56719f1757fsatok
47c83359f9746ca6f0269a1a7017b585c1a5cab9b8Jean Chalard    /**
48923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Key that is used to pass the unique session ID for the account or the user.
490b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa     */
50923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    public static final String ACCOUNT_ID = "account_id";
510b4ae1f578e768eec4ada90aeb81d11acb10eb2eKen Wakasa
52923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
53979f8690967ff5409fe18f5085858ccdb8e0ccf1satok     * Key that is used to pass the unique session ID for the subscription.
5401ab7c8b59a7f12862fbd95fb252e56719f1757fsatok     */
55be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard    public static final String SUBSCRIPTION_ID = "subscription_id";
56be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard
57be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard    private final int mInfoType;
58be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard    private final String mMimeType;
59117fc18ed46496c81596f8207bba30a09c7317d1Jean Chalard    private final HashMap<String, Object> mRequestInformation = new HashMap<String, Object>();
6001ab7c8b59a7f12862fbd95fb252e56719f1757fsatok
61923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
62923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Creates a <code>DrmInfoRequest</code> object with type and MIME type.
63f733074aaecdfd6e89cfee2daff8a9c1233b60f1satok     *
649fbfd5877305ed19a20663630b498b6b3fdae942satok     * @param infoType Type of information.
659fbfd5877305ed19a20663630b498b6b3fdae942satok     * @param mimeType MIME type.
669fbfd5877305ed19a20663630b498b6b3fdae942satok     */
679fbfd5877305ed19a20663630b498b6b3fdae942satok    public DrmInfoRequest(int infoType, String mimeType) {
6801ab7c8b59a7f12862fbd95fb252e56719f1757fsatok        mInfoType = infoType;
69be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard        mMimeType = mimeType;
70be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard    }
71be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard
72ea843f2a2404f4bc04fda494e475520162cfca27Tadashi G. Takaoka    /**
73ea843f2a2404f4bc04fda494e475520162cfca27Tadashi G. Takaoka     * Retrieves the MIME type associated with this object.
74ea843f2a2404f4bc04fda494e475520162cfca27Tadashi G. Takaoka     *
75117fc18ed46496c81596f8207bba30a09c7317d1Jean Chalard     * @return The MIME type.
7601ab7c8b59a7f12862fbd95fb252e56719f1757fsatok     */
77979f8690967ff5409fe18f5085858ccdb8e0ccf1satok    public String getMimeType() {
78979f8690967ff5409fe18f5085858ccdb8e0ccf1satok        return mMimeType;
79923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
80923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
81923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    /**
82923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Retrieves the information type associated with this object.
83be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard     *
84be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard     * @return The information type.
854a7ff90d513f8b6cbf39688c08be0828a57e311bAmith Yamasani     */
86ea843f2a2404f4bc04fda494e475520162cfca27Tadashi G. Takaoka    public int getInfoType() {
87117fc18ed46496c81596f8207bba30a09c7317d1Jean Chalard        return mInfoType;
8801ab7c8b59a7f12862fbd95fb252e56719f1757fsatok    }
8901ab7c8b59a7f12862fbd95fb252e56719f1757fsatok
9001ab7c8b59a7f12862fbd95fb252e56719f1757fsatok    /**
9101ab7c8b59a7f12862fbd95fb252e56719f1757fsatok     * Adds optional information as key-value pairs to this object.
9201ab7c8b59a7f12862fbd95fb252e56719f1757fsatok     *
93923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * @param key The key to add.
94923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * @param value The value to add.
95923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     */
96923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    public void put(String key, Object value) {
97923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        mRequestInformation.put(key, value);
98923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project    }
99ea843f2a2404f4bc04fda494e475520162cfca27Tadashi G. Takaoka
10001ab7c8b59a7f12862fbd95fb252e56719f1757fsatok    /**
101923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Retrieves the value of a given key.
102923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     *
103196d82cdd740580ed79d801483dbc282be85d076Jean Chalard     * @param key The key whose value is being retrieved.
10401ab7c8b59a7f12862fbd95fb252e56719f1757fsatok     *
105196d82cdd740580ed79d801483dbc282be85d076Jean Chalard     * @return The value of the key that is being retrieved. Returns null if the key cannot be
106196d82cdd740580ed79d801483dbc282be85d076Jean Chalard     * found.
1079611b281e18ac71d825ff5bc771a111423772cb3satok     */
10801ab7c8b59a7f12862fbd95fb252e56719f1757fsatok    public Object get(String key) {
1099611b281e18ac71d825ff5bc771a111423772cb3satok        return mRequestInformation.get(key);
1109611b281e18ac71d825ff5bc771a111423772cb3satok    }
1119611b281e18ac71d825ff5bc771a111423772cb3satok
11201ab7c8b59a7f12862fbd95fb252e56719f1757fsatok    /**
113923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * Retrieves an iterator object that you can use to iterate over the keys associated with
114923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project     * this <code>DrmInfoRequest</code> object.
1158fbd55229243cb66c03d5ea1f79dfb39f596590dsatok     *
116be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard     * @return The iterator object.
1178fbd55229243cb66c03d5ea1f79dfb39f596590dsatok     */
1188fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    public Iterator<String> keyIterator() {
1198fbd55229243cb66c03d5ea1f79dfb39f596590dsatok        return mRequestInformation.keySet().iterator();
120be79227dc99421ff7be62224c51c553b3fa73777Jean Chalard    }
1218fbd55229243cb66c03d5ea1f79dfb39f596590dsatok
1228fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    /**
123ea843f2a2404f4bc04fda494e475520162cfca27Tadashi G. Takaoka     * Retrieves an iterator object that you can use to iterate over the values associated with
124ea843f2a2404f4bc04fda494e475520162cfca27Tadashi G. Takaoka     * this <code>DrmInfoRequest</code> object.
125436a645ea837d36f7e0f81948d343fa6e166f33aTadashi G. Takaoka     *
126ea843f2a2404f4bc04fda494e475520162cfca27Tadashi G. Takaoka     * @return The iterator object.
127ea843f2a2404f4bc04fda494e475520162cfca27Tadashi G. Takaoka     */
128ca7ec2097ca6af1505c1e6aa8b81b6068ba46daesatok    public Iterator<Object> iterator() {
129691f1c174b660f3bcfe1823d16e55990b4c829dasatok        return mRequestInformation.values().iterator();
130691f1c174b660f3bcfe1823d16e55990b4c829dasatok    }
131691f1c174b660f3bcfe1823d16e55990b4c829dasatok
132081616cd2f472295449268cecb570771b969cba3Jean Chalard    /**
133081616cd2f472295449268cecb570771b969cba3Jean Chalard     * Returns whether this instance is valid or not
134691f1c174b660f3bcfe1823d16e55990b4c829dasatok     *
135691f1c174b660f3bcfe1823d16e55990b4c829dasatok     * @return
136691f1c174b660f3bcfe1823d16e55990b4c829dasatok     *     true if valid
137691f1c174b660f3bcfe1823d16e55990b4c829dasatok     *     false if invalid
138691f1c174b660f3bcfe1823d16e55990b4c829dasatok     */
139ca7ec2097ca6af1505c1e6aa8b81b6068ba46daesatok    boolean isValid() {
140691f1c174b660f3bcfe1823d16e55990b4c829dasatok        return (null != mMimeType && !mMimeType.equals("")
141853d9020edb058e39c46a6af1215dfcfeb865ad8satok                && null != mRequestInformation && isValidType(mInfoType));
142ca7ec2097ca6af1505c1e6aa8b81b6068ba46daesatok    }
1436ba8de2a608dfe4865b0b59a753f2d2abbedeeffsatok
144ca7ec2097ca6af1505c1e6aa8b81b6068ba46daesatok    /* package */ static boolean isValidType(int infoType) {
145ca7ec2097ca6af1505c1e6aa8b81b6068ba46daesatok        boolean isValid = false;
146923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project
147923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        switch (infoType) {
148923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        case TYPE_REGISTRATION_INFO:
149923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        case TYPE_UNREGISTRATION_INFO:
150923bf41f853a544fd0d71fbf7dc90359ec35981The Android Open Source Project        case TYPE_RIGHTS_ACQUISITION_INFO:
1516ba8de2a608dfe4865b0b59a753f2d2abbedeeffsatok        case TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO:
15201ab7c8b59a7f12862fbd95fb252e56719f1757fsatok            isValid = true;
1539159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard            break;
15401ab7c8b59a7f12862fbd95fb252e56719f1757fsatok        }
155ea843f2a2404f4bc04fda494e475520162cfca27Tadashi G. Takaoka        return isValid;
15667094f5bdece00994f70c6f1fa9a6ff7b8f3c3c1satok    }
15767094f5bdece00994f70c6f1fa9a6ff7b8f3c3c1satok}
158ca7ec2097ca6af1505c1e6aa8b81b6068ba46daesatok
159ca7ec2097ca6af1505c1e6aa8b81b6068ba46daesatok