diff options
| author | Winson Chiu <chiuwinson@google.com> | 2020-05-01 20:20:49 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-05-01 20:20:49 +0000 |
| commit | 2728af853a0648fb0dbdcad309fe603a87ea3557 (patch) | |
| tree | 9cb0c9d585dc442ca3ff3aaf068d444e926190eb /core/java | |
| parent | 7405357b530b8f9c444975910f8f0ee24e2fa990 (diff) | |
| parent | b58595b767ca2364cf2189046fc6c40267ef03e5 (diff) | |
Merge "Add skip functionality to package parsing" into rvc-dev
Diffstat (limited to 'core/java')
5 files changed, 26 insertions, 6 deletions
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 5795cd24f4b1..539e097504d6 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -1561,6 +1561,14 @@ public abstract class PackageManager { */ public static final int INSTALL_PARSE_FAILED_RESOURCES_ARSC_COMPRESSED = -124; + /** + * Installation failed return code: the package was skipped and should be ignored. + * + * The reason for the skip is undefined. + * @hide + */ + public static final int INSTALL_PARSE_FAILED_SKIPPED = -125; + /** @hide */ @IntDef(flag = true, prefix = { "DELETE_" }, value = { DELETE_KEEP_DATA, diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index addac9853f92..3b3521f834aa 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -2001,6 +2001,7 @@ public class PackageParser { Slog.i(TAG, "Skipping target and overlay pair " + pkg.mOverlayTarget + " and " + pkg.baseCodePath+ ": overlay ignored due to required system property: " + propName + " with value: " + propValue); + mParseError = PackageManager.INSTALL_PARSE_FAILED_SKIPPED; return null; } diff --git a/core/java/android/content/pm/parsing/ParsingPackageUtils.java b/core/java/android/content/pm/parsing/ParsingPackageUtils.java index 197ad7412a1f..d3d15c82dd1b 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageUtils.java +++ b/core/java/android/content/pm/parsing/ParsingPackageUtils.java @@ -2347,14 +2347,12 @@ public class ParsingPackageUtils { String propValue = sa.getString( R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyValue); if (!PackageParser.checkRequiredSystemProperties(propName, propValue)) { - Slog.i(TAG, "Skipping target and overlay pair " + target + " and " + String message = "Skipping target and overlay pair " + target + " and " + pkg.getBaseCodePath() + ": overlay ignored due to required system property: " - + propName + " with value: " + propValue); - return input.error("Skipping target and overlay pair " + target + " and " - + pkg.getBaseCodePath() - + ": overlay ignored due to required system property: " - + propName + " with value: " + propValue); + + propName + " with value: " + propValue; + Slog.i(TAG, message); + return input.skip(message); } return input.success(pkg.setOverlay(true) diff --git a/core/java/android/content/pm/parsing/result/ParseInput.java b/core/java/android/content/pm/parsing/result/ParseInput.java index 6b659bea84f1..d5898b7f57a1 100644 --- a/core/java/android/content/pm/parsing/result/ParseInput.java +++ b/core/java/android/content/pm/parsing/result/ParseInput.java @@ -88,6 +88,14 @@ public interface ParseInput { */ ParseResult<?> enableDeferredError(String packageName, int targetSdkVersion); + /** + * This will assign errorCode to {@link PackageManager#INSTALL_PARSE_FAILED_SKIPPED, used for + * packages which should be ignored by the caller. + * + * @see #error(int, String, Exception) + */ + <ResultType> ParseResult<ResultType> skip(@NonNull String parseError); + /** @see #error(int, String, Exception) */ <ResultType> ParseResult<ResultType> error(int parseError); diff --git a/core/java/android/content/pm/parsing/result/ParseTypeImpl.java b/core/java/android/content/pm/parsing/result/ParseTypeImpl.java index b26bf71a61c5..61152061ae10 100644 --- a/core/java/android/content/pm/parsing/result/ParseTypeImpl.java +++ b/core/java/android/content/pm/parsing/result/ParseTypeImpl.java @@ -147,6 +147,11 @@ public class ParseTypeImpl implements ParseInput, ParseResult<Object> { } @Override + public <ResultType> ParseResult<ResultType> skip(@NonNull String parseError) { + return error(PackageManager.INSTALL_PARSE_FAILED_SKIPPED, parseError); + } + + @Override public <ResultType> ParseResult<ResultType> error(int parseError) { return error(parseError, null); } |
