summaryrefslogtreecommitdiff
path: root/src/plugins/emulator/src/com/motorola/studio/android/emulator10/StartAndroidEmulatorLogic.java
blob: 089dd065b48ef097e037b2c31512c36f34ec91b5 (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
/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* 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.motorola.studio.android.emulator10;

import java.io.File;
import java.util.Collection;
import java.util.LinkedList;

import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;

import com.motorola.studio.android.adt.SdkUtils;
import com.motorola.studio.android.common.utilities.PluginUtils;
import com.motorola.studio.android.emulator.EmulatorPlugin;
import com.motorola.studio.android.emulator.logic.AbstractStartAndroidEmulatorLogic;
import com.motorola.studio.android.emulator.logic.ConnectVncLogic;
import com.motorola.studio.android.emulator.logic.ForwardVncPortLogic;
import com.motorola.studio.android.emulator.logic.IAndroidLogic;
import com.motorola.studio.android.emulator.logic.IAndroidLogicInstance;
import com.motorola.studio.android.emulator.logic.StartEmulatorProcessLogic;
import com.motorola.studio.android.emulator.logic.StartVncServerLogic;
import com.motorola.studio.android.emulator.logic.TransferFilesLogic;

public class StartAndroidEmulatorLogic extends AbstractStartAndroidEmulatorLogic
{
    @SuppressWarnings("incomplete-switch")
    @Override
    public Collection<IAndroidLogic> getLogicCollection(IAndroidLogicInstance instance,
            LogicMode mode)
    {
        // When starting, all steps must be done. When restarting, only VNC server launch 
        // step will be performed.
        Collection<IAndroidLogic> logicCollection = new LinkedList<IAndroidLogic>();

        switch (mode)
        {
            case START_MODE:
                logicCollection.add(new StartEmulatorProcessLogic());
                break;
            case TRANSFER_AND_CONNECT_VNC:
                logicCollection.add(createTransferFilesLogic());
                logicCollection.add(new ForwardVncPortLogic());
                StartVncServerLogic startVncServerLogic = createStartVncServerLogic();
                logicCollection.add(startVncServerLogic);
                logicCollection.add(getConnectVncClientLogic(startVncServerLogic));
                break;
            case RESTART_VNC_SERVER:
                logicCollection.add(createTransferFilesLogic());
                logicCollection.add(new ForwardVncPortLogic());
                logicCollection.add(createStartVncServerLogic());
                break;
        }

        return logicCollection;
    }

    private String getResourceDir()
    {
        String resDir = "res";
        if (SdkUtils.isOphoneSDK())
        {
            resDir = "res_OPhone";
        }

        return resDir;
    }

    protected IAndroidLogic createTransferFilesLogic()
    {
        File localDirParent = PluginUtils.getPluginInstallationPath(EmulatorPlugin.getDefault());
        File localDir = new File(localDirParent, getResourceDir());

        TransferFilesLogic transferLogic = new TransferFilesLogic();
        transferLogic.setLocalDir(localDir.getAbsolutePath());
        transferLogic.setRemoteDir("/data/local");
        transferLogic.addFilename("fbvncserver");
        return transferLogic;
    }

    protected StartVncServerLogic createStartVncServerLogic()
    {
        StartVncServerLogic logic = new StartVncServerLogic();
        logic.addRemoteCommand("chmod 700 /data/local/fbvncserver");
        logic.addRemoteCommand("/data/local/fbvncserver");
        return logic;
    }

    protected IAndroidLogic getConnectVncClientLogic(StartVncServerLogic startVncServerLogic)
    {
        final ConnectVncLogic startVncClientLogic = new ConnectVncLogic();

        startVncServerLogic.addVncServerJobListener(new JobChangeAdapter()
        {
            @Override
            public void done(IJobChangeEvent ijobchangeevent)
            {
                startVncClientLogic.setVncServerDoneEvent(ijobchangeevent);
            }
        });

        return startVncClientLogic;
    }

}