| /* |
| * 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.android.ide.common.rendering; |
| |
| import com.android.annotations.NonNull; |
| import com.android.ide.common.rendering.api.HardwareConfig; |
| import com.android.resources.ScreenOrientation; |
| import com.android.sdklib.devices.ButtonType; |
| import com.android.sdklib.devices.Device; |
| import com.android.sdklib.devices.Screen; |
| |
| /** |
| * Helper method to create a {@link HardwareConfig} object. |
| * |
| * The base data comes from a {@link Device} object, with additional data provided on the helper |
| * object. |
| * |
| * Since {@link HardwareConfig} is immutable, this allows creating one in several (optional) |
| * steps more easily. |
| * |
| */ |
| public class HardwareConfigHelper { |
| |
| private final @NonNull Device mDevice; |
| private @NonNull ScreenOrientation mScreenOrientation = ScreenOrientation.PORTRAIT; |
| |
| // optional |
| private int mMaxRenderWidth = -1; |
| private int mMaxRenderHeight = -1; |
| private int mOverrideRenderWidth = -1; |
| private int mOverrideRenderHeight = -1; |
| |
| /** |
| * Creates a new helper for a given device. |
| * @param device the device to provide the base data. |
| */ |
| public HardwareConfigHelper(@NonNull Device device) { |
| mDevice = device; |
| } |
| |
| /** |
| * Sets the orientation of the config. |
| * @param screenOrientation the orientation. |
| * @return this (such that chains of setters can be stringed together) |
| */ |
| @NonNull |
| public HardwareConfigHelper setOrientation(@NonNull ScreenOrientation screenOrientation) { |
| mScreenOrientation = screenOrientation; |
| return this; |
| } |
| |
| /** |
| * Overrides the width and height to be used during rendering. |
| * |
| * A value of -1 will make the rendering use the normal width and height coming from the |
| * {@link Device} object. |
| * |
| * @param overrideRenderWidth the width in pixels of the layout to be rendered |
| * @param overrideRenderHeight the height in pixels of the layout to be rendered |
| * @return this (such that chains of setters can be stringed together) |
| */ |
| @NonNull |
| public HardwareConfigHelper setOverrideRenderSize(int overrideRenderWidth, |
| int overrideRenderHeight) { |
| mOverrideRenderWidth = overrideRenderWidth; |
| mOverrideRenderHeight = overrideRenderHeight; |
| return this; |
| } |
| |
| /** |
| * Sets the max width and height to be used during rendering. |
| * |
| * A value of -1 will make the rendering use the normal width and height coming from the |
| * {@link Device} object. |
| * |
| * @param maxRenderWidth the max width in pixels of the layout to be rendered |
| * @param maxRenderHeight the max height in pixels of the layout to be rendered |
| * @return this (such that chains of setters can be stringed together) |
| */ |
| @NonNull |
| public HardwareConfigHelper setMaxRenderSize(int maxRenderWidth, int maxRenderHeight) { |
| mMaxRenderWidth = maxRenderWidth; |
| mMaxRenderHeight = maxRenderHeight; |
| return this; |
| } |
| |
| /** |
| * Creates and returns the HardwareConfig object. |
| * @return the config |
| */ |
| @NonNull |
| public HardwareConfig getConfig() { |
| Screen screen = mDevice.getDefaultHardware().getScreen(); |
| |
| // compute width and height to take orientation into account. |
| int x = screen.getXDimension(); |
| int y = screen.getYDimension(); |
| int width, height; |
| |
| if (x > y) { |
| if (mScreenOrientation == ScreenOrientation.LANDSCAPE) { |
| width = x; |
| height = y; |
| } else { |
| width = y; |
| height = x; |
| } |
| } else { |
| if (mScreenOrientation == ScreenOrientation.LANDSCAPE) { |
| width = y; |
| height = x; |
| } else { |
| width = x; |
| height = y; |
| } |
| } |
| |
| if (mOverrideRenderHeight != -1) { |
| width = mOverrideRenderWidth; |
| } |
| |
| if (mOverrideRenderHeight != -1) { |
| height = mOverrideRenderHeight; |
| } |
| |
| if (mMaxRenderWidth != -1) { |
| width = mMaxRenderWidth; |
| } |
| |
| if (mMaxRenderHeight != -1) { |
| height = mMaxRenderHeight; |
| } |
| |
| return new HardwareConfig( |
| width, |
| height, |
| screen.getPixelDensity(), |
| (float) screen.getXdpi(), |
| (float) screen.getYdpi(), |
| screen.getSize(), |
| mScreenOrientation, |
| mDevice.getDefaultHardware().getButtonType() == ButtonType.SOFT); |
| } |
| } |