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

Commit df1c7dc0 authored by David Brazdil's avatar David Brazdil
Browse files

Simplify HIDDEN_API_ENFORCEMENT_ flags

Remove the distinction between pre-P and P apps and simplify the flags
to ENABLED, DISABLED and JUST_WARN.

Test: m
Merged-In: I87ef00a15ac9a3abfaeb011bbd8804b216f26c90
Change-Id: I31a6464bd95143e6242d043547a6a9ae8f9888bb
parent a2786c1f
Loading
Loading
Loading
Loading
+15 −33
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import android.content.Context;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Environment;
import android.os.Parcel;
import android.os.Parcelable;
@@ -1155,11 +1154,11 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
     * system apps.
     * @hide
     */
    public static final int HIDDEN_API_ENFORCEMENT_NONE = 0;
    public static final int HIDDEN_API_ENFORCEMENT_DISABLED = 0;
    /**
     * No API enforcement, but enable the detection logic and warnings. Observed behaviour is the
     * same as {@link #HIDDEN_API_ENFORCEMENT_NONE} but you may see warnings in the log when APIs
     * are accessed.
     * same as {@link #HIDDEN_API_ENFORCEMENT_DISABLED} but you may see warnings in the log when
     * APIs are accessed.
     * @hide
     * */
    public static final int HIDDEN_API_ENFORCEMENT_JUST_WARN = 1;
@@ -1167,14 +1166,10 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
     * Dark grey list enforcement. Enforces the dark grey and black lists
     * @hide
     */
    public static final int HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK = 2;
    /**
     * Blacklist enforcement only.
     * @hide
     */
    public static final int HIDDEN_API_ENFORCEMENT_BLACK = 3;
    public static final int HIDDEN_API_ENFORCEMENT_ENABLED = 2;

    private static final int HIDDEN_API_ENFORCEMENT_MAX = HIDDEN_API_ENFORCEMENT_BLACK;
    private static final int HIDDEN_API_ENFORCEMENT_MIN = HIDDEN_API_ENFORCEMENT_DEFAULT;
    private static final int HIDDEN_API_ENFORCEMENT_MAX = HIDDEN_API_ENFORCEMENT_ENABLED;

    /**
     * Values in this IntDef MUST be kept in sync with enum hiddenapi::EnforcementPolicy in
@@ -1183,17 +1178,16 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
     */
    @IntDef(prefix = { "HIDDEN_API_ENFORCEMENT_" }, value = {
            HIDDEN_API_ENFORCEMENT_DEFAULT,
            HIDDEN_API_ENFORCEMENT_NONE,
            HIDDEN_API_ENFORCEMENT_DISABLED,
            HIDDEN_API_ENFORCEMENT_JUST_WARN,
            HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK,
            HIDDEN_API_ENFORCEMENT_BLACK,
            HIDDEN_API_ENFORCEMENT_ENABLED,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface HiddenApiEnforcementPolicy {}

    /** @hide */
    public static boolean isValidHiddenApiEnforcementPolicy(int policy) {
        return policy >= HIDDEN_API_ENFORCEMENT_DEFAULT && policy <= HIDDEN_API_ENFORCEMENT_MAX;
        return policy >= HIDDEN_API_ENFORCEMENT_MIN && policy <= HIDDEN_API_ENFORCEMENT_MAX;
    }

    private int mHiddenApiPolicy = HIDDEN_API_ENFORCEMENT_DEFAULT;
@@ -1733,16 +1727,12 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
     */
    public @HiddenApiEnforcementPolicy int getHiddenApiEnforcementPolicy() {
        if (isAllowedToUseHiddenApis()) {
            return HIDDEN_API_ENFORCEMENT_NONE;
            return HIDDEN_API_ENFORCEMENT_DISABLED;
        }
        if (mHiddenApiPolicy != HIDDEN_API_ENFORCEMENT_DEFAULT) {
            return mHiddenApiPolicy;
        }
        if (targetSdkVersion < Build.VERSION_CODES.P) {
            return HIDDEN_API_ENFORCEMENT_BLACK;
        } else {
            return HIDDEN_API_ENFORCEMENT_DARK_GREY_AND_BLACK;
        }
        return HIDDEN_API_ENFORCEMENT_ENABLED;
    }

    /**
@@ -1761,23 +1751,15 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
     * This will have no effect if this app is not subject to hidden API enforcement, i.e. if it
     * is on the package whitelist.
     *
     * @param policyPreP configured policy for pre-P apps, or {@link
     *        #HIDDEN_API_ENFORCEMENT_DEFAULT} if nothing configured.
     * @param policyP configured policy for apps targeting P or later, or {@link
     *        #HIDDEN_API_ENFORCEMENT_DEFAULT} if nothing configured.
     * @param policy configured policy for this app, or {@link #HIDDEN_API_ENFORCEMENT_DEFAULT}
     *               if nothing configured.
     * @hide
     */
    public void maybeUpdateHiddenApiEnforcementPolicy(
            @HiddenApiEnforcementPolicy int policyPreP, @HiddenApiEnforcementPolicy int policyP) {
    public void maybeUpdateHiddenApiEnforcementPolicy(@HiddenApiEnforcementPolicy int policy) {
        if (isPackageWhitelistedForHiddenApis()) {
            return;
        }
        if (targetSdkVersion < Build.VERSION_CODES.P) {
            setHiddenApiEnforcementPolicy(policyPreP);
        } else if (targetSdkVersion >= Build.VERSION_CODES.P) {
            setHiddenApiEnforcementPolicy(policyP);
        }

        setHiddenApiEnforcementPolicy(policy);
    }

    /**
+2 −15
Original line number Diff line number Diff line
@@ -12166,27 +12166,14 @@ public final class Settings {
                "hidden_api_access_log_sampling_rate";
        /**
         * Hidden API enforcement policy for apps targeting SDK versions prior to the latest
         * version.
         * Hidden API enforcement policy for apps.
         *
         * Values correspond to @{@link
         * android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy}
         *
         * @hide
         */
        public static final String HIDDEN_API_POLICY_PRE_P_APPS =
                "hidden_api_policy_pre_p_apps";
        /**
         * Hidden API enforcement policy for apps targeting the current SDK version.
         *
         * Values correspond to @{@link
         * android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy}
         *
         * @hide
         */
        public static final String HIDDEN_API_POLICY_P_APPS =
                "hidden_api_policy_p_apps";
        public static final String HIDDEN_API_POLICY = "hidden_api_policy";
        /**
         * Timeout for a single {@link android.media.soundtrigger.SoundTriggerDetectionService}
+1 −2
Original line number Diff line number Diff line
@@ -256,8 +256,7 @@ public class SettingsBackupTest {
                    Settings.Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED,
                    Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED,
                    Settings.Global.HIDDEN_API_ACCESS_LOG_SAMPLING_RATE,
                    Settings.Global.HIDDEN_API_POLICY_P_APPS,
                    Settings.Global.HIDDEN_API_POLICY_PRE_P_APPS,
                    Settings.Global.HIDDEN_API_POLICY,
                    Settings.Global.HIDE_ERROR_DIALOGS,
                    Settings.Global.HTTP_PROXY,
                    HYBRID_SYSUI_BATTERY_WARNING_FLAGS,
+6 −18
Original line number Diff line number Diff line
@@ -2919,8 +2919,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        private String mExemptionsStr;
        private List<String> mExemptions = Collections.emptyList();
        private int mLogSampleRate = -1;
        @HiddenApiEnforcementPolicy private int mPolicyPreP = HIDDEN_API_ENFORCEMENT_DEFAULT;
        @HiddenApiEnforcementPolicy private int mPolicyP = HIDDEN_API_ENFORCEMENT_DEFAULT;
        @HiddenApiEnforcementPolicy private int mPolicy = HIDDEN_API_ENFORCEMENT_DEFAULT;
        public HiddenApiSettings(Handler handler, Context context) {
            super(handler);
@@ -2937,11 +2936,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                    false,
                    this);
            mContext.getContentResolver().registerContentObserver(
                    Settings.Global.getUriFor(Settings.Global.HIDDEN_API_POLICY_PRE_P_APPS),
                    false,
                    this);
            mContext.getContentResolver().registerContentObserver(
                    Settings.Global.getUriFor(Settings.Global.HIDDEN_API_POLICY_P_APPS),
                    Settings.Global.getUriFor(Settings.Global.HIDDEN_API_POLICY),
                    false,
                    this);
            update();
@@ -2976,8 +2971,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                mLogSampleRate = logSampleRate;
                zygoteProcess.setHiddenApiAccessLogSampleRate(mLogSampleRate);
            }
            mPolicyPreP = getValidEnforcementPolicy(Settings.Global.HIDDEN_API_POLICY_PRE_P_APPS);
            mPolicyP = getValidEnforcementPolicy(Settings.Global.HIDDEN_API_POLICY_P_APPS);
            mPolicy = getValidEnforcementPolicy(Settings.Global.HIDDEN_API_POLICY);
        }
        private @HiddenApiEnforcementPolicy int getValidEnforcementPolicy(String settingsKey) {
@@ -2994,12 +2988,8 @@ public class ActivityManagerService extends IActivityManager.Stub
            return mBlacklistDisabled;
        }
        @HiddenApiEnforcementPolicy int getPolicyForPrePApps() {
            return mPolicyPreP;
        }
        @HiddenApiEnforcementPolicy int getPolicyForPApps() {
            return mPolicyP;
        @HiddenApiEnforcementPolicy int getPolicy() {
            return mPolicy;
        }
        public void onChange(boolean selfChange) {
@@ -4328,9 +4318,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            }
            if (!disableHiddenApiChecks && !mHiddenApiBlacklist.isDisabled()) {
                app.info.maybeUpdateHiddenApiEnforcementPolicy(
                        mHiddenApiBlacklist.getPolicyForPrePApps(),
                        mHiddenApiBlacklist.getPolicyForPApps());
                app.info.maybeUpdateHiddenApiEnforcementPolicy(mHiddenApiBlacklist.getPolicy());
                @HiddenApiEnforcementPolicy int policy =
                        app.info.getHiddenApiEnforcementPolicy();
                int policyBits = (policy << Zygote.API_ENFORCEMENT_POLICY_SHIFT);
+2 −2
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ import java.util.Map;

import dalvik.system.DexFile;

import static android.content.pm.ApplicationInfo.HIDDEN_API_ENFORCEMENT_NONE;
import static android.content.pm.ApplicationInfo.HIDDEN_API_ENFORCEMENT_DISABLED;

import static com.android.server.pm.Installer.DEXOPT_BOOTCOMPLETE;
import static com.android.server.pm.Installer.DEXOPT_DEBUGGABLE;
@@ -540,7 +540,7 @@ public class PackageDexOptimizer {
        // Some apps are executed with restrictions on hidden API usage. If this app is one
        // of them, pass a flag to dexopt to enable the same restrictions during compilation.
        // TODO we should pass the actual flag value to dexopt, rather than assuming blacklist
        int hiddenApiFlag = info.getHiddenApiEnforcementPolicy() == HIDDEN_API_ENFORCEMENT_NONE
        int hiddenApiFlag = info.getHiddenApiEnforcementPolicy() == HIDDEN_API_ENFORCEMENT_DISABLED
                ? 0
                : DEXOPT_ENABLE_HIDDEN_API_CHECKS;
        // Avoid generating CompactDex for modes that are latency critical.