view src/main/java/dalvik/system/BlockGuard.java @ 123:3ec98ede8a06

Added compatibility wrapper for block guard. * dalvik/package-info.java: Added package description. * dalvik/system/BlockGuard.java: Added new compatibility wrapper.
author Michael Starzinger <michi@complang.tuwien.ac.at>
date Sun, 10 Apr 2011 23:52:10 +0200
parents
children 9198ee3eefbe
line wrap: on
line source

/*
 * Daneel - Dalvik to Java bytecode compiler
 * Copyright (C) 2011  IcedRobot team
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * This file is subject to the "Classpath" exception:
 *
 * Linking this library statically or dynamically with other modules is
 * making a combined work based on this library.  Thus, the terms and
 * conditions of the GNU General Public License cover the whole
 * combination.
 *
 * As a special exception, the copyright holders of this library give you
 * permission to link this library with independent modules to produce an
 * executable, regardless of the license terms of these independent
 * modules, and to copy and distribute the resulting executable under terms
 * of your choice, provided that you also meet, for each linked independent
 * module, the terms and conditions of the license of that module.  An
 * independent module is a module which is not derived from or based on
 * this library.  If you modify this library, you may extend this exception
 * to your version of the library, but you are not obligated to do so.  If
 * you do not wish to do so, delete this exception statement from your
 * version.
 */

package dalvik.system;

/**
 * Compatibility wrapper for Dalvik VM interface. The block guard allows
 * applications to specify what operations each thread is allowed to perform.
 * The block guard has to be implemented on a best-effort basis, so we can
 * safely ignore it and just provide an empty stub.
 */
public class BlockGuard {

    public static final int DISALLOW_DISK_WRITE = 1;
    public static final int DISALLOW_DISK_READ = 2;
    public static final int DISALLOW_NETWORK = 4;
    public static final int PASS_RESTRICTIONS_VIA_RPC = 8;
    public static final int PENALTY_LOG = 16;
    public static final int PENALTY_DIALOG = 32;
    public static final int PENALTY_DEATH = 64;

    /**
     * The interface for a block guard policy specifying what operations a
     * thread is allowed to perform.
     */
    public static interface Policy {
        int getPolicyMask();
        void onNetwork();
        void onReadFromDisk();
        void onWriteToDisk();
    };

    /**
     * The initial block guard policy that each thread starts out with, if not
     * specified explicitly.
     */
    public static final Policy LAX_POLICY = new Policy() {
        public int getPolicyMask() { return 0; }
        public void onNetwork() {}
        public void onReadFromDisk() {}
        public void onWriteToDisk() {}
    };

    /**
     * Gets the block guard policy for the current thread.
     * @return The block guard policy.
     */
    public static Policy getPolicy() {
        return threadPolicy.get();
    }

    /**
     * Sets the block guard policy for the current thread.
     * @param policy The block guard policy.
     */
    public static void setPolicy(Policy policy) {
        threadPolicy.set(policy);
    }

    private static final ThreadLocal<Policy> threadPolicy;
    static {
        threadPolicy = new ThreadLocal<Policy>() {
            @Override
            protected Policy initialValue() {
                return LAX_POLICY;
            }
        };
    }

    private BlockGuard() {
        // No instances of this class.
    }
}