Home | History | Annotate | Download | only in pdt
      1 /*
      2  * Copyright (C) 2010 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
      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.pdt;
     18 
     19 import com.android.ide.eclipse.ddms.DdmsPlugin;
     20 import com.android.ide.eclipse.pdt.internal.preferences.PrefPage;
     21 
     22 import org.eclipse.jface.preference.IPreferenceStore;
     23 import org.eclipse.jface.util.IPropertyChangeListener;
     24 import org.eclipse.jface.util.PropertyChangeEvent;
     25 import org.eclipse.ui.plugin.AbstractUIPlugin;
     26 import org.osgi.framework.BundleContext;
     27 
     28 public class PdtPlugin extends AbstractUIPlugin {
     29 
     30     public final static String PLUGIN_ID = "com.android.ide.eclipse.pdt"; //$NON-NLS-1$
     31     private static PdtPlugin sPlugin;
     32 
     33     public PdtPlugin() {
     34         sPlugin = this;
     35     }
     36 
     37     /**
     38      * Returns the shared instance
     39      *
     40      * @return the shared instance
     41      */
     42     public static synchronized PdtPlugin getDefault() {
     43         return sPlugin;
     44     }
     45 
     46     @Override
     47     public void start(BundleContext context) throws Exception {
     48         super.start(context);
     49 
     50         // set the listener for the preference change
     51         getPreferenceStore().addPropertyChangeListener(new IPropertyChangeListener() {
     52             @Override
     53             public void propertyChange(PropertyChangeEvent event) {
     54                 // if the SDK changed, we have to do some extra work
     55                 if (PrefPage.PREFS_DEVTREE_DIR.equals(event.getProperty())) {
     56                     // restart adb, in case it's a different version
     57                     DdmsPlugin.setToolsLocation(getAdbLocation(), true /* startAdb */,
     58                             getHprofConvLocation(), getTraceViewLocation());
     59                 }
     60             }
     61         });
     62     }
     63 
     64     /**
     65      * Returns the location of the dev tree or <code>null</code> if unknown.
     66      */
     67     public static String getDevTree() {
     68         // this always return a store, even a temp one if an error occurred.
     69         IPreferenceStore store = sPlugin.getPreferenceStore();
     70 
     71         // returns an empty, non-null, string if the preference is not found.
     72         String devTree = store.getString(PrefPage.PREFS_DEVTREE_DIR);
     73 
     74         if (devTree.length() == 0) {
     75             devTree = System.getenv("ANDROID_BUILD_TOP"); //$NON-NLS-1$
     76         }
     77 
     78         return devTree;
     79     }
     80 
     81     /**
     82      * Returns the location of adb or <code>null</code> if unknown.
     83      */
     84     public static String getAdbLocation() {
     85         String devTreeBin = getDevTreeOutBin();
     86 
     87         if (devTreeBin != null && devTreeBin.length() > 0) {
     88             return devTreeBin + "adb"; //$NON-NLS-1$
     89         }
     90 
     91         return null;
     92     }
     93 
     94     /**
     95      * Returns the location of hprof-conv or <code>null</code> if unknown.
     96      */
     97     public static String getHprofConvLocation() {
     98         String devTreeBin = getDevTreeOutBin();
     99 
    100         if (devTreeBin != null && devTreeBin.length() > 0) {
    101             return devTreeBin + "hprof-conv"; //$NON-NLS-1$
    102         }
    103 
    104         return null;
    105     }
    106 
    107     /**
    108      * Returns the location of traceview or <code>null</code> if unknown.
    109      */
    110     public static String getTraceViewLocation() {
    111         String devTreeBin = getDevTreeOutBin();
    112 
    113         if (devTreeBin != null && devTreeBin.length() > 0) {
    114             return devTreeBin + "traceview"; //$NON-NLS-1$
    115         }
    116 
    117         return null;
    118     }
    119 
    120     private static String getDevTreeOutBin() {
    121         String devTree = getDevTree();
    122 
    123         if (devTree != null && devTree.length() > 0) {
    124             return devTree + "/out/host/" + currentPlatform() + "/bin/"; //$NON-NLS-1$ //$NON-NLS-2$
    125         }
    126 
    127         return null;
    128     }
    129 
    130     /**
    131      * Returns the current platform name as used by the Android build system
    132      *
    133      */
    134     private static String currentPlatform() {
    135         String os = System.getProperty("os.name");          //$NON-NLS-1$
    136         if (os.startsWith("Mac OS")) {                      //$NON-NLS-1$
    137             return "darwin-x86";                            //$NON-NLS-1$
    138         } else if (os.startsWith("Windows")) {              //$NON-NLS-1$
    139             return "windows";                               //$NON-NLS-1$
    140         } else if (os.startsWith("Linux")) {                //$NON-NLS-1$
    141             return "linux-x86";                             //$NON-NLS-1$
    142         }
    143 
    144         return ""; //$NON-NLS-1$
    145     }
    146 }
    147