/*
* 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.ui.view;
import static com.motorola.studio.android.common.log.StudioLogger.debug;
import java.io.File;
import java.util.Collection;
import org.eclipse.sequoyah.vnc.vncviewer.graphics.swt.SWTRemoteDisplay;
import org.eclipse.swt.events.DisposeListener;
import com.motorola.studio.android.emulator.core.exception.SkinException;
import com.motorola.studio.android.emulator.core.model.IAndroidEmulatorInstance;
import com.motorola.studio.android.emulator.core.skin.IAndroidSkin;
import com.motorola.studio.android.emulator.core.skin.SkinFramework;
import com.motorola.studio.android.emulator.ui.controls.IAndroidComposite;
import com.motorola.studio.android.emulator.ui.controls.RemoteCLIDisplay;
/**
* AndroidViewData: this class is responsible for having the information about Main Display,
* CLI Display and the composite where these displays will be drawn.
*/
public class AndroidViewData
{
/**
* Implementation of the
*/
private IAndroidSkin skin;
/**
* Composite that shows the contents of the mobile main display
*/
private SWTRemoteDisplay mainDisplay;
/**
* Composite that shows the contents of the mobile CLI display
*/
private RemoteCLIDisplay cliDisplay;
/**
* Composite for view's components.
*/
private IAndroidComposite composite;
/**
* Dispose listener of this instance
*/
private DisposeListener disposeListener;
/**
* Loads the Android emulator skin of the given the AVD/instance
* @param instance whose skin will be loaded
* @throws SkinException if it is no possible to load the skin
*/
public synchronized void loadSkin(IAndroidEmulatorInstance instance) throws SkinException
{
String skinId = instance.getSkinId();
SkinFramework skinFw = new SkinFramework();
File skinPath = instance.getSkinPath();
skin = skinFw.getSkinById(skinId, skinPath);
Collection<String> layoutNames = skin.getAvailableLayouts();
String currentLayout = instance.getCurrentLayout();
if ((currentLayout == null) && (!layoutNames.isEmpty()))
{
String firstLayout = layoutNames.iterator().next();
instance.setCurrentLayout(firstLayout);
debug("The skin has multiple layouts. Setting " + firstLayout + " as the current one.");
}
}
/**
* Retrieves the loaded IAndroidSkin.
* Returns null if no skin is loaded.
* @return
*/
public synchronized IAndroidSkin getSkin()
{
return skin;
}
/**
* Gets the dispose listener
* @return dispose listener
*/
DisposeListener getDisposeListener()
{
return disposeListener;
}
/**
* Sets the dispose listener
* @param disposeListener dispose listener
*/
void setDisposeListener(DisposeListener disposeListener)
{
this.disposeListener = disposeListener;
}
/**
* Gets Main Display
* @return main display
*/
public SWTRemoteDisplay getMainDisplay()
{
return mainDisplay;
}
/**
* Sets main Display
* @param mainDisplay main display
*/
void setMainDisplay(SWTRemoteDisplay mainDisplay)
{
this.mainDisplay = mainDisplay;
}
/**
* Gets CLI Display
* @return CLI display
*/
RemoteCLIDisplay getCliDisplay()
{
return cliDisplay;
}
/**
* Sets CLI Display
* @param cliDisplay CLI display
*/
void setCliDisplay(RemoteCLIDisplay cliDisplay)
{
this.cliDisplay = cliDisplay;
}
/**
* Gets view composite
* @return composite
*/
public IAndroidComposite getComposite()
{
return composite;
}
/**
* Sets view composite
* @param composite composite
*/
void setComposite(IAndroidComposite composite)
{
this.composite = composite;
}
}