Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dba8fda0 authored by Erik Wolsheimer's avatar Erik Wolsheimer Committed by Android (Google) Code Review
Browse files

Merge "Add application-level 'attributionsAreUserVisible' attribute" into sc-dev

parents dec2e216 afbc4fee
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -340,6 +340,7 @@ package android {
    field public static final int appCategory = 16844101; // 0x1010545
    field public static final int appComponentFactory = 16844154; // 0x101057a
    field public static final int attributionTags;
    field public static final int attributionsAreUserVisible;
    field public static final int author = 16843444; // 0x10102b4
    field public static final int authorities = 16842776; // 0x1010018
    field public static final int autoAdvanceViewId = 16843535; // 0x101030f
@@ -11933,6 +11934,7 @@ package android.content.pm {
  public class ApplicationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
    ctor public ApplicationInfo();
    ctor public ApplicationInfo(android.content.pm.ApplicationInfo);
    method public boolean areAttributionsUserVisible();
    method public int describeContents();
    method public void dump(android.util.Printer, String);
    method public static CharSequence getCategoryTitle(android.content.Context, int);
+17 −0
Original line number Diff line number Diff line
@@ -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 {}
@@ -2436,6 +2444,15 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
        return (privateFlagsExt & PRIVATE_FLAG_EXT_PROFILEABLE) != 0;
    }

    /**
     * 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.
+13 −1
Original line number Diff line number Diff line
@@ -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;
    }
+2 −0
Original line number Diff line number Diff line
@@ -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
+12 −0
Original line number Diff line number Diff line
@@ -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) {
@@ -2205,6 +2206,11 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        return getBoolean(Booleans.REQUEST_FOREGROUND_SERVICE_EXEMPTION);
    }

    @Override
    public boolean areAttributionsUserVisible() {
        return getBoolean(Booleans.ATTRIBUTIONS_ARE_USER_VISIBLE);
    }

    @Override
    public ParsingPackageImpl setBaseRevisionCode(int value) {
        baseRevisionCode = value;
@@ -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;
    }
}
Loading