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
19f8bf3c46f524b1252bf466a351daaef61afdcecbGloria Wangimport java.util.HashMap;
20f8bf3c46f524b1252bf466a351daaef61afdcecbGloria Wang
21d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/**
220e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * An entity class that is passed to the
230e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * {@link DrmManagerClient.OnInfoListener#onInfo onInfo()} callback.
24d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi *
25d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */
26d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic class DrmInfoEvent extends DrmEvent {
27e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong
28e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong    // Please add newly defined type constants to the end of the list,
29e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong    // and modify checkTypeValidity() accordingly.
30e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong
31d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
320e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * The registration has already been done by another account ID.
33d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
34dc549d60f98d809f626c99de614960409a847054Takeshi Aimi    public static final int TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT = 1;
35d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
360e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * The rights need to be removed completely.
37d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
38dc549d60f98d809f626c99de614960409a847054Takeshi Aimi    public static final int TYPE_REMOVE_RIGHTS = 2;
39d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
400e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * The rights have been successfully downloaded and installed.
41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
42dc549d60f98d809f626c99de614960409a847054Takeshi Aimi    public static final int TYPE_RIGHTS_INSTALLED = 3;
43d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
440e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * The rights object is being delivered to the device. You must wait before
450e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * calling {@link DrmManagerClient#acquireRights acquireRights()} again.
46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
47dc549d60f98d809f626c99de614960409a847054Takeshi Aimi    public static final int TYPE_WAIT_FOR_RIGHTS = 4;
48d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
490e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * The registration has already been done for the given account.
50d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
51dc549d60f98d809f626c99de614960409a847054Takeshi Aimi    public static final int TYPE_ACCOUNT_ALREADY_REGISTERED = 5;
5227b277779c89251f2aafcc7a56db95d264900c9dGloria Wang    /**
530e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * The rights have been removed.
5427b277779c89251f2aafcc7a56db95d264900c9dGloria Wang     */
5527b277779c89251f2aafcc7a56db95d264900c9dGloria Wang    public static final int TYPE_RIGHTS_REMOVED = 6;
56d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
57e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong    // Add more type constants here...
58e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong
59e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong    // FIXME:
60e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong    // We may want to add a user-defined type constant, such as
61e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong    // TYPE_VENDOR_SPECIFIC, to take care vendor specific use
62e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong    // cases.
63e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong
64d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
650e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Creates a <code>DrmInfoEvent</code> object with the specified parameters.
66d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
670e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * @param uniqueId Unique session identifier.
68e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong     * @param type Type of the event. Must be any of the event types defined above,
69e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong     * or the constants defined in {@link DrmEvent}.
70e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong     * @param message Message description. It can be null.
71d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
72d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public DrmInfoEvent(int uniqueId, int type, String message) {
73d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi        super(uniqueId, type, message);
74e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong        checkTypeValidity(type);
75d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
76f8bf3c46f524b1252bf466a351daaef61afdcecbGloria Wang
77f8bf3c46f524b1252bf466a351daaef61afdcecbGloria Wang    /**
780e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Creates a <code>DrmInfoEvent</code> object with the specified parameters.
79f8bf3c46f524b1252bf466a351daaef61afdcecbGloria Wang     *
800e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * @param uniqueId Unique session identifier.
81e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong     * @param type Type of the event. Must be any of the event types defined above,
82e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong     * or the constants defined in {@link DrmEvent}
83e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong     * @param message Message description. It can be null.
84f8bf3c46f524b1252bf466a351daaef61afdcecbGloria Wang     * @param attributes Attributes for extensible information. Could be any
850e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * information provided by the plug-in.
86f8bf3c46f524b1252bf466a351daaef61afdcecbGloria Wang     */
87f8bf3c46f524b1252bf466a351daaef61afdcecbGloria Wang    public DrmInfoEvent(int uniqueId, int type, String message,
88f8bf3c46f524b1252bf466a351daaef61afdcecbGloria Wang                            HashMap<String, Object> attributes) {
89f8bf3c46f524b1252bf466a351daaef61afdcecbGloria Wang        super(uniqueId, type, message, attributes);
90e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong        checkTypeValidity(type);
91e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong    }
92e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong
93e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong    /*
94e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong     * Check the validity of the given type.
95e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong     * To overcome a design flaw, we need also accept the type constants
96e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong     * defined in super class, DrmEvent.
97e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong     */
98e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong    private void checkTypeValidity(int type) {
99e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong        if (type < TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT ||
100e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong            type > TYPE_RIGHTS_REMOVED) {
101e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong
102e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong            if (type != TYPE_ALL_RIGHTS_REMOVED &&
103e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong                type != TYPE_DRM_INFO_PROCESSED) {
104e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong                final String msg = "Unsupported type: " + type;
105e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong                throw new IllegalArgumentException(msg);
106e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong            }
107e82f055e3eb1b0b3daf87bc14258fa65568b4f8aJames Dong        }
108f8bf3c46f524b1252bf466a351daaef61afdcecbGloria Wang    }
109d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}
110d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
111