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 com.android.ddmlib.IDevice; 20 21 import org.eclipse.core.resources.IFile; 22 import org.eclipse.core.resources.IProject; 23 import org.eclipse.core.runtime.IProgressMonitor; 24 25 /** 26 * A delayed launch waiting for a device to be present or ready before the 27 * application is launched. 28 */ 29 public final class DelayedLaunchInfo { 30 31 /** 32 * Used to indicate behavior when Android app already exists 33 */ 34 enum InstallRetryMode { 35 NEVER, ALWAYS, PROMPT; 36 } 37 38 /** The device on which to launch the app */ 39 private IDevice mDevice = null; 40 41 /** The eclipse project */ 42 private final IProject mProject; 43 44 /** Package name */ 45 private final String mPackageName; 46 47 /** Debug package name */ 48 private final String mDebugPackageName; 49 50 /** IFile to the package (.apk) file */ 51 private final IFile mPackageFile; 52 53 /** debuggable attribute of the manifest file. */ 54 private final Boolean mDebuggable; 55 56 /** Required Api level by the app. null means no requirements */ 57 private final String mRequiredApiVersionNumber; 58 59 private InstallRetryMode mRetryMode = InstallRetryMode.NEVER; 60 61 /** Launch action. */ 62 private final IAndroidLaunchAction mLaunchAction; 63 64 /** the launch object */ 65 private final AndroidLaunch mLaunch; 66 67 /** the monitor object */ 68 private final IProgressMonitor mMonitor; 69 70 /** debug mode flag */ 71 private boolean mDebugMode; 72 73 /** current number of launch attempts */ 74 private int mAttemptCount = 0; 75 76 /** cancellation state of launch */ 77 private boolean mCancelled = false; 78 79 /** 80 * Basic constructor with activity and package info. 81 * 82 * @param project the eclipse project that corresponds to Android app 83 * @param packageName package name of Android app 84 * @param debugPackageName the package name of the Andriod app to debug 85 * @param launchAction action to perform after app install 86 * @param pack IFile to the package (.apk) file 87 * @param debuggable the debuggable value of the app's manifest, or null if not set. 88 * @param requiredApiVersionNumber required SDK version by the app. null means no requirements. 89 * @param launch the launch object 90 * @param monitor progress monitor for launch 91 */ 92 public DelayedLaunchInfo(IProject project, String packageName, String debugPackageName, 93 IAndroidLaunchAction launchAction, IFile pack, Boolean debuggable, 94 String requiredApiVersionNumber, AndroidLaunch launch, IProgressMonitor monitor) { 95 mProject = project; 96 mPackageName = packageName; 97 mDebugPackageName = debugPackageName; 98 mPackageFile = pack; 99 mLaunchAction = launchAction; 100 mLaunch = launch; 101 mMonitor = monitor; 102 mDebuggable = debuggable; 103 mRequiredApiVersionNumber = requiredApiVersionNumber; 104 } 105 106 /** 107 * @return the device on which to launch the app 108 */ 109 public IDevice getDevice() { 110 return mDevice; 111 } 112 113 /** 114 * Set the device on which to launch the app 115 */ 116 public void setDevice(IDevice device) { 117 mDevice = device; 118 } 119 120 /** 121 * @return the eclipse project that corresponds to Android app 122 */ 123 public IProject getProject() { 124 return mProject; 125 } 126 127 /** 128 * @return the package name of the Android app 129 */ 130 public String getPackageName() { 131 return mPackageName; 132 } 133 134 /** 135 * Returns the Android app process name that the debugger should connect to. Typically this is 136 * the same value as {@link #getPackageName()}. 137 */ 138 public String getDebugPackageName() { 139 if (mDebugPackageName == null) { 140 return getPackageName(); 141 } 142 return mDebugPackageName; 143 } 144 145 /** 146 * @return the application package file 147 */ 148 public IFile getPackageFile() { 149 return mPackageFile; 150 } 151 152 /** 153 * Returns the value of the manifest debuggable attribute. If the attribute was not set, 154 * then the method returns null. 155 * @return the manifest debuggable attribute. 156 */ 157 public Boolean getDebuggable() { 158 return mDebuggable; 159 } 160 161 /** 162 * @return the required api version number for the Android app. 163 */ 164 public String getRequiredApiVersionNumber() { 165 return mRequiredApiVersionNumber; 166 } 167 168 /** 169 * @param retryMode the install retry mode to set 170 */ 171 public void setRetryMode(InstallRetryMode retryMode) { 172 this.mRetryMode = retryMode; 173 } 174 175 /** 176 * @return the installation retry mode 177 */ 178 public InstallRetryMode getRetryMode() { 179 return mRetryMode; 180 } 181 182 /** 183 * @return the launch action 184 */ 185 public IAndroidLaunchAction getLaunchAction() { 186 return mLaunchAction; 187 } 188 189 /** 190 * @return the launch 191 */ 192 public AndroidLaunch getLaunch() { 193 return mLaunch; 194 } 195 196 /** 197 * @return the launch progress monitor 198 */ 199 public IProgressMonitor getMonitor() { 200 return mMonitor; 201 } 202 203 /** 204 * @param debugMode the debug mode to set 205 */ 206 public void setDebugMode(boolean debugMode) { 207 this.mDebugMode = debugMode; 208 } 209 210 /** 211 * @return true if this is a debug launch 212 */ 213 public boolean isDebugMode() { 214 return mDebugMode; 215 } 216 217 /** 218 * Increases the number of launch attempts 219 */ 220 public void incrementAttemptCount() { 221 mAttemptCount++; 222 } 223 224 /** 225 * @return the number of launch attempts made 226 */ 227 public int getAttemptCount() { 228 return mAttemptCount; 229 } 230 231 /** 232 * Set if launch has been cancelled 233 */ 234 public void setCancelled(boolean cancelled) { 235 this.mCancelled = cancelled; 236 } 237 238 /** 239 * @return true if launch has been cancelled 240 */ 241 public boolean isCancelled() { 242 return mCancelled; 243 } 244 } 245