--- /dev/null
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php
+ *
+ * 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.ide.eclipse.adt.internal.preferences;
+
+import com.android.ide.eclipse.adt.AdtPlugin;
+import com.android.prefs.AndroidLocation.AndroidLocationException;
+import com.android.sdklib.internal.build.DebugKeyProvider;
+import com.android.sdklib.internal.build.DebugKeyProvider.KeytoolException;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
+import java.io.File;
+
+public final class AdtPrefs extends AbstractPreferenceInitializer {
+ public final static String PREFS_SDK_DIR = AdtPlugin.PLUGIN_ID + ".sdk"; //$NON-NLS-1$
+
+ public final static String PREFS_BUILD_RES_AUTO_REFRESH = AdtPlugin.PLUGIN_ID + ".resAutoRefresh"; //$NON-NLS-1$
+
+ public final static String PREFS_BUILD_FORCE_ERROR_ON_NATIVELIB_IN_JAR = AdtPlugin.PLUGIN_ID + ".forceErrorNativeLibInJar"; //$NON-NLS-1$
+
+ public final static String PREFS_BUILD_VERBOSITY = AdtPlugin.PLUGIN_ID + ".buildVerbosity"; //$NON-NLS-1$
+
+ public final static String PREFS_DEFAULT_DEBUG_KEYSTORE = AdtPlugin.PLUGIN_ID + ".defaultDebugKeyStore"; //$NON-NLS-1$
+
+ public final static String PREFS_CUSTOM_DEBUG_KEYSTORE = AdtPlugin.PLUGIN_ID + ".customDebugKeyStore"; //$NON-NLS-1$
+
+ public final static String PREFS_HOME_PACKAGE = AdtPlugin.PLUGIN_ID + ".homePackage"; //$NON-NLS-1$
+
+ public final static String PREFS_EMU_OPTIONS = AdtPlugin.PLUGIN_ID + ".emuOptions"; //$NON-NLS-1$
+
+ public final static String PREFS_MONITOR_DENSITY = AdtPlugin.PLUGIN_ID + ".monitorDensity"; //$NON-NLS-1$
+
+ public final static String PREFS_FORMAT_XML = AdtPlugin.PLUGIN_ID + ".formatXml"; //$NON-NLS-1$
+
+ public final static String PREFS_PALETTE_MODE = AdtPlugin.PLUGIN_ID + ".palette"; //$NON-NLS-1$
+
+ /** singleton instance */
+ private final static AdtPrefs sThis = new AdtPrefs();
+
+ /** default store, provided by eclipse */
+ private IPreferenceStore mStore;
+
+ /** cached location for the sdk folder */
+ private String mOsSdkLocation;
+
+ /** Verbosity of the build */
+ private BuildVerbosity mBuildVerbosity = BuildVerbosity.NORMAL;
+
+ private boolean mBuildForceResResfresh = false;
+ private boolean mBuildForceErrorOnNativeLibInJar = true;
+ private boolean mFormatXml = false;
+ private float mMonitorDensity = 0.f;
+ private String mPalette;
+
+ public static enum BuildVerbosity {
+ /** Build verbosity "Always". Those messages are always displayed, even in silent mode */
+ ALWAYS(0),
+ /** Build verbosity level "Normal" */
+ NORMAL(1),
+ /** Build verbosity level "Verbose". Those messages are only displayed in verbose mode */
+ VERBOSE(2);
+
+ private int mLevel;
+
+ BuildVerbosity(int level) {
+ mLevel = level;
+ }
+
+ public int getLevel() {
+ return mLevel;
+ }
+
+ /**
+ * Finds and returns a {@link BuildVerbosity} whose {@link #name()} matches a given name.
+ * <p/>This is different from {@link Enum#valueOf(Class, String)} in that it returns null
+ * if no matches are found.
+ *
+ * @param name the name to look up.
+ * @return returns the matching enum or null of no match where found.
+ */
+ public static BuildVerbosity find(String name) {
+ for (BuildVerbosity v : values()) {
+ if (v.name().equals(name)) {
+ return v;
+ }
+ }
+
+ return null;
+ }
+ }
+
+ public static void init(IPreferenceStore preferenceStore) {
+ sThis.mStore = preferenceStore;
+ }
+
+ public static AdtPrefs getPrefs() {
+ return sThis;
+ }
+
+ public synchronized void loadValues(PropertyChangeEvent event) {
+ // get the name of the property that changed, if any
+ String property = event != null ? event.getProperty() : null;
+
+ if (property == null || PREFS_SDK_DIR.equals(property)) {
+ mOsSdkLocation = mStore.getString(PREFS_SDK_DIR);
+
+ // Make it possible to override the SDK path using an environment variable.
+ // The value will only be used if it matches an existing directory.
+ // Useful for testing from Eclipse.
+ // Note: this is a hack that does not change the preferences, so if the user
+ // looks at Window > Preferences > Android, the path will be the preferences
+ // one and not the overridden one.
+ String override = System.getenv("ADT_TEST_SDK_PATH"); //$NON-NLS-1$
+ if (override != null && override.length() > 0 && new File(override).isDirectory()) {
+ mOsSdkLocation = override;
+ }
+
+ // make sure it ends with a separator. Normally this is done when the preference
+ // is set. But to make sure older version still work, we fix it here as well.
+ if (mOsSdkLocation.length() > 0 && mOsSdkLocation.endsWith(File.separator) == false) {
+ mOsSdkLocation = mOsSdkLocation + File.separator;
+ }
+ }
+
+ if (property == null || PREFS_BUILD_VERBOSITY.equals(property)) {
+ mBuildVerbosity = BuildVerbosity.find(mStore.getString(PREFS_BUILD_VERBOSITY));
+ if (mBuildVerbosity == null) {
+ mBuildVerbosity = BuildVerbosity.NORMAL;
+ }
+ }
+
+ if (property == null || PREFS_BUILD_RES_AUTO_REFRESH.equals(property)) {
+ mBuildForceResResfresh = mStore.getBoolean(PREFS_BUILD_RES_AUTO_REFRESH);
+ }
+
+ if (property == null || PREFS_BUILD_FORCE_ERROR_ON_NATIVELIB_IN_JAR.equals(property)) {
+ mBuildForceErrorOnNativeLibInJar = mStore.getBoolean(PREFS_BUILD_RES_AUTO_REFRESH);
+ }
+
+ if (property == null || PREFS_MONITOR_DENSITY.equals(property)) {
+ mMonitorDensity = mStore.getFloat(PREFS_MONITOR_DENSITY);
+ }
+
+ if (property == null || PREFS_FORMAT_XML.equals(property)) {
+ mFormatXml = mStore.getBoolean(PREFS_FORMAT_XML);
+ }
+
+ if (property == null || PREFS_PALETTE_MODE.equals(property)) {
+ mPalette = mStore.getString(PREFS_PALETTE_MODE);
+ }
+ }
+
+ /**
+ * Returns the SDK folder.
+ * Guaranteed to be terminated by a platform-specific path separator.
+ */
+ public synchronized String getOsSdkFolder() {
+ return mOsSdkLocation;
+ }
+
+ public synchronized BuildVerbosity getBuildVerbosity() {
+ return mBuildVerbosity;
+ }
+
+ public boolean getBuildForceResResfresh() {
+ return mBuildForceResResfresh;
+ }
+
+ public boolean getFormatXml() {
+ return mFormatXml;
+ }
+
+ public boolean getBuildForceErrorOnNativeLibInJar() {
+ return mBuildForceErrorOnNativeLibInJar;
+ }
+
+ public String getPaletteModes() {
+ return mPalette;
+ }
+
+ public void setPaletteModes(String palette) {
+ mPalette = palette;
+
+ // need to save this new value to the store
+ IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore();
+ store.setValue(PREFS_PALETTE_MODE, palette);
+ }
+
+ public float getMonitorDensity() {
+ return mMonitorDensity;
+ }
+
+ public void setMonitorDensity(float density) {
+ mMonitorDensity = density;
+
+ // need to save this new value to the store
+ IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore();
+ store.setValue(PREFS_MONITOR_DENSITY, density);
+ }
+
+ @Override
+ public void initializeDefaultPreferences() {
+ IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore();
+
+ store.setDefault(PREFS_BUILD_RES_AUTO_REFRESH, true);
+ store.setDefault(PREFS_BUILD_FORCE_ERROR_ON_NATIVELIB_IN_JAR, true);
+
+ store.setDefault(PREFS_BUILD_VERBOSITY, BuildVerbosity.ALWAYS.name());
+
+ store.setDefault(PREFS_HOME_PACKAGE, "android.process.acore"); //$NON-NLS-1$
+
+ store.setDefault(PREFS_MONITOR_DENSITY, 0.f);
+ store.setDefault(PREFS_FORMAT_XML, false);
+
+ try {
+ store.setDefault(PREFS_DEFAULT_DEBUG_KEYSTORE,
+ DebugKeyProvider.getDefaultKeyStoreOsPath());
+ } catch (KeytoolException e) {
+ AdtPlugin.log(e, "Get default debug keystore path failed"); //$NON-NLS-1$
+ } catch (AndroidLocationException e) {
+ AdtPlugin.log(e, "Get default debug keystore path failed"); //$NON-NLS-1$
+ }
+ }
+}