diff options
Diffstat (limited to 'src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java')
-rw-r--r-- | src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java | 140 |
1 files changed, 85 insertions, 55 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java b/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java index 12ae8a65d8..ff0032d623 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java +++ b/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java @@ -265,6 +265,25 @@ public class ExtractStyle { final int defaultBackgroundColor; final int defaultTextColor; + // wrapper for accessing a TypedArray with style values and + // retrieving either device-indpendent pixel values or device + // pixel valies, depending on if useDevicePixels below is set + Boolean m_useDevicePixels; + // ### should possibly return float + int getTypedArraDimensionSize(TypedArray a, int index, int defValue) + { + if (m_useDevicePixels) + return a.getDimensionPixelSize(index, defValue); + return (int) a.getDimension(index, (float)defValue); + } + + int getTypedArraDimensionOffset(TypedArray a, int index, int defValue) + { + if (m_useDevicePixels) + return a.getDimensionPixelOffset(index, defValue); + return (int) a.getDimension(index, (float)defValue); + } + class SimpleJsonWriter { private OutputStreamWriter m_writer; @@ -1180,19 +1199,19 @@ public class ExtractStyle { if (attr == View_background) json.put("View_background", getDrawable(a.getDrawable(attr), styleName + "_View_background", null)); else if (attr == View_padding) - json.put("View_padding", a.getDimensionPixelSize(attr, -1)); + json.put("View_padding", getTypedArraDimensionSize(a, attr, -1)); else if (attr == View_paddingLeft) - json.put("View_paddingLeft", a.getDimensionPixelSize(attr, -1)); + json.put("View_paddingLeft", getTypedArraDimensionSize(a, attr, -1)); else if (attr == View_paddingTop) - json.put("View_paddingTop", a.getDimensionPixelSize(attr, -1)); + json.put("View_paddingTop", getTypedArraDimensionSize(a, attr, -1)); else if (attr == View_paddingRight) - json.put("View_paddingRight", a.getDimensionPixelSize(attr, -1)); + json.put("View_paddingRight", getTypedArraDimensionSize(a, attr, -1)); else if (attr == View_paddingBottom) - json.put("View_paddingBottom", a.getDimensionPixelSize(attr, -1)); + json.put("View_paddingBottom", getTypedArraDimensionSize(a, attr, -1)); else if (attr == View_scrollX) - json.put("View_paddingBottom", a.getDimensionPixelOffset(attr, 0)); + json.put("View_paddingBottom", getTypedArraDimensionOffset(a, attr, 0)); else if (attr == View_scrollY) - json.put("View_scrollY", a.getDimensionPixelOffset(attr, 0)); + json.put("View_scrollY", getTypedArraDimensionOffset(a, attr, 0)); else if (attr == View_id) json.put("View_id", a.getResourceId(attr, -1)); else if (attr == View_tag) @@ -1232,7 +1251,7 @@ public class ExtractStyle { else if (attr == View_scrollbarDefaultDelayBeforeFade) json.put("View_scrollbarDefaultDelayBeforeFade", a.getInt(attr, 0)); else if (attr == View_scrollbarSize) - json.put("View_scrollbarSize", a.getDimensionPixelSize(attr, -1)); + json.put("View_scrollbarSize", getTypedArraDimensionSize(a, attr, -1)); else if (attr == View_scrollbarThumbHorizontal) json.put("View_scrollbarThumbHorizontal", getDrawable(a.getDrawable(attr), styleName + "_View_scrollbarThumbHorizontal", null)); else if (attr == View_scrollbarThumbVertical) @@ -1256,17 +1275,17 @@ public class ExtractStyle { else if (attr == View_nextFocusDown) json.put("View_nextFocusDown", a.getResourceId(attr, -1)); else if (attr == View_minWidth) - json.put("View_minWidth", a.getDimensionPixelSize(attr, 0)); + json.put("View_minWidth", getTypedArraDimensionSize(a, attr, 0)); else if (attr == View_minHeight) - json.put("View_minHeight", a.getDimensionPixelSize(attr, 0)); + json.put("View_minHeight", getTypedArraDimensionSize(a, attr, 0)); else if (attr == View_onClick) json.put("View_onClick", a.getString(attr)); else if (attr == View_overScrollMode) json.put("View_overScrollMode", a.getInt(attr, 1)); else if (attr == View_paddingStart) - json.put("View_paddingStart", a.getDimensionPixelSize(attr, 0)); + json.put("View_paddingStart", getTypedArraDimensionSize(a, attr, 0)); else if (attr == View_paddingEnd) - json.put("View_paddingEnd", a.getDimensionPixelSize(attr, 0)); + json.put("View_paddingEnd", getTypedArraDimensionSize(a, attr, 0)); } a.recycle(); } catch (Exception e) { @@ -1293,7 +1312,7 @@ public class ExtractStyle { else if (attr == TextAppearance_textColorLink) json.put("TextAppearance_textColorLink", getColorStateList(a.getColorStateList(attr))); else if (attr == TextAppearance_textSize) - json.put("TextAppearance_textSize", a.getDimensionPixelSize(attr, 15)); + json.put("TextAppearance_textSize", getTypedArraDimensionSize(a, attr, 15)); else if (attr == TextAppearance_typeface) json.put("TextAppearance_typeface", a.getInt(attr, -1)); else if (attr == TextAppearance_textStyle) @@ -1354,7 +1373,7 @@ public class ExtractStyle { else if (attr == TextAppearance_textColorLink) textColorLink = appearance.getColorStateList(attr); else if (attr == TextAppearance_textSize) - textSize = appearance.getDimensionPixelSize(attr, textSize); + textSize = getTypedArraDimensionSize(appearance, attr, textSize); else if (attr == TextAppearance_typeface) typefaceIndex = appearance.getInt(attr, -1); else if (attr == TextAppearance_textStyle) @@ -1407,7 +1426,7 @@ public class ExtractStyle { else if (attr == TextView_drawableEnd) json.put("TextView_drawableEnd", getDrawable(a.getDrawable(attr), styleName + "_TextView_drawableEnd", null)); else if (attr == TextView_drawablePadding) - json.put("TextView_drawablePadding", a.getDimensionPixelSize(attr, 0)); + json.put("TextView_drawablePadding", getTypedArraDimensionSize(a, attr, 0)); else if (attr == TextView_textCursorDrawable) { try { json.put("TextView_textCursorDrawable", getDrawable(a.getDrawable(attr), styleName + "_TextView_textCursorDrawable", null)); @@ -1421,27 +1440,27 @@ public class ExtractStyle { }else if (attr == TextView_maxLines) json.put("TextView_maxLines", a.getInt(attr, -1)); else if (attr == TextView_maxHeight) - json.put("TextView_maxHeight", a.getDimensionPixelSize(attr, -1)); + json.put("TextView_maxHeight", getTypedArraDimensionSize(a, attr, -1)); else if (attr == TextView_lines) json.put("TextView_lines", a.getInt(attr, -1)); else if (attr == TextView_height) - json.put("TextView_height", a.getDimensionPixelSize(attr, -1)); + json.put("TextView_height", getTypedArraDimensionSize(a, attr, -1)); else if (attr == TextView_minLines) json.put("TextView_minLines", a.getInt(attr, -1)); else if (attr == TextView_minHeight) - json.put("TextView_minHeight", a.getDimensionPixelSize(attr, -1)); + json.put("TextView_minHeight", getTypedArraDimensionSize(a, attr, -1)); else if (attr == TextView_maxEms) json.put("TextView_maxEms", a.getInt(attr, -1)); else if (attr == TextView_maxWidth) - json.put("TextView_maxWidth", a.getDimensionPixelSize(attr, -1)); + json.put("TextView_maxWidth", getTypedArraDimensionSize(a, attr, -1)); else if (attr == TextView_ems) json.put("TextView_ems", a.getInt(attr, -1)); else if (attr == TextView_width) - json.put("TextView_width", a.getDimensionPixelSize(attr, -1)); + json.put("TextView_width", getTypedArraDimensionSize(a, attr, -1)); else if (attr == TextView_minEms) json.put("TextView_minEms", a.getInt(attr, -1)); else if (attr == TextView_minWidth) - json.put("TextView_minWidth", a.getDimensionPixelSize(attr, -1)); + json.put("TextView_minWidth", getTypedArraDimensionSize(a, attr, -1)); else if (attr == TextView_gravity) json.put("TextView_gravity", a.getInt(attr, -1)); else if (attr == TextView_hint) @@ -1485,7 +1504,7 @@ public class ExtractStyle { else if (attr == TextView_textColorLink) textColorLink = a.getColorStateList(attr); else if (attr == TextView_textSize) - textSize = a.getDimensionPixelSize(attr, textSize); + textSize = getTypedArraDimensionSize(a, attr, textSize); else if (attr == TextView_typeface) typefaceIndex = a.getInt(attr, typefaceIndex); else if (attr == TextView_textStyle) @@ -1493,7 +1512,7 @@ public class ExtractStyle { else if (attr == TextView_password) json.put("TextView_password", a.getBoolean(attr,false)); else if (attr == TextView_lineSpacingExtra) - json.put("TextView_lineSpacingExtra", a.getDimensionPixelSize(attr, 0)); + json.put("TextView_lineSpacingExtra", getTypedArraDimensionSize(a, attr, 0)); else if (attr == TextView_lineSpacingMultiplier) json.put("TextView_lineSpacingMultiplier", a.getFloat(attr, 1.0f)); else if (attr == TextView_inputType) @@ -1588,8 +1607,8 @@ public class ExtractStyle { json.put("ImageView_baselineAlignBottom", a.getBoolean(ImageView_baselineAlignBottom, false)); json.put("ImageView_adjustViewBounds", a.getBoolean(ImageView_adjustViewBounds, false)); - json.put("ImageView_maxWidth", a.getDimensionPixelSize(ImageView_maxWidth, Integer.MAX_VALUE)); - json.put("ImageView_maxHeight", a.getDimensionPixelSize(ImageView_maxHeight, Integer.MAX_VALUE)); + json.put("ImageView_maxWidth", getTypedArraDimensionSize(a, ImageView_maxWidth, Integer.MAX_VALUE)); + json.put("ImageView_maxHeight", getTypedArraDimensionSize(a, ImageView_maxHeight, Integer.MAX_VALUE)); int index = a.getInt(ImageView_scaleType, -1); if (index >= 0) json.put("ImageView_scaleType", sScaleTypeArray[index]); @@ -1646,10 +1665,10 @@ public class ExtractStyle { int mMaxWidth = 48; int mMinHeight = 24; int mMaxHeight = 48; - mMinWidth = a.getDimensionPixelSize(getField(styleableClass, "ProgressBar_minWidth"), mMinWidth); - mMaxWidth = a.getDimensionPixelSize(getField(styleableClass, "ProgressBar_maxWidth"), mMaxWidth); - mMinHeight = a.getDimensionPixelSize(getField(styleableClass, "ProgressBar_minHeight"), mMinHeight); - mMaxHeight = a.getDimensionPixelSize(getField(styleableClass, "ProgressBar_maxHeight"), mMaxHeight); + mMinWidth = getTypedArraDimensionSize(a, getField(styleableClass, "ProgressBar_minWidth"), mMinWidth); + mMaxWidth = getTypedArraDimensionSize(a, getField(styleableClass, "ProgressBar_maxWidth"), mMaxWidth); + mMinHeight = getTypedArraDimensionSize(a, getField(styleableClass, "ProgressBar_minHeight"), mMinHeight); + mMaxHeight = getTypedArraDimensionSize(a, getField(styleableClass, "ProgressBar_maxHeight"), mMaxHeight); json.put("ProgressBar_indeterminateDuration", a.getInt(getField(styleableClass, "ProgressBar_indeterminateDuration"), 4000)); json.put("ProgressBar_minWidth", mMinWidth); @@ -1737,9 +1756,9 @@ public class ExtractStyle { json.put("Switch_textOn", a.getText(getField(styleableClass, "Switch_textOn"))); json.put("Switch_textOff", a.getText(getField(styleableClass, "Switch_textOff"))); - json.put("Switch_switchMinWidth", a.getDimensionPixelSize(getField(styleableClass, "Switch_switchMinWidth"), 0)); - json.put("Switch_switchPadding", a.getDimensionPixelSize(getField(styleableClass, "Switch_switchPadding"), 0)); - json.put("Switch_thumbTextPadding", a.getDimensionPixelSize(getField(styleableClass, "Switch_thumbTextPadding"), 0)); + json.put("Switch_switchMinWidth", getTypedArraDimensionSize(a, getField(styleableClass, "Switch_switchMinWidth"), 0)); + json.put("Switch_switchPadding", getTypedArraDimensionSize(a, getField(styleableClass, "Switch_switchPadding"), 0)); + json.put("Switch_thumbTextPadding", getTypedArraDimensionSize(a, getField(styleableClass, "Switch_thumbTextPadding"), 0)); if (Build.VERSION.SDK_INT >= 21) { json.put("Switch_showText", a.getBoolean(getField(styleableClass, "Switch_showText"), true)); @@ -1834,7 +1853,7 @@ public class ExtractStyle { if (divider != null) json.put("ListView_divider", getDrawable(divider, styleName + "_ListView_divider", null)); - json.put("ListView_dividerHeight", a.getDimensionPixelSize(getField(styleableClass, "ListView_dividerHeight"), 0)); + json.put("ListView_dividerHeight", getTypedArraDimensionSize(a, getField(styleableClass, "ListView_dividerHeight"), 0)); a.recycle(); writer.name(styleName).value(json); @@ -1905,7 +1924,7 @@ public class ExtractStyle { if (d != null) json.put("ActionBar_divider", getDrawable(d, styleName + "_ActionBar_divider", null)); - json.put("ActionBar_itemPadding", a.getDimensionPixelSize(getField(styleableClass, "ActionBar_itemPadding"), 0)); + json.put("ActionBar_itemPadding", getTypedArraDimensionSize(a, getField(styleableClass, "ActionBar_itemPadding"), 0)); a.recycle(); writer.name(styleName).value(json); @@ -1928,7 +1947,7 @@ public class ExtractStyle { if (d != null) json.put("LinearLayout_divider", getDrawable(d, styleName + "_LinearLayout_divider", null)); json.put("LinearLayout_showDividers", a.getInt(getField(styleableClass, "LinearLayout_showDividers"), 0)); - json.put("LinearLayout_dividerPadding", a.getDimensionPixelSize(getField(styleableClass, "LinearLayout_dividerPadding"), 0)); + json.put("LinearLayout_dividerPadding", getTypedArraDimensionSize(a, getField(styleableClass, "LinearLayout_dividerPadding"), 0)); a.recycle(); writer.name(styleName).value(json); @@ -1981,29 +2000,11 @@ public class ExtractStyle { return json; } - public ExtractStyle(Context context, String extractPath) + public void extractStyleToJson(String path) { -// Log.i(MinistroService.TAG, "Extract " + extractPath); - m_extractPath = extractPath + "/"; - new File(m_extractPath).mkdirs(); -// MinistroActivity.nativeChmode(m_extractPath, 0755); - m_context = context; - m_theme = context.getTheme(); - TypedArray array = m_theme.obtainStyledAttributes(new int[]{ - android.R.attr.colorBackground, - android.R.attr.textColorPrimary, - android.R.attr.textColor - }); - defaultBackgroundColor = array.getColor(0, 0); - int textColor = array.getColor(1, 0xFFFFFF); - if (textColor == 0xFFFFFF) - textColor = array.getColor(2, 0xFFFFFF); - defaultTextColor = textColor; - array.recycle(); - try { - SimpleJsonWriter jsonWriter = new SimpleJsonWriter(m_extractPath+"style.json"); + SimpleJsonWriter jsonWriter = new SimpleJsonWriter(path); jsonWriter.beginObject(); try { jsonWriter.name("defaultStyle").value(extractDefaultPalette()); @@ -2047,4 +2048,33 @@ public class ExtractStyle { e.printStackTrace(); } } + + public ExtractStyle(Context context, String extractPath) + { +// Log.i(MinistroService.TAG, "Extract " + extractPath); + m_extractPath = extractPath + "/"; + new File(m_extractPath).mkdirs(); +// MinistroActivity.nativeChmode(m_extractPath, 0755); + m_context = context; + m_theme = context.getTheme(); + TypedArray array = m_theme.obtainStyledAttributes(new int[]{ + android.R.attr.colorBackground, + android.R.attr.textColorPrimary, + android.R.attr.textColor + }); + defaultBackgroundColor = array.getColor(0, 0); + int textColor = array.getColor(1, 0xFFFFFF); + if (textColor == 0xFFFFFF) + textColor = array.getColor(2, 0xFFFFFF); + defaultTextColor = textColor; + array.recycle(); + + // Write two versions of the style file + // style.json with values in device pixels + // style_dip.json with values in device independent pixels + m_useDevicePixels = false; // ### write device-independent pixels only for now + extractStyleToJson(m_extractPath + "style.json"); + m_useDevicePixels = false; + extractStyleToJson(m_extractPath + "style_dip.json"); + } } |