am 9c474738
: Merge "Update layoutlib for jb mr1." into jb-mr1-dev
* commit '9c474738a29f77359a461035855d6e9b3935ade1': Update layoutlib for jb mr1.
BIN
tools/layoutlib/bridge/resources/bars/hdpi/ic_sysbar_back.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1007 B |
BIN
tools/layoutlib/bridge/resources/bars/hdpi/ic_sysbar_home.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 852 B |
BIN
tools/layoutlib/bridge/resources/bars/hdpi/ic_sysbar_recent.png
Normal file
After Width: | Height: | Size: 711 B |
Before Width: | Height: | Size: 574 B |
BIN
tools/layoutlib/bridge/resources/bars/mdpi/ic_sysbar_back.png
Normal file
After Width: | Height: | Size: 774 B |
Before Width: | Height: | Size: 782 B |
BIN
tools/layoutlib/bridge/resources/bars/mdpi/ic_sysbar_home.png
Normal file
After Width: | Height: | Size: 836 B |
Before Width: | Height: | Size: 695 B |
BIN
tools/layoutlib/bridge/resources/bars/mdpi/ic_sysbar_recent.png
Normal file
After Width: | Height: | Size: 591 B |
Before Width: | Height: | Size: 534 B |
@ -1,5 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"/>
|
||||
<ImageView
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"/>
|
||||
@ -13,12 +17,4 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"/>
|
||||
<ImageView
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"/>
|
||||
<ImageView
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_marginLeft="3dip"
|
||||
android:layout_marginRight="15dip"/>
|
||||
</merge>
|
BIN
tools/layoutlib/bridge/resources/bars/xhdpi/ic_sysbar_back.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.3 KiB |
BIN
tools/layoutlib/bridge/resources/bars/xhdpi/ic_sysbar_home.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.0 KiB |
BIN
tools/layoutlib/bridge/resources/bars/xhdpi/ic_sysbar_recent.png
Normal file
After Width: | Height: | Size: 749 B |
Before Width: | Height: | Size: 644 B |
@ -210,7 +210,8 @@ public final class Bridge extends com.android.ide.common.rendering.api.Bridge {
|
||||
Capability.PLAY_ANIMATION,
|
||||
Capability.ANIMATED_VIEW_MANIPULATION,
|
||||
Capability.ADAPTER_BINDING,
|
||||
Capability.EXTENDED_VIEWINFO);
|
||||
Capability.EXTENDED_VIEWINFO,
|
||||
Capability.FIXED_SCALABLE_NINE_PATCH);
|
||||
|
||||
|
||||
BridgeAssetManager.initSystem();
|
||||
|
@ -60,11 +60,15 @@ abstract class CustomBar extends LinearLayout {
|
||||
|
||||
protected abstract TextView getStyleableTextView();
|
||||
|
||||
protected CustomBar(Context context, Density density, String layoutPath, String name)
|
||||
throws XmlPullParserException {
|
||||
protected CustomBar(Context context, Density density, int orientation, String layoutPath,
|
||||
String name) throws XmlPullParserException {
|
||||
super(context);
|
||||
setOrientation(LinearLayout.HORIZONTAL);
|
||||
setGravity(Gravity.CENTER_VERTICAL);
|
||||
setOrientation(orientation);
|
||||
if (orientation == LinearLayout.HORIZONTAL) {
|
||||
setGravity(Gravity.CENTER_VERTICAL);
|
||||
} else {
|
||||
setGravity(Gravity.CENTER_HORIZONTAL);
|
||||
}
|
||||
|
||||
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(
|
||||
Context.LAYOUT_INFLATER_SERVICE);
|
||||
|
@ -21,6 +21,7 @@ import com.android.resources.Density;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import android.content.Context;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class FakeActionBar extends CustomBar {
|
||||
@ -29,7 +30,7 @@ public class FakeActionBar extends CustomBar {
|
||||
|
||||
public FakeActionBar(Context context, Density density, String label, String icon)
|
||||
throws XmlPullParserException {
|
||||
super(context, density, "/bars/action_bar.xml", "action_bar.xml");
|
||||
super(context, density, LinearLayout.HORIZONTAL, "/bars/action_bar.xml", "action_bar.xml");
|
||||
|
||||
// Cannot access the inside items through id because no R.id values have been
|
||||
// created for them.
|
||||
|
@ -17,34 +17,34 @@
|
||||
package com.android.layoutlib.bridge.bars;
|
||||
|
||||
import com.android.resources.Density;
|
||||
import com.android.resources.ResourceType;
|
||||
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.LevelListDrawable;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class TabletSystemBar extends CustomBar {
|
||||
public class NavigationBar extends CustomBar {
|
||||
|
||||
public TabletSystemBar(Context context, Density density) throws XmlPullParserException {
|
||||
super(context, density, "/bars/tablet_system_bar.xml", "tablet_system_bar.xml");
|
||||
public NavigationBar(Context context, Density density, int orientation) throws XmlPullParserException {
|
||||
super(context, density, orientation, "/bars/navigation_bar.xml", "navigation_bar.xml");
|
||||
|
||||
setBackgroundColor(0xFF000000);
|
||||
|
||||
// Cannot access the inside items through id because no R.id values have been
|
||||
// created for them.
|
||||
// We do know the order though.
|
||||
loadIcon(0, "ic_sysbar_back_default.png", density);
|
||||
loadIcon(1, "ic_sysbar_home_default.png", density);
|
||||
loadIcon(2, "ic_sysbar_recent_default.png", density);
|
||||
// 3 is the spacer
|
||||
loadIcon(4, "stat_sys_wifi_signal_4_fully.png", density);
|
||||
Drawable drawable = loadIcon(5, ResourceType.DRAWABLE, "stat_sys_battery_charge");
|
||||
if (drawable instanceof LevelListDrawable) {
|
||||
((LevelListDrawable) drawable).setLevel(100);
|
||||
// 0 is a spacer.
|
||||
int back = 1;
|
||||
int recent = 3;
|
||||
if (orientation == LinearLayout.VERTICAL) {
|
||||
back = 3;
|
||||
recent = 1;
|
||||
}
|
||||
|
||||
loadIcon(back, "ic_sysbar_back.png", density);
|
||||
loadIcon(2, "ic_sysbar_home.png", density);
|
||||
loadIcon(recent, "ic_sysbar_recent.png", density);
|
||||
}
|
||||
|
||||
@Override
|
@ -25,12 +25,13 @@ import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.LevelListDrawable;
|
||||
import android.view.Gravity;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class PhoneSystemBar extends CustomBar {
|
||||
public class StatusBar extends CustomBar {
|
||||
|
||||
public PhoneSystemBar(Context context, Density density) throws XmlPullParserException {
|
||||
super(context, density, "/bars/phone_system_bar.xml", "phone_system_bar.xml");
|
||||
public StatusBar(Context context, Density density) throws XmlPullParserException {
|
||||
super(context, density, LinearLayout.HORIZONTAL, "/bars/status_bar.xml", "status_bar.xml");
|
||||
|
||||
// FIXME: use FILL_H?
|
||||
setGravity(Gravity.START | Gravity.TOP | Gravity.RIGHT);
|
@ -21,6 +21,7 @@ import com.android.resources.Density;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import android.content.Context;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class TitleBar extends CustomBar {
|
||||
@ -29,7 +30,7 @@ public class TitleBar extends CustomBar {
|
||||
|
||||
public TitleBar(Context context, Density density, String label)
|
||||
throws XmlPullParserException {
|
||||
super(context, density, "/bars/title_bar.xml", "title_bar.xml");
|
||||
super(context, density, LinearLayout.HORIZONTAL, "/bars/title_bar.xml", "title_bar.xml");
|
||||
|
||||
// Cannot access the inside items through id because no R.id values have been
|
||||
// created for them.
|
||||
|
@ -20,11 +20,12 @@ import static com.android.ide.common.rendering.api.Result.Status.ERROR_LOCK_INTE
|
||||
import static com.android.ide.common.rendering.api.Result.Status.ERROR_TIMEOUT;
|
||||
import static com.android.ide.common.rendering.api.Result.Status.SUCCESS;
|
||||
|
||||
import com.android.ide.common.rendering.api.HardwareConfig;
|
||||
import com.android.ide.common.rendering.api.LayoutLog;
|
||||
import com.android.ide.common.rendering.api.RenderParams;
|
||||
import com.android.ide.common.rendering.api.RenderResources;
|
||||
import com.android.ide.common.rendering.api.Result;
|
||||
import com.android.ide.common.rendering.api.RenderResources.FrameworkResourceIdProvider;
|
||||
import com.android.ide.common.rendering.api.Result;
|
||||
import com.android.layoutlib.bridge.Bridge;
|
||||
import com.android.layoutlib.bridge.android.BridgeContext;
|
||||
import com.android.resources.Density;
|
||||
@ -98,19 +99,22 @@ public abstract class RenderAction<T extends RenderParams> extends FrameworkReso
|
||||
return result;
|
||||
}
|
||||
|
||||
HardwareConfig hardwareConfig = mParams.getHardwareConfig();
|
||||
|
||||
// setup the display Metrics.
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
metrics.densityDpi = metrics.noncompatDensityDpi = mParams.getDensity().getDpiValue();
|
||||
metrics.densityDpi = metrics.noncompatDensityDpi =
|
||||
hardwareConfig.getDensity().getDpiValue();
|
||||
|
||||
metrics.density = metrics.noncompatDensity =
|
||||
metrics.densityDpi / (float) DisplayMetrics.DENSITY_DEFAULT;
|
||||
|
||||
metrics.scaledDensity = metrics.noncompatScaledDensity = metrics.density;
|
||||
|
||||
metrics.widthPixels = metrics.noncompatWidthPixels = mParams.getScreenWidth();
|
||||
metrics.heightPixels = metrics.noncompatHeightPixels = mParams.getScreenHeight();
|
||||
metrics.xdpi = metrics.noncompatXdpi = mParams.getXdpi();
|
||||
metrics.ydpi = metrics.noncompatYdpi = mParams.getYdpi();
|
||||
metrics.widthPixels = metrics.noncompatWidthPixels = hardwareConfig.getScreenWidth();
|
||||
metrics.heightPixels = metrics.noncompatHeightPixels = hardwareConfig.getScreenHeight();
|
||||
metrics.xdpi = metrics.noncompatXdpi = hardwareConfig.getXdpi();
|
||||
metrics.ydpi = metrics.noncompatYdpi = hardwareConfig.getYdpi();
|
||||
|
||||
RenderResources resources = mParams.getResources();
|
||||
|
||||
@ -305,7 +309,9 @@ public abstract class RenderAction<T extends RenderParams> extends FrameworkReso
|
||||
private Configuration getConfiguration() {
|
||||
Configuration config = new Configuration();
|
||||
|
||||
ScreenSize screenSize = mParams.getConfigScreenSize();
|
||||
HardwareConfig hardwareConfig = mParams.getHardwareConfig();
|
||||
|
||||
ScreenSize screenSize = hardwareConfig.getScreenSize();
|
||||
if (screenSize != null) {
|
||||
switch (screenSize) {
|
||||
case SMALL:
|
||||
@ -323,13 +329,13 @@ public abstract class RenderAction<T extends RenderParams> extends FrameworkReso
|
||||
}
|
||||
}
|
||||
|
||||
Density density = mParams.getDensity();
|
||||
Density density = hardwareConfig.getDensity();
|
||||
if (density == null) {
|
||||
density = Density.MEDIUM;
|
||||
}
|
||||
|
||||
config.screenWidthDp = mParams.getScreenWidth() / density.getDpiValue();
|
||||
config.screenHeightDp = mParams.getScreenHeight() / density.getDpiValue();
|
||||
config.screenWidthDp = hardwareConfig.getScreenWidth() / density.getDpiValue();
|
||||
config.screenHeightDp = hardwareConfig.getScreenHeight() / density.getDpiValue();
|
||||
if (config.screenHeightDp < config.screenWidthDp) {
|
||||
config.smallestScreenWidthDp = config.screenHeightDp;
|
||||
} else {
|
||||
|
@ -19,6 +19,7 @@ package com.android.layoutlib.bridge.impl;
|
||||
import static com.android.ide.common.rendering.api.Result.Status.ERROR_UNKNOWN;
|
||||
|
||||
import com.android.ide.common.rendering.api.DrawableParams;
|
||||
import com.android.ide.common.rendering.api.HardwareConfig;
|
||||
import com.android.ide.common.rendering.api.ResourceValue;
|
||||
import com.android.ide.common.rendering.api.Result;
|
||||
import com.android.ide.common.rendering.api.Result.Status;
|
||||
@ -59,6 +60,7 @@ public class RenderDrawable extends RenderAction<DrawableParams> {
|
||||
try {
|
||||
// get the drawable resource value
|
||||
DrawableParams params = getParams();
|
||||
HardwareConfig hardwareConfig = params.getHardwareConfig();
|
||||
ResourceValue drawableResource = params.getDrawable();
|
||||
|
||||
// resolve it
|
||||
@ -75,15 +77,15 @@ public class RenderDrawable extends RenderAction<DrawableParams> {
|
||||
|
||||
// get the actual Drawable object to draw
|
||||
Drawable d = ResourceHelper.getDrawable(drawableResource, context);
|
||||
content.setBackgroundDrawable(d);
|
||||
content.setBackground(d);
|
||||
|
||||
// set the AttachInfo on the root view.
|
||||
AttachInfo_Accessor.setAttachInfo(content);
|
||||
|
||||
|
||||
// measure
|
||||
int w = params.getScreenWidth();
|
||||
int h = params.getScreenHeight();
|
||||
int w = hardwareConfig.getScreenWidth();
|
||||
int h = hardwareConfig.getScreenHeight();
|
||||
int w_spec = MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY);
|
||||
int h_spec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);
|
||||
content.measure(w_spec, h_spec);
|
||||
@ -99,11 +101,11 @@ public class RenderDrawable extends RenderAction<DrawableParams> {
|
||||
|
||||
// create an Android bitmap around the BufferedImage
|
||||
Bitmap bitmap = Bitmap_Delegate.createBitmap(image,
|
||||
true /*isMutable*/, params.getDensity());
|
||||
true /*isMutable*/, hardwareConfig.getDensity());
|
||||
|
||||
// create a Canvas around the Android bitmap
|
||||
Canvas canvas = new Canvas(bitmap);
|
||||
canvas.setDensity(params.getDensity().getDpiValue());
|
||||
canvas.setDensity(hardwareConfig.getDensity().getDpiValue());
|
||||
|
||||
// and draw
|
||||
content.draw(canvas);
|
||||
|
@ -24,6 +24,7 @@ import static com.android.ide.common.rendering.api.Result.Status.ERROR_VIEWGROUP
|
||||
import static com.android.ide.common.rendering.api.Result.Status.SUCCESS;
|
||||
|
||||
import com.android.ide.common.rendering.api.AdapterBinding;
|
||||
import com.android.ide.common.rendering.api.HardwareConfig;
|
||||
import com.android.ide.common.rendering.api.IAnimationListener;
|
||||
import com.android.ide.common.rendering.api.ILayoutPullParser;
|
||||
import com.android.ide.common.rendering.api.IProjectCallback;
|
||||
@ -43,13 +44,13 @@ import com.android.layoutlib.bridge.android.BridgeContext;
|
||||
import com.android.layoutlib.bridge.android.BridgeLayoutParamsMapAttributes;
|
||||
import com.android.layoutlib.bridge.android.BridgeXmlBlockParser;
|
||||
import com.android.layoutlib.bridge.bars.FakeActionBar;
|
||||
import com.android.layoutlib.bridge.bars.PhoneSystemBar;
|
||||
import com.android.layoutlib.bridge.bars.TabletSystemBar;
|
||||
import com.android.layoutlib.bridge.bars.NavigationBar;
|
||||
import com.android.layoutlib.bridge.bars.StatusBar;
|
||||
import com.android.layoutlib.bridge.bars.TitleBar;
|
||||
import com.android.layoutlib.bridge.impl.binding.FakeAdapter;
|
||||
import com.android.layoutlib.bridge.impl.binding.FakeExpandableAdapter;
|
||||
import com.android.resources.ResourceType;
|
||||
import com.android.resources.ScreenSize;
|
||||
import com.android.resources.ScreenOrientation;
|
||||
import com.android.util.Pair;
|
||||
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
@ -68,8 +69,8 @@ import android.util.DisplayMetrics;
|
||||
import android.util.TypedValue;
|
||||
import android.view.AttachInfo_Accessor;
|
||||
import android.view.BridgeInflater;
|
||||
import android.view.IWindowManagerImpl;
|
||||
import android.view.IWindowManager;
|
||||
import android.view.IWindowManagerImpl;
|
||||
import android.view.Surface;
|
||||
import android.view.View;
|
||||
import android.view.View.MeasureSpec;
|
||||
@ -124,7 +125,8 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
private boolean mWindowIsFloating;
|
||||
|
||||
private int mStatusBarSize;
|
||||
private int mSystemBarSize;
|
||||
private int mNavigationBarSize;
|
||||
private int mNavigationBarOrientation = LinearLayout.HORIZONTAL;
|
||||
private int mTitleBarSize;
|
||||
private int mActionBarSize;
|
||||
|
||||
@ -187,7 +189,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
findBackground(resources);
|
||||
findStatusBar(resources, metrics);
|
||||
findActionBar(resources, metrics);
|
||||
findSystemBar(resources, metrics);
|
||||
findNavigationBar(resources, metrics);
|
||||
|
||||
// FIXME: find those out, and possibly add them to the render params
|
||||
boolean hasSystemNavBar = true;
|
||||
@ -221,19 +223,57 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
try {
|
||||
|
||||
SessionParams params = getParams();
|
||||
HardwareConfig hardwareConfig = params.getHardwareConfig();
|
||||
BridgeContext context = getContext();
|
||||
|
||||
|
||||
// the view group that receives the window background.
|
||||
ViewGroup backgroundView = null;
|
||||
|
||||
if (mWindowIsFloating || params.isForceNoDecor()) {
|
||||
backgroundView = mViewRoot = mContentRoot = new FrameLayout(context);
|
||||
} else {
|
||||
if (hasSoftwareButtons() && mNavigationBarOrientation == LinearLayout.VERTICAL) {
|
||||
/*
|
||||
* This is a special case where the navigation bar is on the right.
|
||||
+-------------------------------------------------+---+
|
||||
| Status bar (always) | |
|
||||
+-------------------------------------------------+ |
|
||||
| (Layout with background drawable) | |
|
||||
| +---------------------------------------------+ | |
|
||||
| | Title/Action bar (optional) | | |
|
||||
| +---------------------------------------------+ | |
|
||||
| | Content, vertical extending | | |
|
||||
| | | | |
|
||||
| +---------------------------------------------+ | |
|
||||
+-------------------------------------------------+---+
|
||||
|
||||
So we create a horizontal layout, with the nav bar on the right,
|
||||
and the left part is the normal layout below without the nav bar at
|
||||
the bottom
|
||||
*/
|
||||
LinearLayout topLayout = new LinearLayout(context);
|
||||
mViewRoot = topLayout;
|
||||
topLayout.setOrientation(LinearLayout.HORIZONTAL);
|
||||
|
||||
try {
|
||||
NavigationBar navigationBar = new NavigationBar(context,
|
||||
hardwareConfig.getDensity(), LinearLayout.VERTICAL);
|
||||
navigationBar.setLayoutParams(
|
||||
new LinearLayout.LayoutParams(
|
||||
mNavigationBarSize,
|
||||
LayoutParams.MATCH_PARENT));
|
||||
topLayout.addView(navigationBar);
|
||||
} catch (XmlPullParserException e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* we're creating the following layout
|
||||
*
|
||||
+-------------------------------------------------+
|
||||
| System bar (only in phone UI) |
|
||||
| Status bar (always) |
|
||||
+-------------------------------------------------+
|
||||
| (Layout with background drawable) |
|
||||
| +---------------------------------------------+ |
|
||||
@ -243,20 +283,31 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
| | | |
|
||||
| +---------------------------------------------+ |
|
||||
+-------------------------------------------------+
|
||||
| System bar (only in tablet UI) |
|
||||
| Navigation bar for soft buttons, maybe see above|
|
||||
+-------------------------------------------------+
|
||||
|
||||
*/
|
||||
|
||||
LinearLayout topLayout = new LinearLayout(context);
|
||||
mViewRoot = topLayout;
|
||||
topLayout.setOrientation(LinearLayout.VERTICAL);
|
||||
// if we don't already have a view root this is it
|
||||
if (mViewRoot == null) {
|
||||
mViewRoot = topLayout;
|
||||
} else {
|
||||
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
|
||||
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
|
||||
layoutParams.weight = 1;
|
||||
topLayout.setLayoutParams(layoutParams);
|
||||
|
||||
// this is the case of soft buttons + vertical bar.
|
||||
// this top layout is the first layout in the horizontal layout. see above)
|
||||
mViewRoot.addView(topLayout, 0);
|
||||
}
|
||||
|
||||
if (mStatusBarSize > 0) {
|
||||
// system bar
|
||||
try {
|
||||
PhoneSystemBar systemBar = new PhoneSystemBar(context,
|
||||
params.getDensity());
|
||||
StatusBar systemBar = new StatusBar(context, hardwareConfig.getDensity());
|
||||
systemBar.setLayoutParams(
|
||||
new LinearLayout.LayoutParams(
|
||||
LayoutParams.MATCH_PARENT, mStatusBarSize));
|
||||
@ -280,7 +331,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
if (mActionBarSize > 0) {
|
||||
try {
|
||||
FakeActionBar actionBar = new FakeActionBar(context,
|
||||
params.getDensity(),
|
||||
hardwareConfig.getDensity(),
|
||||
params.getAppLabel(), params.getAppIcon());
|
||||
actionBar.setLayoutParams(
|
||||
new LinearLayout.LayoutParams(
|
||||
@ -292,7 +343,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
} else if (mTitleBarSize > 0) {
|
||||
try {
|
||||
TitleBar titleBar = new TitleBar(context,
|
||||
params.getDensity(), params.getAppLabel());
|
||||
hardwareConfig.getDensity(), params.getAppLabel());
|
||||
titleBar.setLayoutParams(
|
||||
new LinearLayout.LayoutParams(
|
||||
LayoutParams.MATCH_PARENT, mTitleBarSize));
|
||||
@ -310,15 +361,16 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
mContentRoot.setLayoutParams(layoutParams);
|
||||
backgroundLayout.addView(mContentRoot);
|
||||
|
||||
if (mSystemBarSize > 0) {
|
||||
if (mNavigationBarOrientation == LinearLayout.HORIZONTAL &&
|
||||
mNavigationBarSize > 0) {
|
||||
// system bar
|
||||
try {
|
||||
TabletSystemBar systemBar = new TabletSystemBar(context,
|
||||
params.getDensity());
|
||||
systemBar.setLayoutParams(
|
||||
NavigationBar navigationBar = new NavigationBar(context,
|
||||
hardwareConfig.getDensity(), LinearLayout.HORIZONTAL);
|
||||
navigationBar.setLayoutParams(
|
||||
new LinearLayout.LayoutParams(
|
||||
LayoutParams.MATCH_PARENT, mSystemBarSize));
|
||||
topLayout.addView(systemBar);
|
||||
LayoutParams.MATCH_PARENT, mNavigationBarSize));
|
||||
topLayout.addView(navigationBar);
|
||||
} catch (XmlPullParserException e) {
|
||||
|
||||
}
|
||||
@ -346,7 +398,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
// get the background drawable
|
||||
if (mWindowBackground != null && backgroundView != null) {
|
||||
Drawable d = ResourceHelper.getDrawable(mWindowBackground, context);
|
||||
backgroundView.setBackgroundDrawable(d);
|
||||
backgroundView.setBackground(d);
|
||||
}
|
||||
|
||||
return SUCCESS.createResult();
|
||||
@ -389,13 +441,14 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
}
|
||||
|
||||
RenderingMode renderingMode = params.getRenderingMode();
|
||||
HardwareConfig hardwareConfig = params.getHardwareConfig();
|
||||
|
||||
// only do the screen measure when needed.
|
||||
boolean newRenderSize = false;
|
||||
if (mMeasuredScreenWidth == -1) {
|
||||
newRenderSize = true;
|
||||
mMeasuredScreenWidth = params.getScreenWidth();
|
||||
mMeasuredScreenHeight = params.getScreenHeight();
|
||||
mMeasuredScreenWidth = hardwareConfig.getScreenWidth();
|
||||
mMeasuredScreenHeight = hardwareConfig.getScreenHeight();
|
||||
|
||||
if (renderingMode != RenderingMode.NORMAL) {
|
||||
int widthMeasureSpecMode = renderingMode.isHorizExpand() ?
|
||||
@ -495,11 +548,11 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
|
||||
// create an Android bitmap around the BufferedImage
|
||||
Bitmap bitmap = Bitmap_Delegate.createBitmap(mImage,
|
||||
true /*isMutable*/, params.getDensity());
|
||||
true /*isMutable*/, hardwareConfig.getDensity());
|
||||
|
||||
// create a Canvas around the Android bitmap
|
||||
mCanvas = new Canvas(bitmap);
|
||||
mCanvas.setDensity(params.getDensity().getDpiValue());
|
||||
mCanvas.setDensity(hardwareConfig.getDensity().getDpiValue());
|
||||
}
|
||||
|
||||
if (freshRender && newImage == false) {
|
||||
@ -972,30 +1025,28 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isTabletUi() {
|
||||
return getParams().getConfigScreenSize() == ScreenSize.XLARGE;
|
||||
private boolean hasSoftwareButtons() {
|
||||
return getParams().getHardwareConfig().hasSoftwareButtons();
|
||||
}
|
||||
|
||||
private void findStatusBar(RenderResources resources, DisplayMetrics metrics) {
|
||||
if (isTabletUi() == false) {
|
||||
boolean windowFullscreen = getBooleanThemeValue(resources,
|
||||
"windowFullscreen", false /*defaultValue*/);
|
||||
boolean windowFullscreen = getBooleanThemeValue(resources,
|
||||
"windowFullscreen", false /*defaultValue*/);
|
||||
|
||||
if (windowFullscreen == false && mWindowIsFloating == false) {
|
||||
// default value
|
||||
mStatusBarSize = DEFAULT_STATUS_BAR_HEIGHT;
|
||||
if (windowFullscreen == false && mWindowIsFloating == false) {
|
||||
// default value
|
||||
mStatusBarSize = DEFAULT_STATUS_BAR_HEIGHT;
|
||||
|
||||
// get the real value
|
||||
ResourceValue value = resources.getFrameworkResource(ResourceType.DIMEN,
|
||||
"status_bar_height");
|
||||
// get the real value
|
||||
ResourceValue value = resources.getFrameworkResource(ResourceType.DIMEN,
|
||||
"status_bar_height");
|
||||
|
||||
if (value != null) {
|
||||
TypedValue typedValue = ResourceHelper.getValue("status_bar_height",
|
||||
value.getValue(), true /*requireUnit*/);
|
||||
if (typedValue != null) {
|
||||
// compute the pixel value based on the display metrics
|
||||
mStatusBarSize = (int)typedValue.getDimension(metrics);
|
||||
}
|
||||
if (value != null) {
|
||||
TypedValue typedValue = ResourceHelper.getValue("status_bar_height",
|
||||
value.getValue(), true /*requireUnit*/);
|
||||
if (typedValue != null) {
|
||||
// compute the pixel value based on the display metrics
|
||||
mStatusBarSize = (int)typedValue.getDimension(metrics);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1062,22 +1113,48 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
||||
}
|
||||
}
|
||||
|
||||
private void findSystemBar(RenderResources resources, DisplayMetrics metrics) {
|
||||
if (isTabletUi() && mWindowIsFloating == false) {
|
||||
private void findNavigationBar(RenderResources resources, DisplayMetrics metrics) {
|
||||
if (hasSoftwareButtons() && mWindowIsFloating == false) {
|
||||
|
||||
// default value
|
||||
mSystemBarSize = 48; // ??
|
||||
mNavigationBarSize = 48; // ??
|
||||
|
||||
HardwareConfig hardwareConfig = getParams().getHardwareConfig();
|
||||
|
||||
boolean barOnBottom = true;
|
||||
|
||||
if (hardwareConfig.getOrientation() == ScreenOrientation.LANDSCAPE) {
|
||||
// compute the dp of the screen.
|
||||
int shortSize = hardwareConfig.getScreenHeight();
|
||||
|
||||
// compute in dp
|
||||
int shortSizeDp = shortSize * DisplayMetrics.DENSITY_DEFAULT / hardwareConfig.getDensity().getDpiValue();
|
||||
|
||||
if (shortSizeDp < 600) {
|
||||
// 0-599dp: "phone" UI with bar on the side
|
||||
barOnBottom = false;
|
||||
} else {
|
||||
// 600+dp: "tablet" UI with bar on the bottom
|
||||
barOnBottom = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (barOnBottom) {
|
||||
mNavigationBarOrientation = LinearLayout.HORIZONTAL;
|
||||
} else {
|
||||
mNavigationBarOrientation = LinearLayout.VERTICAL;
|
||||
}
|
||||
|
||||
// get the real value
|
||||
ResourceValue value = resources.getFrameworkResource(ResourceType.DIMEN,
|
||||
"status_bar_height");
|
||||
barOnBottom ? "navigation_bar_height" : "navigation_bar_width");
|
||||
|
||||
if (value != null) {
|
||||
TypedValue typedValue = ResourceHelper.getValue("status_bar_height",
|
||||
TypedValue typedValue = ResourceHelper.getValue("navigation_bar_height",
|
||||
value.getValue(), true /*requireUnit*/);
|
||||
if (typedValue != null) {
|
||||
// compute the pixel value based on the display metrics
|
||||
mSystemBarSize = (int)typedValue.getDimension(metrics);
|
||||
mNavigationBarSize = (int)typedValue.getDimension(metrics);
|
||||
}
|
||||
}
|
||||
}
|
||||
|