Android Open Source - interdroid-vdb Strict Util






From Project

Back to project page interdroid-vdb.

License

The source code is released under:

Copyright (c) 2008-2012 Vrije Universiteit, The Netherlands All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the follo...

If you think the Android project interdroid-vdb listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (c) 2008-2012 Vrije Universiteit, The Netherlands All rights
 * reserved.// w  ww  . jav  a2s  . c o  m
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.
 *
 * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * Neither the name of the Vrije Universiteit nor the names of its contributors
 * may be used to endorse or promote products derived from this software without
 * specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package interdroid.util;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * A wrapper class to allow us to turn on StrictMode on devices which support
 * it but leave the calls in for devices which do not.
 *
 * This class uses reflection to setup StrictMode on devices which support it.
 *
 * @author nick >palmer@cs.vu.nl<
 *
 */
public final class StrictUtil {
  /**
   * Access to logger.
   */
  private static final Logger LOG = LoggerFactory.getLogger(StrictUtil.class);

  /**
   * No construction.
   */
  private StrictUtil() {
    // No construction
  }

  /**
   * Is developer mode on.
   */
  private static boolean sDeveloperMode = false;

  /**
   * Turns on developer mode system wide.
   */
  public static void setDeveloperMode() {
    sDeveloperMode = true;
  }

  /**
   * Sets the thread policy for strict mode to all with
   * log and death penalties.
   */
  public static void setThreadPolicies() {
    if (sDeveloperMode) {
      Class<?> strictMode;
      try {
        strictMode =
            Class.forName(
                "android.os.StrictMode");

        setThreadPolicy(strictMode);
      } catch (Exception e) {
        if (LOG.isWarnEnabled()) {
          LOG.warn("Exception setting Strict ThreadPolicy", e);
        }
      }
    }
  }

  /**
   * Sets the thread and vm policy for strict mode to all with log
   * and death penalties.
   */
  public static void setDeveloperPolicies() {
    if (sDeveloperMode) {
      Class<?> strictMode;
      try {
        strictMode =
            Class.forName(
                "android.os.StrictMode");

        setThreadPolicy(strictMode);
        setVmPolicy(strictMode);
      } catch (Exception e) {
        if (LOG.isWarnEnabled()) {
          LOG.warn("Exception setting thread and vm policy", e);
        }
      }
    }
  }

  /**
   * Sets the vm policy.
   *
   * @param strictMode
   *            the strict mode to work with
   * @throws ClassNotFoundException
   *             on problem
   * @throws NoSuchMethodException
   *             on problem
   * @throws InstantiationException
   *             on problem
   * @throws IllegalAccessException
   *             on problem
   * @throws InvocationTargetException
   *             on problem
   */
  private static void setVmPolicy(final Class<?> strictMode)
      throws ClassNotFoundException, NoSuchMethodException,
      InstantiationException, IllegalAccessException,
      InvocationTargetException {
    Class<?> vmPolicyType =
        Class.forName("android.os.StrictMode$VmPolicy");
    Method setVmPolicy =
        strictMode.getMethod("setVmPolicy",
            vmPolicyType);
    Class<?> vmPolicyBuilder = Class
        .forName(
          "android.os.StrictMode$VmPolicy$Builder");

    Object policy = buildPolicy(vmPolicyBuilder);
    setVmPolicy.invoke(strictMode, policy);
  }

  /**
   * Sets the thread policy.
   *
   * @param strictMode
   *            the strict mode to work with
   * @throws ClassNotFoundException
   *             on problem
   * @throws NoSuchMethodException
   *             on problem
   * @throws InstantiationException
   *             on problem
   * @throws IllegalAccessException
   *             on problem
   * @throws InvocationTargetException
   *             on problem
   */
  private static void setThreadPolicy(final Class<?> strictMode)
      throws ClassNotFoundException, NoSuchMethodException,
      InstantiationException, IllegalAccessException,
      InvocationTargetException {

    Class<?> threadPolicyType = Class
        .forName("android.os.StrictMode$ThreadPolicy");
    Method setThreadPolicy = strictMode.getMethod("setThreadPolicy",
        threadPolicyType);
    Class<?> threadPolicyBuilder = Class
        .forName(
          "android.os.StrictMode$ThreadPolicy$Builder");

    Object policy = buildPolicy(threadPolicyBuilder);
    setThreadPolicy.invoke(strictMode, policy);
  }

  /**
   * Builds a policy with detectAll, penaltyLog and penaltyDeath.
   *
   * @param policyBuilder
   *            the builder to use
   * @return the policy object
   * @throws NoSuchMethodException
   *             on problem
   * @throws InstantiationException
   *             on problem
   * @throws IllegalAccessException
   *             on problem
   * @throws InvocationTargetException
   *             on problem
   */
  private static Object buildPolicy(final Class<?> policyBuilder)
      throws NoSuchMethodException, InstantiationException,
      IllegalAccessException, InvocationTargetException {
    Method detectAll = policyBuilder.getMethod("detectAll");
    Method penaltyLog = policyBuilder.getMethod("penaltyLog");
    Method penaltyDeath = policyBuilder.getMethod("penaltyDeath");
    Method build = policyBuilder.getMethod("build");
    Constructor<?> constructor = policyBuilder.getConstructor();

    Object builder = constructor.newInstance();
    builder = detectAll.invoke(builder);
    builder = penaltyLog.invoke(builder);
    builder = penaltyDeath.invoke(builder);
    return build.invoke(builder);
  }
}




Java Source Code List

interdroid.util.CryptoUtil.java
interdroid.util.DbUtil.java
interdroid.util.FSUtil.java
interdroid.util.StrictUtil.java
interdroid.util.ToastOnUI.java
interdroid.vdb.Actions.java
interdroid.vdb.Authority.java
interdroid.vdb.content.ContentChangeHandler.java
interdroid.vdb.content.CrossProcessCursorWrapper.java
interdroid.vdb.content.DatabaseInitializer.java
interdroid.vdb.content.EntityUriBuilder.java
interdroid.vdb.content.EntityUriMatcher.java
interdroid.vdb.content.GenericContentProvider.java
interdroid.vdb.content.VdbConfig.java
interdroid.vdb.content.VdbMainContentProvider.java
interdroid.vdb.content.VdbProviderRegistry.java
interdroid.vdb.content.avro.AvroContentProviderProxy.java
interdroid.vdb.content.avro.AvroContentProvider.java
interdroid.vdb.content.avro.AvroEntityInfo.java
interdroid.vdb.content.avro.AvroFieldInfo.java
interdroid.vdb.content.avro.AvroMetadata.java
interdroid.vdb.content.avro.AvroProviderRegistry.java
interdroid.vdb.content.avro.AvroSchemaRegistrationHandler.java
interdroid.vdb.content.avro.SchemaEvolutionValidator.java
interdroid.vdb.content.avro.package-info.java
interdroid.vdb.content.metadata.DatabaseFieldType.java
interdroid.vdb.content.metadata.EntityInfo.java
interdroid.vdb.content.metadata.FieldInfo.java
interdroid.vdb.content.metadata.Metadata.java
interdroid.vdb.content.metadata.package-info.java
interdroid.vdb.content.orm.DbEntity.java
interdroid.vdb.content.orm.DbField.java
interdroid.vdb.content.orm.ORMEntityInfo.java
interdroid.vdb.content.orm.ORMFieldInfo.java
interdroid.vdb.content.orm.ORMGenericContentProvider.java
interdroid.vdb.content.orm.ORMMetadata.java
interdroid.vdb.content.orm.package-info.java
interdroid.vdb.content.package-info.java
interdroid.vdb.persistence.api.DirtyCheckoutException.java
interdroid.vdb.persistence.api.MergeInProgressException.java
interdroid.vdb.persistence.api.MergeInfo.java
interdroid.vdb.persistence.api.RemoteInfo.java
interdroid.vdb.persistence.api.VdbCheckout.java
interdroid.vdb.persistence.api.VdbInitializer.java
interdroid.vdb.persistence.api.VdbRepositoryRegistry.java
interdroid.vdb.persistence.api.VdbRepository.java
interdroid.vdb.persistence.api.package-info.java
interdroid.vdb.persistence.impl.MergeHelper.java
interdroid.vdb.persistence.impl.ThreeWayDiffCursor.java
interdroid.vdb.persistence.impl.VdbCheckoutImpl.java
interdroid.vdb.persistence.impl.VdbRepositoryImpl.java
interdroid.vdb.persistence.impl.package-info.java
interdroid.vdb.transport.SmartSocketsDaemonClient.java
interdroid.vdb.transport.SmartSocketsDaemon.java
interdroid.vdb.transport.SmartSocketsTransport.java
interdroid.vdb.transport.SmartsocketsDaemonService.java
interdroid.vdb.transport.VdbRepositoryResolver.java
interdroid.vdb.transport.package-info.java
interdroid.vdb.package-info.java