Update nav bar icons. [DO NOT MERGE]
- Add a script to copy the icons from the original source.
- Update layout used for the navigation bar to be closer to the original
layout.
- Update test image with the latest rendering.
- Add a nexus 5 landscape device config to help with testing.
Change-Id: I0b6674955e0970a6a8cce148b1b7aa61e1752ccd
(cherry picked from commit 139d6ff12d)
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 19 KiB |
@@ -1,20 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<TextView
|
||||
<View
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
<ImageView
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:scaleType="centerInside"/>
|
||||
<View
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="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:scaleType="centerInside"/>
|
||||
<View
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_weight="1"/>
|
||||
<ImageView
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"/>
|
||||
android:layout_width="wrap_content"
|
||||
android:scaleType="centerInside"/>
|
||||
<View
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
</merge>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 611 B |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 965 B |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1010 B |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 562 B |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 733 B |
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 573 B |
|
Before Width: | Height: | Size: 19 KiB |
@@ -22,6 +22,7 @@ import com.android.resources.Density;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
@@ -30,6 +31,14 @@ public class NavigationBar extends CustomBar {
|
||||
|
||||
/** Navigation bar background color attribute name. */
|
||||
private static final String ATTR_COLOR = "navigationBarColor";
|
||||
// These correspond to @dimen/navigation_side_padding in the system ui code.
|
||||
private static final int PADDING_WIDTH_DEFAULT = 36;
|
||||
private static final int PADDING_WIDTH_SW360 = 40;
|
||||
private static final int PADDING_WIDTH_SW400 = 50;
|
||||
// These corresponds to @dimen/navigation_key_width in the system ui code.
|
||||
private static final int WIDTH_DEFAULT = 36;
|
||||
private static final int WIDTH_SW360 = 40;
|
||||
private static final int WIDTH_SW600 = 48;
|
||||
|
||||
/**
|
||||
* Constructor to be used when creating the {@link NavigationBar} as a regular control.
|
||||
@@ -43,7 +52,7 @@ public class NavigationBar extends CustomBar {
|
||||
((BridgeContext) context).getConfiguration().getLayoutDirection() ==
|
||||
View.LAYOUT_DIRECTION_RTL,
|
||||
(context.getApplicationInfo().flags & ApplicationInfo.FLAG_SUPPORTS_RTL) != 0,
|
||||
context.getApplicationInfo().targetSdkVersion);
|
||||
0);
|
||||
}
|
||||
|
||||
public NavigationBar(BridgeContext context, Density density, int orientation, boolean isRtl,
|
||||
@@ -59,19 +68,70 @@ public class NavigationBar extends CustomBar {
|
||||
// We do know the order though.
|
||||
// 0 is a spacer.
|
||||
int back = 1;
|
||||
int recent = 3;
|
||||
int recent = 5;
|
||||
if (orientation == LinearLayout.VERTICAL || (isRtl && !rtlEnabled)) {
|
||||
// If RTL is enabled, then layoutlib mirrors the layout for us.
|
||||
back = 3;
|
||||
back = 5;
|
||||
recent = 1;
|
||||
}
|
||||
|
||||
//noinspection SpellCheckingInspection
|
||||
loadIcon(back, "ic_sysbar_back.png", density, isRtl);
|
||||
loadIcon(back, "ic_sysbar_back.png", density, isRtl);
|
||||
//noinspection SpellCheckingInspection
|
||||
loadIcon(2, "ic_sysbar_home.png", density, isRtl);
|
||||
loadIcon(3, "ic_sysbar_home.png", density, isRtl);
|
||||
//noinspection SpellCheckingInspection
|
||||
loadIcon(recent, "ic_sysbar_recent.png", density, isRtl);
|
||||
setupNavBar(context, orientation);
|
||||
}
|
||||
|
||||
private void setupNavBar(BridgeContext context, int orientation) {
|
||||
View leftPadding = getChildAt(0);
|
||||
View rightPadding = getChildAt(6);
|
||||
setSize(context, leftPadding, orientation, getSidePadding(context));
|
||||
setSize(context, rightPadding, orientation, getSidePadding(context));
|
||||
for (int i = 1; i < 6; i += 2) {
|
||||
View navButton = getChildAt(i);
|
||||
setSize(context, navButton, orientation, getWidth(context));
|
||||
}
|
||||
}
|
||||
|
||||
private static void setSize(BridgeContext context, View view, int orientation, int size) {
|
||||
size *= context.getMetrics().density;
|
||||
LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
|
||||
if (orientation == HORIZONTAL) {
|
||||
layoutParams.width = size;
|
||||
} else {
|
||||
layoutParams.height = size;
|
||||
}
|
||||
view.setLayoutParams(layoutParams);
|
||||
}
|
||||
|
||||
private static int getSidePadding(BridgeContext context) {
|
||||
DisplayMetrics metrics = context.getMetrics();
|
||||
float sw = metrics.widthPixels > metrics.heightPixels
|
||||
? metrics.heightPixels : metrics.widthPixels;
|
||||
sw /= metrics.density;
|
||||
if (sw >= 400) {
|
||||
return PADDING_WIDTH_SW400;
|
||||
}
|
||||
if (sw >= 360) {
|
||||
return PADDING_WIDTH_SW360;
|
||||
}
|
||||
return PADDING_WIDTH_DEFAULT;
|
||||
}
|
||||
|
||||
private static int getWidth(BridgeContext context) {
|
||||
DisplayMetrics metrics = context.getMetrics();
|
||||
float sw = metrics.widthPixels > metrics.heightPixels
|
||||
? metrics.heightPixels : metrics.widthPixels;
|
||||
sw /= metrics.density;
|
||||
if (sw >= 600) {
|
||||
return WIDTH_SW600;
|
||||
}
|
||||
if (sw >= 360) {
|
||||
return WIDTH_SW360;
|
||||
}
|
||||
return WIDTH_DEFAULT;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -111,6 +111,21 @@ public class ConfigGenerator {
|
||||
.setSoftButtons(true)
|
||||
.setNavigation(Navigation.NONAV);
|
||||
|
||||
public static final ConfigGenerator NEXUS_5_LAND = new ConfigGenerator()
|
||||
.setScreenHeight(1080)
|
||||
.setScreenWidth(1920)
|
||||
.setXdpi(445)
|
||||
.setYdpi(445)
|
||||
.setOrientation(ScreenOrientation.LANDSCAPE)
|
||||
.setDensity(Density.XXHIGH)
|
||||
.setRatio(ScreenRatio.NOTLONG)
|
||||
.setSize(ScreenSize.NORMAL)
|
||||
.setKeyboard(Keyboard.NOKEY)
|
||||
.setTouchScreen(TouchScreen.FINGER)
|
||||
.setKeyboardState(KeyboardState.SOFT)
|
||||
.setSoftButtons(true)
|
||||
.setNavigation(Navigation.NONAV);
|
||||
|
||||
private static final String TAG_ATTR = "attr";
|
||||
private static final String TAG_ENUM = "enum";
|
||||
private static final String TAG_FLAG = "flag";
|
||||
|
||||
51
tools/layoutlib/bridge/update_nav_icons.sh
Executable file
@@ -0,0 +1,51 @@
|
||||
#!/bin/sh
|
||||
|
||||
# copies the navigation bar icons from system ui code to layoutlib.
|
||||
# to run, simply execute the script. (if not using bash, cd to the dir
|
||||
# containing this script and then run by ./update_nav_icons.sh)
|
||||
|
||||
# Try to get the location of this script.
|
||||
if [ -n $BASH ]; then
|
||||
# see http://stackoverflow.com/a/246128/1546000
|
||||
MY_LOCATION=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||
cd $MY_LOCATION
|
||||
else
|
||||
# Let's assume script was run from the same dir.
|
||||
MY_LOCATION=$(pwd)
|
||||
fi
|
||||
|
||||
# Check mac or linux to get sed argument to enable extended regex.
|
||||
case $(uname -s) in
|
||||
Darwin)
|
||||
EXT_REGEX="-E"
|
||||
;;
|
||||
*)
|
||||
EXT_REGEX="-r"
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
FB="frameworks/base"
|
||||
# frameworks/base relative to current location
|
||||
FB=$(echo $MY_LOCATION | sed $EXT_REGEX -e "s,.*$FB[^/]*/,," -e "s,[^/]+,..,g")
|
||||
CURRENT_API=21 # update only if icons change from this api version.
|
||||
DENSITIES="ldpi mdpi hdpi xhdpi xxhdpi"
|
||||
ICONS="ic_sysbar_back.png ic_sysbar_home.png ic_sysbar_recent.png"
|
||||
BARS="./resources/bars/"
|
||||
|
||||
for icon in $ICONS
|
||||
do
|
||||
for density in $DENSITIES
|
||||
do
|
||||
destination="$BARS/v$CURRENT_API/$density/"
|
||||
mkdir -p "$destination" # create if not present.
|
||||
cp -v "$FB/packages/SystemUI/res/drawable-$density/$icon" "$destination"
|
||||
done
|
||||
|
||||
for density in $DENSITIES
|
||||
do
|
||||
destination="$BARS/v$CURRENT_API/ldrtl-$density/"
|
||||
mkdir -p "$destination"
|
||||
cp -v "$FB/packages/SystemUI/res/drawable-ldrtl-$density/$icon" "$destination"
|
||||
done
|
||||
done
|
||||