FileDocCategorySizeDatePackage
GearsPermissions.javaAPI DocAndroid 1.5 API5260Wed May 06 22:42:42 BST 2009com.android.browser

GearsPermissions.java

/*
 * Copyright (C) 2008 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 com.android.browser;

import android.util.Log;

import java.util.HashMap;
import java.util.Iterator;

/**
 * The permission mechanism works the following way:
 *
 * PermissionType allows to define a type of permission
 *   (e.g. localStorage/locationData), storing a name and a set of
 *   resource ids corresponding to the GUI resources.
 *
 * Permission defines an actual permission instance, with a type and a value.
 *
 * OriginPermissions holds an origin with a set of Permission objects
 */
class GearsPermissions {

  private static final String TAG = "GearsPermissions";

  /**
   * Defines a type of permission
   *
   * Store the permission's name (used in the json result)
   * Graphically, each permission is a label followed by two radio buttons.
   * We store the resources ids here.
   */
  public static class PermissionType {
    public static final int PERMISSION_NOT_SET = 0;
    public static final int PERMISSION_ALLOWED = 1;
    public static final int PERMISSION_DENIED = 2;

    String mName;
    int mTitleRsc;
    int mSubtitleOnRsc;
    int mSubtitleOffRsc;

    PermissionType(String name) {
      mName = name;
    }

    public void setResources(int titleRsc,
        int subtitleOnRsc, int subtitleOffRsc) {
      mTitleRsc = titleRsc;
      mSubtitleOnRsc = subtitleOnRsc;
      mSubtitleOffRsc = subtitleOffRsc;
    }

    public String getName() {
      return mName;
    }

    public int getTitleRsc() {
      return mTitleRsc;
    }

    public int getSubtitleOnRsc() {
      return mSubtitleOnRsc;
    }

    public int getSubtitleOffRsc() {
      return mSubtitleOffRsc;
    }

  }

  /**
   * Simple class to store an instance of a permission
   *
   * i.e. a permission type and a value
   * Value can be either PERMISSION_NOT_SET,
   * PERMISSION_ALLOWED or PERMISSION_DENIED
   * (defined in PermissionType).
   */
  public static class Permission {
    PermissionType mType;
    int mValue;

    Permission(PermissionType type, int value) {
      mType = type;
      mValue = value;
    }

    Permission(PermissionType type) {
      mType = type;
      mValue = 0;
    }

    public PermissionType getType() {
      return mType;
    }

    public void setValue(int value) {
      mValue = value;
    }

    public int getValue() {
      return mValue;
    }
  }

  /**
   * Interface used by the GearsNativeDialog implementation
   * to listen to changes in the permissions.
   */
  public interface PermissionsChangesListener {
    public boolean setPermission(PermissionType type, int perm);
  }

  /**
   * Holds the model for an origin -- each origin has a set of
   * permissions.
   */
  public static class OriginPermissions {
    HashMap<PermissionType, Permission> mPermissions;
    String mOrigin;
    public static PermissionsChangesListener mListener;

    public static void setListener(PermissionsChangesListener listener) {
      mListener = listener;
    }

    OriginPermissions(String anOrigin) {
      mOrigin = anOrigin;
      mPermissions = new HashMap<PermissionType, Permission>();
    }

    OriginPermissions(OriginPermissions perms) {
      mOrigin = perms.getOrigin();
      mPermissions = new HashMap<PermissionType, Permission>();
      HashMap<PermissionType, Permission> permissions = perms.getPermissions();
      Iterator<PermissionType> iterator = permissions.keySet().iterator();
      while (iterator.hasNext()) {
        Permission permission = permissions.get(iterator.next());
        int value = permission.getValue();
        setPermission(permission.getType(), value);
      }
    }

    public String getOrigin() {
      return mOrigin;
    }

    public HashMap<PermissionType, Permission> getPermissions() {
      return mPermissions;
    }

    public int getPermission(PermissionType type) {
      return mPermissions.get(type).getValue();
    }

    public void setPermission(PermissionType type, int perm) {
      if (mPermissions.get(type) == null) {
        Permission permission = new Permission(type, perm);
        mPermissions.put(type, permission);
        return;
      }

      if (mListener != null) {
        mListener.setPermission(type, perm);
      }

      mPermissions.get(type).setValue(perm);
    }

    public void print() {
      Log.v(TAG, "Permissions for " + mOrigin);
      Iterator<PermissionType> iterator = mPermissions.keySet().iterator();
      while (iterator.hasNext()) {
        Permission permission = mPermissions.get(iterator.next());
        String name = permission.getType().getName();
        int value = permission.getValue();
        Log.v(TAG, "  " + name + ": " + value);
      }
    }
  }

}