Merge "Get PackageManager on demand in ActivityStarter."

This commit is contained in:
Bryce Lee
2017-11-21 18:41:50 +00:00
committed by Android (Google) Code Review
4 changed files with 17 additions and 9 deletions

View File

@@ -2793,7 +2793,7 @@ public class ActivityManagerService extends IActivityManager.Stub
mIntentFirewall = new IntentFirewall(new IntentFirewallInterface(), mHandler);
mTaskChangeNotificationController =
new TaskChangeNotificationController(this, mStackSupervisor, mHandler);
mActivityStarter = new ActivityStarter(this, AppGlobals.getPackageManager());
mActivityStarter = new ActivityStarter(this);
mRecentTasks = createRecentTasks();
mStackSupervisor.setRecentTasks(mRecentTasks);
mLockTaskController = new LockTaskController(mContext, mStackSupervisor, mHandler);
@@ -11715,6 +11715,15 @@ public class ActivityManagerService extends IActivityManager.Stub
return true;
}
/**
* Returns the PackageManager. Used by classes hosted by {@link ActivityManagerService}. The
* PackageManager could be unavailable at construction time and therefore needs to be accessed
* on demand.
*/
IPackageManager getPackageManager() {
return AppGlobals.getPackageManager();
}
PackageManagerInternal getPackageManagerInternalLocked() {
if (mPackageManagerInt == null) {
mPackageManagerInt = LocalServices.getService(PackageManagerInternal.class);

View File

@@ -134,7 +134,6 @@ class ActivityStarter {
private static final int INVALID_LAUNCH_MODE = -1;
private final ActivityManagerService mService;
private final IPackageManager mPackageManager;
private final ActivityStackSupervisor mSupervisor;
private final ActivityStartInterceptor mInterceptor;
@@ -234,9 +233,8 @@ class ActivityStarter {
mIntentDelivered = false;
}
ActivityStarter(ActivityManagerService service, IPackageManager packageManager) {
ActivityStarter(ActivityManagerService service) {
mService = service;
mPackageManager = packageManager;
mSupervisor = mService.mStackSupervisor;
mInterceptor = new ActivityStartInterceptor(mService, mSupervisor);
}
@@ -379,7 +377,7 @@ class ActivityStarter {
&& sourceRecord.info.applicationInfo.uid != aInfo.applicationInfo.uid) {
try {
intent.addCategory(Intent.CATEGORY_VOICE);
if (!mPackageManager.activitySupportsIntent(
if (!mService.getPackageManager().activitySupportsIntent(
intent.getComponent(), intent, resolvedType)) {
Slog.w(TAG,
"Activity being started in current voice task does not support voice: "
@@ -397,7 +395,7 @@ class ActivityStarter {
// If the caller is starting a new voice session, just make sure the target
// is actually allowing it to run this way.
try {
if (!mPackageManager.activitySupportsIntent(intent.getComponent(),
if (!mService.getPackageManager().activitySupportsIntent(intent.getComponent(),
intent, resolvedType)) {
Slog.w(TAG,
"Activity being started in new voice task does not support: "

View File

@@ -95,8 +95,7 @@ public class ActivityStarterTests extends ActivityTestsBase {
public void setUp() throws Exception {
super.setUp();
mService = createActivityManagerService();
mPackageManager = mock(IPackageManager.class);
mStarter = new ActivityStarter(mService, mPackageManager);
mStarter = new ActivityStarter(mService);
}
@Test
@@ -178,7 +177,7 @@ public class ActivityStarterTests extends ActivityTestsBase {
int expectedResult) {
final ActivityManagerService service = createActivityManagerService();
final IPackageManager packageManager = mock(IPackageManager.class);
final ActivityStarter starter = new ActivityStarter(service, packageManager);
final ActivityStarter starter = new ActivityStarter(service);
final IApplicationThread caller = mock(IApplicationThread.class);

View File

@@ -36,6 +36,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.hardware.display.DisplayManager;
@@ -90,6 +91,7 @@ public class ActivityTestsBase {
protected ActivityManagerService setupActivityManagerService(ActivityManagerService service) {
service = spy(service);
doReturn(mock(IPackageManager.class)).when(service).getPackageManager();
service.mWindowManager = prepareMockWindowManager();
return service;
}