diff options
Diffstat (limited to 'src/plugins/emulator/src/com/motorola/studio/android/emulator/device/instance/AndroidDevInstListener.java')
-rw-r--r-- | src/plugins/emulator/src/com/motorola/studio/android/emulator/device/instance/AndroidDevInstListener.java | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/instance/AndroidDevInstListener.java b/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/instance/AndroidDevInstListener.java new file mode 100644 index 0000000..8e9ff9b --- /dev/null +++ b/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/instance/AndroidDevInstListener.java @@ -0,0 +1,130 @@ +/* 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.emulator.device.instance; + +import org.eclipse.sequoyah.device.framework.DevicePlugin; +import org.eclipse.sequoyah.device.framework.events.IInstanceListener; +import org.eclipse.sequoyah.device.framework.events.InstanceAdapter; +import org.eclipse.sequoyah.device.framework.events.InstanceEvent; +import org.eclipse.sequoyah.device.framework.model.IInstance; + +import com.motorola.studio.android.adt.SdkUtils; +import com.motorola.studio.android.common.log.StudioLogger; +import com.motorola.studio.android.emulator.EmulatorPlugin; +import com.motorola.studio.android.emulator.core.model.IAndroidEmulatorInstance; +import com.motorola.studio.android.emulator.core.utils.EmulatorCoreUtils; +import com.motorola.studio.android.emulator.ui.view.AbstractAndroidView; + +/** + * DESCRIPTION: + * Implementation of IInstanceListener for device related actions that depend + * on the TmL instance registry state. + * <br> + * RESPONSIBILITY: + * Guarantee that the emulator views are updated + * Run the initialization service when an instance is loaded + * <br> + * COLABORATORS: + * None. + * <br> + * USAGE: + * This class shall be used by Eclipse only. + */ +public class AndroidDevInstListener extends InstanceAdapter +{ + + /** + * @see IInstanceListener#instanceLoaded(InstanceEvent) + */ + @Override + public void instanceLoaded(InstanceEvent e) + { + IInstance instance = e.getInstance(); + + if (instance instanceof IAndroidEmulatorInstance) + { + // The service definition defined (by convention) that + // stopped-dirty is the success state, and not available + // is the failure state. The exception is being thrown for + // the framework to set the state correctly. + if (instance.getStatus().equals(DevicePlugin.SEQUOYAH_STATUS_OFF)) + { + instance.setStatus(EmulatorPlugin.STATUS_NOT_AVAILABLE); + } + } + } + + /** + * @see IInstanceListener#instanceDeleted(InstanceEvent) + */ + @Override + public void instanceDeleted(InstanceEvent ev) + { + IInstance instance = ev.getInstance(); + if (instance instanceof AndroidDeviceInstance) + { + SdkUtils.deleteVm(instance.getName()); + } + } + + /** + * @see IInstanceListener#instanceTransitioned(InstanceEvent) + */ + @Override + public void instanceTransitioned(InstanceEvent e) + { + IInstance instance = e.getInstance(); + + if (instance instanceof AndroidDeviceInstance) + { + final AndroidDeviceInstance androidDevice = (AndroidDeviceInstance) instance; + StudioLogger.info("The android device instance status was updated: " + instance + + " Status: " + instance.getStatus()); + + if (androidDevice.isStarted()) + { + String transitionId = e.getTransitionId(); + if ((transitionId != null) + && transitionId.equals("com.motorola.studio.android.emulator.startService")) + { + // If it is coming from other state than the started, + // connect to VNC server + StudioLogger + .info("The emulator " + + instance + + " transitioned to started state. Try to estabilish a VNC connection..."); + + new Thread(new Runnable() + { + @Override + public void run() + { + AbstractAndroidView.showView(); + EmulatorCoreUtils.refreshEmulatorViews(); + } + }).start(); + } + } + else if (instance.getStatus().equals(EmulatorPlugin.STATUS_OFFLINE)) + { + androidDevice.resetRuntimeVariables(); + EmulatorCoreUtils.refreshEmulatorViews(); + } + + } + + } + +} |