Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 897f6dae authored by ztenghui's avatar ztenghui
Browse files

Support negative value in exponential data in the pathData.

Now "1e-5" will not be separated as "1e" and "-5".

Add one test for this use case.
Make sure we print out the pathData when path parsing has error.

b/17919923

Change-Id: I10a00ce21166cfb5a009c49c1a93f40eeb956d83
parent 4cc3e270
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -34,7 +34,11 @@ public class PathParser {
        Path path = new Path();
        PathDataNode[] nodes = createNodesFromPathData(pathData);
        if (nodes != null) {
            try {
                PathDataNode.nodesToPath(nodes, path);
            } catch (RuntimeException e) {
                throw new RuntimeException("Error in parsing " + pathData, e);
            }
            return path;
        }
        return null;
@@ -128,7 +132,12 @@ public class PathParser {

        while (end < s.length()) {
            c = s.charAt(end);
            if (((c - 'A') * (c - 'Z') <= 0) || (((c - 'a') * (c - 'z') <= 0))) {
            // Note that 'e' or 'E' are not valid path commands, but could be
            // used for floating point numbers' scientific notation.
            // Therefore, when searching for next command, we should ignore 'e'
            // and 'E'.
            if ((((c - 'A') * (c - 'Z') <= 0) || ((c - 'a') * (c - 'z') <= 0))
                    && c != 'e' && c != 'E') {
                return end;
            }
            end++;
@@ -188,8 +197,7 @@ public class PathParser {
            }
            return Arrays.copyOf(results, count);
        } catch (NumberFormatException e) {
            Log.e(LOGTAG, "error in parsing \"" + s + "\"");
            throw e;
            throw new RuntimeException("error in parsing \"" + s + "\"", e);
        }
    }

@@ -206,7 +214,10 @@ public class PathParser {
        boolean foundSeparator = false;
        result.mEndWithNegOrDot = false;
        boolean secondDot = false;
        boolean isExponential = false;
        for (; currentIndex < s.length(); currentIndex++) {
            boolean isPrevExponential = isExponential;
            isExponential = false;
            char currentChar = s.charAt(currentIndex);
            switch (currentChar) {
                case ' ':
@@ -214,7 +225,8 @@ public class PathParser {
                    foundSeparator = true;
                    break;
                case '-':
                    if (currentIndex != start) {
                    // The negative sign following a 'e' or 'E' is not a separator.
                    if (currentIndex != start && !isPrevExponential) {
                        foundSeparator = true;
                        result.mEndWithNegOrDot = true;
                    }
@@ -228,6 +240,10 @@ public class PathParser {
                        result.mEndWithNegOrDot = true;
                    }
                    break;
                case 'e':
                case 'E':
                    isExponential = true;
                    break;
            }
            if (foundSeparator) {
                break;
+86 −0
Original line number Diff line number Diff line
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <set
        android:ordering="sequentially" >
        <objectAnimator
            android:duration="833"
            android:propertyName="translateX"
            android:valueFrom="144"
            android:valueTo="144"
            android:interpolator="@android:interpolator/linear" />
        <objectAnimator
            android:duration="100"
            android:propertyName="translateX"
            android:valueFrom="144"
            android:valueTo="147.411817411"
            android:interpolator="@interpolator/ic_open_ball_start_translatex_interpolator" />
    </set>
    <set
        android:ordering="sequentially" >
        <objectAnimator
            android:duration="167"
            android:propertyName="translateY"
            android:valueFrom="144.58457376"
            android:valueTo="144.58457376"
            android:interpolator="@android:interpolator/linear" />
        <objectAnimator
            android:duration="333"
            android:propertyName="translateY"
            android:valueFrom="144.58457376"
            android:valueTo="196.11111456"
            android:interpolator="@interpolator/ic_open_ball_start_translatey_interpolator_1" />
        <objectAnimator
            android:duration="333"
            android:propertyName="translateY"
            android:valueFrom="196.11111456"
            android:valueTo="196.11111456"
            android:interpolator="@interpolator/ic_open_ball_start_translatey_interpolator_2" />
        <objectAnimator
            android:duration="100"
            android:propertyName="translateY"
            android:valueFrom="196.11111456"
            android:valueTo="129.468428513"
            android:interpolator="@interpolator/ic_open_ball_start_translatey_interpolator_3" />
    </set>
    <set
        android:ordering="sequentially" >
        <objectAnimator
            android:duration="167"
            android:propertyName="scaleX"
            android:valueFrom="0"
            android:valueTo="0.71187984"
            android:interpolator="@interpolator/ic_open_ball_start_scalex_interpolator_1" />
        <objectAnimator
            android:duration="667"
            android:propertyName="scaleX"
            android:valueFrom="0.71187984"
            android:valueTo="0.71187984"
            android:interpolator="@interpolator/ic_open_ball_start_scalex_interpolator_2" />
        <objectAnimator
            android:duration="100"
            android:propertyName="scaleX"
            android:valueFrom="0.71187984"
            android:valueTo="0.586201598553"
            android:interpolator="@interpolator/ic_open_ball_start_scalex_interpolator_3" />
    </set>
    <set
        android:ordering="sequentially" >
        <objectAnimator
            android:duration="167"
            android:propertyName="scaleY"
            android:valueFrom="0"
            android:valueTo="0.71187984"
            android:interpolator="@interpolator/ic_open_ball_start_scaley_interpolator_1" />
        <objectAnimator
            android:duration="667"
            android:propertyName="scaleY"
            android:valueFrom="0.71187984"
            android:valueTo="0.71187984"
            android:interpolator="@interpolator/ic_open_ball_start_scaley_interpolator_2" />
        <objectAnimator
            android:duration="100"
            android:propertyName="scaleY"
            android:valueFrom="0.71187984"
            android:valueTo="0.586201598553"
            android:interpolator="@interpolator/ic_open_ball_start_scaley_interpolator_3" />
    </set>
</set>
+17 −0
Original line number Diff line number Diff line
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <set
        android:ordering="sequentially" >
        <objectAnimator
            android:duration="933"
            android:propertyName="rotation"
            android:valueFrom="-90"
            android:valueTo="-90"
            android:interpolator="@android:interpolator/linear" />
        <objectAnimator
            android:duration="1367"
            android:propertyName="rotation"
            android:valueFrom="-90"
            android:valueTo="-87"
            android:interpolator="@android:interpolator/linear" />
    </set>
</set>
+48 −0
Original line number Diff line number Diff line
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <set
        android:ordering="sequentially" >
        <objectAnimator
            android:duration="500"
            android:propertyName="pathData"
            android:valueFrom="M 0,-17.3838043213 c -9.625,0.0 -17.0795440674,8.28025817871 -17.0795440674,17.4052734375 c 0.0,9.75645446777 7.51704406738,17.6295623779 17.0795440674,17.353515625 c 11.5579986572,-0.333648681641 17.2784118652,-8.72853088379 17.2784118652,-17.353515625 c 0.0,-8.62501525879 -7.65341186523,-17.4052734375 -17.2784118652,-17.4052734375 Z"
            android:valueTo="M 0,-17.3838043213 c -9.625,0.0 -17.0795440674,8.28025817871 -17.0795440674,17.4052734375 c 0.0,9.75645446777 7.51704406738,17.6295623779 17.0795440674,17.353515625 c 11.5579986572,-0.333648681641 17.2784118652,-8.72853088379 17.2784118652,-17.353515625 c 0.0,-8.62501525879 -7.65341186523,-17.4052734375 -17.2784118652,-17.4052734375 Z"
            android:valueType="pathType"
            android:interpolator="@android:interpolator/linear" />
        <objectAnimator
            android:duration="267"
            android:propertyName="pathData"
            android:valueFrom="M 0,-17.3838043213 c -9.625,0.0 -17.0795440674,8.28025817871 -17.0795440674,17.4052734375 c 0.0,9.75645446777 7.51704406738,17.6295623779 17.0795440674,17.353515625 c 11.5579986572,-0.333648681641 17.2784118652,-8.72853088379 17.2784118652,-17.353515625 c 0.0,-8.62501525879 -7.65341186523,-17.4052734375 -17.2784118652,-17.4052734375 Z"
            android:valueTo="M 0,-6 c -9.625,0 -23.5648803711,6.97859191895 -23.5648803711,16.1035919189 c 0.0,8.875 6.62738037109,8.39640808105 23.5648803711,8.39640808105 c 17.0625,0.0 23.8825073242,0.375 23.8825073242,-8.25 c 0.0,-8.625 -14.2574920654,-16.25 -23.8825073242,-16.25 Z"
            android:valueType="pathType"
            android:interpolator="@interpolator/ic_open_path_1_pathdata_interpolator_1" />
        <objectAnimator
            android:duration="33"
            android:propertyName="pathData"
            android:valueFrom="M 0,-6 c -9.625,0 -23.5648803711,6.97859191895 -23.5648803711,16.1035919189 c 0.0,8.875 6.62738037109,8.39640808105 23.5648803711,8.39640808105 c 17.0625,0.0 23.8825073242,0.375 23.8825073242,-8.25 c 0.0,-8.625 -14.2574920654,-16.25 -23.8825073242,-16.25 Z"
            android:valueTo="M 0,-6 c -9.625,0 -23.5648803711,6.97859191895 -23.5648803711,16.1035919189 c 0.0,8.875 6.62738037109,8.39640808105 23.5648803711,8.39640808105 c 17.0625,0.0 23.8825073242,0.375 23.8825073242,-8.25 c 0.0,-8.625 -14.2574920654,-16.25 -23.8825073242,-16.25 Z"
            android:valueType="pathType"
            android:interpolator="@interpolator/ic_open_path_1_pathdata_interpolator_2" />
        <objectAnimator
            android:duration="67"
            android:propertyName="pathData"
            android:valueFrom="M 0,-6 c -9.625,0 -23.5648803711,6.97859191895 -23.5648803711,16.1035919189 c 0.0,8.875 6.62738037109,8.39640808105 23.5648803711,8.39640808105 c 17.0625,0.0 23.8825073242,0.375 23.8825073242,-8.25 c 0.0,-8.625 -14.2574920654,-16.25 -23.8825073242,-16.25 Z"
            android:valueTo="M 0,-17.3838043213 c -9.625,0.0 -17.0795440674,8.28025817871 -17.0795440674,17.4052734375 c 0.0,9.75645446777 7.51704406738,17.6295623779 17.0795440674,17.353515625 c 11.5579986572,-0.333648681641 17.2784118652,-8.72853088379 17.2784118652,-17.353515625 c 0.0,-8.62501525879 -7.65341186523,-17.4052734375 -17.2784118652,-17.4052734375 Z"
            android:valueType="pathType"
            android:interpolator="@interpolator/ic_open_path_1_pathdata_interpolator_3" />
    </set>
    <set
        android:ordering="sequentially" >
        <objectAnimator
            android:duration="933"
            android:propertyName="fillAlpha"
            android:valueFrom="1"
            android:valueTo="1"
            android:interpolator="@android:interpolator/linear" />
        <objectAnimator
            android:duration="17"
            android:propertyName="fillAlpha"
            android:valueFrom="1"
            android:valueTo="0"
            android:interpolator="@android:interpolator/linear" />
    </set>
</set>
+74 −0
Original line number Diff line number Diff line
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <set
        android:ordering="sequentially" >
        <objectAnimator
            android:duration="917"
            android:propertyName="strokeAlpha"
            android:valueFrom="0"
            android:valueTo="0"
            android:interpolator="@android:interpolator/linear" />
        <objectAnimator
            android:duration="17"
            android:propertyName="strokeAlpha"
            android:valueFrom="0"
            android:valueTo="1"
            android:interpolator="@android:interpolator/linear" />
    </set>
    <set
        android:ordering="sequentially" >
        <objectAnimator
            android:duration="917"
            android:propertyName="strokeWidth"
            android:valueFrom="0"
            android:valueTo="0"
            android:interpolator="@android:interpolator/linear" />
        <objectAnimator
            android:duration="17"
            android:propertyName="strokeWidth"
            android:valueFrom="0"
            android:valueTo="20"
            android:interpolator="@android:interpolator/linear" />
    </set>
    <set
        android:ordering="sequentially" >
        <objectAnimator
            android:duration="933"
            android:propertyName="trimPathStart"
            android:valueFrom="0.06"
            android:valueTo="0.06"
            android:interpolator="@android:interpolator/linear" />
        <objectAnimator
            android:duration="383"
            android:propertyName="trimPathStart"
            android:valueFrom="0.06"
            android:valueTo="0.19231"
            android:interpolator="@android:interpolator/linear" />
        <objectAnimator
            android:duration="983"
            android:propertyName="trimPathStart"
            android:valueFrom="0.19231"
            android:valueTo="0.999"
            android:interpolator="@interpolator/ic_open_path_1_1_trimpathstart_interpolator_2" />
    </set>
    <set
        android:ordering="sequentially" >
        <objectAnimator
            android:duration="933"
            android:propertyName="trimPathEnd"
            android:valueFrom="0.061"
            android:valueTo="0.061"
            android:interpolator="@android:interpolator/linear" />
        <objectAnimator
            android:duration="300"
            android:propertyName="trimPathEnd"
            android:valueFrom="0.061"
            android:valueTo="0.19231"
            android:interpolator="@android:interpolator/linear" />
        <objectAnimator
            android:duration="1067"
            android:propertyName="trimPathEnd"
            android:valueFrom="0.19231"
            android:valueTo="1"
            android:interpolator="@interpolator/ic_open_path_1_1_trimpathend_interpolator_2" />
    </set>
</set>
Loading