OSDN Git Service

android-2.1_r1 snapshot
[android-x86/sdk.git] / eclipse / plugins / com.android.ide.eclipse.adt / src / com / android / ide / eclipse / adt / internal / preferences / AdtPrefs.java
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.jarutils.DebugKeyProvider;
21 import com.android.jarutils.DebugKeyProvider.KeytoolException;
22 import com.android.prefs.AndroidLocation.AndroidLocationException;
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 }