1 // Copyright 2018 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.testing.local; 6 7 import android.content.ComponentName; 8 import android.content.pm.ActivityInfo; 9 import android.content.pm.PackageInfo; 10 import android.content.pm.PackageManager; 11 12 import org.robolectric.annotation.Implementation; 13 import org.robolectric.annotation.Implements; 14 import org.robolectric.shadows.ShadowApplicationPackageManager; 15 16 /** 17 * Uses {@link PackageManager#getPackageInfo()} to retrieve ActivityInfo. This enables registering 18 * activities via {@link ShadowPackageManager#addPackage()}. 19 */ 20 @Implements(className = "android.app.ApplicationPackageManager") 21 public class CustomShadowApplicationPackageManager extends ShadowApplicationPackageManager { 22 @Implementation 23 @Override getActivityInfo(ComponentName component, int flags)24 public ActivityInfo getActivityInfo(ComponentName component, int flags) 25 throws PackageManager.NameNotFoundException { 26 PackageInfo packageInfo = getPackageInfo(component.getPackageName(), flags); 27 if (packageInfo.activities != null) { 28 for (ActivityInfo activityInfo : packageInfo.activities) { 29 if (component.getClassName().equals(activityInfo.targetActivity)) { 30 return activityInfo; 31 } 32 } 33 } 34 return super.getActivityInfo(component, flags); 35 } 36 } 37