diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java index 683c4aabf6d95..c8e3d03169e84 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java @@ -183,7 +183,7 @@ public final class Bridge extends com.android.ide.common.rendering.api.Bridge { */ private static LayoutLog sCurrentLog = sDefaultLog; - private static final int LAST_SUPPORTED_FEATURE = Features.CHOREOGRAPHER; + private static final int LAST_SUPPORTED_FEATURE = Features.THEME_PREVIEW_NAVIGATION_BAR; @Override public int getApiLevel() { diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java index 9c89bfe2a28f1..dfbc69bee59c1 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java @@ -19,9 +19,6 @@ package com.android.layoutlib.bridge.bars; import com.android.layoutlib.bridge.android.BridgeContext; 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; @@ -41,29 +38,18 @@ public class NavigationBar extends CustomBar { private static final int WIDTH_DEFAULT = 36; private static final int WIDTH_SW360 = 40; private static final int WIDTH_SW600 = 48; - private static final String LAYOUT_XML = "/bars/navigation_bar.xml"; + protected static final String LAYOUT_XML = "/bars/navigation_bar.xml"; private static final String LAYOUT_600DP_XML = "/bars/navigation_bar600dp.xml"; - - /** - * Constructor to be used when creating the {@link NavigationBar} as a regular control. - * This is currently used by the theme editor. - */ - @SuppressWarnings("unused") - public NavigationBar(Context context, AttributeSet attrs) { - this((BridgeContext) context, - Density.getEnum(((BridgeContext) context).getMetrics().densityDpi), - LinearLayout.HORIZONTAL, // In this mode, it doesn't need to be render vertically - ((BridgeContext) context).getConfiguration().getLayoutDirection() == - View.LAYOUT_DIRECTION_RTL, - (context.getApplicationInfo().flags & ApplicationInfo.FLAG_SUPPORTS_RTL) != 0, - 0); + public NavigationBar(BridgeContext context, Density density, int orientation, boolean isRtl, + boolean rtlEnabled, int simulatedPlatformVersion) { + this(context, density, orientation, isRtl, rtlEnabled, simulatedPlatformVersion, + getShortestWidth(context)>= 600 ? LAYOUT_600DP_XML : LAYOUT_XML); } - public NavigationBar(BridgeContext context, Density density, int orientation, boolean isRtl, - boolean rtlEnabled, int simulatedPlatformVersion) { - super(context, orientation, getShortestWidth(context)>= 600 ? LAYOUT_600DP_XML : LAYOUT_XML, - "navigation_bar.xml", simulatedPlatformVersion); + protected NavigationBar(BridgeContext context, Density density, int orientation, boolean isRtl, + boolean rtlEnabled, int simulatedPlatformVersion, String layoutPath) { + super(context, orientation, layoutPath, "navigation_bar.xml", simulatedPlatformVersion); int color = getBarColor(ATTR_COLOR, ATTR_TRANSLUCENT); setBackgroundColor(color == 0 ? 0xFF000000 : color); @@ -117,7 +103,7 @@ public class NavigationBar extends CustomBar { view.setLayoutParams(layoutParams); } - private static int getSidePadding(float sw) { + protected int getSidePadding(float sw) { if (sw >= 400) { return PADDING_WIDTH_SW400; } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ThemePreviewNavigationBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ThemePreviewNavigationBar.java new file mode 100644 index 0000000000000..043528016c2df --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ThemePreviewNavigationBar.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2015 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.layoutlib.bridge.android.BridgeContext; +import com.android.resources.Density; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.util.AttributeSet; +import android.view.View; +import android.widget.LinearLayout; + +/** + * Navigation Bar for the Theme Editor preview. + * + * For small bars, it is identical to {@link NavigationBar}. + * But wide bars from {@link NavigationBar} are too wide for the Theme Editor preview. + * To solve that problem, {@link ThemePreviewNavigationBar} use the layout for small bars, + * and have no padding on the sides. That way, they have a similar look as the true ones, + * and they fit in the Theme Editor preview. + */ +public class ThemePreviewNavigationBar extends NavigationBar { + private static final int PADDING_WIDTH_SW600 = 0; + + @SuppressWarnings("unused") + public ThemePreviewNavigationBar(Context context, AttributeSet attrs) { + super((BridgeContext) context, + Density.getEnum(((BridgeContext) context).getMetrics().densityDpi), + LinearLayout.HORIZONTAL, // In this mode, it doesn't need to be render vertically + ((BridgeContext) context).getConfiguration().getLayoutDirection() == + View.LAYOUT_DIRECTION_RTL, + (context.getApplicationInfo().flags & ApplicationInfo.FLAG_SUPPORTS_RTL) != 0, + 0, LAYOUT_XML); + } + + @Override + protected int getSidePadding(float sw) { + if (sw >= 600) { + return PADDING_WIDTH_SW600; + } + return super.getSidePadding(sw); + } +}