Merge "RESTRICT AUTOMERGE Revert "Construct AppsFilter cache on background thread"" into rvc-qpr-dev

This commit is contained in:
TreeHugger Robot
2020-09-01 21:21:42 +00:00
committed by Android (Google) Code Review
3 changed files with 100 additions and 174 deletions

View File

@@ -35,9 +35,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.Handler;
import android.os.HandlerExecutor;
import android.os.HandlerThread;
import android.os.Process; import android.os.Process;
import android.os.Trace; import android.os.Trace;
import android.os.UserHandle; import android.os.UserHandle;
@@ -51,7 +48,6 @@ import android.util.SparseBooleanArray;
import android.util.SparseSetArray; import android.util.SparseSetArray;
import com.android.internal.R; import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils;
import com.android.server.FgThread; import com.android.server.FgThread;
@@ -65,7 +61,6 @@ import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.util.concurrent.Executor;
/** /**
* The entity responsible for filtering visibility between apps based on declarations in their * The entity responsible for filtering visibility between apps based on declarations in their
@@ -100,12 +95,6 @@ public class AppsFilter {
*/ */
private final SparseSetArray<Integer> mQueriesViaComponent = new SparseSetArray<>(); private final SparseSetArray<Integer> mQueriesViaComponent = new SparseSetArray<>();
/**
* Executor for running reasonably short background tasks such as building the initial
* visibility cache.
*/
private final Executor mBackgroundExecutor;
/** /**
* Pending full recompute of mQueriesViaComponent. Occurs when a package adds a new set of * Pending full recompute of mQueriesViaComponent. Occurs when a package adds a new set of
* protected broadcast. This in turn invalidates all prior additions and require a very * protected broadcast. This in turn invalidates all prior additions and require a very
@@ -136,8 +125,6 @@ public class AppsFilter {
private PackageParser.SigningDetails mSystemSigningDetails; private PackageParser.SigningDetails mSystemSigningDetails;
private Set<String> mProtectedBroadcasts = new ArraySet<>(); private Set<String> mProtectedBroadcasts = new ArraySet<>();
private final Object mCacheLock = new Object();
/** /**
* This structure maps uid -> uid and indicates whether access from the first should be * This structure maps uid -> uid and indicates whether access from the first should be
* filtered to the second. It's essentially a cache of the * filtered to the second. It's essentially a cache of the
@@ -145,7 +132,6 @@ public class AppsFilter {
* NOTE: It can only be relied upon after the system is ready to avoid unnecessary update on * NOTE: It can only be relied upon after the system is ready to avoid unnecessary update on
* initial scam and is null until {@link #onSystemReady()} is called. * initial scam and is null until {@link #onSystemReady()} is called.
*/ */
@GuardedBy("mCacheLock")
private volatile SparseArray<SparseBooleanArray> mShouldFilterCache; private volatile SparseArray<SparseBooleanArray> mShouldFilterCache;
@VisibleForTesting(visibility = PRIVATE) @VisibleForTesting(visibility = PRIVATE)
@@ -153,15 +139,13 @@ public class AppsFilter {
FeatureConfig featureConfig, FeatureConfig featureConfig,
String[] forceQueryableWhitelist, String[] forceQueryableWhitelist,
boolean systemAppsQueryable, boolean systemAppsQueryable,
@Nullable OverlayReferenceMapper.Provider overlayProvider, @Nullable OverlayReferenceMapper.Provider overlayProvider) {
Executor backgroundExecutor) {
mFeatureConfig = featureConfig; mFeatureConfig = featureConfig;
mForceQueryableByDevicePackageNames = forceQueryableWhitelist; mForceQueryableByDevicePackageNames = forceQueryableWhitelist;
mSystemAppsQueryable = systemAppsQueryable; mSystemAppsQueryable = systemAppsQueryable;
mOverlayReferenceMapper = new OverlayReferenceMapper(true /*deferRebuild*/, mOverlayReferenceMapper = new OverlayReferenceMapper(true /*deferRebuild*/,
overlayProvider); overlayProvider);
mStateProvider = stateProvider; mStateProvider = stateProvider;
mBackgroundExecutor = backgroundExecutor;
} }
/** /**
@@ -353,13 +337,8 @@ public class AppsFilter {
injector.getUserManagerInternal().getUserInfos()); injector.getUserManagerInternal().getUserInfos());
} }
}; };
HandlerThread appsFilterThread = new HandlerThread("appsFilter");
appsFilterThread.start();
Handler appsFilterHandler = new Handler(appsFilterThread.getLooper());
Executor executor = new HandlerExecutor(appsFilterHandler);
AppsFilter appsFilter = new AppsFilter(stateProvider, featureConfig, AppsFilter appsFilter = new AppsFilter(stateProvider, featureConfig,
forcedQueryablePackageNames, forceSystemAppsQueryable, null, executor); forcedQueryablePackageNames, forceSystemAppsQueryable, null);
featureConfig.setAppsFilter(appsFilter); featureConfig.setAppsFilter(appsFilter);
return appsFilter; return appsFilter;
} }
@@ -491,26 +470,29 @@ public class AppsFilter {
if (mImplicitlyQueryable.add(recipientUid, visibleUid) && DEBUG_LOGGING) { if (mImplicitlyQueryable.add(recipientUid, visibleUid) && DEBUG_LOGGING) {
Slog.i(TAG, "implicit access granted: " + recipientUid + " -> " + visibleUid); Slog.i(TAG, "implicit access granted: " + recipientUid + " -> " + visibleUid);
} }
synchronized (mCacheLock) { if (mShouldFilterCache != null) {
if (mShouldFilterCache != null) { // update the cache in a one-off manner since we've got all the information we need.
// update the cache in a one-off manner since we've got all the information we SparseBooleanArray visibleUids = mShouldFilterCache.get(recipientUid);
// need. if (visibleUids == null) {
SparseBooleanArray visibleUids = mShouldFilterCache.get(recipientUid); visibleUids = new SparseBooleanArray();
if (visibleUids == null) { mShouldFilterCache.put(recipientUid, visibleUids);
visibleUids = new SparseBooleanArray();
mShouldFilterCache.put(recipientUid, visibleUids);
}
visibleUids.put(visibleUid, false);
} }
visibleUids.put(visibleUid, false);
} }
} }
} }
public void onSystemReady() { public void onSystemReady() {
mOverlayReferenceMapper.rebuildIfDeferred(); mStateProvider.runWithState(new StateProvider.CurrentStateCallback() {
@Override
public void currentState(ArrayMap<String, PackageSetting> settings,
UserInfo[] users) {
mShouldFilterCache = new SparseArray<>(users.length * settings.size());
}
});
mFeatureConfig.onSystemReady(); mFeatureConfig.onSystemReady();
mOverlayReferenceMapper.rebuildIfDeferred();
updateEntireShouldFilterCacheAsync(); updateEntireShouldFilterCache();
} }
/** /**
@@ -528,12 +510,10 @@ public class AppsFilter {
} }
mStateProvider.runWithState((settings, users) -> { mStateProvider.runWithState((settings, users) -> {
addPackageInternal(newPkgSetting, settings); addPackageInternal(newPkgSetting, settings);
synchronized (mCacheLock) { if (mShouldFilterCache != null) {
if (mShouldFilterCache != null) { updateShouldFilterCacheForPackage(
updateShouldFilterCacheForPackage(mShouldFilterCache, null, newPkgSetting, null, newPkgSetting, settings, users, settings.size());
settings, users, settings.size()); } // else, rebuild entire cache when system is ready
} // else, rebuild entire cache when system is ready
}
}); });
} finally { } finally {
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
@@ -627,7 +607,6 @@ public class AppsFilter {
mFeatureConfig.updatePackageState(newPkgSetting, false /*removed*/); mFeatureConfig.updatePackageState(newPkgSetting, false /*removed*/);
} }
@GuardedBy("mCacheLock")
private void removeAppIdFromVisibilityCache(int appId) { private void removeAppIdFromVisibilityCache(int appId) {
if (mShouldFilterCache == null) { if (mShouldFilterCache == null) {
return; return;
@@ -646,47 +625,33 @@ public class AppsFilter {
} }
} }
private void updateEntireShouldFilterCacheAsync() {
mBackgroundExecutor.execute(this::updateEntireShouldFilterCache);
}
private void updateEntireShouldFilterCache() { private void updateEntireShouldFilterCache() {
mStateProvider.runWithState((settings, users) -> { mStateProvider.runWithState((settings, users) -> {
SparseArray<SparseBooleanArray> cache = mShouldFilterCache.clear();
new SparseArray<>(users.length * settings.size());
for (int i = settings.size() - 1; i >= 0; i--) { for (int i = settings.size() - 1; i >= 0; i--) {
updateShouldFilterCacheForPackage(cache, updateShouldFilterCacheForPackage(
null /*skipPackage*/, settings.valueAt(i), settings, users, i); null /*skipPackage*/, settings.valueAt(i), settings, users, i);
} }
synchronized (mCacheLock) {
mShouldFilterCache = cache;
}
}); });
} }
public void onUsersChanged() { public void onUsersChanged() {
synchronized (mCacheLock) { if (mShouldFilterCache != null) {
if (mShouldFilterCache != null) { updateEntireShouldFilterCache();
updateEntireShouldFilterCache();
}
} }
} }
private void updateShouldFilterCacheForPackage(String packageName) { private void updateShouldFilterCacheForPackage(String packageName) {
synchronized (mCacheLock) { mStateProvider.runWithState((settings, users) -> {
if (mShouldFilterCache != null) { updateShouldFilterCacheForPackage(null /* skipPackage */, settings.get(packageName),
mStateProvider.runWithState((settings, users) -> { settings, users, settings.size() /*maxIndex*/);
updateShouldFilterCacheForPackage(mShouldFilterCache, null /* skipPackage */, });
settings.get(packageName), settings, users,
settings.size() /*maxIndex*/);
});
}
}
} }
private void updateShouldFilterCacheForPackage(SparseArray<SparseBooleanArray> cache, private void updateShouldFilterCacheForPackage(@Nullable String skipPackageName,
@Nullable String skipPackageName, PackageSetting subjectSetting, ArrayMap<String, PackageSetting subjectSetting, ArrayMap<String, PackageSetting> allSettings,
PackageSetting> allSettings, UserInfo[] allUsers, int maxIndex) { UserInfo[] allUsers, int maxIndex) {
for (int i = Math.min(maxIndex, allSettings.size() - 1); i >= 0; i--) { for (int i = Math.min(maxIndex, allSettings.size() - 1); i >= 0; i--) {
PackageSetting otherSetting = allSettings.valueAt(i); PackageSetting otherSetting = allSettings.valueAt(i);
if (subjectSetting.appId == otherSetting.appId) { if (subjectSetting.appId == otherSetting.appId) {
@@ -703,17 +668,17 @@ public class AppsFilter {
for (int ou = 0; ou < userCount; ou++) { for (int ou = 0; ou < userCount; ou++) {
int otherUser = allUsers[ou].id; int otherUser = allUsers[ou].id;
int subjectUid = UserHandle.getUid(subjectUser, subjectSetting.appId); int subjectUid = UserHandle.getUid(subjectUser, subjectSetting.appId);
if (!cache.contains(subjectUid)) { if (!mShouldFilterCache.contains(subjectUid)) {
cache.put(subjectUid, new SparseBooleanArray(appxUidCount)); mShouldFilterCache.put(subjectUid, new SparseBooleanArray(appxUidCount));
} }
int otherUid = UserHandle.getUid(otherUser, otherSetting.appId); int otherUid = UserHandle.getUid(otherUser, otherSetting.appId);
if (!cache.contains(otherUid)) { if (!mShouldFilterCache.contains(otherUid)) {
cache.put(otherUid, new SparseBooleanArray(appxUidCount)); mShouldFilterCache.put(otherUid, new SparseBooleanArray(appxUidCount));
} }
cache.get(subjectUid).put(otherUid, mShouldFilterCache.get(subjectUid).put(otherUid,
shouldFilterApplicationInternal( shouldFilterApplicationInternal(
subjectUid, subjectSetting, otherSetting, otherUser)); subjectUid, subjectSetting, otherSetting, otherUser));
cache.get(otherUid).put(subjectUid, mShouldFilterCache.get(otherUid).put(subjectUid,
shouldFilterApplicationInternal( shouldFilterApplicationInternal(
otherUid, otherSetting, subjectSetting, subjectUser)); otherUid, otherSetting, subjectSetting, subjectUser));
} }
@@ -747,8 +712,7 @@ public class AppsFilter {
* This method recomputes all component / intent-based visibility and is intended to match the * This method recomputes all component / intent-based visibility and is intended to match the
* relevant logic of {@link #addPackageInternal(PackageSetting, ArrayMap)} * relevant logic of {@link #addPackageInternal(PackageSetting, ArrayMap)}
*/ */
private void recomputeComponentVisibility( private void recomputeComponentVisibility(ArrayMap<String, PackageSetting> existingSettings) {
ArrayMap<String, PackageSetting> existingSettings) {
mQueriesViaComponent.clear(); mQueriesViaComponent.clear();
for (int i = existingSettings.size() - 1; i >= 0; i--) { for (int i = existingSettings.size() - 1; i >= 0; i--) {
PackageSetting setting = existingSettings.valueAt(i); PackageSetting setting = existingSettings.valueAt(i);
@@ -890,17 +854,15 @@ public class AppsFilter {
} }
} }
synchronized (mCacheLock) { removeAppIdFromVisibilityCache(setting.appId);
removeAppIdFromVisibilityCache(setting.appId); if (mShouldFilterCache != null && setting.sharedUser != null) {
if (mShouldFilterCache != null && setting.sharedUser != null) { for (int i = setting.sharedUser.packages.size() - 1; i >= 0; i--) {
for (int i = setting.sharedUser.packages.size() - 1; i >= 0; i--) { PackageSetting siblingSetting = setting.sharedUser.packages.valueAt(i);
PackageSetting siblingSetting = setting.sharedUser.packages.valueAt(i); if (siblingSetting == setting) {
if (siblingSetting == setting) { continue;
continue;
}
updateShouldFilterCacheForPackage(mShouldFilterCache, setting.name,
siblingSetting, settings, users, settings.size());
} }
updateShouldFilterCacheForPackage(
setting.name, siblingSetting, settings, users, settings.size());
} }
} }
}); });
@@ -926,29 +888,26 @@ public class AppsFilter {
|| callingAppId == targetPkgSetting.appId) { || callingAppId == targetPkgSetting.appId) {
return false; return false;
} }
synchronized (mCacheLock) { if (mShouldFilterCache != null) { // use cache
if (mShouldFilterCache != null) { // use cache SparseBooleanArray shouldFilterTargets = mShouldFilterCache.get(callingUid);
SparseBooleanArray shouldFilterTargets = mShouldFilterCache.get(callingUid); final int targetUid = UserHandle.getUid(userId, targetPkgSetting.appId);
final int targetUid = UserHandle.getUid(userId, targetPkgSetting.appId); if (shouldFilterTargets == null) {
if (shouldFilterTargets == null) { Slog.wtf(TAG, "Encountered calling uid with no cached rules: " + callingUid);
Slog.wtf(TAG, "Encountered calling uid with no cached rules: " return true;
+ callingUid); }
return true; int indexOfTargetUid = shouldFilterTargets.indexOfKey(targetUid);
} if (indexOfTargetUid < 0) {
int indexOfTargetUid = shouldFilterTargets.indexOfKey(targetUid); Slog.w(TAG, "Encountered calling -> target with no cached rules: "
if (indexOfTargetUid < 0) { + callingUid + " -> " + targetUid);
Slog.w(TAG, "Encountered calling -> target with no cached rules: " return true;
+ callingUid + " -> " + targetUid); }
return true; if (!shouldFilterTargets.valueAt(indexOfTargetUid)) {
} return false;
if (!shouldFilterTargets.valueAt(indexOfTargetUid)) { }
return false; } else {
} if (!shouldFilterApplicationInternal(
} else { callingUid, callingSetting, targetPkgSetting, userId)) {
if (!shouldFilterApplicationInternal( return false;
callingUid, callingSetting, targetPkgSetting, userId)) {
return false;
}
} }
} }
if (DEBUG_LOGGING || mFeatureConfig.isLoggingEnabled(callingAppId)) { if (DEBUG_LOGGING || mFeatureConfig.isLoggingEnabled(callingAppId)) {

View File

@@ -21446,6 +21446,8 @@ public class PackageManagerService extends IPackageManager.Stub
.getUriFor(Secure.INSTANT_APPS_ENABLED), false, co, UserHandle.USER_ALL); .getUriFor(Secure.INSTANT_APPS_ENABLED), false, co, UserHandle.USER_ALL);
co.onChange(true); co.onChange(true);
mAppsFilter.onSystemReady();
// Disable any carrier apps. We do this very early in boot to prevent the apps from being // Disable any carrier apps. We do this very early in boot to prevent the apps from being
// disabled after already being started. // disabled after already being started.
CarrierAppUtils.disableCarrierAppsUntilPrivileged( CarrierAppUtils.disableCarrierAppsUntilPrivileged(
@@ -21594,8 +21596,6 @@ public class PackageManagerService extends IPackageManager.Stub
mInstallerService.restoreAndApplyStagedSessionIfNeeded(); mInstallerService.restoreAndApplyStagedSessionIfNeeded();
mExistingPackages = null; mExistingPackages = null;
mAppsFilter.onSystemReady();
} }
public void waitForAppDataPrepared() { public void waitForAppDataPrepared() {

View File

@@ -72,7 +72,6 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.function.IntFunction; import java.util.function.IntFunction;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.concurrent.Executor;
@Presubmit @Presubmit
@RunWith(JUnit4.class) @RunWith(JUnit4.class)
@@ -92,8 +91,6 @@ public class AppsFilterTest {
AppsFilter.FeatureConfig mFeatureConfigMock; AppsFilter.FeatureConfig mFeatureConfigMock;
@Mock @Mock
AppsFilter.StateProvider mStateProvider; AppsFilter.StateProvider mStateProvider;
@Mock
Executor mMockExecutor;
private ArrayMap<String, PackageSetting> mExisting = new ArrayMap<>(); private ArrayMap<String, PackageSetting> mExisting = new ArrayMap<>();
@@ -190,15 +187,10 @@ public class AppsFilterTest {
doAnswer(invocation -> { doAnswer(invocation -> {
((AppsFilter.StateProvider.CurrentStateCallback) invocation.getArgument(0)) ((AppsFilter.StateProvider.CurrentStateCallback) invocation.getArgument(0))
.currentState(mExisting, USER_INFO_LIST); .currentState(mExisting, USER_INFO_LIST);
return new Object(); return null;
}).when(mStateProvider) }).when(mStateProvider)
.runWithState(any(AppsFilter.StateProvider.CurrentStateCallback.class)); .runWithState(any(AppsFilter.StateProvider.CurrentStateCallback.class));
doAnswer(invocation -> {
((Runnable) invocation.getArgument(0)).run();
return new Object();
}).when(mMockExecutor).execute(any(Runnable.class));
when(mFeatureConfigMock.isGloballyEnabled()).thenReturn(true); when(mFeatureConfigMock.isGloballyEnabled()).thenReturn(true);
when(mFeatureConfigMock.packageIsEnabled(any(AndroidPackage.class))).thenAnswer( when(mFeatureConfigMock.packageIsEnabled(any(AndroidPackage.class))).thenAnswer(
(Answer<Boolean>) invocation -> (Answer<Boolean>) invocation ->
@@ -209,8 +201,7 @@ public class AppsFilterTest {
@Test @Test
public void testSystemReadyPropogates() throws Exception { public void testSystemReadyPropogates() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
verify(mFeatureConfigMock).onSystemReady(); verify(mFeatureConfigMock).onSystemReady();
} }
@@ -218,8 +209,7 @@ public class AppsFilterTest {
@Test @Test
public void testQueriesAction_FilterMatches() throws Exception { public void testQueriesAction_FilterMatches() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -235,8 +225,7 @@ public class AppsFilterTest {
@Test @Test
public void testQueriesProtectedAction_FilterDoesNotMatch() throws Exception { public void testQueriesProtectedAction_FilterDoesNotMatch() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
final Signature frameworkSignature = Mockito.mock(Signature.class); final Signature frameworkSignature = Mockito.mock(Signature.class);
final PackageParser.SigningDetails frameworkSigningDetails = final PackageParser.SigningDetails frameworkSigningDetails =
new PackageParser.SigningDetails(new Signature[]{frameworkSignature}, 1); new PackageParser.SigningDetails(new Signature[]{frameworkSignature}, 1);
@@ -274,8 +263,7 @@ public class AppsFilterTest {
@Test @Test
public void testQueriesProvider_FilterMatches() throws Exception { public void testQueriesProvider_FilterMatches() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -292,8 +280,7 @@ public class AppsFilterTest {
@Test @Test
public void testQueriesDifferentProvider_Filters() throws Exception { public void testQueriesDifferentProvider_Filters() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -310,8 +297,7 @@ public class AppsFilterTest {
@Test @Test
public void testQueriesProviderWithSemiColon_FilterMatches() throws Exception { public void testQueriesProviderWithSemiColon_FilterMatches() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -329,8 +315,7 @@ public class AppsFilterTest {
@Test @Test
public void testQueriesAction_NoMatchingAction_Filters() throws Exception { public void testQueriesAction_NoMatchingAction_Filters() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -346,8 +331,7 @@ public class AppsFilterTest {
@Test @Test
public void testQueriesAction_NoMatchingActionFilterLowSdk_DoesntFilter() throws Exception { public void testQueriesAction_NoMatchingActionFilterLowSdk_DoesntFilter() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -367,8 +351,7 @@ public class AppsFilterTest {
@Test @Test
public void testNoQueries_Filters() throws Exception { public void testNoQueries_Filters() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -384,8 +367,7 @@ public class AppsFilterTest {
@Test @Test
public void testForceQueryable_DoesntFilter() throws Exception { public void testForceQueryable_DoesntFilter() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -402,7 +384,7 @@ public class AppsFilterTest {
public void testForceQueryableByDevice_SystemCaller_DoesntFilter() throws Exception { public void testForceQueryableByDevice_SystemCaller_DoesntFilter() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{"com.some.package"}, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{"com.some.package"},
false, null, mMockExecutor); false, null);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -420,8 +402,7 @@ public class AppsFilterTest {
@Test @Test
public void testSystemSignedTarget_DoesntFilter() throws CertificateException { public void testSystemSignedTarget_DoesntFilter() throws CertificateException {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
final Signature frameworkSignature = Mockito.mock(Signature.class); final Signature frameworkSignature = Mockito.mock(Signature.class);
@@ -450,7 +431,7 @@ public class AppsFilterTest {
public void testForceQueryableByDevice_NonSystemCaller_Filters() throws Exception { public void testForceQueryableByDevice_NonSystemCaller_Filters() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{"com.some.package"}, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{"com.some.package"},
false, null, mMockExecutor); false, null);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -468,7 +449,7 @@ public class AppsFilterTest {
public void testSystemQueryable_DoesntFilter() throws Exception { public void testSystemQueryable_DoesntFilter() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{},
true /* system force queryable */, null, mMockExecutor); true /* system force queryable */, null);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -485,8 +466,7 @@ public class AppsFilterTest {
@Test @Test
public void testQueriesPackage_DoesntFilter() throws Exception { public void testQueriesPackage_DoesntFilter() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -504,8 +484,7 @@ public class AppsFilterTest {
when(mFeatureConfigMock.packageIsEnabled(any(AndroidPackage.class))) when(mFeatureConfigMock.packageIsEnabled(any(AndroidPackage.class)))
.thenReturn(false); .thenReturn(false);
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -521,8 +500,7 @@ public class AppsFilterTest {
@Test @Test
public void testSystemUid_DoesntFilter() throws Exception { public void testSystemUid_DoesntFilter() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -537,8 +515,7 @@ public class AppsFilterTest {
@Test @Test
public void testSystemUidSecondaryUser_DoesntFilter() throws Exception { public void testSystemUidSecondaryUser_DoesntFilter() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -554,8 +531,7 @@ public class AppsFilterTest {
@Test @Test
public void testNonSystemUid_NoCallingSetting_Filters() throws Exception { public void testNonSystemUid_NoCallingSetting_Filters() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -569,8 +545,7 @@ public class AppsFilterTest {
@Test @Test
public void testNoTargetPackage_filters() throws Exception { public void testNoTargetPackage_filters() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -628,8 +603,7 @@ public class AppsFilterTest {
} }
return Collections.emptyMap(); return Collections.emptyMap();
} }
}, });
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -701,8 +675,7 @@ public class AppsFilterTest {
} }
return Collections.emptyMap(); return Collections.emptyMap();
} }
}, });
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -727,8 +700,7 @@ public class AppsFilterTest {
@Test @Test
public void testInitiatingApp_DoesntFilter() throws Exception { public void testInitiatingApp_DoesntFilter() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -744,8 +716,7 @@ public class AppsFilterTest {
@Test @Test
public void testUninstalledInitiatingApp_Filters() throws Exception { public void testUninstalledInitiatingApp_Filters() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -761,8 +732,7 @@ public class AppsFilterTest {
@Test @Test
public void testOriginatingApp_Filters() throws Exception { public void testOriginatingApp_Filters() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -778,8 +748,7 @@ public class AppsFilterTest {
@Test @Test
public void testInstallingApp_DoesntFilter() throws Exception { public void testInstallingApp_DoesntFilter() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -795,8 +764,7 @@ public class AppsFilterTest {
@Test @Test
public void testInstrumentation_DoesntFilter() throws Exception { public void testInstrumentation_DoesntFilter() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();
@@ -818,8 +786,7 @@ public class AppsFilterTest {
@Test @Test
public void testWhoCanSee() throws Exception { public void testWhoCanSee() throws Exception {
final AppsFilter appsFilter = final AppsFilter appsFilter =
new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null, new AppsFilter(mStateProvider, mFeatureConfigMock, new String[]{}, false, null);
mMockExecutor);
simulateAddBasicAndroid(appsFilter); simulateAddBasicAndroid(appsFilter);
appsFilter.onSystemReady(); appsFilter.onSystemReady();