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

Commit a30547b1 authored by Marzia Favaro's avatar Marzia Favaro
Browse files

Handle exception for unknown component names.

Fix: 265293214
Test: checked for unhandled exceptions reproducing b/265293214
Change-Id: I369a382394b695ebbe3db10eefecec8b30ff084b
parent ba2afc5b
Loading
Loading
Loading
Loading
+32 −54
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.content.res.XmlResourceParser;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.Xml;
import android.view.InflateException;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -137,16 +138,9 @@ public class AnimationUtils {
        try {
            parser = context.getResources().getAnimation(id);
            return createAnimationFromXml(context, parser);
        } catch (XmlPullParserException ex) {
            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
                    Integer.toHexString(id));
            rnf.initCause(ex);
            throw rnf;
        } catch (IOException ex) {
            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
                    Integer.toHexString(id));
            rnf.initCause(ex);
            throw rnf;
        } catch (XmlPullParserException | IOException | InflateException ex) {
            throw new NotFoundException(
                    "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
        } finally {
            if (parser != null) parser.close();
        }
@@ -159,8 +153,9 @@ public class AnimationUtils {
    }

    @UnsupportedAppUsage
    private static Animation createAnimationFromXml(Context c, XmlPullParser parser,
            AnimationSet parent, AttributeSet attrs) throws XmlPullParserException, IOException {
    private static Animation createAnimationFromXml(
            Context c, XmlPullParser parser, AnimationSet parent, AttributeSet attrs)
            throws XmlPullParserException, IOException, InflateException {

        Animation anim = null;

@@ -193,7 +188,7 @@ public class AnimationUtils {
            } else if (name.equals("extend")) {
                anim = new ExtendAnimation(c, attrs);
            } else {
                throw new RuntimeException("Unknown animation name: " + parser.getName());
                throw new InflateException("Unknown animation name: " + parser.getName());
            }

            if (parent != null) {
@@ -220,29 +215,24 @@ public class AnimationUtils {
        try {
            parser = context.getResources().getAnimation(id);
            return createLayoutAnimationFromXml(context, parser);
        } catch (XmlPullParserException ex) {
            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
                    Integer.toHexString(id));
            rnf.initCause(ex);
            throw rnf;
        } catch (IOException ex) {
            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
                    Integer.toHexString(id));
            rnf.initCause(ex);
            throw rnf;
        } catch (XmlPullParserException | IOException | InflateException ex) {
            throw new NotFoundException(
                    "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
        } finally {
            if (parser != null) parser.close();
        }
    }

    private static LayoutAnimationController createLayoutAnimationFromXml(Context c,
            XmlPullParser parser) throws XmlPullParserException, IOException {
    private static LayoutAnimationController createLayoutAnimationFromXml(
            Context c, XmlPullParser parser)
            throws XmlPullParserException, IOException, InflateException {

        return createLayoutAnimationFromXml(c, parser, Xml.asAttributeSet(parser));
    }

    private static LayoutAnimationController createLayoutAnimationFromXml(Context c,
            XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, IOException {
    private static LayoutAnimationController createLayoutAnimationFromXml(
            Context c, XmlPullParser parser, AttributeSet attrs)
            throws XmlPullParserException, IOException, InflateException {

        LayoutAnimationController controller = null;

@@ -263,7 +253,7 @@ public class AnimationUtils {
            } else if ("gridLayoutAnimation".equals(name)) {
                controller = new GridLayoutAnimationController(c, attrs);
            } else {
                throw new RuntimeException("Unknown layout animation name: " + name);
                throw new InflateException("Unknown layout animation name: " + name);
            }
        }

@@ -342,16 +332,9 @@ public class AnimationUtils {
        try {
            parser = context.getResources().getAnimation(id);
            return createInterpolatorFromXml(context.getResources(), context.getTheme(), parser);
        } catch (XmlPullParserException ex) {
            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
                    Integer.toHexString(id));
            rnf.initCause(ex);
            throw rnf;
        } catch (IOException ex) {
            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
                    Integer.toHexString(id));
            rnf.initCause(ex);
            throw rnf;
        } catch (XmlPullParserException | IOException | InflateException ex) {
            throw new NotFoundException(
                    "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
        } finally {
            if (parser != null) parser.close();
        }
@@ -372,25 +355,20 @@ public class AnimationUtils {
        try {
            parser = res.getAnimation(id);
            return createInterpolatorFromXml(res, theme, parser);
        } catch (XmlPullParserException ex) {
            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
                    Integer.toHexString(id));
            rnf.initCause(ex);
            throw rnf;
        } catch (IOException ex) {
            NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" +
                    Integer.toHexString(id));
            rnf.initCause(ex);
            throw rnf;
        } catch (XmlPullParserException | IOException | InflateException ex) {
            throw new NotFoundException(
                    "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
        } finally {
            if (parser != null)
            if (parser != null) {
                parser.close();
            }
        }

    }

    private static Interpolator createInterpolatorFromXml(Resources res, Theme theme, XmlPullParser parser)
            throws XmlPullParserException, IOException {
    private static Interpolator createInterpolatorFromXml(
            Resources res, Theme theme, XmlPullParser parser)
            throws XmlPullParserException, IOException, InflateException {

        BaseInterpolator interpolator = null;

@@ -430,7 +408,7 @@ public class AnimationUtils {
            } else if (name.equals("pathInterpolator")) {
                interpolator = new PathInterpolator(res, theme, attrs);
            } else {
                throw new RuntimeException("Unknown interpolator name: " + parser.getName());
                throw new InflateException("Unknown interpolator name: " + parser.getName());
            }
        }
        return interpolator;