blob: 1f51779c6fcefd9669a41a89b5b65e2b740f8e5b [file] [log] [blame]
/*
* Copyright (C) 2011 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.example.android.render;
import com.android.ide.common.rendering.api.RenderSession;
import com.android.ide.common.rendering.api.Result;
import com.android.ide.common.rendering.api.ViewInfo;
import com.android.ide.common.resources.ResourceItem;
import com.android.ide.common.resources.ResourceRepository;
import com.android.ide.common.resources.ResourceResolver;
import com.android.ide.common.resources.configuration.FolderConfiguration;
import com.android.io.FolderWrapper;
import com.android.resources.Density;
import com.android.resources.Keyboard;
import com.android.resources.KeyboardState;
import com.android.resources.Navigation;
import com.android.resources.NavigationState;
import com.android.resources.ScreenOrientation;
import com.android.resources.ScreenRatio;
import com.android.resources.ScreenSize;
import com.android.resources.TouchScreen;
import org.xmlpull.v1.XmlPullParserException;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import javax.imageio.ImageIO;
/**
* Sample code showing how to use the different API used to achieve a layout rendering.
* This requires the following jar: layoutlib-api.jar, common.jar, sdk-common.jar, sdklib.jar (although
* we should get rid of this one) and a full SDK (or at least the platform component).
*
*/
public class Main {
// path to the SDK and the project to render
private final static String SDK = "...<insert>...";
private final static String PROJECT = "...<insert>...";
/**
* @param args
*/
public static void main(String[] args) {
// load the factory for a given platform
File f = new File(SDK + "/platforms/android-3.1");
RenderServiceFactory factory = RenderServiceFactory.create(f);
if (factory == null) {
System.err.println("Failed to load platform rendering library");
System.exit(1);
}
// load the project resources
ResourceRepository projectRes = new ResourceRepository(false /*isFramework*/) {
@Override
protected ResourceItem createResourceItem(String name) {
return new ResourceItem(name);
}
};
try {
projectRes.loadResources(new FolderWrapper(PROJECT + "/res"));
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
// create the rendering config
FolderConfiguration config = RenderServiceFactory.createConfig(
1280, 800, // size 1 and 2. order doesn't matter.
// Orientation will drive which is w and h
ScreenSize.XLARGE,
ScreenRatio.LONG,
ScreenOrientation.LANDSCAPE,
Density.MEDIUM,
TouchScreen.FINGER,
KeyboardState.SOFT,
Keyboard.QWERTY,
NavigationState.EXPOSED,
Navigation.NONAV,
12); // api level
// create the resource resolver once for the given config.
ResourceResolver resources = factory.createResourceResolver(
config, projectRes,
"Theme", false /*isProjectTheme*/);
// create the render service
RenderService renderService = factory.createService(
resources, config, new ProjectCallback());
try {
RenderSession session = renderService
.setLog(new StdOutLogger())
.setAppInfo("foo", "icon") // optional
.createRenderSession("main" /*layoutName*/);
// get the status of the render
Result result = session.getResult();
if (result.isSuccess() == false) {
System.err.println(result.getErrorMessage());
System.exit(1);
}
// get the image and save it somewhere.
BufferedImage image = session.getImage();
ImageIO.write(image, "png", new File("/path/to/test.png"));
// read the views
displayViewObjects(session.getRootViews());
return;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.exit(1);
}
private static void displayViewObjects(List<ViewInfo> rootViews) {
for (ViewInfo info : rootViews) {
displayView(info, "");
}
}
private static void displayView(ViewInfo info, String indent) {
// display info data
System.out.println(indent + info.getClassName() +
" [" + info.getLeft() + ", " + info.getTop() + ", " +
info.getRight() + ", " + info.getBottom() + "]");
// display the children
List<ViewInfo> children = info.getChildren();
if (children != null) {
indent += "\t";
for (ViewInfo child : children) {
displayView(child, indent);
}
}
}
}