content: /*
   * 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);
              }
          }
      }
  }
  
  