Merge changes from topic "may15" into sc-dev am: 63a1453832
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14515460 Change-Id: I1b6a4d66134d09219ef255984336766eba7b387e
This commit is contained in:
@@ -11882,7 +11882,6 @@ package android.content.pm {
|
|||||||
field public static final int SCREEN_ORIENTATION_USER_LANDSCAPE = 11; // 0xb
|
field public static final int SCREEN_ORIENTATION_USER_LANDSCAPE = 11; // 0xb
|
||||||
field public static final int SCREEN_ORIENTATION_USER_PORTRAIT = 12; // 0xc
|
field public static final int SCREEN_ORIENTATION_USER_PORTRAIT = 12; // 0xc
|
||||||
field public static final int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 1; // 0x1
|
field public static final int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 1; // 0x1
|
||||||
field public String[] attributionTags;
|
|
||||||
field public int colorMode;
|
field public int colorMode;
|
||||||
field public int configChanges;
|
field public int configChanges;
|
||||||
field public int documentLaunchMode;
|
field public int documentLaunchMode;
|
||||||
@@ -12074,6 +12073,7 @@ package android.content.pm {
|
|||||||
method public final int getLogoResource();
|
method public final int getLogoResource();
|
||||||
method public boolean isEnabled();
|
method public boolean isEnabled();
|
||||||
field public android.content.pm.ApplicationInfo applicationInfo;
|
field public android.content.pm.ApplicationInfo applicationInfo;
|
||||||
|
field public String[] attributionTags;
|
||||||
field public int descriptionRes;
|
field public int descriptionRes;
|
||||||
field public boolean directBootAware;
|
field public boolean directBootAware;
|
||||||
field public boolean enabled;
|
field public boolean enabled;
|
||||||
|
|||||||
@@ -3510,7 +3510,7 @@ public final class ActivityThread extends ClientTransactionHandler
|
|||||||
StrictMode.incrementExpectedActivityCount(activity.getClass());
|
StrictMode.incrementExpectedActivityCount(activity.getClass());
|
||||||
r.intent.setExtrasClassLoader(cl);
|
r.intent.setExtrasClassLoader(cl);
|
||||||
r.intent.prepareToEnterProcess(isProtectedComponent(r.activityInfo),
|
r.intent.prepareToEnterProcess(isProtectedComponent(r.activityInfo),
|
||||||
activity.getAttributionSource());
|
appContext.getAttributionSource());
|
||||||
if (r.state != null) {
|
if (r.state != null) {
|
||||||
r.state.setClassLoader(cl);
|
r.state.setClassLoader(cl);
|
||||||
}
|
}
|
||||||
@@ -4442,6 +4442,10 @@ public final class ActivityThread extends ClientTransactionHandler
|
|||||||
if (data.info.splitName != null) {
|
if (data.info.splitName != null) {
|
||||||
context = (ContextImpl) context.createContextForSplit(data.info.splitName);
|
context = (ContextImpl) context.createContextForSplit(data.info.splitName);
|
||||||
}
|
}
|
||||||
|
if (data.info.attributionTags != null && data.info.attributionTags.length > 0) {
|
||||||
|
final String attributionTag = data.info.attributionTags[0];
|
||||||
|
context = (ContextImpl) context.createAttributionContext(attributionTag);
|
||||||
|
}
|
||||||
// Service resources must be initialized with the same loaders as the application
|
// Service resources must be initialized with the same loaders as the application
|
||||||
// context.
|
// context.
|
||||||
context.getResources().addLoaders(
|
context.getResources().addLoaders(
|
||||||
@@ -7353,6 +7357,10 @@ public final class ActivityThread extends ClientTransactionHandler
|
|||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (info.attributionTags != null && info.attributionTags.length > 0) {
|
||||||
|
final String attributionTag = info.attributionTags[0];
|
||||||
|
c = c.createAttributionContext(attributionTag);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final java.lang.ClassLoader cl = c.getClassLoader();
|
final java.lang.ClassLoader cl = c.getClassLoader();
|
||||||
|
|||||||
@@ -3036,8 +3036,16 @@ class ContextImpl extends Context {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final String attributionTag;
|
||||||
|
if (activityInfo.attributionTags != null && activityInfo.attributionTags.length > 0) {
|
||||||
|
attributionTag = activityInfo.attributionTags[0];
|
||||||
|
} else {
|
||||||
|
attributionTag = null;
|
||||||
|
}
|
||||||
|
|
||||||
ContextImpl context = new ContextImpl(null, mainThread, packageInfo, ContextParams.EMPTY,
|
ContextImpl context = new ContextImpl(null, mainThread, packageInfo, ContextParams.EMPTY,
|
||||||
null, null, activityInfo.splitName, activityToken, null, 0, classLoader, null);
|
attributionTag, null, activityInfo.splitName, activityToken, null, 0, classLoader,
|
||||||
|
null);
|
||||||
context.mContextType = CONTEXT_TYPE_ACTIVITY;
|
context.mContextType = CONTEXT_TYPE_ACTIVITY;
|
||||||
context.mIsConfigurationBasedContext = true;
|
context.mIsConfigurationBasedContext = true;
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
package android.content.pm;
|
package android.content.pm;
|
||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.annotation.TestApi;
|
import android.annotation.TestApi;
|
||||||
|
import android.app.Activity;
|
||||||
import android.app.compat.CompatChanges;
|
import android.app.compat.CompatChanges;
|
||||||
import android.compat.annotation.ChangeId;
|
import android.compat.annotation.ChangeId;
|
||||||
import android.compat.annotation.Disabled;
|
import android.compat.annotation.Disabled;
|
||||||
@@ -1174,13 +1174,6 @@ public class ActivityInfo extends ComponentInfo implements Parcelable {
|
|||||||
*/
|
*/
|
||||||
public WindowLayout windowLayout;
|
public WindowLayout windowLayout;
|
||||||
|
|
||||||
/**
|
|
||||||
* Attribution tags for finer grained calls if a {@link
|
|
||||||
* android.content.Context#sendBroadcast(Intent, String)} is used with a permission.
|
|
||||||
*/
|
|
||||||
@SuppressLint("MissingNullability")
|
|
||||||
public String[] attributionTags;
|
|
||||||
|
|
||||||
public ActivityInfo() {
|
public ActivityInfo() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1209,7 +1202,6 @@ public class ActivityInfo extends ComponentInfo implements Parcelable {
|
|||||||
mMaxAspectRatio = orig.mMaxAspectRatio;
|
mMaxAspectRatio = orig.mMaxAspectRatio;
|
||||||
mMinAspectRatio = orig.mMinAspectRatio;
|
mMinAspectRatio = orig.mMinAspectRatio;
|
||||||
supportsSizeChanges = orig.supportsSizeChanges;
|
supportsSizeChanges = orig.supportsSizeChanges;
|
||||||
attributionTags = orig.attributionTags;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1532,15 +1524,6 @@ public class ActivityInfo extends ComponentInfo implements Parcelable {
|
|||||||
if (supportsSizeChanges) {
|
if (supportsSizeChanges) {
|
||||||
pw.println(prefix + "supportsSizeChanges=true");
|
pw.println(prefix + "supportsSizeChanges=true");
|
||||||
}
|
}
|
||||||
if (attributionTags != null && attributionTags.length > 0) {
|
|
||||||
StringBuilder tags = new StringBuilder();
|
|
||||||
tags.append(attributionTags[0]);
|
|
||||||
for (int i = 1; i < attributionTags.length; i++) {
|
|
||||||
tags.append(", ");
|
|
||||||
tags.append(attributionTags[i]);
|
|
||||||
}
|
|
||||||
pw.println(prefix + "attributionTags=[" + tags + "]");
|
|
||||||
}
|
|
||||||
super.dumpBack(pw, prefix, dumpFlags);
|
super.dumpBack(pw, prefix, dumpFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1586,7 +1569,6 @@ public class ActivityInfo extends ComponentInfo implements Parcelable {
|
|||||||
dest.writeFloat(mMaxAspectRatio);
|
dest.writeFloat(mMaxAspectRatio);
|
||||||
dest.writeFloat(mMinAspectRatio);
|
dest.writeFloat(mMinAspectRatio);
|
||||||
dest.writeBoolean(supportsSizeChanges);
|
dest.writeBoolean(supportsSizeChanges);
|
||||||
dest.writeString8Array(attributionTags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1706,7 +1688,6 @@ public class ActivityInfo extends ComponentInfo implements Parcelable {
|
|||||||
mMaxAspectRatio = source.readFloat();
|
mMaxAspectRatio = source.readFloat();
|
||||||
mMinAspectRatio = source.readFloat();
|
mMinAspectRatio = source.readFloat();
|
||||||
supportsSizeChanges = source.readBoolean();
|
supportsSizeChanges = source.readBoolean();
|
||||||
attributionTags = source.createString8Array();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,8 +16,14 @@
|
|||||||
|
|
||||||
package android.content.pm;
|
package android.content.pm;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.Service;
|
||||||
import android.compat.annotation.UnsupportedAppUsage;
|
import android.compat.annotation.UnsupportedAppUsage;
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.content.Context;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
@@ -51,6 +57,25 @@ public class ComponentInfo extends PackageItemInfo {
|
|||||||
*/
|
*/
|
||||||
public String splitName;
|
public String splitName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set of attribution tags that should be automatically applied to this
|
||||||
|
* component.
|
||||||
|
* <p>
|
||||||
|
* When this component represents an {@link Activity}, {@link Service},
|
||||||
|
* {@link ContentResolver} or {@link BroadcastReceiver}, each instance will
|
||||||
|
* be automatically configured with {@link Context#createAttributionContext}
|
||||||
|
* using the first attribution tag contained here.
|
||||||
|
* <p>
|
||||||
|
* Additionally, when this component represents a {@link BroadcastReceiver}
|
||||||
|
* and the sender of a broadcast requires the receiver to hold one or more
|
||||||
|
* specific permissions, those permission checks will be performed using
|
||||||
|
* each of the attributions tags contained here.
|
||||||
|
*
|
||||||
|
* @see Context#createAttributionContext(String)
|
||||||
|
*/
|
||||||
|
@SuppressLint({"MissingNullability", "MutableBareField"})
|
||||||
|
public String[] attributionTags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A string resource identifier (in the package's resources) containing
|
* A string resource identifier (in the package's resources) containing
|
||||||
* a user-readable description of the component. From the "description"
|
* a user-readable description of the component. From the "description"
|
||||||
@@ -87,6 +112,7 @@ public class ComponentInfo extends PackageItemInfo {
|
|||||||
applicationInfo = orig.applicationInfo;
|
applicationInfo = orig.applicationInfo;
|
||||||
processName = orig.processName;
|
processName = orig.processName;
|
||||||
splitName = orig.splitName;
|
splitName = orig.splitName;
|
||||||
|
attributionTags = orig.attributionTags;
|
||||||
descriptionRes = orig.descriptionRes;
|
descriptionRes = orig.descriptionRes;
|
||||||
enabled = orig.enabled;
|
enabled = orig.enabled;
|
||||||
exported = orig.exported;
|
exported = orig.exported;
|
||||||
@@ -172,6 +198,15 @@ public class ComponentInfo extends PackageItemInfo {
|
|||||||
if (splitName != null) {
|
if (splitName != null) {
|
||||||
pw.println(prefix + "splitName=" + splitName);
|
pw.println(prefix + "splitName=" + splitName);
|
||||||
}
|
}
|
||||||
|
if (attributionTags != null && attributionTags.length > 0) {
|
||||||
|
StringBuilder tags = new StringBuilder();
|
||||||
|
tags.append(attributionTags[0]);
|
||||||
|
for (int i = 1; i < attributionTags.length; i++) {
|
||||||
|
tags.append(", ");
|
||||||
|
tags.append(attributionTags[i]);
|
||||||
|
}
|
||||||
|
pw.println(prefix + "attributionTags=[" + tags + "]");
|
||||||
|
}
|
||||||
pw.println(prefix + "enabled=" + enabled + " exported=" + exported
|
pw.println(prefix + "enabled=" + enabled + " exported=" + exported
|
||||||
+ " directBootAware=" + directBootAware);
|
+ " directBootAware=" + directBootAware);
|
||||||
if (descriptionRes != 0) {
|
if (descriptionRes != 0) {
|
||||||
@@ -200,6 +235,7 @@ public class ComponentInfo extends PackageItemInfo {
|
|||||||
applicationInfo.writeToParcel(dest, parcelableFlags);
|
applicationInfo.writeToParcel(dest, parcelableFlags);
|
||||||
dest.writeString8(processName);
|
dest.writeString8(processName);
|
||||||
dest.writeString8(splitName);
|
dest.writeString8(splitName);
|
||||||
|
dest.writeString8Array(attributionTags);
|
||||||
dest.writeInt(descriptionRes);
|
dest.writeInt(descriptionRes);
|
||||||
dest.writeInt(enabled ? 1 : 0);
|
dest.writeInt(enabled ? 1 : 0);
|
||||||
dest.writeInt(exported ? 1 : 0);
|
dest.writeInt(exported ? 1 : 0);
|
||||||
@@ -211,6 +247,7 @@ public class ComponentInfo extends PackageItemInfo {
|
|||||||
applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source);
|
applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source);
|
||||||
processName = source.readString8();
|
processName = source.readString8();
|
||||||
splitName = source.readString8();
|
splitName = source.readString8();
|
||||||
|
attributionTags = source.createString8Array();
|
||||||
descriptionRes = source.readInt();
|
descriptionRes = source.readInt();
|
||||||
enabled = (source.readInt() != 0);
|
enabled = (source.readInt() != 0);
|
||||||
exported = (source.readInt() != 0);
|
exported = (source.readInt() != 0);
|
||||||
|
|||||||
@@ -713,6 +713,7 @@ public class PackageInfoWithoutStateUtils {
|
|||||||
componentInfo.directBootAware = mainComponent.isDirectBootAware();
|
componentInfo.directBootAware = mainComponent.isDirectBootAware();
|
||||||
componentInfo.enabled = mainComponent.isEnabled();
|
componentInfo.enabled = mainComponent.isEnabled();
|
||||||
componentInfo.splitName = mainComponent.getSplitName();
|
componentInfo.splitName = mainComponent.getSplitName();
|
||||||
|
componentInfo.attributionTags = mainComponent.getAttributionTags();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void assignSharedFieldsForPackageItemInfo(
|
private static void assignSharedFieldsForPackageItemInfo(
|
||||||
|
|||||||
@@ -82,9 +82,6 @@ public class ParsedActivity extends ParsedMainComponent {
|
|||||||
@Nullable
|
@Nullable
|
||||||
ActivityInfo.WindowLayout windowLayout;
|
ActivityInfo.WindowLayout windowLayout;
|
||||||
|
|
||||||
@Nullable
|
|
||||||
String[] attributionTags;
|
|
||||||
|
|
||||||
public ParsedActivity(ParsedActivity other) {
|
public ParsedActivity(ParsedActivity other) {
|
||||||
super(other);
|
super(other);
|
||||||
this.theme = other.theme;
|
this.theme = other.theme;
|
||||||
@@ -110,7 +107,6 @@ public class ParsedActivity extends ParsedMainComponent {
|
|||||||
this.rotationAnimation = other.rotationAnimation;
|
this.rotationAnimation = other.rotationAnimation;
|
||||||
this.colorMode = other.colorMode;
|
this.colorMode = other.colorMode;
|
||||||
this.windowLayout = other.windowLayout;
|
this.windowLayout = other.windowLayout;
|
||||||
this.attributionTags = other.attributionTags;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -176,7 +172,6 @@ public class ParsedActivity extends ParsedMainComponent {
|
|||||||
alias.requestedVrComponent = target.requestedVrComponent;
|
alias.requestedVrComponent = target.requestedVrComponent;
|
||||||
alias.directBootAware = target.directBootAware;
|
alias.directBootAware = target.directBootAware;
|
||||||
alias.setProcessName(target.getProcessName());
|
alias.setProcessName(target.getProcessName());
|
||||||
alias.attributionTags = target.attributionTags;
|
|
||||||
return alias;
|
return alias;
|
||||||
|
|
||||||
// Not all attributes from the target ParsedActivity are copied to the alias.
|
// Not all attributes from the target ParsedActivity are copied to the alias.
|
||||||
@@ -304,7 +299,6 @@ public class ParsedActivity extends ParsedMainComponent {
|
|||||||
} else {
|
} else {
|
||||||
dest.writeBoolean(false);
|
dest.writeBoolean(false);
|
||||||
}
|
}
|
||||||
dest.writeString8Array(this.attributionTags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParsedActivity() {
|
public ParsedActivity() {
|
||||||
@@ -338,7 +332,6 @@ public class ParsedActivity extends ParsedMainComponent {
|
|||||||
if (in.readBoolean()) {
|
if (in.readBoolean()) {
|
||||||
windowLayout = new ActivityInfo.WindowLayout(in);
|
windowLayout = new ActivityInfo.WindowLayout(in);
|
||||||
}
|
}
|
||||||
this.attributionTags = in.createString8Array();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final Parcelable.Creator<ParsedActivity> CREATOR = new Creator<ParsedActivity>() {
|
public static final Parcelable.Creator<ParsedActivity> CREATOR = new Creator<ParsedActivity>() {
|
||||||
@@ -452,9 +445,4 @@ public class ParsedActivity extends ParsedMainComponent {
|
|||||||
public ActivityInfo.WindowLayout getWindowLayout() {
|
public ActivityInfo.WindowLayout getWindowLayout() {
|
||||||
return windowLayout;
|
return windowLayout;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public String[] getAttributionTags() {
|
|
||||||
return attributionTags;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,7 +102,8 @@ public class ParsedActivityUtils {
|
|||||||
R.styleable.AndroidManifestActivity_name,
|
R.styleable.AndroidManifestActivity_name,
|
||||||
R.styleable.AndroidManifestActivity_process,
|
R.styleable.AndroidManifestActivity_process,
|
||||||
R.styleable.AndroidManifestActivity_roundIcon,
|
R.styleable.AndroidManifestActivity_roundIcon,
|
||||||
R.styleable.AndroidManifestActivity_splitName);
|
R.styleable.AndroidManifestActivity_splitName,
|
||||||
|
R.styleable.AndroidManifestActivity_attributionTags);
|
||||||
if (result.isError()) {
|
if (result.isError()) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -212,11 +213,6 @@ public class ParsedActivityUtils {
|
|||||||
pkg.setVisibleToInstantApps(true);
|
pkg.setVisibleToInstantApps(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
String attributionTags = sa.getString(R.styleable.AndroidManifestActivity_attributionTags);
|
|
||||||
if (attributionTags != null) {
|
|
||||||
activity.attributionTags = attributionTags.split("\\|");
|
|
||||||
}
|
|
||||||
|
|
||||||
return parseActivityOrAlias(activity, pkg, tag, parser, res, sa, receiver,
|
return parseActivityOrAlias(activity, pkg, tag, parser, res, sa, receiver,
|
||||||
false /*isAlias*/, visibleToEphemeral, input,
|
false /*isAlias*/, visibleToEphemeral, input,
|
||||||
R.styleable.AndroidManifestActivity_parentActivityName,
|
R.styleable.AndroidManifestActivity_parentActivityName,
|
||||||
@@ -281,7 +277,8 @@ public class ParsedActivityUtils {
|
|||||||
R.styleable.AndroidManifestActivityAlias_name,
|
R.styleable.AndroidManifestActivityAlias_name,
|
||||||
null /*processAttr*/,
|
null /*processAttr*/,
|
||||||
R.styleable.AndroidManifestActivityAlias_roundIcon,
|
R.styleable.AndroidManifestActivityAlias_roundIcon,
|
||||||
null /*splitNameAttr*/);
|
null /*splitNameAttr*/,
|
||||||
|
R.styleable.AndroidManifestActivityAlias_attributionTags);
|
||||||
if (result.isError()) {
|
if (result.isError()) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ public class ParsedMainComponent extends ParsedComponent {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
String splitName;
|
String splitName;
|
||||||
|
@Nullable
|
||||||
|
String[] attributionTags;
|
||||||
|
|
||||||
public ParsedMainComponent() {
|
public ParsedMainComponent() {
|
||||||
}
|
}
|
||||||
@@ -51,6 +53,7 @@ public class ParsedMainComponent extends ParsedComponent {
|
|||||||
this.exported = other.exported;
|
this.exported = other.exported;
|
||||||
this.order = other.order;
|
this.order = other.order;
|
||||||
this.splitName = other.splitName;
|
this.splitName = other.splitName;
|
||||||
|
this.attributionTags = other.attributionTags;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParsedMainComponent setProcessName(String processName) {
|
public ParsedMainComponent setProcessName(String processName) {
|
||||||
@@ -84,6 +87,7 @@ public class ParsedMainComponent extends ParsedComponent {
|
|||||||
dest.writeBoolean(this.exported);
|
dest.writeBoolean(this.exported);
|
||||||
dest.writeInt(this.order);
|
dest.writeInt(this.order);
|
||||||
dest.writeString(this.splitName);
|
dest.writeString(this.splitName);
|
||||||
|
dest.writeString8Array(this.attributionTags);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ParsedMainComponent(Parcel in) {
|
protected ParsedMainComponent(Parcel in) {
|
||||||
@@ -94,6 +98,7 @@ public class ParsedMainComponent extends ParsedComponent {
|
|||||||
this.exported = in.readBoolean();
|
this.exported = in.readBoolean();
|
||||||
this.order = in.readInt();
|
this.order = in.readInt();
|
||||||
this.splitName = in.readString();
|
this.splitName = in.readString();
|
||||||
|
this.attributionTags = in.createString8Array();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final Parcelable.Creator<ParsedMainComponent> CREATOR =
|
public static final Parcelable.Creator<ParsedMainComponent> CREATOR =
|
||||||
@@ -135,6 +140,11 @@ public class ParsedMainComponent extends ParsedComponent {
|
|||||||
return splitName;
|
return splitName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public String[] getAttributionTags() {
|
||||||
|
return attributionTags;
|
||||||
|
}
|
||||||
|
|
||||||
public ParsedMainComponent setDirectBootAware(boolean value) {
|
public ParsedMainComponent setDirectBootAware(boolean value) {
|
||||||
directBootAware = value;
|
directBootAware = value;
|
||||||
return this;
|
return this;
|
||||||
@@ -149,4 +159,9 @@ public class ParsedMainComponent extends ParsedComponent {
|
|||||||
splitName = value;
|
splitName = value;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ParsedMainComponent setAttributionTags(@Nullable String[] value) {
|
||||||
|
attributionTags = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ class ParsedMainComponentUtils {
|
|||||||
TypedArray array, int flags, boolean useRoundIcon, ParseInput input,
|
TypedArray array, int flags, boolean useRoundIcon, ParseInput input,
|
||||||
int bannerAttr, int descriptionAttr, @Nullable Integer directBootAwareAttr,
|
int bannerAttr, int descriptionAttr, @Nullable Integer directBootAwareAttr,
|
||||||
@Nullable Integer enabledAttr, int iconAttr, int labelAttr, int logoAttr, int nameAttr,
|
@Nullable Integer enabledAttr, int iconAttr, int labelAttr, int logoAttr, int nameAttr,
|
||||||
@Nullable Integer processAttr, int roundIconAttr, @Nullable Integer splitNameAttr) {
|
@Nullable Integer processAttr, int roundIconAttr, @Nullable Integer splitNameAttr,
|
||||||
|
@Nullable Integer attributionTagsAttr) {
|
||||||
ParseResult<Component> result = ParsedComponentUtils.parseComponent(component, tag, pkg,
|
ParseResult<Component> result = ParsedComponentUtils.parseComponent(component, tag, pkg,
|
||||||
array, useRoundIcon, input, bannerAttr, descriptionAttr, iconAttr, labelAttr,
|
array, useRoundIcon, input, bannerAttr, descriptionAttr, iconAttr, labelAttr,
|
||||||
logoAttr, nameAttr, roundIconAttr);
|
logoAttr, nameAttr, roundIconAttr);
|
||||||
@@ -94,6 +95,13 @@ class ParsedMainComponentUtils {
|
|||||||
component.splitName = array.getNonConfigurationString(splitNameAttr, 0);
|
component.splitName = array.getNonConfigurationString(splitNameAttr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (attributionTagsAttr != null) {
|
||||||
|
final String attributionTags = array.getNonConfigurationString(attributionTagsAttr, 0);
|
||||||
|
if (attributionTags != null) {
|
||||||
|
component.attributionTags = attributionTags.split("\\|");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return input.success(component);
|
return input.success(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,8 @@ public class ParsedProviderUtils {
|
|||||||
R.styleable.AndroidManifestProvider_name,
|
R.styleable.AndroidManifestProvider_name,
|
||||||
R.styleable.AndroidManifestProvider_process,
|
R.styleable.AndroidManifestProvider_process,
|
||||||
R.styleable.AndroidManifestProvider_roundIcon,
|
R.styleable.AndroidManifestProvider_roundIcon,
|
||||||
R.styleable.AndroidManifestProvider_splitName);
|
R.styleable.AndroidManifestProvider_splitName,
|
||||||
|
R.styleable.AndroidManifestProvider_attributionTags);
|
||||||
if (result.isError()) {
|
if (result.isError()) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,8 @@ public class ParsedServiceUtils {
|
|||||||
R.styleable.AndroidManifestService_name,
|
R.styleable.AndroidManifestService_name,
|
||||||
R.styleable.AndroidManifestService_process,
|
R.styleable.AndroidManifestService_process,
|
||||||
R.styleable.AndroidManifestService_roundIcon,
|
R.styleable.AndroidManifestService_roundIcon,
|
||||||
R.styleable.AndroidManifestService_splitName
|
R.styleable.AndroidManifestService_splitName,
|
||||||
|
R.styleable.AndroidManifestService_attributionTags
|
||||||
);
|
);
|
||||||
|
|
||||||
if (result.isError()) {
|
if (result.isError()) {
|
||||||
|
|||||||
@@ -2593,6 +2593,12 @@
|
|||||||
<!-- The code for this component is located in the given split.
|
<!-- The code for this component is located in the given split.
|
||||||
<p>NOTE: This is only applicable to instant app. -->
|
<p>NOTE: This is only applicable to instant app. -->
|
||||||
<attr name="splitName" />
|
<attr name="splitName" />
|
||||||
|
<!-- Set of attribution tags that should be automatically applied to this component.
|
||||||
|
<p>
|
||||||
|
Each instance of this ContentProvider will be automatically configured with
|
||||||
|
Context.createAttributionContext() using the first attribution tag
|
||||||
|
contained here. -->
|
||||||
|
<attr name="attributionTags" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
<!-- Attributes that can be supplied in an AndroidManifest.xml
|
<!-- Attributes that can be supplied in an AndroidManifest.xml
|
||||||
@@ -2728,6 +2734,12 @@
|
|||||||
<attr name="useAppZygote" format="boolean" />
|
<attr name="useAppZygote" format="boolean" />
|
||||||
<!-- If this is a foreground service, specify its category. -->
|
<!-- If this is a foreground service, specify its category. -->
|
||||||
<attr name="foregroundServiceType" />
|
<attr name="foregroundServiceType" />
|
||||||
|
<!-- Set of attribution tags that should be automatically applied to this component.
|
||||||
|
<p>
|
||||||
|
Each instance of this Service will be automatically configured with
|
||||||
|
Context.createAttributionContext() using the first attribution tag
|
||||||
|
contained here. -->
|
||||||
|
<attr name="attributionTags" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
<!-- The <code>receiver</code> tag declares an
|
<!-- The <code>receiver</code> tag declares an
|
||||||
@@ -2765,6 +2777,12 @@
|
|||||||
<attr name="exported" />
|
<attr name="exported" />
|
||||||
<attr name="singleUser" />
|
<attr name="singleUser" />
|
||||||
<attr name="directBootAware" />
|
<attr name="directBootAware" />
|
||||||
|
<!-- Set of attribution tags that should be automatically applied to this component.
|
||||||
|
<p>
|
||||||
|
Each instance of this BroadcastReceiver will be automatically configured with
|
||||||
|
Context.createAttributionContext() using the first attribution tag
|
||||||
|
contained here. -->
|
||||||
|
<attr name="attributionTags" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
<!-- The <code>activity</code> tag declares an
|
<!-- The <code>activity</code> tag declares an
|
||||||
@@ -2892,10 +2910,12 @@
|
|||||||
|
|
||||||
<p> See {@link android.content.pm.ActivityInfo#FLAG_PREFER_MINIMAL_POST_PROCESSING} -->
|
<p> See {@link android.content.pm.ActivityInfo#FLAG_PREFER_MINIMAL_POST_PROCESSING} -->
|
||||||
<attr name="preferMinimalPostProcessing" format="boolean"/>
|
<attr name="preferMinimalPostProcessing" format="boolean"/>
|
||||||
<!-- Specify the attributionTags to be used if a permission is required due to
|
<!-- Set of attribution tags that should be automatically applied to this component.
|
||||||
{@link android.content.Context#sendBroadcast(Intent, String)} being used.
|
<p>
|
||||||
Multiple tags can be specified separated by '|'. -->
|
Each instance of this Activity will be automatically configured with
|
||||||
<attr name="attributionTags"/>
|
Context.createAttributionContext() using the first attribution tag
|
||||||
|
contained here. -->
|
||||||
|
<attr name="attributionTags" />
|
||||||
<!-- Specifies whether a home sound effect should be played if the home app moves to
|
<!-- Specifies whether a home sound effect should be played if the home app moves to
|
||||||
front after an activity with this flag set to <code>true</code>.
|
front after an activity with this flag set to <code>true</code>.
|
||||||
<p>The default value of this attribute is <code>true</code>.
|
<p>The default value of this attribute is <code>true</code>.
|
||||||
@@ -2942,6 +2962,7 @@
|
|||||||
<attr name="enabled" />
|
<attr name="enabled" />
|
||||||
<attr name="exported" />
|
<attr name="exported" />
|
||||||
<attr name="parentActivityName" />
|
<attr name="parentActivityName" />
|
||||||
|
<attr name="attributionTags" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
<!-- The <code>meta-data</code> tag is used to attach additional
|
<!-- The <code>meta-data</code> tag is used to attach additional
|
||||||
|
|||||||
@@ -444,6 +444,7 @@ public class PackageInfoUtils {
|
|||||||
componentInfo.directBootAware = mainComponent.isDirectBootAware();
|
componentInfo.directBootAware = mainComponent.isDirectBootAware();
|
||||||
componentInfo.enabled = mainComponent.isEnabled();
|
componentInfo.enabled = mainComponent.isEnabled();
|
||||||
componentInfo.splitName = mainComponent.getSplitName();
|
componentInfo.splitName = mainComponent.getSplitName();
|
||||||
|
componentInfo.attributionTags = mainComponent.getAttributionTags();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void assignStateFieldsForPackageItemInfo(
|
private static void assignStateFieldsForPackageItemInfo(
|
||||||
|
|||||||
Reference in New Issue
Block a user