Loading services/core/java/com/android/server/compat/CompatChange.java +25 −46 Original line number Diff line number Diff line Loading @@ -36,9 +36,9 @@ import com.android.server.compat.overrides.ChangeOverrides; import com.android.server.compat.overrides.OverrideValue; import com.android.server.compat.overrides.RawOverrideValue; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Represents the state of a single compatibility change. Loading Loading @@ -82,8 +82,8 @@ public final class CompatChange extends CompatibilityChangeInfo { ChangeListener mListener = null; private Map<String, Boolean> mEvaluatedOverrides; private Map<String, PackageOverride> mRawOverrides; private ConcurrentHashMap<String, Boolean> mEvaluatedOverrides; private ConcurrentHashMap<String, PackageOverride> mRawOverrides; public CompatChange(long changeId) { this(changeId, null, -1, -1, false, false, null, false); Loading Loading @@ -114,11 +114,11 @@ public final class CompatChange extends CompatibilityChangeInfo { description, overridable); // Initialize override maps. mEvaluatedOverrides = new HashMap<>(); mRawOverrides = new HashMap<>(); mEvaluatedOverrides = new ConcurrentHashMap<>(); mRawOverrides = new ConcurrentHashMap<>(); } void registerListener(ChangeListener listener) { synchronized void registerListener(ChangeListener listener) { if (mListener != null) { throw new IllegalStateException( "Listener for change " + toString() + " already registered."); Loading @@ -131,8 +131,6 @@ public final class CompatChange extends CompatibilityChangeInfo { * Force the enabled state of this change for a given package name. The change will only take * effect after that packages process is killed and restarted. * * <p>Note, this method is not thread safe so callers must ensure thread safety. * * @param pname Package name to enable the change for. * @param enabled Whether or not to enable the change. */ Loading @@ -155,14 +153,12 @@ public final class CompatChange extends CompatibilityChangeInfo { * 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 override The package override to be set * @param allowedState Whether the override is allowed. * @param versionCode The version code of the package. */ void addPackageOverride(String packageName, PackageOverride override, synchronized void addPackageOverride(String packageName, PackageOverride override, OverrideAllowedState allowedState, @Nullable Long versionCode) { if (getLoggingOnly()) { throw new IllegalArgumentException( Loading @@ -185,12 +181,12 @@ public final class CompatChange extends CompatibilityChangeInfo { * @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, OverrideAllowedState allowedState, synchronized boolean recheckOverride(String packageName, OverrideAllowedState allowedState, @Nullable Long versionCode) { boolean allowed = (allowedState.state == OverrideAllowedState.ALLOWED); // If the app is not installed or no longer has raw overrides, evaluate to false if (versionCode == null || !hasRawOverride(packageName) || !allowed) { if (versionCode == null || !mRawOverrides.containsKey(packageName) || !allowed) { removePackageOverrideInternal(packageName); return false; } Loading @@ -211,10 +207,6 @@ public final class CompatChange extends CompatibilityChangeInfo { return true; } boolean hasPackageOverride(String pname) { return mRawOverrides.containsKey(pname); } /** * Remove any package override for the given package name, restoring the default behaviour. * Loading @@ -224,9 +216,11 @@ public final class CompatChange extends CompatibilityChangeInfo { * @param allowedState Whether the override is allowed. * @param versionCode The version code of the package. */ boolean removePackageOverride(String pname, OverrideAllowedState allowedState, synchronized boolean removePackageOverride(String pname, OverrideAllowedState allowedState, @Nullable Long versionCode) { if (mRawOverrides.remove(pname) != null) { if (mRawOverrides.containsKey(pname)) { allowedState.enforce(getId(), pname); mRawOverrides.remove(pname); recheckOverride(pname, allowedState, versionCode); return true; } Loading @@ -244,8 +238,11 @@ public final class CompatChange extends CompatibilityChangeInfo { if (app == null) { return defaultValue(); } if (mEvaluatedOverrides.containsKey(app.packageName)) { return mEvaluatedOverrides.get(app.packageName); if (app.packageName != null) { final Boolean enabled = mEvaluatedOverrides.get(app.packageName); if (enabled != null) { return enabled; } } if (getDisabled()) { return false; Loading @@ -269,9 +266,9 @@ public final class CompatChange extends CompatibilityChangeInfo { * @return {@code true} if the change should be enabled for the package. */ boolean willBeEnabled(String packageName) { if (hasRawOverride(packageName)) { int eval = mRawOverrides.get(packageName).evaluateForAllVersions(); switch (eval) { final PackageOverride override = mRawOverrides.get(packageName); if (override != null) { switch (override.evaluateForAllVersions()) { case VALUE_ENABLED: return true; case VALUE_DISABLED: Loading @@ -292,30 +289,12 @@ public final class CompatChange extends CompatibilityChangeInfo { return !getDisabled(); } /** * Checks whether a change has an override for a package. * @param packageName name of the package * @return true if there is such override */ private boolean hasOverride(String packageName) { return mEvaluatedOverrides.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 */ private boolean hasRawOverride(String packageName) { return mRawOverrides.containsKey(packageName); } void clearOverrides() { synchronized void clearOverrides() { mRawOverrides.clear(); mEvaluatedOverrides.clear(); } void loadOverrides(ChangeOverrides changeOverrides) { synchronized void loadOverrides(ChangeOverrides changeOverrides) { // Load deferred overrides for backwards compatibility if (changeOverrides.getDeferred() != null) { for (OverrideValue override : changeOverrides.getDeferred().getOverrideValue()) { Loading Loading @@ -348,7 +327,7 @@ public final class CompatChange extends CompatibilityChangeInfo { } } ChangeOverrides saveOverrides() { synchronized ChangeOverrides saveOverrides() { if (mRawOverrides.isEmpty()) { return null; } Loading Loading @@ -406,7 +385,7 @@ public final class CompatChange extends CompatibilityChangeInfo { return sb.append(")").toString(); } private void notifyListener(String packageName) { private synchronized void notifyListener(String packageName) { if (mListener != null) { mListener.onCompatChange(packageName); } Loading services/core/java/com/android/server/compat/CompatConfig.java +135 −252 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
services/core/java/com/android/server/compat/CompatChange.java +25 −46 Original line number Diff line number Diff line Loading @@ -36,9 +36,9 @@ import com.android.server.compat.overrides.ChangeOverrides; import com.android.server.compat.overrides.OverrideValue; import com.android.server.compat.overrides.RawOverrideValue; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Represents the state of a single compatibility change. Loading Loading @@ -82,8 +82,8 @@ public final class CompatChange extends CompatibilityChangeInfo { ChangeListener mListener = null; private Map<String, Boolean> mEvaluatedOverrides; private Map<String, PackageOverride> mRawOverrides; private ConcurrentHashMap<String, Boolean> mEvaluatedOverrides; private ConcurrentHashMap<String, PackageOverride> mRawOverrides; public CompatChange(long changeId) { this(changeId, null, -1, -1, false, false, null, false); Loading Loading @@ -114,11 +114,11 @@ public final class CompatChange extends CompatibilityChangeInfo { description, overridable); // Initialize override maps. mEvaluatedOverrides = new HashMap<>(); mRawOverrides = new HashMap<>(); mEvaluatedOverrides = new ConcurrentHashMap<>(); mRawOverrides = new ConcurrentHashMap<>(); } void registerListener(ChangeListener listener) { synchronized void registerListener(ChangeListener listener) { if (mListener != null) { throw new IllegalStateException( "Listener for change " + toString() + " already registered."); Loading @@ -131,8 +131,6 @@ public final class CompatChange extends CompatibilityChangeInfo { * Force the enabled state of this change for a given package name. The change will only take * effect after that packages process is killed and restarted. * * <p>Note, this method is not thread safe so callers must ensure thread safety. * * @param pname Package name to enable the change for. * @param enabled Whether or not to enable the change. */ Loading @@ -155,14 +153,12 @@ public final class CompatChange extends CompatibilityChangeInfo { * 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 override The package override to be set * @param allowedState Whether the override is allowed. * @param versionCode The version code of the package. */ void addPackageOverride(String packageName, PackageOverride override, synchronized void addPackageOverride(String packageName, PackageOverride override, OverrideAllowedState allowedState, @Nullable Long versionCode) { if (getLoggingOnly()) { throw new IllegalArgumentException( Loading @@ -185,12 +181,12 @@ public final class CompatChange extends CompatibilityChangeInfo { * @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, OverrideAllowedState allowedState, synchronized boolean recheckOverride(String packageName, OverrideAllowedState allowedState, @Nullable Long versionCode) { boolean allowed = (allowedState.state == OverrideAllowedState.ALLOWED); // If the app is not installed or no longer has raw overrides, evaluate to false if (versionCode == null || !hasRawOverride(packageName) || !allowed) { if (versionCode == null || !mRawOverrides.containsKey(packageName) || !allowed) { removePackageOverrideInternal(packageName); return false; } Loading @@ -211,10 +207,6 @@ public final class CompatChange extends CompatibilityChangeInfo { return true; } boolean hasPackageOverride(String pname) { return mRawOverrides.containsKey(pname); } /** * Remove any package override for the given package name, restoring the default behaviour. * Loading @@ -224,9 +216,11 @@ public final class CompatChange extends CompatibilityChangeInfo { * @param allowedState Whether the override is allowed. * @param versionCode The version code of the package. */ boolean removePackageOverride(String pname, OverrideAllowedState allowedState, synchronized boolean removePackageOverride(String pname, OverrideAllowedState allowedState, @Nullable Long versionCode) { if (mRawOverrides.remove(pname) != null) { if (mRawOverrides.containsKey(pname)) { allowedState.enforce(getId(), pname); mRawOverrides.remove(pname); recheckOverride(pname, allowedState, versionCode); return true; } Loading @@ -244,8 +238,11 @@ public final class CompatChange extends CompatibilityChangeInfo { if (app == null) { return defaultValue(); } if (mEvaluatedOverrides.containsKey(app.packageName)) { return mEvaluatedOverrides.get(app.packageName); if (app.packageName != null) { final Boolean enabled = mEvaluatedOverrides.get(app.packageName); if (enabled != null) { return enabled; } } if (getDisabled()) { return false; Loading @@ -269,9 +266,9 @@ public final class CompatChange extends CompatibilityChangeInfo { * @return {@code true} if the change should be enabled for the package. */ boolean willBeEnabled(String packageName) { if (hasRawOverride(packageName)) { int eval = mRawOverrides.get(packageName).evaluateForAllVersions(); switch (eval) { final PackageOverride override = mRawOverrides.get(packageName); if (override != null) { switch (override.evaluateForAllVersions()) { case VALUE_ENABLED: return true; case VALUE_DISABLED: Loading @@ -292,30 +289,12 @@ public final class CompatChange extends CompatibilityChangeInfo { return !getDisabled(); } /** * Checks whether a change has an override for a package. * @param packageName name of the package * @return true if there is such override */ private boolean hasOverride(String packageName) { return mEvaluatedOverrides.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 */ private boolean hasRawOverride(String packageName) { return mRawOverrides.containsKey(packageName); } void clearOverrides() { synchronized void clearOverrides() { mRawOverrides.clear(); mEvaluatedOverrides.clear(); } void loadOverrides(ChangeOverrides changeOverrides) { synchronized void loadOverrides(ChangeOverrides changeOverrides) { // Load deferred overrides for backwards compatibility if (changeOverrides.getDeferred() != null) { for (OverrideValue override : changeOverrides.getDeferred().getOverrideValue()) { Loading Loading @@ -348,7 +327,7 @@ public final class CompatChange extends CompatibilityChangeInfo { } } ChangeOverrides saveOverrides() { synchronized ChangeOverrides saveOverrides() { if (mRawOverrides.isEmpty()) { return null; } Loading Loading @@ -406,7 +385,7 @@ public final class CompatChange extends CompatibilityChangeInfo { return sb.append(")").toString(); } private void notifyListener(String packageName) { private synchronized void notifyListener(String packageName) { if (mListener != null) { mListener.onCompatChange(packageName); } Loading
services/core/java/com/android/server/compat/CompatConfig.java +135 −252 File changed.Preview size limit exceeded, changes collapsed. Show changes