Home | History | Annotate | Download | only in preferences
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Eclipse Public License, Version 1.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.eclipse.org/org/documents/epl-v10.php
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.ide.eclipse.adt.internal.preferences;
     18 
     19 import com.android.ide.eclipse.adt.AdtPlugin;
     20 import com.android.prefs.AndroidLocation.AndroidLocationException;
     21 import com.android.sdklib.internal.build.DebugKeyProvider;
     22 import com.android.sdklib.internal.build.DebugKeyProvider.KeytoolException;
     23 
     24 import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
     25 import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
     26 import org.eclipse.jface.preference.IPreferenceStore;
     27 
     28 import java.io.File;
     29 
     30 @SuppressWarnings("deprecation")
     31 public final class AdtPrefs extends AbstractPreferenceInitializer {
     32     public final static String PREFS_SDK_DIR = AdtPlugin.PLUGIN_ID + ".sdk"; //$NON-NLS-1$
     33 
     34     public final static String PREFS_BUILD_RES_AUTO_REFRESH = AdtPlugin.PLUGIN_ID + ".resAutoRefresh"; //$NON-NLS-1$
     35 
     36     public final static String PREFS_BUILD_FORCE_ERROR_ON_NATIVELIB_IN_JAR = AdtPlugin.PLUGIN_ID + ".forceErrorNativeLibInJar"; //$NON-NLS-1$
     37 
     38     public final static String PREFS_BUILD_VERBOSITY = AdtPlugin.PLUGIN_ID + ".buildVerbosity"; //$NON-NLS-1$
     39 
     40     public final static String PREFS_DEFAULT_DEBUG_KEYSTORE = AdtPlugin.PLUGIN_ID + ".defaultDebugKeyStore"; //$NON-NLS-1$
     41 
     42     public final static String PREFS_CUSTOM_DEBUG_KEYSTORE = AdtPlugin.PLUGIN_ID + ".customDebugKeyStore"; //$NON-NLS-1$
     43 
     44     public final static String PREFS_HOME_PACKAGE = AdtPlugin.PLUGIN_ID + ".homePackage"; //$NON-NLS-1$
     45 
     46     public final static String PREFS_EMU_OPTIONS = AdtPlugin.PLUGIN_ID + ".emuOptions"; //$NON-NLS-1$
     47 
     48     /** singleton instance */
     49     private final static AdtPrefs sThis = new AdtPrefs();
     50 
     51     /** default store, provided by eclipse */
     52     private IPreferenceStore mStore;
     53 
     54     /** cached location for the sdk folder */
     55     private String mOsSdkLocation;
     56 
     57     /** Verbosity of the build */
     58     private BuildVerbosity mBuildVerbosity = BuildVerbosity.NORMAL;
     59 
     60     private boolean mBuildForceResResfresh = false;
     61     private boolean mBuildForceErrorOnNativeLibInJar = true;
     62 
     63     public static enum BuildVerbosity {
     64         /** Build verbosity "Always". Those messages are always displayed, even in silent mode */
     65         ALWAYS(0),
     66         /** Build verbosity level "Normal" */
     67         NORMAL(1),
     68         /** Build verbosity level "Verbose". Those messages are only displayed in verbose mode */
     69         VERBOSE(2);
     70 
     71         private int mLevel;
     72 
     73         BuildVerbosity(int level) {
     74             mLevel = level;
     75         }
     76 
     77         public int getLevel() {
     78             return mLevel;
     79         }
     80 
     81         /**
     82          * Finds and returns a {@link BuildVerbosity} whose {@link #name()} matches a given name.
     83          * <p/>This is different from {@link Enum#valueOf(Class, String)} in that it returns null
     84          * if no matches are found.
     85          *
     86          * @param name the name to look up.
     87          * @return returns the matching enum or null of no match where found.
     88          */
     89         public static BuildVerbosity find(String name) {
     90             for (BuildVerbosity v : values()) {
     91                 if (v.name().equals(name)) {
     92                     return v;
     93                 }
     94             }
     95 
     96             return null;
     97         }
     98     }
     99 
    100     public static void init(IPreferenceStore preferenceStore) {
    101         sThis.mStore = preferenceStore;
    102     }
    103 
    104     public static AdtPrefs getPrefs() {
    105         return sThis;
    106     }
    107 
    108     public synchronized void loadValues(PropertyChangeEvent event) {
    109         // get the name of the property that changed, if any
    110         String property = event != null ? event.getProperty() : null;
    111 
    112         if (property == null || PREFS_SDK_DIR.equals(property)) {
    113             mOsSdkLocation = mStore.getString(PREFS_SDK_DIR);
    114 
    115             // make sure it ends with a separator. Normally this is done when the preference
    116             // is set. But to make sure older version still work, we fix it here as well.
    117             if (mOsSdkLocation.length() > 0 && mOsSdkLocation.endsWith(File.separator) == false) {
    118                 mOsSdkLocation = mOsSdkLocation + File.separator;
    119             }
    120         }
    121 
    122         if (property == null || PREFS_BUILD_VERBOSITY.equals(property)) {
    123             mBuildVerbosity = BuildVerbosity.find(mStore.getString(PREFS_BUILD_VERBOSITY));
    124             if (mBuildVerbosity == null) {
    125                 mBuildVerbosity = BuildVerbosity.NORMAL;
    126             }
    127         }
    128 
    129         if (property == null || PREFS_BUILD_RES_AUTO_REFRESH.equals(property)) {
    130             mBuildForceResResfresh = mStore.getBoolean(PREFS_BUILD_RES_AUTO_REFRESH);
    131         }
    132 
    133         if (property == null || PREFS_BUILD_FORCE_ERROR_ON_NATIVELIB_IN_JAR.equals(property)) {
    134             mBuildForceErrorOnNativeLibInJar = mStore.getBoolean(PREFS_BUILD_RES_AUTO_REFRESH);
    135         }
    136     }
    137 
    138     /**
    139      * Returns the SDK folder.
    140      * Guaranteed to be terminated by a platform-specific path separator.
    141      */
    142     public synchronized String getOsSdkFolder() {
    143         return mOsSdkLocation;
    144     }
    145 
    146     public synchronized BuildVerbosity getBuildVerbosity() {
    147         return mBuildVerbosity;
    148     }
    149 
    150     public  boolean getBuildForceResResfresh() {
    151         return mBuildForceResResfresh;
    152     }
    153 
    154     public boolean getBuildForceErrorOnNativeLibInJar() {
    155         return mBuildForceErrorOnNativeLibInJar;
    156     }
    157 
    158     @Override
    159     public void initializeDefaultPreferences() {
    160         IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore();
    161 
    162         store.setDefault(PREFS_BUILD_RES_AUTO_REFRESH, true);
    163         store.setDefault(PREFS_BUILD_FORCE_ERROR_ON_NATIVELIB_IN_JAR, true);
    164 
    165         store.setDefault(PREFS_BUILD_VERBOSITY, BuildVerbosity.ALWAYS.name());
    166 
    167         store.setDefault(PREFS_HOME_PACKAGE, "android.process.acore"); //$NON-NLS-1$
    168 
    169         try {
    170             store.setDefault(PREFS_DEFAULT_DEBUG_KEYSTORE,
    171                     DebugKeyProvider.getDefaultKeyStoreOsPath());
    172         } catch (KeytoolException e) {
    173             AdtPlugin.log(e, "Get default debug keystore path failed"); //$NON-NLS-1$
    174         } catch (AndroidLocationException e) {
    175             AdtPlugin.log(e, "Get default debug keystore path failed"); //$NON-NLS-1$
    176         }
    177     }
    178 }
    179