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
19d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/**
2052cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * An entity class that wraps the result of communication between a device
2152cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * and an online DRM server. Specifically, when the
2252cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * {@link DrmManagerClient#processDrmInfo DrmManagerClient.processDrmInfo()}
2352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * method is called, an instance of <code>DrmInfoStatus</code> is returned.
240e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber *<p>
2552cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * This class contains the {@link ProcessedData} object, which can be used
2652cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * to instantiate a {@link DrmRights} object during license acquisition.
27d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi *
28d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */
29d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic class DrmInfoStatus {
3052cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    // The following status code constants must be in sync with DrmInfoStatus.cpp
3152cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    // Please update isValidStatusCode() if more status codes are added.
3252cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    /**
3352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * Indicate successful communication.
3452cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     */
35d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static final int STATUS_OK = 1;
3652cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong
3752cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    /**
3852cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * Indicate failed communication.
3952cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     */
40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static final int STATUS_ERROR = 2;
41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
420e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber    /**
4352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * The status of the communication. Must be one of the defined status
4452cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * constants above.
452980a213752d6e30edd4c689489cb4a2c3006252Gloria Wang     */
46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public final int statusCode;
470e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber    /**
4852cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * The type of DRM information processed. Must be one of the valid type
4952cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * constants defined in {@link DrmInfoRequest}.
502980a213752d6e30edd4c689489cb4a2c3006252Gloria Wang     */
51c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimi    public final int infoType;
520e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber    /**
5352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * The MIME type of the content. Must not be null or an empty string.
542980a213752d6e30edd4c689489cb4a2c3006252Gloria Wang     */
55d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public final String mimeType;
560e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber    /**
5752cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * The processed data. It is optional and thus could be null. When it
5852cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * is null, it indicates that a particular call to
5952cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * {@link DrmManagerClient#processDrmInfo DrmManagerClient.processDrmInfo()}
6052cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * does not return any additional useful information except for the status code.
612980a213752d6e30edd4c689489cb4a2c3006252Gloria Wang     */
62d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public final ProcessedData data;
63d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
64d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
650e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Creates a <code>DrmInfoStatus</code> object with the specified parameters.
66d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
6752cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * @param statusCode The status of the communication. Must be one of the defined
6852cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * status constants above.
6952cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * @param infoType The type of the DRM information processed. Must be a valid
7052cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * type for {@link DrmInfoRequest}.
7152cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * @param data The processed data.
7252cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * @param mimeType The MIME type.
73d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
7452cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    public DrmInfoStatus(int statusCode, int infoType, ProcessedData data, String mimeType) {
7552cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        if (!DrmInfoRequest.isValidType(infoType)) {
7652cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong            throw new IllegalArgumentException("infoType: " + infoType);
776c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong        }
786c95d4ff1656007ab5cbf0a6406d80a33bf8b109James Dong
7952cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        if (!isValidStatusCode(statusCode)) {
8052cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong            throw new IllegalArgumentException("Unsupported status code: " + statusCode);
8152cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        }
8252cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong
8352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        if (mimeType == null || mimeType == "") {
8452cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong            throw new IllegalArgumentException("mimeType is null or an empty string");
8552cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        }
8652cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong
8752cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        this.statusCode = statusCode;
8852cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        this.infoType = infoType;
8952cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        this.data = data;
9052cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        this.mimeType = mimeType;
9152cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    }
9252cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong
9352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    private boolean isValidStatusCode(int statusCode) {
9452cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        return statusCode == STATUS_OK || statusCode == STATUS_ERROR;
95d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
96d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}
97d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
98