Update layoutlib for jb mr1.
Status bar displayed on all devices. Update logic for displaying nav bar to whether or not device has soft button. Update navigation buttons to new look. Remove battery and signal from navigation bar. Change-Id: I8241d71269a17126218a3062ba727e379a8e6c25
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||