Merge "Internal version of isChangeEnabled." into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-06-12 18:54:22 +00:00
committed by Android (Google) Code Review
4 changed files with 19 additions and 19 deletions

View File

@@ -102,6 +102,13 @@ public class PlatformCompat extends IPlatformCompat.Stub {
@Override @Override
public boolean isChangeEnabled(long changeId, ApplicationInfo appInfo) { public boolean isChangeEnabled(long changeId, ApplicationInfo appInfo) {
checkCompatChangeReadAndLogPermission(); checkCompatChangeReadAndLogPermission();
return isChangeEnabledInternal(changeId, appInfo);
}
/**
* Internal version of the above method. Does not perform costly permission check.
*/
public boolean isChangeEnabledInternal(long changeId, ApplicationInfo appInfo) {
if (mCompatConfig.isChangeEnabled(changeId, appInfo)) { if (mCompatConfig.isChangeEnabled(changeId, appInfo)) {
reportChange(changeId, appInfo.uid, reportChange(changeId, appInfo.uid,
ChangeReporter.STATE_ENABLED); ChangeReporter.STATE_ENABLED);

View File

@@ -32,7 +32,6 @@ import android.content.pm.parsing.component.ParsedInstrumentation;
import android.content.pm.parsing.component.ParsedIntentInfo; import android.content.pm.parsing.component.ParsedIntentInfo;
import android.content.pm.parsing.component.ParsedMainComponent; import android.content.pm.parsing.component.ParsedMainComponent;
import android.content.pm.parsing.component.ParsedProvider; import android.content.pm.parsing.component.ParsedProvider;
import android.os.Binder;
import android.os.Process; import android.os.Process;
import android.os.Trace; import android.os.Trace;
import android.os.UserHandle; import android.os.UserHandle;
@@ -239,20 +238,13 @@ public class AppsFilter {
} }
private void updateEnabledState(AndroidPackage pkg) { private void updateEnabledState(AndroidPackage pkg) {
final long token = Binder.clearCallingIdentity(); // TODO(b/135203078): Do not use toAppInfo
try { final boolean enabled = mInjector.getCompatibility().isChangeEnabledInternal(
// TODO(b/135203078): Do not use toAppInfo PackageManager.FILTER_APPLICATION_QUERY, pkg.toAppInfoWithoutState());
final boolean enabled = if (enabled) {
mInjector.getCompatibility().isChangeEnabled( mDisabledPackages.remove(pkg.getPackageName());
PackageManager.FILTER_APPLICATION_QUERY, } else {
pkg.toAppInfoWithoutState()); mDisabledPackages.add(pkg.getPackageName());
if (enabled) {
mDisabledPackages.remove(pkg.getPackageName());
} else {
mDisabledPackages.add(pkg.getPackageName());
}
} finally {
Binder.restoreCallingIdentity(token);
} }
} }

View File

@@ -349,7 +349,8 @@ public final class SELinuxMMAC {
if ((sharedUserSetting != null) && (sharedUserSetting.packages.size() != 0)) { if ((sharedUserSetting != null) && (sharedUserSetting.packages.size() != 0)) {
return sharedUserSetting.seInfoTargetSdkVersion; return sharedUserSetting.seInfoTargetSdkVersion;
} }
if (compatibility.isChangeEnabled(SELINUX_LATEST_CHANGES, pkg.toAppInfoWithoutState())) { if (compatibility.isChangeEnabledInternal(SELINUX_LATEST_CHANGES,
pkg.toAppInfoWithoutState())) {
return android.os.Build.VERSION_CODES.R; return android.os.Build.VERSION_CODES.R;
} }

View File

@@ -52,7 +52,7 @@ public class SELinuxMMACTest {
@Test @Test
public void getSeInfoOptInToLatest() { public void getSeInfoOptInToLatest() {
AndroidPackage pkg = makePackage(Build.VERSION_CODES.P); AndroidPackage pkg = makePackage(Build.VERSION_CODES.P);
when(mMockCompatibility.isChangeEnabled(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES), when(mMockCompatibility.isChangeEnabledInternal(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES),
argThat(argument -> argument.packageName.equals(pkg.getPackageName())))) argThat(argument -> argument.packageName.equals(pkg.getPackageName()))))
.thenReturn(true); .thenReturn(true);
assertThat(SELinuxMMAC.getSeInfo(pkg, null, mMockCompatibility), assertThat(SELinuxMMAC.getSeInfo(pkg, null, mMockCompatibility),
@@ -62,7 +62,7 @@ public class SELinuxMMACTest {
@Test @Test
public void getSeInfoNoOptIn() { public void getSeInfoNoOptIn() {
AndroidPackage pkg = makePackage(Build.VERSION_CODES.P); AndroidPackage pkg = makePackage(Build.VERSION_CODES.P);
when(mMockCompatibility.isChangeEnabled(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES), when(mMockCompatibility.isChangeEnabledInternal(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES),
argThat(argument -> argument.packageName.equals(pkg.getPackageName())))) argThat(argument -> argument.packageName.equals(pkg.getPackageName()))))
.thenReturn(false); .thenReturn(false);
assertThat(SELinuxMMAC.getSeInfo(pkg, null, mMockCompatibility), assertThat(SELinuxMMAC.getSeInfo(pkg, null, mMockCompatibility),
@@ -72,7 +72,7 @@ public class SELinuxMMACTest {
@Test @Test
public void getSeInfoNoOptInButAlreadyR() { public void getSeInfoNoOptInButAlreadyR() {
AndroidPackage pkg = makePackage(OPT_IN_VERSION); AndroidPackage pkg = makePackage(OPT_IN_VERSION);
when(mMockCompatibility.isChangeEnabled(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES), when(mMockCompatibility.isChangeEnabledInternal(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES),
argThat(argument -> argument.packageName.equals(pkg.getPackageName())))) argThat(argument -> argument.packageName.equals(pkg.getPackageName()))))
.thenReturn(false); .thenReturn(false);
assertThat(SELinuxMMAC.getSeInfo(pkg, null, mMockCompatibility), assertThat(SELinuxMMAC.getSeInfo(pkg, null, mMockCompatibility),