Merge "Avoid locking mChanges when not necessary"
This commit is contained in:
@@ -235,13 +235,11 @@ final class CompatConfig {
|
|||||||
* @param packageName app for which the overrides will be applied.
|
* @param packageName app for which the overrides will be applied.
|
||||||
*/
|
*/
|
||||||
void addOverrides(CompatibilityOverrideConfig overrides, String packageName) {
|
void addOverrides(CompatibilityOverrideConfig overrides, String packageName) {
|
||||||
synchronized (mChanges) {
|
for (Long changeId : overrides.overrides.keySet()) {
|
||||||
for (Long changeId : overrides.overrides.keySet()) {
|
addOverrideUnsafe(changeId, packageName, overrides.overrides.get(changeId));
|
||||||
addOverrideUnsafe(changeId, packageName, overrides.overrides.get(changeId));
|
|
||||||
}
|
|
||||||
saveOverrides();
|
|
||||||
invalidateCache();
|
|
||||||
}
|
}
|
||||||
|
saveOverrides();
|
||||||
|
invalidateCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean addOverrideUnsafe(long changeId, String packageName,
|
private boolean addOverrideUnsafe(long changeId, String packageName,
|
||||||
@@ -335,26 +333,37 @@ final class CompatConfig {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Unsafe version of {@link #removeOverride(long, String)}.
|
* Unsafe version of {@link #removeOverride(long, String)}.
|
||||||
* It does not invalidate the cache nor save the overrides.
|
* It does not save the overrides.
|
||||||
*/
|
*/
|
||||||
private boolean removeOverrideUnsafe(long changeId, String packageName) {
|
private boolean removeOverrideUnsafe(long changeId, String packageName) {
|
||||||
Long versionCode = getVersionCodeOrNull(packageName);
|
Long versionCode = getVersionCodeOrNull(packageName);
|
||||||
synchronized (mChanges) {
|
synchronized (mChanges) {
|
||||||
CompatChange c = mChanges.get(changeId);
|
CompatChange c = mChanges.get(changeId);
|
||||||
if (c != null) {
|
if (c != null) {
|
||||||
OverrideAllowedState allowedState =
|
return removeOverrideUnsafe(c, packageName, versionCode);
|
||||||
mOverrideValidator.getOverrideAllowedState(changeId, packageName);
|
|
||||||
if (c.hasPackageOverride(packageName)) {
|
|
||||||
allowedState.enforce(changeId, packageName);
|
|
||||||
c.removePackageOverride(packageName, allowedState, versionCode);
|
|
||||||
invalidateCache();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Similar to {@link #removeOverrideUnsafe(long, String)} except this method receives a {@link
|
||||||
|
* CompatChange} directly as well as the package's version code.
|
||||||
|
*/
|
||||||
|
private boolean removeOverrideUnsafe(CompatChange change, String packageName,
|
||||||
|
@Nullable Long versionCode) {
|
||||||
|
long changeId = change.getId();
|
||||||
|
OverrideAllowedState allowedState =
|
||||||
|
mOverrideValidator.getOverrideAllowedState(changeId, packageName);
|
||||||
|
if (change.hasPackageOverride(packageName)) {
|
||||||
|
allowedState.enforce(changeId, packageName);
|
||||||
|
change.removePackageOverride(packageName, allowedState, versionCode);
|
||||||
|
invalidateCache();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes all overrides previously added via {@link #addOverride(long, String, boolean)} or
|
* Removes all overrides previously added via {@link #addOverride(long, String, boolean)} or
|
||||||
* {@link #addOverrides(CompatibilityOverrideConfig, String)} for a certain package.
|
* {@link #addOverrides(CompatibilityOverrideConfig, String)} for a certain package.
|
||||||
@@ -364,10 +373,11 @@ final class CompatConfig {
|
|||||||
* @param packageName the package for which the overrides should be purged
|
* @param packageName the package for which the overrides should be purged
|
||||||
*/
|
*/
|
||||||
void removePackageOverrides(String packageName) {
|
void removePackageOverrides(String packageName) {
|
||||||
|
Long versionCode = getVersionCodeOrNull(packageName);
|
||||||
synchronized (mChanges) {
|
synchronized (mChanges) {
|
||||||
for (int i = 0; i < mChanges.size(); ++i) {
|
for (int i = 0; i < mChanges.size(); ++i) {
|
||||||
CompatChange change = mChanges.valueAt(i);
|
CompatChange change = mChanges.valueAt(i);
|
||||||
removeOverrideUnsafe(change.getId(), packageName);
|
removeOverrideUnsafe(change, packageName, versionCode);
|
||||||
}
|
}
|
||||||
saveOverrides();
|
saveOverrides();
|
||||||
invalidateCache();
|
invalidateCache();
|
||||||
@@ -386,13 +396,11 @@ final class CompatConfig {
|
|||||||
*/
|
*/
|
||||||
void removePackageOverrides(CompatibilityOverridesToRemoveConfig overridesToRemove,
|
void removePackageOverrides(CompatibilityOverridesToRemoveConfig overridesToRemove,
|
||||||
String packageName) {
|
String packageName) {
|
||||||
synchronized (mChanges) {
|
for (Long changeId : overridesToRemove.changeIds) {
|
||||||
for (Long changeId : overridesToRemove.changeIds) {
|
removeOverrideUnsafe(changeId, packageName);
|
||||||
removeOverrideUnsafe(changeId, packageName);
|
|
||||||
}
|
|
||||||
saveOverrides();
|
|
||||||
invalidateCache();
|
|
||||||
}
|
}
|
||||||
|
saveOverrides();
|
||||||
|
invalidateCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
private long[] getAllowedChangesSinceTargetSdkForPackage(String packageName,
|
private long[] getAllowedChangesSinceTargetSdkForPackage(String packageName,
|
||||||
|
|||||||
Reference in New Issue
Block a user