Pull background executor back to pm.injector

This change pulls the background executor that AppsFilter uses to
populate its cache back to the PackageManagerService.Injector for
generic use by other components withing PMS.

Test: atest AppEnumerationTests AppsFilterTest
Change-Id: I94a38b4b8655d7421a119965efad4327aabfe7b3
This commit is contained in:
Patrick Baumann
2020-08-14 13:48:35 -07:00
committed by Alex Buynytskyy
parent 509f1c79df
commit b1b0ff7db6
2 changed files with 20 additions and 13 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.ParsedMainComponent;
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.Trace;
import android.os.UserHandle;
@@ -353,13 +350,9 @@ public class AppsFilter {
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,
forcedQueryablePackageNames, forceSystemAppsQueryable, null, executor);
forcedQueryablePackageNames, forceSystemAppsQueryable, null,
injector.getBackgroundExecutor());
featureConfig.setAppsFilter(appsFilter);
return appsFilter;
}

View File

@@ -248,6 +248,8 @@ import android.os.Debug;
import android.os.Environment;
import android.os.FileUtils;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
@@ -420,6 +422,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
@@ -924,6 +927,7 @@ public class PackageManagerService extends IPackageManager.Stub
private final Object mLock;
private final Installer mInstaller;
private final Object mInstallLock;
private final Executor mBackgroundExecutor;
// ----- producers -----
private final Singleton<ComponentResolver> mComponentResolverProducer;
@@ -945,6 +949,7 @@ public class PackageManagerService extends IPackageManager.Stub
Injector(Context context, Object lock, Installer installer,
Object installLock, PackageAbiHelper abiHelper,
Executor backgroundExecutor,
Producer<ComponentResolver> componentResolverProducer,
Producer<PermissionManagerServiceInternal> permissionManagerProducer,
Producer<UserManagerService> userManagerProducer,
@@ -966,6 +971,7 @@ public class PackageManagerService extends IPackageManager.Stub
mInstaller = installer;
mAbiHelper = abiHelper;
mInstallLock = installLock;
mBackgroundExecutor = backgroundExecutor;
mComponentResolverProducer = new Singleton<>(componentResolverProducer);
mPermissionManagerProducer = new Singleton<>(permissionManagerProducer);
mUserManagerProducer = new Singleton<>(userManagerProducer);
@@ -1079,6 +1085,10 @@ public class PackageManagerService extends IPackageManager.Stub
public PlatformCompat getCompatibility() {
return mPlatformCompatProducer.get(this, mPackageManager);
}
public Executor getBackgroundExecutor() {
return mBackgroundExecutor;
}
}
@VisibleForTesting(visibility = Visibility.PRIVATE)
@@ -2581,17 +2591,21 @@ public class PackageManagerService extends IPackageManager.Stub
t.traceBegin("create package manager");
final Object lock = new Object();
final Object installLock = new Object();
HandlerThread backgroundThread = new HandlerThread("PackageManagerBg");
backgroundThread.start();
Handler backgroundHandler = new Handler(backgroundThread.getLooper());
Injector injector = new Injector(
context, lock, installer, installLock, new PackageAbiHelperImpl(),
new HandlerExecutor(backgroundHandler),
(i, pm) ->
new ComponentResolver(i.getUserManagerService(), pm.mPmInternal, lock),
(i, pm) ->
PermissionManagerService.create(context, lock),
PermissionManagerService.create(context, lock),
(i, pm) ->
new UserManagerService(context, pm,
new UserDataPreparer(installer, installLock, context, onlyCore),
lock),
new UserManagerService(context, pm,
new UserDataPreparer(installer, installLock, context, onlyCore),
lock),
(i, pm) ->
new Settings(Environment.getDataDirectory(),
i.getPermissionManagerServiceInternal().getPermissionSettings(),