From c0c80f14afba322179ac505816cdc51267b3a6ce Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Thu, 31 Jul 2014 13:41:51 +0300 Subject: Android: Fix exceptions in ExtractStyle.java on Android L Android L adds support for 64 bit (arm and x86) and they did lots of changes that are incompatible with old implementation. Task-number: QTBUG-40120 Change-Id: I69b78a9eed896d2ddabc1bf2a55886faeae47974 Reviewed-by: J-P Nurmi --- .../src/org/qtproject/qt5/android/ExtractStyle.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/android/jar') 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 cc7fc505ee..4bd78bfe6a 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java +++ b/src/android/jar/src/org/qtproject/qt5/android/ExtractStyle.java @@ -90,6 +90,9 @@ public class ExtractStyle { native static int[] extractChunkInfo(byte[] chunkData); native static int[] extractNativeChunkInfo(int nativeChunk); + native static int[] extractChunkInfo20(byte[] chunkData); + native static int[] extractNativeChunkInfo20(long nativeChunk); + Class styleableClass = getStylableClass(); final int[] EMPTY_STATE_SET = {}; @@ -337,7 +340,10 @@ public class ExtractStyle { } public void drawPatch(Bitmap bmp, byte[] chunks, RectF dst, Paint paint) { - chunkData = extractChunkInfo(chunks); + if (Build.VERSION.SDK_INT > 19) + chunkData = extractChunkInfo20(chunks); + else + chunkData = extractChunkInfo(chunks); } } @@ -630,6 +636,8 @@ public class ExtractStyle { JSONObject stateJson = new JSONObject(); final Drawable d = (Drawable) StateListDrawable.class.getMethod("getStateDrawable", Integer.TYPE).invoke(stateList, i); final int [] states = (int[]) StateListDrawable.class.getMethod("getStateSet", Integer.TYPE).invoke(stateList, i); + if (states == null) + continue; stateJson.put("states", getStatesList(states)); stateJson.put("drawable", getDrawable(d, filename+"__"+getStatesName(states))); array.put(stateJson); @@ -658,9 +666,7 @@ public class ExtractStyle { int [] intArray=(int[]) gradientStateClass.getField("mColors").get(obj); json.put("colors",getJsonArray(intArray, 0, intArray.length)); json.put("positions",getJsonArray((float[]) gradientStateClass.getField("mPositions").get(obj))); - json.put("solidColor",gradientStateClass.getField("mSolidColor").getInt(obj)); json.put("strokeWidth",gradientStateClass.getField("mStrokeWidth").getInt(obj)); - json.put("strokeColor",gradientStateClass.getField("mStrokeColor").getInt(obj)); json.put("strokeDashWidth",gradientStateClass.getField("mStrokeDashWidth").getFloat(obj)); json.put("strokeDashGap",gradientStateClass.getField("mStrokeDashGap").getFloat(obj)); json.put("radius",gradientStateClass.getField("mRadius").getFloat(obj)); @@ -676,6 +682,10 @@ public class ExtractStyle { json.put("thicknessRatio",gradientStateClass.getField("mThicknessRatio").getFloat(obj)); json.put("innerRadius",gradientStateClass.getField("mInnerRadius").getInt(obj)); json.put("thickness",gradientStateClass.getField("mThickness").getInt(obj)); + if (Build.VERSION.SDK_INT < 20) { + json.put("solidColor",gradientStateClass.getField("mSolidColor").getInt(obj)); + json.put("strokeColor",gradientStateClass.getField("mStrokeColor").getInt(obj)); + } } catch (Exception e) { e.printStackTrace(); } @@ -789,6 +799,8 @@ public class ExtractStyle { { Field mNativeChunk = np.getClass().getDeclaredField("mNativeChunk"); mNativeChunk.setAccessible(true); + if (Build.VERSION.SDK_INT > 19) + return getJsonChunkInfo(extractNativeChunkInfo20(mNativeChunk.getLong(np))); return getJsonChunkInfo(extractNativeChunkInfo(mNativeChunk.getInt(np))); } } -- cgit v1.2.3