Merge "Handle exception for unknown component names." into udc-dev

This commit is contained in:
Marzia Favaro
2023-04-13 12:35:59 +00:00
committed by Android (Google) Code Review
2 changed files with 36 additions and 56 deletions

View File

@@ -28,6 +28,7 @@ import android.content.res.XmlResourceParser;
import android.os.SystemClock; import android.os.SystemClock;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Xml; import android.util.Xml;
import android.view.InflateException;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;
@@ -137,16 +138,9 @@ public class AnimationUtils {
try { try {
parser = context.getResources().getAnimation(id); parser = context.getResources().getAnimation(id);
return createAnimationFromXml(context, parser); return createAnimationFromXml(context, parser);
} catch (XmlPullParserException ex) { } catch (XmlPullParserException | IOException ex) {
NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" + throw new NotFoundException(
Integer.toHexString(id)); "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
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;
} finally { } finally {
if (parser != null) parser.close(); if (parser != null) parser.close();
} }
@@ -159,8 +153,9 @@ public class AnimationUtils {
} }
@UnsupportedAppUsage @UnsupportedAppUsage
private static Animation createAnimationFromXml(Context c, XmlPullParser parser, private static Animation createAnimationFromXml(
AnimationSet parent, AttributeSet attrs) throws XmlPullParserException, IOException { Context c, XmlPullParser parser, AnimationSet parent, AttributeSet attrs)
throws XmlPullParserException, IOException, InflateException {
Animation anim = null; Animation anim = null;
@@ -193,7 +188,7 @@ public class AnimationUtils {
} else if (name.equals("extend")) { } else if (name.equals("extend")) {
anim = new ExtendAnimation(c, attrs); anim = new ExtendAnimation(c, attrs);
} else { } else {
throw new RuntimeException("Unknown animation name: " + parser.getName()); throw new InflateException("Unknown animation name: " + parser.getName());
} }
if (parent != null) { if (parent != null) {
@@ -220,29 +215,24 @@ public class AnimationUtils {
try { try {
parser = context.getResources().getAnimation(id); parser = context.getResources().getAnimation(id);
return createLayoutAnimationFromXml(context, parser); return createLayoutAnimationFromXml(context, parser);
} catch (XmlPullParserException ex) { } catch (XmlPullParserException | IOException | InflateException ex) {
NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" + throw new NotFoundException(
Integer.toHexString(id)); "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
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;
} finally { } finally {
if (parser != null) parser.close(); if (parser != null) parser.close();
} }
} }
private static LayoutAnimationController createLayoutAnimationFromXml(Context c, private static LayoutAnimationController createLayoutAnimationFromXml(
XmlPullParser parser) throws XmlPullParserException, IOException { Context c, XmlPullParser parser)
throws XmlPullParserException, IOException, InflateException {
return createLayoutAnimationFromXml(c, parser, Xml.asAttributeSet(parser)); return createLayoutAnimationFromXml(c, parser, Xml.asAttributeSet(parser));
} }
private static LayoutAnimationController createLayoutAnimationFromXml(Context c, private static LayoutAnimationController createLayoutAnimationFromXml(
XmlPullParser parser, AttributeSet attrs) throws XmlPullParserException, IOException { Context c, XmlPullParser parser, AttributeSet attrs)
throws XmlPullParserException, IOException, InflateException {
LayoutAnimationController controller = null; LayoutAnimationController controller = null;
@@ -263,7 +253,7 @@ public class AnimationUtils {
} else if ("gridLayoutAnimation".equals(name)) { } else if ("gridLayoutAnimation".equals(name)) {
controller = new GridLayoutAnimationController(c, attrs); controller = new GridLayoutAnimationController(c, attrs);
} else { } 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 { try {
parser = context.getResources().getAnimation(id); parser = context.getResources().getAnimation(id);
return createInterpolatorFromXml(context.getResources(), context.getTheme(), parser); return createInterpolatorFromXml(context.getResources(), context.getTheme(), parser);
} catch (XmlPullParserException ex) { } catch (XmlPullParserException | IOException | InflateException ex) {
NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" + throw new NotFoundException(
Integer.toHexString(id)); "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
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;
} finally { } finally {
if (parser != null) parser.close(); if (parser != null) parser.close();
} }
@@ -367,30 +350,26 @@ public class AnimationUtils {
* @throws NotFoundException * @throws NotFoundException
* @hide * @hide
*/ */
public static Interpolator loadInterpolator(Resources res, Theme theme, int id) throws NotFoundException { public static Interpolator loadInterpolator(Resources res, Theme theme, int id)
throws NotFoundException {
XmlResourceParser parser = null; XmlResourceParser parser = null;
try { try {
parser = res.getAnimation(id); parser = res.getAnimation(id);
return createInterpolatorFromXml(res, theme, parser); return createInterpolatorFromXml(res, theme, parser);
} catch (XmlPullParserException ex) { } catch (XmlPullParserException | IOException | InflateException ex) {
NotFoundException rnf = new NotFoundException("Can't load animation resource ID #0x" + throw new NotFoundException(
Integer.toHexString(id)); "Can't load animation resource ID #0x" + Integer.toHexString(id), ex);
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;
} finally { } finally {
if (parser != null) if (parser != null) {
parser.close(); parser.close();
} }
}
} }
private static Interpolator createInterpolatorFromXml(Resources res, Theme theme, XmlPullParser parser) private static Interpolator createInterpolatorFromXml(
throws XmlPullParserException, IOException { Resources res, Theme theme, XmlPullParser parser)
throws XmlPullParserException, IOException, InflateException {
BaseInterpolator interpolator = null; BaseInterpolator interpolator = null;
@@ -430,7 +409,7 @@ public class AnimationUtils {
} else if (name.equals("pathInterpolator")) { } else if (name.equals("pathInterpolator")) {
interpolator = new PathInterpolator(res, theme, attrs); interpolator = new PathInterpolator(res, theme, attrs);
} else { } else {
throw new RuntimeException("Unknown interpolator name: " + parser.getName()); throw new InflateException("Unknown interpolator name: " + parser.getName());
} }
} }
return interpolator; return interpolator;

View File

@@ -50,6 +50,7 @@ import android.media.Image;
import android.media.ImageReader; import android.media.ImageReader;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.util.Slog; import android.util.Slog;
import android.view.InflateException;
import android.view.SurfaceControl; import android.view.SurfaceControl;
import android.view.WindowManager.LayoutParams; import android.view.WindowManager.LayoutParams;
import android.view.WindowManager.TransitionOldType; import android.view.WindowManager.TransitionOldType;
@@ -1264,7 +1265,7 @@ public class TransitionAnimation {
public static Animation loadAnimationSafely(Context context, int resId, String tag) { public static Animation loadAnimationSafely(Context context, int resId, String tag) {
try { try {
return AnimationUtils.loadAnimation(context, resId); return AnimationUtils.loadAnimation(context, resId);
} catch (Resources.NotFoundException e) { } catch (Resources.NotFoundException | InflateException e) {
Slog.w(tag, "Unable to load animation resource", e); Slog.w(tag, "Unable to load animation resource", e);
return null; return null;
} }