* commit 'ca67a249293d021808f349fa2e2f799451aeafe8': Special case AppCompat to show action bar.
This commit is contained in:
@ -36,6 +36,7 @@ import com.android.ide.common.rendering.api.Result;
|
|||||||
import com.android.ide.common.rendering.api.Result.Status;
|
import com.android.ide.common.rendering.api.Result.Status;
|
||||||
import com.android.ide.common.rendering.api.SessionParams;
|
import com.android.ide.common.rendering.api.SessionParams;
|
||||||
import com.android.ide.common.rendering.api.SessionParams.RenderingMode;
|
import com.android.ide.common.rendering.api.SessionParams.RenderingMode;
|
||||||
|
import com.android.ide.common.rendering.api.StyleResourceValue;
|
||||||
import com.android.ide.common.rendering.api.ViewInfo;
|
import com.android.ide.common.rendering.api.ViewInfo;
|
||||||
import com.android.ide.common.rendering.api.ViewType;
|
import com.android.ide.common.rendering.api.ViewType;
|
||||||
import com.android.internal.util.XmlUtils;
|
import com.android.internal.util.XmlUtils;
|
||||||
@ -134,6 +135,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
|||||||
private int mMeasuredScreenHeight = -1;
|
private int mMeasuredScreenHeight = -1;
|
||||||
private boolean mIsAlphaChannelImage;
|
private boolean mIsAlphaChannelImage;
|
||||||
private boolean mWindowIsFloating;
|
private boolean mWindowIsFloating;
|
||||||
|
private Boolean mIsThemeAppCompat;
|
||||||
|
|
||||||
private int mStatusBarSize;
|
private int mStatusBarSize;
|
||||||
private int mNavigationBarSize;
|
private int mNavigationBarSize;
|
||||||
@ -194,11 +196,9 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
|||||||
DisplayMetrics metrics = getContext().getMetrics();
|
DisplayMetrics metrics = getContext().getMetrics();
|
||||||
|
|
||||||
// use default of true in case it's not found to use alpha by default
|
// use default of true in case it's not found to use alpha by default
|
||||||
mIsAlphaChannelImage = getBooleanThemeValue(resources,
|
mIsAlphaChannelImage = getBooleanThemeValue(resources, "windowIsFloating", true, true);
|
||||||
"windowIsFloating", true /*defaultValue*/);
|
// FIXME: Find out why both variables are taking the same value.
|
||||||
|
mWindowIsFloating = getBooleanThemeValue(resources, "windowIsFloating", true, true);
|
||||||
mWindowIsFloating = getBooleanThemeValue(resources, "windowIsFloating",
|
|
||||||
true /*defaultValue*/);
|
|
||||||
|
|
||||||
findBackground(resources);
|
findBackground(resources);
|
||||||
findStatusBar(resources, metrics);
|
findStatusBar(resources, metrics);
|
||||||
@ -1059,7 +1059,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
|||||||
|
|
||||||
private void findStatusBar(RenderResources resources, DisplayMetrics metrics) {
|
private void findStatusBar(RenderResources resources, DisplayMetrics metrics) {
|
||||||
boolean windowFullscreen = getBooleanThemeValue(resources,
|
boolean windowFullscreen = getBooleanThemeValue(resources,
|
||||||
"windowFullscreen", false /*defaultValue*/);
|
"windowFullscreen", false, !isThemeAppCompat(resources));
|
||||||
|
|
||||||
if (!windowFullscreen && !mWindowIsFloating) {
|
if (!windowFullscreen && !mWindowIsFloating) {
|
||||||
// default value
|
// default value
|
||||||
@ -1086,7 +1086,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean windowActionBar = getBooleanThemeValue(resources,
|
boolean windowActionBar = getBooleanThemeValue(resources,
|
||||||
"windowActionBar", true /*defaultValue*/);
|
"windowActionBar", true, !isThemeAppCompat(resources));
|
||||||
|
|
||||||
// if there's a value and it's false (default is true)
|
// if there's a value and it's false (default is true)
|
||||||
if (windowActionBar) {
|
if (windowActionBar) {
|
||||||
@ -1113,7 +1113,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
|||||||
} else {
|
} else {
|
||||||
// action bar overrides title bar so only look for this one if action bar is hidden
|
// action bar overrides title bar so only look for this one if action bar is hidden
|
||||||
boolean windowNoTitle = getBooleanThemeValue(resources,
|
boolean windowNoTitle = getBooleanThemeValue(resources,
|
||||||
"windowNoTitle", false /*defaultValue*/);
|
"windowNoTitle", false, !isThemeAppCompat(resources));
|
||||||
|
|
||||||
if (!windowNoTitle) {
|
if (!windowNoTitle) {
|
||||||
|
|
||||||
@ -1185,20 +1185,30 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isThemeAppCompat(RenderResources resources) {
|
||||||
|
// Ideally, we should check if the corresponding activity extends
|
||||||
|
// android.support.v7.app.ActionBarActivity, and not care about the theme name at all.
|
||||||
|
if (mIsThemeAppCompat == null) {
|
||||||
|
StyleResourceValue defaultTheme = resources.getDefaultTheme();
|
||||||
|
StyleResourceValue val = resources.getStyle("Theme.AppCompat", false);
|
||||||
|
mIsThemeAppCompat = defaultTheme == val || resources.themeIsParentOf(val, defaultTheme);
|
||||||
|
}
|
||||||
|
return mIsThemeAppCompat;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Looks for a attribute in the current theme. The attribute is in the android
|
* Looks for an attribute in the current theme.
|
||||||
* namespace.
|
|
||||||
*
|
*
|
||||||
* @param resources the render resources
|
* @param resources the render resources
|
||||||
* @param name the name of the attribute
|
* @param name the name of the attribute
|
||||||
* @param defaultValue the default value.
|
* @param defaultValue the default value.
|
||||||
|
* @param isFrameworkAttr if the attribute is in android namespace
|
||||||
* @return the value of the attribute or the default one if not found.
|
* @return the value of the attribute or the default one if not found.
|
||||||
*/
|
*/
|
||||||
private boolean getBooleanThemeValue(RenderResources resources,
|
private boolean getBooleanThemeValue(RenderResources resources,
|
||||||
String name, boolean defaultValue) {
|
String name, boolean defaultValue, boolean isFrameworkAttr) {
|
||||||
|
|
||||||
// get the title bar flag from the current theme.
|
ResourceValue value = resources.findItemInTheme(name, isFrameworkAttr);
|
||||||
ResourceValue value = resources.findItemInTheme(name, true /*isFrameworkAttr*/);
|
|
||||||
|
|
||||||
// because it may reference something else, we resolve it.
|
// because it may reference something else, we resolve it.
|
||||||
value = resources.resolveResValue(value);
|
value = resources.resolveResValue(value);
|
||||||
|
Reference in New Issue
Block a user