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/**
200e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber * An entity class that wraps converted data, conversion status, and the
2152cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * offset for appending the header and body signature to the converted data.
2252cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * An instance of this class may be created two ways by the drm framework:
2352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * a) a call to {@link DrmManagerClient#convertData DrmManagerClient.convertData()} and
2452cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * b) a call to {@link DrmManagerClient#closeConvertSession DrmManagerClient.closeConvertSession()}.
2552cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * An valid offset value is provided only from a success call to
2652cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong * {@link DrmManagerClient#closeConvertSession DrmManagerClient.closeConvertSession()}.
27d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi *
28d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */
29d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic class DrmConvertedStatus {
3052cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    // The following status code constants must be in sync with
3152cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    // DrmConvertedStatus.cpp. Please also update isValidStatusCode()
3252cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    // when more status code constants are added.
3352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    /**
3452cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * Indicate the conversion status is successful.
3552cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     */
36d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static final int STATUS_OK = 1;
3752cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    /**
3852cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * Indicate a failed conversion status due to input data.
3952cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     */
40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static final int STATUS_INPUTDATA_ERROR = 2;
4152cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    /**
4252cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * Indicate a general failed conversion status.
4352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     */
44d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public static final int STATUS_ERROR = 3;
45d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
4652cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    /**
4752cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * Status code for the conversion. Must be one of the defined status
4852cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * constants above.
4952cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     */
50d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public final int statusCode;
5152cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    /**
5252cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * Converted data. It is optional and thus can be null.
5352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     */
54d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public final byte[] convertedData;
5552cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    /**
5652cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * Offset value for the body and header signature.
5752cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     */
58d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    public final int offset;
59d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
60d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    /**
610e092f806b0a4b81785a52da8ba22d2d47087de5Bill Gruber     * Creates a <code>DrmConvertedStatus</code> object with the specified parameters.
62d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     *
6352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * @param statusCode Conversion status. Must be one of the status code constants
6452cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * defined above.
6552cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * @param convertedData Converted data. It can be null.
6652cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong     * @param offset Offset value for appending the header and body signature.
67d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi     */
6852cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    public DrmConvertedStatus(int statusCode, byte[] convertedData, int offset) {
6952cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        if (!isValidStatusCode(statusCode)) {
7052cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong            throw new IllegalArgumentException("Unsupported status code: " + statusCode);
7152cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        }
7252cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong
7352cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        this.statusCode = statusCode;
7452cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        this.convertedData = convertedData;
7552cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        this.offset = offset;
7652cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    }
7752cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong
7852cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong    private boolean isValidStatusCode(int statusCode) {
7952cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong        return statusCode == STATUS_OK ||
8052cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong               statusCode == STATUS_INPUTDATA_ERROR ||
8152cb1e5988a8a97c668b935fb5d8d358cb3c635aJames Dong               statusCode == STATUS_ERROR;
82d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    }
83d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}
84d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
85