aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/DelayedLaunchInfo.java
blob: b0a6dda20550f5fe9c59317baebe91148fc56ca2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
/*
 * 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.launch;

import com.android.ddmlib.IDevice;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;

/**
 * A delayed launch waiting for a device to be present or ready before the
 * application is launched.
 */
public final class DelayedLaunchInfo {

    /**
     * Used to indicate behavior when Android app already exists
     */
    enum InstallRetryMode {
        NEVER, ALWAYS, PROMPT;
    }

    /** The device on which to launch the app */
    private IDevice mDevice = null;

    /** The eclipse project */
    private final IProject mProject;

    /** Package name */
    private final String mPackageName;

    /** Debug package name */
    private final String mDebugPackageName;

    /** IFile to the package (.apk) file */
    private final IFile mPackageFile;

    /** debuggable attribute of the manifest file. */
    private final Boolean mDebuggable;

    /** Required Api level by the app. null means no requirements */
    private final String mRequiredApiVersionNumber;

    private InstallRetryMode mRetryMode = InstallRetryMode.NEVER;

    /** Launch action. */
    private final IAndroidLaunchAction mLaunchAction;

    /** the launch object */
    private final AndroidLaunch mLaunch;

    /** the monitor object */
    private final IProgressMonitor mMonitor;

    /** debug mode flag */
    private boolean mDebugMode;

    /** current number of launch attempts */
    private int mAttemptCount = 0;

    /** cancellation state of launch */
    private boolean mCancelled = false;

    /**
     * Basic constructor with activity and package info.
     *
     * @param project the eclipse project that corresponds to Android app
     * @param packageName package name of Android app
     * @param debugPackageName the package name of the Andriod app to debug
     * @param launchAction action to perform after app install
     * @param pack IFile to the package (.apk) file
     * @param debuggable the debuggable value of the app's manifest, or null if not set.
     * @param requiredApiVersionNumber required SDK version by the app. null means no requirements.
     * @param launch the launch object
     * @param monitor progress monitor for launch
     */
    public DelayedLaunchInfo(IProject project, String packageName, String debugPackageName,
            IAndroidLaunchAction launchAction, IFile pack, Boolean debuggable,
            String requiredApiVersionNumber, AndroidLaunch launch, IProgressMonitor monitor) {
        mProject = project;
        mPackageName = packageName;
        mDebugPackageName = debugPackageName;
        mPackageFile = pack;
        mLaunchAction = launchAction;
        mLaunch = launch;
        mMonitor = monitor;
        mDebuggable = debuggable;
        mRequiredApiVersionNumber = requiredApiVersionNumber;
    }

    /**
     * @return the device on which to launch the app
     */
    public IDevice getDevice() {
        return mDevice;
    }

    /**
     * Set the device on which to launch the app
     */
    public void setDevice(IDevice device) {
        mDevice = device;
    }

    /**
     * @return the eclipse project that corresponds to Android app
     */
    public IProject getProject() {
        return mProject;
    }

    /**
     * @return the package name of the Android app
     */
    public String getPackageName() {
        return mPackageName;
    }

    /**
     * Returns the Android app process name that the debugger should connect to. Typically this is
     * the same value as {@link #getPackageName()}.
     */
    public String getDebugPackageName() {
        if (mDebugPackageName == null) {
            return getPackageName();
        }
        return mDebugPackageName;
    }

    /**
     * @return the application package file
     */
    public IFile getPackageFile() {
        return mPackageFile;
    }

    /**
     * Returns the value of the manifest debuggable attribute. If the attribute was not set,
     * then the method returns null.
     * @return the manifest debuggable attribute.
     */
    public Boolean getDebuggable() {
        return mDebuggable;
    }

    /**
     * @return the required api version number for the Android app.
     */
    public String getRequiredApiVersionNumber() {
        return mRequiredApiVersionNumber;
    }

    /**
     * @param retryMode the install retry mode to set
     */
    public void setRetryMode(InstallRetryMode retryMode) {
        this.mRetryMode = retryMode;
    }

    /**
     * @return the installation retry mode
     */
    public InstallRetryMode getRetryMode() {
        return mRetryMode;
    }

    /**
     * @return the launch action
     */
    public IAndroidLaunchAction getLaunchAction() {
        return mLaunchAction;
    }

    /**
     * @return the launch
     */
    public AndroidLaunch getLaunch() {
        return mLaunch;
    }

    /**
     * @return the launch progress monitor
     */
    public IProgressMonitor getMonitor() {
        return mMonitor;
    }

    /**
     * @param debugMode the debug mode to set
     */
    public void setDebugMode(boolean debugMode) {
        this.mDebugMode = debugMode;
    }

    /**
     * @return true if this is a debug launch
     */
    public boolean isDebugMode() {
        return mDebugMode;
    }

    /**
     * Increases the number of launch attempts
     */
    public void incrementAttemptCount() {
        mAttemptCount++;
    }

    /**
     * @return the number of launch attempts made
     */
    public int getAttemptCount() {
        return mAttemptCount;
    }

    /**
     * Set if launch has been cancelled
     */
    public void setCancelled(boolean cancelled) {
        this.mCancelled = cancelled;
    }

    /**
     * @return true if launch has been cancelled
     */
    public boolean isCancelled() {
        return mCancelled;
    }
}