summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorErik Wolsheimer <ewol@google.com>2021-05-21 00:23:28 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-05-21 00:23:28 +0000
commitdba8fda0b33a21d7b5db54fdf792f98100368b1b (patch)
tree48ff814128d11c14aca18eb95269638d89384c37 /core/java/android
parentdec2e2169e3096163cf6525b377d57a4f74163cb (diff)
parentafbc4fee9d7dcaa002a263e7064169a0781bc370 (diff)
Merge "Add application-level 'attributionsAreUserVisible' attribute" into sc-dev
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/content/pm/ApplicationInfo.java17
-rw-r--r--core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java14
-rw-r--r--core/java/android/content/pm/parsing/ParsingPackage.java2
-rw-r--r--core/java/android/content/pm/parsing/ParsingPackageImpl.java12
-rw-r--r--core/java/android/content/pm/parsing/ParsingPackageRead.java7
-rw-r--r--core/java/android/content/pm/parsing/ParsingPackageUtils.java1
6 files changed, 51 insertions, 2 deletions
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 8b0e99236806..2c4ff5889263 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -786,10 +786,18 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
*/
public static final int PRIVATE_FLAG_EXT_REQUEST_FOREGROUND_SERVICE_EXEMPTION = 1 << 1;
+ /**
+ * Value for {@link #privateFlagsExt}: whether attributions provided by the application are
+ * meant to be user-visible.
+ * @hide
+ */
+ public static final int PRIVATE_FLAG_EXT_ATTRIBUTIONS_ARE_USER_VISIBLE = 1 << 2;
+
/** @hide */
@IntDef(flag = true, prefix = { "PRIVATE_FLAG_EXT_" }, value = {
PRIVATE_FLAG_EXT_PROFILEABLE,
PRIVATE_FLAG_EXT_REQUEST_FOREGROUND_SERVICE_EXEMPTION,
+ PRIVATE_FLAG_EXT_ATTRIBUTIONS_ARE_USER_VISIBLE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ApplicationInfoPrivateFlagsExt {}
@@ -2437,6 +2445,15 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
}
/**
+ * Returns whether attributions provided by the application are meant to be user-visible.
+ * Defaults to false if application info is retrieved without
+ * {@link PackageManager#GET_ATTRIBUTIONS}.
+ */
+ public boolean areAttributionsUserVisible() {
+ return (privateFlagsExt & PRIVATE_FLAG_EXT_ATTRIBUTIONS_ARE_USER_VISIBLE) != 0;
+ }
+
+ /**
* Returns true if the app has declared in its manifest that it wants its split APKs to be
* loaded into isolated Contexts, with their own ClassLoaders and Resources objects.
* @hide
diff --git a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java
index d407b106b5a3..c9054fd8976d 100644
--- a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java
+++ b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java
@@ -298,6 +298,16 @@ public class PackageInfoWithoutStateUtils {
pi.attributions[i] = generateAttribution(pkg.getAttributions().get(i));
}
}
+ if (pkg.areAttributionsUserVisible()) {
+ pi.applicationInfo.privateFlagsExt
+ |= ApplicationInfo.PRIVATE_FLAG_EXT_ATTRIBUTIONS_ARE_USER_VISIBLE;
+ } else {
+ pi.applicationInfo.privateFlagsExt
+ &= ~ApplicationInfo.PRIVATE_FLAG_EXT_ATTRIBUTIONS_ARE_USER_VISIBLE;
+ }
+ } else {
+ pi.applicationInfo.privateFlagsExt
+ &= ~ApplicationInfo.PRIVATE_FLAG_EXT_ATTRIBUTIONS_ARE_USER_VISIBLE;
}
if (apexInfo != null) {
@@ -809,7 +819,9 @@ public class PackageInfoWithoutStateUtils {
int privateFlagsExt =
flag(pkg.isProfileable(), ApplicationInfo.PRIVATE_FLAG_EXT_PROFILEABLE)
| flag(pkg.hasRequestForegroundServiceExemption(),
- ApplicationInfo.PRIVATE_FLAG_EXT_REQUEST_FOREGROUND_SERVICE_EXEMPTION);
+ ApplicationInfo.PRIVATE_FLAG_EXT_REQUEST_FOREGROUND_SERVICE_EXEMPTION)
+ | flag(pkg.areAttributionsUserVisible(),
+ ApplicationInfo.PRIVATE_FLAG_EXT_ATTRIBUTIONS_ARE_USER_VISIBLE);
// @formatter:on
return privateFlagsExt;
}
diff --git a/core/java/android/content/pm/parsing/ParsingPackage.java b/core/java/android/content/pm/parsing/ParsingPackage.java
index 2413e6d99f5f..ed68dbf0087c 100644
--- a/core/java/android/content/pm/parsing/ParsingPackage.java
+++ b/core/java/android/content/pm/parsing/ParsingPackage.java
@@ -362,6 +362,8 @@ public interface ParsingPackage extends ParsingPackageRead {
ParsingPackage setCompileSdkVersionCodename(String compileSdkVersionCodename);
+ ParsingPackage setAttributionsAreUserVisible(boolean attributionsAreUserVisible);
+
// TODO(b/135203078): This class no longer has access to ParsedPackage, find a replacement
// for moving to the next step
@CallSuper
diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java
index b0342aa95fc9..f0b76499093c 100644
--- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java
+++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java
@@ -514,6 +514,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
private static final long ENABLED = 1L << 44;
private static final long DISALLOW_PROFILING = 1L << 45;
private static final long REQUEST_FOREGROUND_SERVICE_EXEMPTION = 1L << 46;
+ private static final long ATTRIBUTIONS_ARE_USER_VISIBLE = 1L << 47;
}
private ParsingPackageImpl setBoolean(@Booleans.Values long flag, boolean value) {
@@ -2206,6 +2207,11 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
}
@Override
+ public boolean areAttributionsUserVisible() {
+ return getBoolean(Booleans.ATTRIBUTIONS_ARE_USER_VISIBLE);
+ }
+
+ @Override
public ParsingPackageImpl setBaseRevisionCode(int value) {
baseRevisionCode = value;
return this;
@@ -2760,4 +2766,10 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
this.zygotePreloadName = zygotePreloadName;
return this;
}
+
+ @Override
+ public ParsingPackage setAttributionsAreUserVisible(boolean attributionsAreUserVisible) {
+ setBoolean(Booleans.ATTRIBUTIONS_ARE_USER_VISIBLE, attributionsAreUserVisible);
+ return this;
+ }
}
diff --git a/core/java/android/content/pm/parsing/ParsingPackageRead.java b/core/java/android/content/pm/parsing/ParsingPackageRead.java
index 35a2b9aeb338..a6e189d32b54 100644
--- a/core/java/android/content/pm/parsing/ParsingPackageRead.java
+++ b/core/java/android/content/pm/parsing/ParsingPackageRead.java
@@ -46,7 +46,6 @@ import android.util.SparseArray;
import android.util.SparseIntArray;
import java.security.PublicKey;
-import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -922,4 +921,10 @@ public interface ParsingPackageRead extends Parcelable {
* same as toAppInfoWithoutState except without flag computation.
*/
ApplicationInfo toAppInfoWithoutStateWithoutFlags();
+
+ /**
+ * Whether or not the app has said its attribution tags can be made user-visible.
+ * @see ApplicationInfo#areAttributionsUserVisible()
+ */
+ boolean areAttributionsUserVisible();
}
diff --git a/core/java/android/content/pm/parsing/ParsingPackageUtils.java b/core/java/android/content/pm/parsing/ParsingPackageUtils.java
index 022ba16e9da8..b74760ac8bc4 100644
--- a/core/java/android/content/pm/parsing/ParsingPackageUtils.java
+++ b/core/java/android/content/pm/parsing/ParsingPackageUtils.java
@@ -2198,6 +2198,7 @@ public class ParsingPackageUtils {
.setUsesNonSdkApi(bool(false, R.styleable.AndroidManifestApplication_usesNonSdkApi, sa))
.setVmSafeMode(bool(false, R.styleable.AndroidManifestApplication_vmSafeMode, sa))
.setAutoRevokePermissions(anInt(R.styleable.AndroidManifestApplication_autoRevokePermissions, sa))
+ .setAttributionsAreUserVisible(bool(false, R.styleable.AndroidManifestApplication_attributionsAreUserVisible, sa))
// targetSdkVersion gated
.setAllowAudioPlaybackCapture(bool(targetSdk >= Build.VERSION_CODES.Q, R.styleable.AndroidManifestApplication_allowAudioPlaybackCapture, sa))
.setBaseHardwareAccelerated(bool(targetSdk >= Build.VERSION_CODES.ICE_CREAM_SANDWICH, R.styleable.AndroidManifestApplication_hardwareAccelerated, sa))