From 2d59d14b308ae8b79f3b4557c9ac92832f9ad19d Mon Sep 17 00:00:00 2001 From: YorkShen Date: Mon, 27 Mar 2017 11:12:36 +0800 Subject: [PATCH] * [android] Use Pair instead of Exception in WXResourceUtils to imply an error occur. --- .../taobao/weex/utils/WXResourceUtils.java | 105 ++++++++---------- .../weex/utils/WXResourceUtilsTest.java | 13 +-- 2 files changed, 50 insertions(+), 68 deletions(-) diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java index cafdb531bb..4be2fbdb59 100755 --- a/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java +++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java @@ -208,6 +208,7 @@ import android.graphics.LinearGradient; import android.graphics.Shader; import android.support.annotation.NonNull; +import android.support.v4.util.Pair; import android.text.TextUtils; import java.util.ArrayList; @@ -424,18 +425,18 @@ public static int getColor(String color, int defaultColor) { color = color.trim(); //remove non visible codes int resultColor = defaultColor; - try { - ColorConvertHandler[] handlers = ColorConvertHandler.values(); - for (ColorConvertHandler handler : handlers) { - try { - resultColor = handler.handle(color); + Pair result; + ColorConvertHandler[] handlers = ColorConvertHandler.values(); + for (ColorConvertHandler handler : handlers) { + try { + result = handler.handle(color); + if (result.first) { + resultColor = result.second; break; - } catch (IllegalArgumentException e) { - WXLogUtils.v("Color", "Color convert fails"); } + } catch (RuntimeException e) { + WXLogUtils.v("Color_Parser", WXLogUtils.getStackTrace(e)); } - } catch (Exception e) { - WXLogUtils.e("WXResourceUtils getColor failed: " + color); } return resultColor; } @@ -548,70 +549,58 @@ private static float[] parseGradientDirection(String direction, float width, flo enum ColorConvertHandler { NAMED_COLOR_HANDLER { @Override - int handle(String rawColor) { - try { - return colorMap.get(rawColor); - } catch (RuntimeException e) { - throw new IllegalArgumentException(e); + @NonNull Pair handle(String rawColor) { + if (colorMap.containsKey(rawColor)) { + return new Pair<>(Boolean.TRUE, colorMap.get(rawColor)); + } else { + return new Pair<>(Boolean.FALSE, Color.TRANSPARENT); } } }, RGB_HANDLER { @Override - int handle(String rawColor) { - try { - if (rawColor.length() == 4) { - //#eee, #333 - int r, g, b; - r = Integer.parseInt(rawColor.substring(1, 2), HEX); - g = Integer.parseInt(rawColor.substring(2, 3), HEX); - b = Integer.parseInt(rawColor.substring(3, 4), HEX); - return Color.rgb(r + (r << 4), g + (g << 4), b + (b << 4)); - } else if (rawColor.length() == 7 || rawColor.length() == 9) { - //#eeeeee, #333333 - return Color.parseColor(rawColor); - } else { - throw new IllegalArgumentException("ColorConvertHandler invalid color: " + rawColor); - } - } catch (RuntimeException e) { - throw new IllegalArgumentException(e); + @NonNull Pair handle(String rawColor) { + if (rawColor.length() == 4) { + //#eee, #333 + int r, g, b; + r = Integer.parseInt(rawColor.substring(1, 2), HEX); + g = Integer.parseInt(rawColor.substring(2, 3), HEX); + b = Integer.parseInt(rawColor.substring(3, 4), HEX); + return new Pair<>(Boolean.TRUE, Color.rgb(r + (r << 4), g + (g << 4), b + (b << 4))); + } else if (rawColor.length() == 7 || rawColor.length() == 9) { + //#eeeeee, #333333 + return new Pair<>(Boolean.TRUE, Color.parseColor(rawColor)); + } else { + return new Pair<>(Boolean.FALSE, Color.TRANSPARENT); } } }, FUNCTIONAL_RGB_HANDLER { @Override - int handle(String rawColor) { - try { - SingleFunctionParser functionParser = new SingleFunctionParser<>(rawColor, FUNCTIONAL_RGB_MAPPER); - List rgb = functionParser.parse(RGB); - if (rgb.size() == RGB_SIZE) { - return Color.rgb(rgb.get(0), rgb.get(1), rgb.get(2)); - } else { - throw new IllegalArgumentException("Conversion of functional RGB fails"); - } - } catch (RuntimeException e) { - throw new IllegalArgumentException(e); + @NonNull Pair handle(String rawColor) { + SingleFunctionParser functionParser = new SingleFunctionParser<>(rawColor, FUNCTIONAL_RGB_MAPPER); + List rgb = functionParser.parse(RGB); + if (rgb.size() == RGB_SIZE) { + return new Pair<>(Boolean.TRUE, Color.rgb(rgb.get(0), rgb.get(1), rgb.get(2))); + } else { + return new Pair<>(Boolean.FALSE, Color.TRANSPARENT); } } }, FUNCTIONAL_RGBA_HANDLER { @Override - int handle(String rawColor) { - try { - SingleFunctionParser functionParser = new SingleFunctionParser<>(rawColor, FUNCTIONAL_RGBA_MAPPER); - List rgba = functionParser.parse(RGBA); - if (rgba.size() == RGBA_SIZE) { - return Color.argb( - parseAlpha(rgba.get(3).floatValue()), - rgba.get(0).intValue(), - rgba.get(1).intValue(), - rgba.get(2).intValue()); - } else { - throw new IllegalArgumentException("Conversion of functional RGBA fails"); - } - } catch (RuntimeException e) { - throw new IllegalArgumentException(e); + @NonNull Pair handle(String rawColor) { + SingleFunctionParser functionParser = new SingleFunctionParser<>(rawColor, FUNCTIONAL_RGBA_MAPPER); + List rgba = functionParser.parse(RGBA); + if (rgba.size() == RGBA_SIZE) { + return new Pair<>(Boolean.TRUE, Color.argb( + parseAlpha(rgba.get(3).floatValue()), + rgba.get(0).intValue(), + rgba.get(1).intValue(), + rgba.get(2).intValue())); + } else { + return new Pair<>(Boolean.FALSE, Color.TRANSPARENT); } } }; @@ -622,7 +611,7 @@ int handle(String rawColor) { * @param rawColor color, maybe functional RGB(RGBA), #RGB, keywords color or transparent * @return #RRGGBB or #AARRGGBB */ - abstract int handle(String rawColor) throws IllegalArgumentException; + @NonNull abstract Pair handle(String rawColor); /** * Parse alpha gradient of color from range 0-1 to range 0-255 diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXResourceUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXResourceUtilsTest.java index 43918a4317..99a181756b 100644 --- a/android/sdk/src/test/java/com/taobao/weex/utils/WXResourceUtilsTest.java +++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXResourceUtilsTest.java @@ -206,12 +206,9 @@ import android.graphics.Shader; -import com.taobao.weappplus_sdk.BuildConfig; - -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.RobolectricGradleTestRunner; +import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static org.junit.Assert.assertEquals; @@ -221,14 +218,10 @@ /** * Created by caolijie on 16/8/4. */ -@RunWith(RobolectricGradleTestRunner.class) -@Config(constants = BuildConfig.class,sdk = 19) +@RunWith(RobolectricTestRunner.class) +@Config(manifest = Config.NONE) public class WXResourceUtilsTest { - @Before - public void setUp() throws Exception { - } - @Test public void testColor1() throws Exception { int color = WXResourceUtils.getColor("#ffffff");