Merge "Support multiple requiredSystemProperty in overlay" into rvc-dev am: ce0f9f7628

Change-Id: I3670339eac954ace328d6a3b07e2978b73e150e1
This commit is contained in:
TreeHugger Robot
2020-04-21 07:25:04 +00:00
committed by Automerger Merge Worker
3 changed files with 32 additions and 33 deletions

View File

@@ -1695,7 +1695,7 @@ public class PackageParser {
}
// Check to see if overlay should be excluded based on system property condition
if (!checkRequiredSystemProperty(requiredSystemPropertyName,
if (!checkRequiredSystemProperties(requiredSystemPropertyName,
requiredSystemPropertyValue)) {
Slog.i(TAG, "Skipping target and overlay pair " + targetPackage + " and "
+ codePath + ": overlay ignored due to required system property: "
@@ -1997,7 +1997,7 @@ public class PackageParser {
}
// check to see if overlay should be excluded based on system property condition
if (!checkRequiredSystemProperty(propName, propValue)) {
if (!checkRequiredSystemProperties(propName, propValue)) {
Slog.i(TAG, "Skipping target and overlay pair " + pkg.mOverlayTarget + " and "
+ pkg.baseCodePath+ ": overlay ignored due to required system property: "
+ propName + " with value: " + propValue);
@@ -2427,24 +2427,42 @@ public class PackageParser {
/**
* Returns {@code true} if both the property name and value are empty or if the given system
* property is set to the specified value. In all other cases, returns {@code false}
* property is set to the specified value. Properties can be one or more, and if properties are
* more than one, they must be separated by comma, and count of names and values must be equal,
* and also every given system property must be set to the corresponding value.
* In all other cases, returns {@code false}
*/
public static boolean checkRequiredSystemProperty(String propName, String propValue) {
if (TextUtils.isEmpty(propName) || TextUtils.isEmpty(propValue)) {
if (!TextUtils.isEmpty(propName) || !TextUtils.isEmpty(propValue)) {
public static boolean checkRequiredSystemProperties(@Nullable String rawPropNames,
@Nullable String rawPropValues) {
if (TextUtils.isEmpty(rawPropNames) || TextUtils.isEmpty(rawPropValues)) {
if (!TextUtils.isEmpty(rawPropNames) || !TextUtils.isEmpty(rawPropValues)) {
// malformed condition - incomplete
Slog.w(TAG, "Disabling overlay - incomplete property :'" + propName
+ "=" + propValue + "' - require both requiredSystemPropertyName"
+ " AND requiredSystemPropertyValue to be specified.");
Slog.w(TAG, "Disabling overlay - incomplete property :'" + rawPropNames
+ "=" + rawPropValues + "' - require both requiredSystemPropertyName"
+ " AND requiredSystemPropertyValue to be specified.");
return false;
}
// no valid condition set - so no exclusion criteria, overlay will be included.
return true;
}
// check property value - make sure it is both set and equal to expected value
final String currValue = SystemProperties.get(propName);
return (currValue != null && currValue.equals(propValue));
final String[] propNames = rawPropNames.split(",");
final String[] propValues = rawPropValues.split(",");
if (propNames.length != propValues.length) {
Slog.w(TAG, "Disabling overlay - property :'" + rawPropNames
+ "=" + rawPropValues + "' - require both requiredSystemPropertyName"
+ " AND requiredSystemPropertyValue lists to have the same size.");
return false;
}
for (int i = 0; i < propNames.length; i++) {
// Check property value: make sure it is both set and equal to expected value
final String currValue = SystemProperties.get(propNames[i]);
if (!TextUtils.equals(currValue, propValues[i])) {
return false;
}
}
return true;
}
/**

View File

@@ -413,7 +413,7 @@ public class ApkLiteParseUtils {
}
// Check to see if overlay should be excluded based on system property condition
if (!PackageParser.checkRequiredSystemProperty(requiredSystemPropertyName,
if (!PackageParser.checkRequiredSystemProperties(requiredSystemPropertyName,
requiredSystemPropertyValue)) {
Slog.i(TAG, "Skipping target and overlay pair " + targetPackage + " and "
+ codePath + ": overlay ignored due to required system property: "

View File

@@ -84,7 +84,6 @@ import android.os.Build;
import android.os.Bundle;
import android.os.FileUtils;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.os.Trace;
import android.os.ext.SdkExtensions;
import android.text.TextUtils;
@@ -2348,7 +2347,7 @@ public class ParsingPackageUtils {
R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyName);
String propValue = sa.getString(
R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyValue);
if (!checkOverlayRequiredSystemProperty(propName, propValue)) {
if (!PackageParser.checkRequiredSystemProperties(propName, propValue)) {
Slog.i(TAG, "Skipping target and overlay pair " + target + " and "
+ pkg.getBaseCodePath()
+ ": overlay ignored due to required system property: "
@@ -2522,24 +2521,6 @@ public class ParsingPackageUtils {
}
}
private static boolean checkOverlayRequiredSystemProperty(String propName, String propValue) {
if (TextUtils.isEmpty(propName) || TextUtils.isEmpty(propValue)) {
if (!TextUtils.isEmpty(propName) || !TextUtils.isEmpty(propValue)) {
// malformed condition - incomplete
Slog.w(TAG, "Disabling overlay - incomplete property :'" + propName
+ "=" + propValue + "' - require both requiredSystemPropertyName"
+ " AND requiredSystemPropertyValue to be specified.");
return false;
}
// no valid condition set - so no exclusion criteria, overlay will be included.
return true;
}
// check property value - make sure it is both set and equal to expected value
final String currValue = SystemProperties.get(propName);
return (currValue != null && currValue.equals(propValue));
}
/**
* This is a pre-density application which will get scaled - instead of being pixel perfect.
* This type of application is not resizable.