/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.media;

import android.annotation.NonNull;
import android.annotation.Nullable;

import android.hardware.cas.V1_0.Status;

Base class for MediaCas runtime exceptions
/** * Base class for MediaCas runtime exceptions */
public class MediaCasStateException extends IllegalStateException { private final int mErrorCode; private final String mDiagnosticInfo; private MediaCasStateException(int err, @Nullable String msg, @Nullable String diagnosticInfo) { super(msg); mErrorCode = err; mDiagnosticInfo = diagnosticInfo; } static void throwExceptionIfNeeded(int err) { throwExceptionIfNeeded(err, null /* msg */); } static void throwExceptionIfNeeded(int err, @Nullable String msg) { if (err == Status.OK) { return; } if (err == Status.BAD_VALUE) { throw new IllegalArgumentException(); } String diagnosticInfo = ""; switch (err) { case Status.ERROR_CAS_UNKNOWN: diagnosticInfo = "General CAS error"; break; case Status.ERROR_CAS_NO_LICENSE: diagnosticInfo = "No license"; break; case Status.ERROR_CAS_LICENSE_EXPIRED: diagnosticInfo = "License expired"; break; case Status.ERROR_CAS_SESSION_NOT_OPENED: diagnosticInfo = "Session not opened"; break; case Status.ERROR_CAS_CANNOT_HANDLE: diagnosticInfo = "Unsupported scheme or data format"; break; case Status.ERROR_CAS_INVALID_STATE: diagnosticInfo = "Invalid CAS state"; break; case Status.ERROR_CAS_INSUFFICIENT_OUTPUT_PROTECTION: diagnosticInfo = "Insufficient output protection"; break; case Status.ERROR_CAS_TAMPER_DETECTED: diagnosticInfo = "Tamper detected"; break; case Status.ERROR_CAS_DECRYPT_UNIT_NOT_INITIALIZED: diagnosticInfo = "Not initialized"; break; case Status.ERROR_CAS_DECRYPT: diagnosticInfo = "Decrypt error"; break; default: diagnosticInfo = "Unknown CAS state exception"; break; } throw new MediaCasStateException(err, msg, String.format("%s (err=%d)", diagnosticInfo, err)); }
Retrieve the associated error code
@hide
/** * Retrieve the associated error code * * @hide */
public int getErrorCode() { return mErrorCode; }
Retrieve a developer-readable diagnostic information string associated with the exception. Do not show this to end-users, since this string will not be localized or generally comprehensible to end-users.
/** * Retrieve a developer-readable diagnostic information string * associated with the exception. Do not show this to end-users, * since this string will not be localized or generally comprehensible * to end-users. */
@NonNull public String getDiagnosticInfo() { return mDiagnosticInfo; } }