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