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

Commit 04f02686 authored by Andrei-Valentin Onea's avatar Andrei-Valentin Onea Committed by Automerger Merge Worker
Browse files

Merge changes from topic "preinstall-overrides" am: 29ed176b am: d1ebbf50 am: dd1d1cba

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

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ifbdca1201aa118e59b45f7dd89441a210fc2fa9c
parents c16bde6c dd1d1cba
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -13456,6 +13456,16 @@ public final class Settings {
        @TestApi
        public static final String HIDDEN_API_POLICY = "hidden_api_policy";
         /**
         * Flag for forcing {@link com.android.server.compat.OverrideValidatorImpl}
         * to consider this a non-debuggable build.
         *
         * @hide
         */
        public static final String FORCE_NON_DEBUGGABLE_FINAL_BUILD_FOR_COMPAT =
                "force_non_debuggable_final_build_for_compat";
        /**
         * Current version of signed configuration applied.
         *
+7 −11
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ public final class OverrideAllowedState implements Parcelable {
            DISABLED_NOT_DEBUGGABLE,
            DISABLED_NON_TARGET_SDK,
            DISABLED_TARGET_SDK_TOO_HIGH,
            PACKAGE_DOES_NOT_EXIST,
            DEFERRED_VERIFICATION,
            LOGGING_ONLY_CHANGE
    })
    @Retention(RetentionPolicy.SOURCE)
@@ -58,9 +58,9 @@ public final class OverrideAllowedState implements Parcelable {
     */
    public static final int DISABLED_TARGET_SDK_TOO_HIGH = 3;
     /**
     * Package does not exist.
     * Change override decision is currently being deferred, due to the app not being installed yet.
     */
    public static final int PACKAGE_DOES_NOT_EXIST = 4;
    public static final int DEFERRED_VERIFICATION = 4;
    /**
     * Change is marked as logging only, and cannot be toggled.
     */
@@ -106,6 +106,7 @@ public final class OverrideAllowedState implements Parcelable {
            throws SecurityException {
        switch (state) {
            case ALLOWED:
            case DEFERRED_VERIFICATION:
                return;
            case DISABLED_NOT_DEBUGGABLE:
                throw new SecurityException(
@@ -118,11 +119,6 @@ public final class OverrideAllowedState implements Parcelable {
                        "Cannot override %1$d for %2$s because the app's targetSdk (%3$d) is "
                                + "above the change's targetSdk threshold (%4$d)",
                        changeId, packageName, appTargetSdk, changeIdTargetSdk));
            case PACKAGE_DOES_NOT_EXIST:
                throw new SecurityException(String.format(
                        "Cannot override %1$d for %2$s because the package does not exist, and "
                                + "the change is targetSdk gated.",
                        changeId, packageName));
            case LOGGING_ONLY_CHANGE:
                throw new SecurityException(String.format(
                        "Cannot override %1$d because it is marked as a logging-only change.",
@@ -170,8 +166,8 @@ public final class OverrideAllowedState implements Parcelable {
                return "DISABLED_NON_TARGET_SDK";
            case DISABLED_TARGET_SDK_TOO_HIGH:
                return "DISABLED_TARGET_SDK_TOO_HIGH";
            case PACKAGE_DOES_NOT_EXIST:
                return "PACKAGE_DOES_NOT_EXIST";
            case DEFERRED_VERIFICATION:
                return "DEFERRED_VERIFICATION";
            case LOGGING_ONLY_CHANGE:
                return "LOGGING_ONLY_CHANGE";
        }
+1 −0
Original line number Diff line number Diff line
@@ -302,6 +302,7 @@ public class SettingsBackupTest {
                    Settings.Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED,
                    Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED,
                    Settings.Global.HIDDEN_API_POLICY,
                    Settings.Global.FORCE_NON_DEBUGGABLE_FINAL_BUILD_FOR_COMPAT,
                    Settings.Global.HIDE_ERROR_DIALOGS,
                    Settings.Global.HTTP_PROXY,
                    HYBRID_SYSUI_BATTERY_WARNING_FLAGS,
+1 −0
Original line number Diff line number Diff line
@@ -7241,6 +7241,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        final long waitForNetworkTimeoutMs = Settings.Global.getLong(resolver,
                NETWORK_ACCESS_TIMEOUT_MS, NETWORK_ACCESS_TIMEOUT_DEFAULT_MS);
        mHiddenApiBlacklist.registerObserver();
        mPlatformCompat.registerContentObserver();
        mAppProfiler.retrieveSettings();
+66 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ public final class CompatChange extends CompatibilityChangeInfo {
    ChangeListener mListener = null;

    private Map<String, Boolean> mPackageOverrides;
    private Map<String, Boolean> mDeferredOverrides;

    public CompatChange(long changeId) {
        this(changeId, null, -1, -1, false, false, null);
@@ -120,6 +121,56 @@ public final class CompatChange extends CompatibilityChangeInfo {
        notifyListener(pname);
    }

    /**
     * Tentatively set the state of this change for a given package name.
     * The override will only take effect after that package is installed, if applicable.
     *
     * <p>Note, this method is not thread safe so callers must ensure thread safety.
     *
     * @param packageName Package name to tentatively enable the change for.
     * @param enabled Whether or not to enable the change.
     */
    void addPackageDeferredOverride(String packageName, boolean enabled) {
        if (getLoggingOnly()) {
            throw new IllegalArgumentException(
                    "Can't add overrides for a logging only change " + toString());
        }
        if (mDeferredOverrides == null) {
            mDeferredOverrides = new HashMap<>();
        }
        mDeferredOverrides.put(packageName, enabled);
    }

    /**
     * Rechecks an existing (and possibly deferred) override.
     *
     * <p>For deferred overrides, check if they can be promoted to a regular override. For regular
     * overrides, check if they need to be demoted to deferred.</p>
     *
     * @param packageName Package name to apply deferred overrides for.
     * @param allowed Whether the override is allowed.
     *
     * @return {@code true} if the recheck yielded a result that requires invalidating caches
     *         (a deferred override was consolidated or a regular override was removed).
     */
    boolean recheckOverride(String packageName, boolean allowed) {
        // A deferred override now is allowed by the policy, so promote it to a regular override.
        if (hasDeferredOverride(packageName) && allowed) {
            boolean overrideValue = mDeferredOverrides.remove(packageName);
            addPackageOverride(packageName, overrideValue);
            return true;
        }
        // A previously set override is no longer allowed by the policy, so make it deferred.
        if (hasOverride(packageName) && !allowed) {
            boolean overrideValue = mPackageOverrides.remove(packageName);
            addPackageDeferredOverride(packageName, overrideValue);
            // Notify because the override was removed.
            notifyListener(packageName);
            return true;
        }
        return false;
    }

    /**
     * Remove any package override for the given package name, restoring the default behaviour.
     *
@@ -133,6 +184,9 @@ public final class CompatChange extends CompatibilityChangeInfo {
                notifyListener(pname);
            }
        }
        if (mDeferredOverrides != null) {
            mDeferredOverrides.remove(pname);
        }
    }

    /**
@@ -176,6 +230,15 @@ public final class CompatChange extends CompatibilityChangeInfo {
        return mPackageOverrides != null && mPackageOverrides.containsKey(packageName);
    }

    /**
     * Checks whether a change has a deferred override for a package.
     * @param packageName name of the package
     * @return true if there is such a deferred override
     */
    boolean hasDeferredOverride(String packageName) {
        return mDeferredOverrides != null && mDeferredOverrides.containsKey(packageName);
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("ChangeId(")
@@ -195,6 +258,9 @@ public final class CompatChange extends CompatibilityChangeInfo {
        if (mPackageOverrides != null && mPackageOverrides.size() > 0) {
            sb.append("; packageOverrides=").append(mPackageOverrides);
        }
        if (mDeferredOverrides != null && mDeferredOverrides.size() > 0) {
            sb.append("; deferredOverrides=").append(mDeferredOverrides);
        }
        return sb.append(")").toString();
    }

Loading