Merge "Return default value safely without throw out exception." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
7ab80ae74f
@@ -60,6 +60,7 @@ import java.util.List;
|
|||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.IntSupplier;
|
import java.util.function.IntSupplier;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
import java.util.function.UnaryOperator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Util class to create the view for a splash screen content.
|
* Util class to create the view for a splash screen content.
|
||||||
@@ -207,6 +208,15 @@ public class SplashscreenContentDrawer {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static <T> T safeReturnAttrDefault(UnaryOperator<T> getMethod, T def) {
|
||||||
|
try {
|
||||||
|
return getMethod.apply(def);
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
Slog.w(TAG, "Get attribute fail, return default: " + e.getMessage());
|
||||||
|
return def;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the {@link SplashScreenWindowAttrs} from {@code context} and fill them into
|
* Get the {@link SplashScreenWindowAttrs} from {@code context} and fill them into
|
||||||
* {@code attrs}.
|
* {@code attrs}.
|
||||||
@@ -215,16 +225,18 @@ public class SplashscreenContentDrawer {
|
|||||||
final TypedArray typedArray = context.obtainStyledAttributes(
|
final TypedArray typedArray = context.obtainStyledAttributes(
|
||||||
com.android.internal.R.styleable.Window);
|
com.android.internal.R.styleable.Window);
|
||||||
attrs.mWindowBgResId = typedArray.getResourceId(R.styleable.Window_windowBackground, 0);
|
attrs.mWindowBgResId = typedArray.getResourceId(R.styleable.Window_windowBackground, 0);
|
||||||
attrs.mWindowBgColor = typedArray.getColor(
|
attrs.mWindowBgColor = safeReturnAttrDefault((def) -> typedArray.getColor(
|
||||||
R.styleable.Window_windowSplashScreenBackground, Color.TRANSPARENT);
|
R.styleable.Window_windowSplashScreenBackground, def),
|
||||||
attrs.mReplaceIcon = typedArray.getDrawable(
|
Color.TRANSPARENT);
|
||||||
R.styleable.Window_windowSplashScreenAnimatedIcon);
|
attrs.mReplaceIcon = safeReturnAttrDefault((def) -> typedArray.getDrawable(
|
||||||
attrs.mAnimationDuration = typedArray.getInt(
|
R.styleable.Window_windowSplashScreenAnimatedIcon), null);
|
||||||
R.styleable.Window_windowSplashScreenAnimationDuration, 0);
|
attrs.mAnimationDuration = safeReturnAttrDefault((def) -> typedArray.getInt(
|
||||||
attrs.mBrandingImage = typedArray.getDrawable(
|
R.styleable.Window_windowSplashScreenAnimationDuration, def), 0);
|
||||||
R.styleable.Window_windowSplashScreenBrandingImage);
|
attrs.mBrandingImage = safeReturnAttrDefault((def) -> typedArray.getDrawable(
|
||||||
attrs.mIconBgColor = typedArray.getColor(
|
R.styleable.Window_windowSplashScreenBrandingImage), null);
|
||||||
R.styleable.Window_windowSplashScreenIconBackgroundColor, Color.TRANSPARENT);
|
attrs.mIconBgColor = safeReturnAttrDefault((def) -> typedArray.getColor(
|
||||||
|
R.styleable.Window_windowSplashScreenIconBackgroundColor, def),
|
||||||
|
Color.TRANSPARENT);
|
||||||
typedArray.recycle();
|
typedArray.recycle();
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Slog.d(TAG, "window attributes color: "
|
Slog.d(TAG, "window attributes color: "
|
||||||
@@ -476,9 +488,14 @@ public class SplashscreenContentDrawer {
|
|||||||
drawable = layerDrawable.getDrawable(0);
|
drawable = layerDrawable.getDrawable(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mColorChecker = drawable instanceof ColorDrawable
|
if (drawable == null) {
|
||||||
? new SingleColorTester((ColorDrawable) drawable)
|
mColorChecker = new SingleColorTester(
|
||||||
: new ComplexDrawableTester(drawable, filterTransparent);
|
(ColorDrawable) createDefaultBackgroundDrawable());
|
||||||
|
} else {
|
||||||
|
mColorChecker = drawable instanceof ColorDrawable
|
||||||
|
? new SingleColorTester((ColorDrawable) drawable)
|
||||||
|
: new ComplexDrawableTester(drawable, filterTransparent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public float nonTransparentRatio() {
|
public float nonTransparentRatio() {
|
||||||
|
|||||||
Reference in New Issue
Block a user