am ca67a249: am bb600de6: am 74147527: am 8505c387: Special case AppCompat to show action bar.

* commit 'ca67a249293d021808f349fa2e2f799451aeafe8':
  Special case AppCompat to show action bar.
This commit is contained in:
Deepanshu Gupta
2015-01-10 03:56:47 +00:00
committed by Android Git Automerger

View File

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