am 434cd38f: Update layoutlib for jb mr1. do not merge.

* commit '434cd38f96a4a87220a8218901622f31e567354a':
  Update layoutlib for jb mr1. do not merge.
This commit is contained in:
Xavier Ducrohet
2012-10-18 12:23:28 -07:00
committed by Android Git Automerger
30 changed files with 242 additions and 60 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1007 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 534 B

View File

@ -0,0 +1,20 @@
<?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"/>
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</merge>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 644 B

View File

@ -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();

View File

@ -56,15 +56,19 @@ import java.io.InputStream;
*
* It also provides a few utility methods to configure the content of the layout.
*/
abstract class CustomBar extends LinearLayout {
public 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);

View File

@ -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.

View File

@ -0,0 +1,54 @@
/*
* 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.android.layoutlib.bridge.bars;
import com.android.resources.Density;
import org.xmlpull.v1.XmlPullParserException;
import android.content.Context;
import android.widget.LinearLayout;
import android.widget.TextView;
public class NavigationBar extends CustomBar {
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.
// 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
protected TextView getStyleableTextView() {
return null;
}
}

View File

@ -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);

View File

@ -24,21 +24,23 @@ 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 TabletSystemBar(Context context, Density density) throws XmlPullParserException {
super(context, density, "/bars/tablet_system_bar.xml", "tablet_system_bar.xml");
super(context, density, LinearLayout.HORIZONTAL,
"/bars/tablet_system_bar.xml", "tablet_system_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);
loadIcon(0, "ic_sysbar_back.png", density);
loadIcon(1, "ic_sysbar_home.png", density);
loadIcon(2, "ic_sysbar_recent.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");

View File

@ -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.

View File

@ -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,21 @@ 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 = mParams.getDensity().getDpiValue();
metrics.densityDpi = 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 +308,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 +328,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 {

View File

@ -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);

View File

@ -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;
@ -42,13 +43,16 @@ import com.android.layoutlib.bridge.Bridge;
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.CustomBar;
import com.android.layoutlib.bridge.bars.FakeActionBar;
import com.android.layoutlib.bridge.bars.PhoneSystemBar;
import com.android.layoutlib.bridge.bars.NavigationBar;
import com.android.layoutlib.bridge.bars.StatusBar;
import com.android.layoutlib.bridge.bars.TabletSystemBar;
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.ScreenOrientation;
import com.android.resources.ScreenSize;
import com.android.util.Pair;
@ -120,7 +124,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;
@ -183,7 +188,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
findBackground(resources);
findStatusBar(resources, metrics);
findActionBar(resources, metrics);
findSystemBar(resources, metrics);
findNavigationBar(resources, metrics);
// build the inflater and parser.
mInflater = new BridgeInflater(context, params.getProjectCallback());
@ -209,19 +214,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 (except for xlarge tablets) |
+-------------------------------------------------+
| (Layout with background drawable) |
| +---------------------------------------------+ |
@ -231,20 +274,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));
@ -268,7 +322,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(
@ -280,7 +334,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));
@ -298,15 +352,23 @@ 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(
CustomBar navigationBar;
if (hardwareConfig.getScreenSize() == ScreenSize.XLARGE) {
navigationBar = new TabletSystemBar(context,
hardwareConfig.getDensity());
} else {
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) {
}
@ -334,7 +396,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();
@ -377,13 +439,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() ?
@ -483,11 +546,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) {
@ -960,12 +1023,14 @@ 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) {
// status bar is on for all but x-large device
HardwareConfig hardwareConfig = getParams().getHardwareConfig();
if (hardwareConfig.getScreenSize() != ScreenSize.XLARGE) {
boolean windowFullscreen = getBooleanThemeValue(resources,
"windowFullscreen", false /*defaultValue*/);
@ -1050,22 +1115,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);
}
}
}