Merge "Fix up discrepancies between v1 and v2 package parsing" into rvc-dev am: 9f15ba2e1a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11688819

Change-Id: I16d7715f9392649329a90ec2e04f5b9a44978938
This commit is contained in:
TreeHugger Robot
2020-06-04 18:25:06 +00:00
committed by Automerger Merge Worker
4 changed files with 243 additions and 54 deletions

View File

@@ -302,7 +302,14 @@ public class ParsedActivityUtils {
}
String permission = array.getNonConfigurationString(permissionAttr, 0);
activity.setPermission(permission != null ? permission : pkg.getPermission());
if (isAlias) {
// An alias will override permissions to allow referencing an Activity through its alias
// without needing the original permission. If an alias needs the same permission,
// it must be re-declared.
activity.setPermission(permission);
} else {
activity.setPermission(permission != null ? permission : pkg.getPermission());
}
final boolean setExported = array.hasValue(exportedAttr);
if (setExported) {

View File

@@ -20,7 +20,10 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.pm.PackageManager;
import android.content.pm.parsing.ParsingPackage;
import android.content.pm.parsing.ParsingPackageUtils;
import android.content.pm.parsing.ParsingUtils;
import android.content.pm.parsing.result.ParseInput;
import android.content.pm.parsing.result.ParseResult;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
@@ -29,9 +32,6 @@ import android.text.TextUtils;
import android.util.TypedValue;
import com.android.internal.annotations.VisibleForTesting;
import android.content.pm.parsing.ParsingPackageUtils;
import android.content.pm.parsing.result.ParseInput;
import android.content.pm.parsing.result.ParseResult;
/** @hide */
class ParsedComponentUtils {
@@ -60,16 +60,27 @@ class ParsedComponentUtils {
component.setName(className);
component.setPackageName(packageName);
if (useRoundIcon) {
component.icon = array.getResourceId(roundIconAttr, 0);
int roundIconVal = useRoundIcon ? array.getResourceId(roundIconAttr, 0) : 0;
if (roundIconVal != 0) {
component.icon = roundIconVal;
component.nonLocalizedLabel = null;
} else {
int iconVal = array.getResourceId(iconAttr, 0);
if (iconVal != 0) {
component.icon = iconVal;
component.nonLocalizedLabel = null;
}
}
if (component.icon == 0) {
component.icon = array.getResourceId(iconAttr, 0);
int logoVal = array.getResourceId(logoAttr, 0);
if (logoVal != 0) {
component.logo = logoVal;
}
component.logo = array.getResourceId(logoAttr, 0);
component.banner = array.getResourceId(bannerAttr, 0);
int bannerVal = array.getResourceId(bannerAttr, 0);
if (bannerVal != 0) {
component.banner = bannerVal;
}
if (descriptionAttr != null) {
component.descriptionRes = array.getResourceId(descriptionAttr, 0);