o This patch will prevent applications from abusing the API by using arbitrary int value for DrmErrorEvent or DrmInfoEvent types. o We should have not defined some type constants in the super/base class, DrmEvent. Change-Id: Id0bb12caa8ce471cb6951cc2b5d37ea408f90063
111 lines
3.7 KiB
Java
Executable File
111 lines
3.7 KiB
Java
Executable File
/*
|
|
* Copyright (C) 2010 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.drm;
|
|
|
|
import java.util.HashMap;
|
|
|
|
/**
|
|
* An entity class that is passed to the
|
|
* {@link DrmManagerClient.OnInfoListener#onInfo onInfo()} callback.
|
|
*
|
|
*/
|
|
public class DrmInfoEvent extends DrmEvent {
|
|
|
|
// Please add newly defined type constants to the end of the list,
|
|
// and modify checkTypeValidity() accordingly.
|
|
|
|
/**
|
|
* The registration has already been done by another account ID.
|
|
*/
|
|
public static final int TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT = 1;
|
|
/**
|
|
* The rights need to be removed completely.
|
|
*/
|
|
public static final int TYPE_REMOVE_RIGHTS = 2;
|
|
/**
|
|
* The rights have been successfully downloaded and installed.
|
|
*/
|
|
public static final int TYPE_RIGHTS_INSTALLED = 3;
|
|
/**
|
|
* The rights object is being delivered to the device. You must wait before
|
|
* calling {@link DrmManagerClient#acquireRights acquireRights()} again.
|
|
*/
|
|
public static final int TYPE_WAIT_FOR_RIGHTS = 4;
|
|
/**
|
|
* The registration has already been done for the given account.
|
|
*/
|
|
public static final int TYPE_ACCOUNT_ALREADY_REGISTERED = 5;
|
|
/**
|
|
* The rights have been removed.
|
|
*/
|
|
public static final int TYPE_RIGHTS_REMOVED = 6;
|
|
|
|
// Add more type constants here...
|
|
|
|
// FIXME:
|
|
// We may want to add a user-defined type constant, such as
|
|
// TYPE_VENDOR_SPECIFIC, to take care vendor specific use
|
|
// cases.
|
|
|
|
/**
|
|
* Creates a <code>DrmInfoEvent</code> object with the specified parameters.
|
|
*
|
|
* @param uniqueId Unique session identifier.
|
|
* @param type Type of the event. Must be any of the event types defined above,
|
|
* or the constants defined in {@link DrmEvent}.
|
|
* @param message Message description. It can be null.
|
|
*/
|
|
public DrmInfoEvent(int uniqueId, int type, String message) {
|
|
super(uniqueId, type, message);
|
|
checkTypeValidity(type);
|
|
}
|
|
|
|
/**
|
|
* Creates a <code>DrmInfoEvent</code> object with the specified parameters.
|
|
*
|
|
* @param uniqueId Unique session identifier.
|
|
* @param type Type of the event. Must be any of the event types defined above,
|
|
* or the constants defined in {@link DrmEvent}
|
|
* @param message Message description. It can be null.
|
|
* @param attributes Attributes for extensible information. Could be any
|
|
* information provided by the plug-in.
|
|
*/
|
|
public DrmInfoEvent(int uniqueId, int type, String message,
|
|
HashMap<String, Object> attributes) {
|
|
super(uniqueId, type, message, attributes);
|
|
checkTypeValidity(type);
|
|
}
|
|
|
|
/*
|
|
* Check the validity of the given type.
|
|
* To overcome a design flaw, we need also accept the type constants
|
|
* defined in super class, DrmEvent.
|
|
*/
|
|
private void checkTypeValidity(int type) {
|
|
if (type < TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT ||
|
|
type > TYPE_RIGHTS_REMOVED) {
|
|
|
|
if (type != TYPE_ALL_RIGHTS_REMOVED &&
|
|
type != TYPE_DRM_INFO_PROCESSED) {
|
|
final String msg = "Unsupported type: " + type;
|
|
throw new IllegalArgumentException(msg);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|