Home | History | Annotate | Download | only in launch
      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.launch;
     18 
     19 import org.eclipse.core.runtime.CoreException;
     20 import org.eclipse.debug.core.ILaunchConfiguration;
     21 
     22 /**
     23  * Launch configuration data. This stores the result of querying the
     24  * {@link ILaunchConfiguration} so that it's only done once.
     25  */
     26 public class AndroidLaunchConfiguration {
     27 
     28     /**
     29      * Launch action. See {@link LaunchConfigDelegate#ACTION_DEFAULT},
     30      * {@link LaunchConfigDelegate#ACTION_ACTIVITY},
     31      * {@link LaunchConfigDelegate#ACTION_DO_NOTHING}
     32      */
     33     public int mLaunchAction = LaunchConfigDelegate.DEFAULT_LAUNCH_ACTION;
     34 
     35     /** Target selection mode for the configuration. */
     36     public enum TargetMode {
     37         /** Automatic target selection mode. */
     38         AUTO,
     39         /** Manual target selection mode. */
     40         MANUAL,
     41         /** All active devices */
     42         ALL_DEVICES,
     43         /** All active emulators */
     44         ALL_EMULATORS,
     45         /** All active devices and emulators */
     46         ALL_DEVICES_AND_EMULATORS;
     47 
     48         public static TargetMode getMode(String s) {
     49             for (TargetMode m: values()) {
     50                 if (m.toString().equals(s)) {
     51                     return m;
     52                 }
     53             }
     54 
     55             throw new IllegalArgumentException(String.format(
     56                     "Invalid representation (%s) for TargetMode", s));
     57         }
     58 
     59         public boolean isMultiDevice() {
     60             return this == ALL_DEVICES
     61                     || this == ALL_EMULATORS
     62                     || this == ALL_DEVICES_AND_EMULATORS;
     63         }
     64     }
     65 
     66     /**
     67      * Target selection mode.
     68      * @see TargetMode
     69      */
     70     public TargetMode mTargetMode = LaunchConfigDelegate.DEFAULT_TARGET_MODE;
     71 
     72     /**
     73      * Indicates whether the emulator should be called with -wipe-data
     74      */
     75     public boolean mWipeData = LaunchConfigDelegate.DEFAULT_WIPE_DATA;
     76 
     77     /**
     78      * Indicates whether the emulator should be called with -no-boot-anim
     79      */
     80     public boolean mNoBootAnim = LaunchConfigDelegate.DEFAULT_NO_BOOT_ANIM;
     81 
     82     /**
     83      * AVD Name.
     84      */
     85     public String mAvdName = null;
     86 
     87     public String mNetworkSpeed = EmulatorConfigTab.getSpeed(
     88             LaunchConfigDelegate.DEFAULT_SPEED);
     89     public String mNetworkDelay = EmulatorConfigTab.getDelay(
     90             LaunchConfigDelegate.DEFAULT_DELAY);
     91 
     92     /**
     93      * Optional custom command line parameter to launch the emulator
     94      */
     95     public String mEmulatorCommandLine;
     96 
     97     /** Flag indicating whether the same device should be used for future launches. */
     98     public boolean mReuseLastUsedDevice = false;
     99 
    100     /** Serial number of the device used in the last launch of this config. */
    101     public String mLastUsedDevice = null;
    102 
    103     /**
    104      * Initialized the structure from an ILaunchConfiguration object.
    105      * @param config
    106      */
    107     public void set(ILaunchConfiguration config) {
    108         try {
    109             mLaunchAction = config.getAttribute(LaunchConfigDelegate.ATTR_LAUNCH_ACTION,
    110                     mLaunchAction);
    111         } catch (CoreException e1) {
    112             // nothing to be done here, we'll use the default value
    113         }
    114 
    115         mTargetMode = parseTargetMode(config, mTargetMode);
    116 
    117         try {
    118             mReuseLastUsedDevice = config.getAttribute(
    119                     LaunchConfigDelegate.ATTR_REUSE_LAST_USED_DEVICE, false);
    120             mLastUsedDevice = config.getAttribute(
    121                     LaunchConfigDelegate.ATTR_LAST_USED_DEVICE, (String)null);
    122         } catch (CoreException e) {
    123          // nothing to be done here, we'll use the default value
    124         }
    125 
    126         try {
    127             mAvdName = config.getAttribute(LaunchConfigDelegate.ATTR_AVD_NAME, mAvdName);
    128         } catch (CoreException e) {
    129             // ignore
    130         }
    131 
    132         int index = LaunchConfigDelegate.DEFAULT_SPEED;
    133         try {
    134             index = config.getAttribute(LaunchConfigDelegate.ATTR_SPEED, index);
    135         } catch (CoreException e) {
    136             // nothing to be done here, we'll use the default value
    137         }
    138         mNetworkSpeed = EmulatorConfigTab.getSpeed(index);
    139 
    140         index = LaunchConfigDelegate.DEFAULT_DELAY;
    141         try {
    142             index = config.getAttribute(LaunchConfigDelegate.ATTR_DELAY, index);
    143         } catch (CoreException e) {
    144             // nothing to be done here, we'll use the default value
    145         }
    146         mNetworkDelay = EmulatorConfigTab.getDelay(index);
    147 
    148         try {
    149             mEmulatorCommandLine = config.getAttribute(
    150                     LaunchConfigDelegate.ATTR_COMMANDLINE, ""); //$NON-NLS-1$
    151         } catch (CoreException e) {
    152             // lets not do anything here, we'll use the default value
    153         }
    154 
    155         try {
    156             mWipeData = config.getAttribute(LaunchConfigDelegate.ATTR_WIPE_DATA, mWipeData);
    157         } catch (CoreException e) {
    158             // nothing to be done here, we'll use the default value
    159         }
    160 
    161         try {
    162             mNoBootAnim = config.getAttribute(LaunchConfigDelegate.ATTR_NO_BOOT_ANIM,
    163                                               mNoBootAnim);
    164         } catch (CoreException e) {
    165             // nothing to be done here, we'll use the default value
    166         }
    167     }
    168 
    169     /**
    170      * Retrieve the {@link TargetMode} saved in the provided launch configuration.
    171      * Returns defaultMode if there are any errors while retrieving or parsing the saved setting.
    172      */
    173     public static TargetMode parseTargetMode(ILaunchConfiguration config, TargetMode defaultMode) {
    174         try {
    175             String value = config.getAttribute(LaunchConfigDelegate.ATTR_TARGET_MODE,
    176                     defaultMode.toString());
    177             return TargetMode.getMode(value);
    178         } catch (CoreException e) {
    179             // ADT R20 changes the attribute type of ATTR_TARGET_MODE to be a string from a bool.
    180             // So if parsing as a string fails, attempt parsing as a boolean.
    181             try {
    182                 boolean value = config.getAttribute(LaunchConfigDelegate.ATTR_TARGET_MODE, true);
    183                 return value ? TargetMode.AUTO : TargetMode.MANUAL;
    184             } catch (CoreException e1) {
    185                 return defaultMode;
    186             }
    187         } catch (IllegalArgumentException e) {
    188             return defaultMode;
    189         }
    190     }
    191 }
    192 
    193